如何使用Arduino制作简单低成本的RC控制器
扫描二维码
随时随地手机看文章
在这个中级电子和无线电通信教程中,我们将深入研究使用Arduino平台和nRF24L01+无线模块构建功能齐全的8+通道RC(无线电控制)发射器和接收器。该项目结合了微控制器编程,传感器集成和射频通信的核心技能,非常适合希望扩展DIY远程控制系统知识的爱好者。
应用程序
本RC系统可用于:
•遥控飞机、船和汽车
•DIY无人机或四轴飞行器
•无线机器人控制
•多伺服控制系统
为什么是nrf24lo1?
2.4 GHz射频通信:工作在2.4 GHz ISM频段,可实现中短距离(使用外置天线时为1km ~ 5km)的无线数据传输。
•基于包的通信:数据以小数据包(最多32字节)发送,内置CRC检查错误和自动确认(ack)以提高可靠性。
•多数据管道:支持多达6个数据管道,允许一个接收器监听多个发射机使用唯一的地址。
•低功耗:传输时仅消耗~ 12ma,可进入超低功耗休眠模式,提高电池效率。
•SPI接口:使用SPI协议与微控制器通信,用于高速数据传输和配置。
•可调功率和数据速率:传输功率和数据速率(250kbps, 1mbps, 2mbps)可以根据距离和速度进行调整。
注意:要为接收器供电,仅使用1 (ONE) ESC的BEC,因为超过1个电源输入可以击穿nano的5v引脚。
无线电总结
发射机的一面:
•从电位器和开关等输入设备读取模拟或数字值。
•将这些值打包到结构化数据包中。
•通过nRF24L01+模块按设定的频率发送报文。
接收端:
•连续侦听传入的数据包。
•解析接收到的数据并将其映射到伺服位置或电机速度。
•包括安全功能,如信号丢失超时检测。
发射机的代码
主要功能:
•创建一个无线RC发射机使用电位器(或操纵杆)和按钮。
•通过nRF24L01+将控制数据发送到接收端进行控制:
•4个模拟通道:副翼、升降舵、方向舵、油门
•2个数字通道:按钮(如弹射或齿轮)
•将指数响应曲线(expo)应用于模拟控制,使接近中心的操纵杆控制更平滑。
库和初始化
•这些库允许Arduino使用SPI并与nRF24L01+无线电通信。
•设置无线电对象,CE在引脚7,CSN在引脚8。
•使用5个字符的管道地址与接收方通信。
数据结构(包)
•这是一个紧凑的自定义协议,仅占用18字节。
•它在单个数据包中有效地传输4个模拟轴位置+ 2个按钮状态。
•创建一个名为data的全局实例。
注意:你可以添加更多的变量,但最多只能添加32个字节(int是4个字节,char是1个字节,等等)。
设置函数
•begin(9600):启用串行调试。
•radio.begin():初始化nRF24L01+模块。
•openWritingPipe():设置用于向接收者发送数据的地址。
•setPALevel():降低功率电平(使用RF24_PA_LOW或HIGH以获得更大范围)。
•setDataRate():采用慢速可靠的数据速率(250kbps)。
•stoppllistening():设置模块为传输模式。
注意:使用完全相同的设置为接收器和发射器。
主循环
•从模拟引脚读取操纵杆值。
•转换模拟值(0-1023)到伺服角度(0-180)。
•使用applyExpo()函数将指数曲线应用于副翼、升降舵和方向舵。
•读取按钮状态(HIGH =未按下)。
•如果未按下则发送‘1’,如果按下则发送‘0’(如果需要,您可能需要翻转此逻辑)。
•将整个数据包通过无线电发送给接收者。
applyExpo()函数
•该函数对输入应用指数响应曲线:
•Expo = 0:全线性响应(无曲线)。
•世博> 0:软化中心附近的灵敏度。
•它将0-180范围内的输入映射到90(中心)附近的规范化曲线。
注意:这给了你精确的控制靠近操纵杆的中心和完整的旅行在两端。
接收方代码
主要功能:
•使用nRF24L01+模块从发射器无线接收控制信号。
•解析6个通道(可扩展)的输入:4模拟(x1, y1, x2, y2)和2数字(b1, b2)。
•驱动5个伺服器,用于2个副翼,1个升降舵,1个方向舵和1个电机(ESC带BEC)。
•应用微调,映射,世博(通过dualRate)和信号安全(例如,约束())。
nRF24L01设置
•使用地址为“77777”的管道0侦听传入数据。
•设置为最小功率(考虑RF24_PA_LOW或RF24_PA_HIGH以获得更好的范围)。
•使用250kbps,在更长的距离上获得更好的可靠性。
•禁用自动确认最小延迟或ping。
注意:为了扩大范围,考虑制作nrf24lo1,地面范围助推器(教程即将推出)。
伺服系统初始化
•定制PWM范围(1000-2000µs),通过附加(引脚,min, max)节流-用于esc。
•其他伺服使用默认的544-2400µs范围。
控制逻辑
•油门开始在90(0推力),因为它是操纵杆的中性或默认位置。
•0.7用作限制器,这样电机就不会太热或烧坏。
•使用dualRate()根据费率因子限制旅行(对于初学者)。
•对所有表面应用修剪值。
•电梯映射是倒置的,这是典型的取决于操纵杆的方向。
双速率函数
•限制移动范围。
•清洁和可重复使用的所有表面。
本文编译自hackster.io