无线操纵杆连接指南

γ
贡献者: 巨人亚历克斯
喜爱的 最喜欢的

介绍

这个无线操纵杆套件提供了一种简单的方法来控制您的下一个XBEE项目。亚博官网在无线操纵杆之前,无线电控制项目使用了业余无线电发射亚博官网机,和RC车一样,小船,和飞机。这些发射机的问题是许多无法定制,还有那些,对我们中的许多人来说往往太贵了。无线操纵杆的目的是为那些想要以自己想要的方式控制项目的人带来一个定制的无线解决方案,亚博官网不是他们被迫的方式。

亚博官网Sparkfun无线操纵杆套件

亚博官网Sparkfun无线操纵杆套件

KIT-14051
38.95美元

建议阅读

开始之前,您可能会发现以下链接很有用:

串行通信

异步串行通信概念:数据包,信号电平,波特率,UART和更多!

安装Arduino库

如何安装自定义Arduino库?这很容易!本教程将介绍如何使用Arduino库管理器安装Arduino库。对于未与Arduino IDE链接的库,我们还将继续手动安装Arduino库。

I2C

I2c简介,目前使用的主要嵌入式通信协议之一。

Lipo USB充电器连接指南

如何使用USB Lipo充电器为Lipo电池充电。以及如何修改充电器以设置充电电流。

探索XBees和XCTU

如何使用计算机设置XBEE,X-CTU软件,以及XBEE Explorer接口板。

SAMD21 mini/dev分接头连接指南

介绍Atmel ATSAMD21G18微处理器和我们的Mini和Pro R3分接板。使用强大的手臂皮质m0+处理器提升你的Arduino技能。

工具包概述

让我们详细介绍一下无线操纵杆套件。该套件附带以下部件:

套件中没有提供以下内容,需要单独购买。

选择权利电池取决于用途,但我们建议使用至少400毫安时的电池。如果你从未用过XBee以前,还建议使用一对1系列XBees,或者看看我们的XBee购买指南.

无线操纵杆板概述

无线操纵杆板配有以下部件:

  • SAMD21微控制器
  • 可调电池充电器(默认最大充电率500MA
  • MAX17043G燃油表
  • 可编程LED连接到D13
  • 两个触发按钮
  • 两个拇指操纵杆的空间,或1个拇指操纵杆和4个按钮

硬件连接

第一步是焊接直角触觉按钮。这些是为了插入从底部的电路板和焊接到最上层的印刷电路板。如下图所示。

触发按钮的底视图特写

电路板其余部分的焊接方式实际上取决于它的用途。操纵杆和按钮有几种不同的配置。继续读下去,看看他不同的配置。

双操纵杆

在这种配置中,无线操纵杆使用两个操纵杆,非常适合油箱转向机器人。油箱转向将左右操纵手柄的垂直位置映射到机器人左右电机的速度和方向。焊接操纵杆后,董事会应如下所示:

双操纵杆

单操纵杆

在这种配置中,无线操纵杆使用左侧的单个操纵杆和右侧的4个12毫米瞬时按钮。此设置类似于旧的控制台游戏机使用的设置。焊接操纵杆和开关后,无线操纵杆板如下图所示。

游戏板配置

有关焊接操纵杆的快速提示:有时在运输过程中,操纵杆上的销可以稍微弯曲。在尝试将插脚插入电路板之前,确保所有销看起来都笔直,并与其他销平行。焊接操纵杆时,从垂直和水平电位计上的销开始,用一对镊子把别针插到合适的位置,然后按我的方式操作选择按钮。

安装Lipo电池

要将电池固定到板上,我们建议使用一小块泡沫双面胶带。我们发现最容易放电池的地方是在右操纵杆下面。在安装电池之前,确保修整操纵杆焊点,以避免刺穿蓄电池!

修剪过的焊点

锂离子电池焊点修整

电池带

双面泡沫胶带的锂电池

电池安装

附加锂电池

设置电池充电率

默认情况下,费率设置为最大电流500MA.如果你的电池电量大于500mAh,您可以跳到Arduino示例部分。如果你使用的电池电量少于500毫安,你应该焊接我们将在下面确定的合适的电阻。

锂电池的寿命取决于几个因素:充电/放电循环次数,充放电率,电池温度,还有其他一些。给锂电池充电时,建议不要超过1摄氏度的收费率。例如,如果你有一个400毫安的电池,给电池充电的电流不应超过400毫安。要更改速率,移动焊锡跨接器,使中间和R_prog焊盘短路。然后焊接合适的电阻。要计算正确的电阻,使用以下公式:

r_prog=1000/i_prog(程序)

R_prog=电阻值,单位:千欧

i_prog=所需电流值(单位:mA)

给电池充电,只需插入micro-usb电缆,把开关移到关闭位置。如果您的收费率低于200毫安,无论电源开关位置如何,电路板都应无问题充电。如果从计算机的USB端口或小型USB充电器充电,更快的充电速度可能需要关闭开关以切断除充电电路以外的所有设备的电流。

安装SAMD21板附加组件

注:此示例假定您正在桌面上使用最新版本的Arduino IDE。如果这是你第一次使用Arduino,请回顾我们的教程 安装Arduino IDE。如果您以前没有安装过Arduino库,请查看我们的 安装指南。

现在硬件都设置好了,让我们看一些软件示例。在我们开始之前,确保安装了Arduino SAMD和Sparkfun SAMD板定义。亚博官网如果你需要帮助,退房SAMD21 mini/dev分接头连接指南.

SAMD21 mini/dev分接头连接指南

11月12日,二千零一十五

介绍Atmel ATSAMD21G18微处理器和我们的Mini和Pro R3分接板。使用强大的手臂皮质m0+处理器提升你的Arduino技能。

Arduino示例

示例1:远程油箱转向马达控制器

对于我们的第一个例子,让我们试着用坦克转向控制机器人。使用油箱转向,你需要在两个操纵杆上焊接。此示例使用以下部分。

把一切联系起来,从焊接开始“Deans插头的针脚连接到电机驱动程序的针脚,上面写着“max 11v”,XBEE Explorer上的针脚也是5V。将阳接头的“-”针连接到两个电机驱动器的“GND”上,和XBee Explorer。接下来,我们将把浏览器的“Dout”管脚连接到电机驱动器的“RX”管脚。将电机焊接到B1/B2和A1/A2上,但一定要把第二个电机焊接在第一个电机的对面,这样它们都会朝同一方向旋转。车轮通过摩擦配合与电机相连,所以小心地把它们推到电机的D轴上。最后,将XBees连接到无线操纵杆,以及XBEE资源管理器。

向无线操纵杆添加代码

既然我们已经把所有的东西都连接起来并焊接在一起了,让我们在无线操纵杆上输入一些代码!要使用此示例,将下面的代码复制到Arduino IDE。确定你选择Sparkfun 亚博官网Samd21 Dev Breakout作为您的董事会.

语言:C/*无线操纵杆坦克转向机器人示例*作者:Alex Wende*Sparkfun Electronics*日期:9/28/16**许可证:Creati亚博官网ve Commons属性shareLiked 4.0(CC by-SA 4.0)*使用此代码执行任何操作,可用于任何用途。*请将此许可证归为属性并保留。**这是无线操纵杆使用XBEE控制机器人*的示例代码。将第一个XBEE插入无线操纵杆板,*并将第二个连接到Sparkfun系列电机驱动器。亚博官网**上下移动左右操纵手柄将改变马达0和马达1的*速度和方向。左触发器将*最大速度降低5%,而右触发按钮*将使最大速度增加5%。**与电机驱动器的连接如下:*XBEE-电机驱动器*5V-VCC*GND-GND*DOUT-RX**为电机驱动器提供不高于11V的电源!*/define l_trig 6//用于左触发器的销define r35u trig 3//用于右触发器的销define l35u joystick a3//用于左操纵手柄的销define r35u joystick a0//用于右操纵手柄的销835u t speedlevel=20;//最大速度(%)=speedlevel*5(单位为percent)void setup()serial1.begin(9600);//9600波特延时(10),开始与XBEE的串行通信;serial1.print(“w7001\r\n”);//将启用寄存器0x70中的位设置为0x01 pinmode(L_trig,input_pullup);//启用左触发pinmode的上拉电阻(r_trig,input_pullup);//为右触发器启用上拉电阻void loop()int16_t leftstick,右棒;//我们将在这里存储模拟操纵杆值char buf0[10],buf1[10];//用于设置电机速度的字符缓冲区//如果(digitalread(l_trig)=0)speedlevel-=2,则降低最高速度;如果(speedlevel<2)speedlevel=2;而(数字读取(L_Trig)==0)延迟(2);//如果(digitalread(r_trig)==0)速度等级+=2,则增加最高速度;如果(速度等级>20)速度等级=20;同时(DigitalRead(r_Trig)==0)延迟(2);//读取操纵杆//将模拟值范围转换为电机速度(in%)LeftStick=(5-(模拟(L_操纵杆)/93))*速度等级;右杆=(5-(模拟(R_操纵杆)/93))*速度等级;//如果(leftStick>0)sprintf(buf0,“m0f%d\r\n”,leftStick),则建立马达0缓冲区;其他sprintf(buf0,“m0r%d\r\n”,abs(leftstick));//如果(rightstick>0)sprintf(buf1,“m1f%d\r\n”,rightstick)建立马达1缓冲区;其他sprintf(buf1,“m1r%d\r\n”,abs(rightstick));//发送电机速度延迟(5);serial1.打印(buf0);延迟(5);序列1.打印(buf1);

插入电池为电机驱动器和接收XBEE供电,然后打开无线操纵杆。移动左斗杆应移动左电机,右杆应该移动右电机。如果你的左杆控制着右马达(或者反之亦然),交换的pin值LI操纵杆遥控操纵杆在草图的顶部。

按下左触发按钮,可以降低电机速度。按下右触发按钮,使电机加速。

示例2:USB游戏控制器

为了从计算机对微控制器进行编程,许多微控制器,比如atmega328,需要另一个IC将USB连接到微控制器的UART。其他微控制器,就像无线操纵杆上使用的SAMD21一样,自带USB接口,这意味着不需要桥IC。有了本机USB,我们就可以对微控制器进行编程,模仿键盘等USB设备,老鼠,以及游戏操纵杆。

在这个例子中,我们将对无线操纵杆进行编程,以帮助我们玩经典游戏,小行星此示例可以使用双操纵杆或单操纵杆配置。让我们先将下面的代码复制并粘贴到Arduino IDE中,然后将其上载到我们的板上。确定你选择Sparkfun 亚博官网Samd21 Dev Breakout作为您的董事会.代码传输到板上后,返回包含游戏的网页。单击开始并尝试!

语言:C/*不是这样的无线操纵杆USB示例*作者:Alex Wende*Sparkfun Electronics*日期:9/28/16**许可证:Creat亚博官网ive Commons Attribution Sharelike 4.0(CC BY-SA 4.0)*用此代码做任何你想做的事情,可用于任何用途。*请将此许可证归为属性并保留。**此示例在移动左*操纵杆时通过USB发送ASCII箭头键字符,或在按下右触发按钮时通过空格字符发送。*/包括“keyboard.h”定义H诳U多功能操作手柄A2诳定义V诳U多功能操作手柄A3诳定义R诳U触发器3void setup()pinmode(R诳U触发器,输入插拔);keyboard.begin();void loop()uint16_t hstick=模拟读取(H_操纵杆);uint16_t vstick=模拟读取(v_操纵杆);如果(hstick>766)键盘,按(向左箭头键);否则,如果(hstick<255)键盘,则按(键撘right_arrow);else keyboard.release(键_right_arrow);键盘。释放(向左箭头键);如果(vstick>766)键盘,按(键_向上_箭头);else keyboard.release(键盘上箭头键);if(digitalread(r_trigger)==低)键盘。按(“”);else keyboard.release('');}

你可以找到免费版的小行星在这里.控制非常简单,您可以使用左操纵杆左右旋转您的摇杆,以及加速前进。摧毁小行星,你按下右扳机按钮。

实例3:Lipo电池监测

在本例中,我们将编程无线操纵杆以打印出有关电池的信息,如剩余电量和当前电池电压。这个例子还利用可编程LED来指示电池何时电量不足,何时需要充电。要使用此示例,将下面的代码复制到Arduino IDE。确定你选择Sparkfun 亚博官网Samd21 Dev Breakout作为您的董事会.

语言:C/*无线操纵杆电池监测示例代码:Jim Lindblom,由Alex Wende Sparkfun Electronics修改日期:9/28/16许可证:Creative Commons Attribution亚博官网 Sharesike 4.0(CC by-SA 4.0)使用此代码执行任何您想要的操作,可用于任何用途。请将此许可证归为属性并保留。这是无线操纵杆上MAX17043G芯片的示例代码。MAX17043G+U是一款小型车,低成本1S脂肪油量表。SAMD21通过I2c(双线)接口与MAX17043对话,所以我们会用线H库和它交谈。这是一个愚蠢的例子。它读取电池电压,它的百分比已满并打印在serialusb上。如果通过USB连接无线操纵杆,你可能不会在意电池电压。但这段代码确实向您展示了如何配置MAX17043G,以及如何读取和操作电压值。
           
            define max17043_address 0x36//r/w=~0x6d/0x6c//pin definitionsint alertpin=7;//这是警报中断针,连接到无线操纵杆上的插脚7//全局变量float batvoltage;float batpercentage;int alertstatus;void setup()pinmode(alertpin,输入插拔);serialusb.begin(9600年);//启动硬件serialusb延迟(500);serialusb.println(“你好,世界”);开始();//启动I2c配置x17043(32);//配置MAX17043的警报百分比qsMax17043();//重新启动燃油表计算void loop()batPercentage=percentmax17043();BAT电压=(浮动)VcellMax17043()*1/800;//vcell以1.25 mv的增量报告电池alertstatus=digitalread(alertpin);serialusb.print(百分之2);//打印电池百分比serialusb.println(“%”);serialusb.打印(BAT电压,2);//打印电池电压serialusb.println(“v”);serialusb.print(“警报状态=”);serialusb.println(警报状态,DEC);serialusb.println();delay(1000);/*vcell max17043()返回由max17043的vcell寄存器报告的电池电压的12位ADC读数。这不会返回电压值。要将其转换为电压,请乘以5并除以4096.*/unsigned int vcellmax17043()unsigned int vcell;vcell=I2Crad16(0x02);vcell=vcell>>4;//最后4位vcell为Nothing返回vcell;/*percentmax17043()返回从max17043.*/float percentmax17043()无符号int soc的soc寄存器报告的电池百分比的浮点值;浮动百分比;SOC=I2Crad16(0x04);//读取SOC寄存器MAX17043%=(字节)(SOC>>8);//SOC的高位字节为百分比+=((float)((byte)SOC))/256;//low byte为1/256%返回百分比;/*configmax17043(byte percent)配置max170143的配置寄存器,特别是其中的警报阈值。传递一个介于1和32之间的值,将警报阈值设置为介于1和32%之间的值。任何其他值都会将阈值设置为32%.*/void configmax17043(byte percent)if((percent>=32)(percent==0))//任何32或更大的值都将设置为32%I2Write16(0x9700,0x0C);else byte percentbits=32-百分比;I2Write16((0x9700百分比位),0x0C);/*qsmax17043()向MAX17043发出快速启动命令。快速启动允许MAX17043以与IC初始通电相同的方式重新启动燃油表计算。如果一个应用程序的电源序列非常嘈杂,这样,IC对SOC的第一个猜测就引入了过量误差,Arduino可以快速启动以减少错误。*/void qsmax17043()i2cWrite16(0x4000,0x06);//将一个0x4000写入模式寄存器/*I2Cread16(无符号字符地址)从8位地址开始读取一个16位值,继续到下一个地址。返回16位值。*/unsigned int i2card16(unsigned char address)int data=0;Wire.BeginTransmission(MAX17043_地址);电报、书写(地址);Wire.EndTransmission();电汇请求来自(MAX17043_地址,2);while(wire.available()<2);data=(int)wire.read())<<8;数据=wire.read();返回数据;/*I2cWrite16(无符号int数据,无符号字符地址)从8位地址开始写入16位数据,并继续下一个。*/void i2cWrite16(无符号int数据,无符号字符地址)Wire.BeginTransmission(max17043_address);电报、书写(地址);wire.write((byte)((data>>8)&0x00ff));wire.write((byte)(data&0x00ff));Wire.EndTransmission();
           

示例4:使用额外的GPIO

你可能已经注意到SPI,我C其他的GPIO引脚也被断开了。我们想突破未使用的针,以允许任何定制,你可能需要。在最后一个例子中,我们将使用OLED屏幕显示来自MAX17043燃油表的电池信息。

在我们看代码之前,让我们把OLED分接头连接起来。您需要七根电线将OLED分接头连接到无线操纵杆,它们的连接是:

无线操纵杆-OLED分接头

  • 3.3V-3V3
  • GND - GND
  • 摩西SDI
  • SCK-SCK
  • D10-CS
  • D1-RST
  • D12-D/C

OLED屏幕的位置由您决定,但我个人喜欢使用泡沫双面胶带将显示器安装在板上的USB连接器。

OLED实例

要使用下面的代码,您需要先下载Microoled Arduino库。要下载libary,单击下面的按钮,或者从我们的Github存储库.关于如何使用libary的更多信息,参观微型OLED分接连接指南.

下载Arduino图书馆!

安装库之后,将下面的代码复制到Arduino IDE。确定你选择Sparkfun 亚博官网Samd21 Dev Breakout作为您的董事会.

语言:c/*gpio无线操纵杆示例*作者:alex wende*sparkfun electronics*日期:9/28/16**许可证:Cr亚博官网eative Commons Attribution Sharesike 4.0(c c by-sa 4.0)*使用此代码执行任何操作,可用于任何用途。*请将此许可证归为属性并保留。**本例为Sparkfun OLED分接头(亚博官网LCD-13003),用于显示*电池的电压和剩余电量。**连接:*无线操纵杆-OLED*3.3V-3v3*GND-GND*MOSI-SDI*SCK-SCK*D12-D/C*D11-RST*D10-CS*/包括
           
            包括:
            
             包括:
             
              define pin_reset 11//将RST连接到pin 9(req.对于SPI和I2c)定义pin_dc 12//将dc连接到pin 8(SPI需要)定义pin_cs 10//将cs连接到pin 10(SPI需要)定义dc_跳线0定义max17043_地址0x36//pin definitionsint alertpin=7;//这是警报中断针,接无线joystickint ledpin=13上的pin 7;//这是LED连接到的针脚//全局变量float batvoltage;float batpercentage;int alertstatus;microoled OLED(pin_reset,皮尼迪克pin_cs);void setup()oled.begin();//启动OLED线。begin();//启动I2c PinMode(AlertPin,输入插拔);//启用上拉电阻pinmode(ledpin,输出;配置M17043(32);//配置MAX17043的警报百分比qsMax17043();//重新开始燃油表计算oled.setfonttype(0);//将文本设置为小(10列,6行字符值)void loop()batPercentage=percentmax17043();//获取电池百分比batvoltage=(float)vcellmax17043()*1/800;//vcell以1.25 mv的增量报告电池alertstatus=digitalread(alertpin);OLED.清除(第页);//清除屏幕OLED.setCursor(0,0);//将光标移到左上角oled.print(batPercentage,2);oled.println(“%\n”);OLED打印(BAT电压,2);oled.println(“v\n\n”);OLED.print(“vbat:”);如果(警报状态=低)数字写入(ledpin,高);OLED打印(“低”);其他数字写入(ledpin,低);OLED打印(“确定”);OLED.display();延迟(10);/*vcell max17043()返回由max17043的vcell寄存器报告的电池电压的12位ADC读数。这不会返回电压值。要将其转换为电压,请乘以5并除以4096.*/unsigned int vcellmax17043()unsigned int vcell;vcell=I2Crad16(0x02);vcell=vcell>>4;//最后4位vcell为Nothing返回vcell;/*percentmax17043()返回从max17043.*/float percentmax17043()无符号int soc的soc寄存器报告的电池百分比的浮点值;浮动百分比;SOC=I2Crad16(0x04);//读取SOC寄存器MAX17043%=(字节)(SOC>>8);//SOC的高位字节为百分比+=((float)((byte)SOC))/256;//low byte为1/256%返回百分比;/*configmax17043(byte percent)配置max170143的配置寄存器,特别是其中的警报阈值。传递一个介于1和32之间的值,将警报阈值设置为介于1和32%之间的值。任何其他值都会将阈值设置为32%.*/void configmax17043(byte percent)if((percent>=32)(percent==0))//任何32或更大的值都将设置为32%I2Write16(0x9700,0x0C);else byte percentbits=32-百分比;I2Write16((0x9700百分比位),0x0C);/*qsmax17043()向MAX17043发出快速启动命令。快速启动允许MAX17043以与IC初始通电相同的方式重新启动燃油表计算。如果一个应用程序的电源序列非常嘈杂,这样,IC对SOC的第一个猜测就引入了过量误差,Arduino可以快速启动以减少错误。*/void qsmax17043()i2cWrite16(0x4000,0x06);//将一个0x4000写入模式寄存器/*I2Cread16(无符号字符地址)从8位地址开始读取一个16位值,继续到下一个地址。返回16位值。*/unsigned int i2card16(unsigned char address)int data=0;Wire.BeginTransmission(MAX17043_地址);电报、书写(地址);Wire.EndTransmission();电汇请求来自(MAX17043_地址,2);while(wire.available()<2);data=(int)wire.read())<<8;数据=wire.read();返回数据;/*I2cWrite16(无符号int数据,无符号字符地址)从8位地址开始写入16位数据,并继续下一个。*/void i2cWrite16(无符号int数据,无符号字符地址)Wire.BeginTransmission(max17043_address);电报、书写(地址);wire.write((byte)((data>>8)&0x00ff));wire.write((byte)(data&0x00ff));Wire.EndTransmission();
             
            
           

资源和进一步发展

以下是一些有用的链接,可以帮助您回答关于无线操纵杆的任何问题:

走得更远

既然无线操纵杆工作正常,你打算用它做什么?需要一些灵感,看看下面的教程!

带阴影底盘的Redbot试验指南

本实验指南提供九个实验,让您开始使用Sparkfun Redbot。亚博官网本指南是为那些熟悉我们的SparkFun发明家工具包并希望将他们的机器人技术知识提升到下一个层次的人而设计的。亚博官网

Ludus Protoshield连接指南

开始使用Sparkfun Ludus Pr亚博官网otoshield和Ludus Protoshield Wireless!

亚博官网Sparkfun 5V/1A脂质充电器/助推器连接指南

本教程向您展示如何连接和使用Sparkfun 5V/1a Lipo充电器/助推器电路。亚博官网

亚博官网Sparkfun发明家工具包实验指南-v4.0

spar亚博官网kfun inventor's kit(sik)实验指南包含构建所有五个项目所需的所有信息,亚博官网包括16个电路,在最新版本的工具包中,V4.0A。