完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>

|
本帖最后由 辉哥的歌 于 2016-6-9 12:14 编辑 1. 引言 在第7讲“我的‘潘多拉魔盒’7—遥控器按键电平检测电路设计中,重新改进了遥控器的电路设计,解决了按键未按下时,对应引脚悬空导致的电平跳变问题。从而为本项目的结题做了关键的铺垫。 为了能够实现所开发的遥控器对小车的遥控,本节需要解决的问题有: 1) NanoPi M2与Ardunio的无线通信问题; 2) 小车的控制流程设计及程序的开发; 3) 小车驱动电机控制。 所采用的硬件如下表所示:
由于本项目的重点在于小车遥控器的开发,对于小车的建立和控制原理本报告就不细讲,感兴趣的同学,有问题可以跟我直接联系。 2. 查看NanoPi M2可用串口号
图1 查看NanoPi M2可用的串口号 由图1可见,当前有四个串口可用,其中画红线的ttyAMA2就是UART3对应的串口,也即引脚8和引脚10。而其中一个数传是USB接口(见图2),所以可直接插在USB口上,此时再次查询可用串口发现多了一个ttyUSB0串口,也就是我所采用的插着无线数传的接口。
图2 无线数传模块
图3 插上带USB接口的无线数传后出现ttyUSB串口号 3. NanoPiM2与Ardunio通信测试 (1) 开发环境及通信库安装 遥控器与NanoPi M2的接线在第5和第7讲中都有详细描述,这里不再赘述,可直接见图4。主要讲遥控器端的控制程序的软件实现。
图4 遥控器端连接实物图 这里采用的开发环境是Python2.7的IDE,采用这个的开发环境的好处是格式简约大方,调试方便(见图5和图6),安装也很简单,采用如下指令: 安装IDE命令:sudoapt-get install idle 采用的开发语言当然也就是python了,之所以采用python主要是python的串口通信库很好用,也就是pyserial-3.0.1。不过,该库需要安装,安装方法如下: 使用apt-get工具安装:sudoapt-get install python-serial 当然也可以下载后安装,下载后安装方法如下: 1) tar zxvf pyserial-3.0.1.tar.gz 2) cd pyserial-3.0.1 3) python setup.py install pyserial的下载地址如下,该库有详细的使用教程,虽然是英文的但简单易懂: 下载地址:https://pypi.python.org/pypi/pyserial/3.0.1 通信库使用手册连接:http://pythonhosted.org/pyserial/
图5 Python IDLE开发环境安装后在编程菜单下
图6 打开python2.7后进入开发环境界面 (2) 遥控器控制流程 1) 导入串口通信库:importserial 2) 打开通信的串口及设置波特率:ser = serial.Serial('/dev/ttyUSB0',57600) 3) 判断是否打开正确:if(ser.isOpen()):print('Device open successfully!') 4) 定义所采用的引脚编码号,如forward_in= 92 5) 定义引脚的输入输出模式,如gpio.setup(forward_in,'in') 6) 初始化输出引脚为低电平,如gpio.set(forward_out,0) 7) 判断按下的是哪个按键,点亮对应的led灯,并发送对应的控制指令,这里程序设计时滤除了多按键同时按下的情况,因为原则上是不允许的,比如说若同时按下前进和后退键,则认为是操作不当,不予反应。控制主体程序如下: while True: #time.sleep(0.000001) Fin =gpio.input(forward_in) Rin =gpio.input(right_in) Lin = gpio.input(left_in) Bin = gpio.input(back_in) if((Fin==1) and (Rin==0)and (Lin==0) and (Bin==0)): gpio.set(forward_out,1) gpio.set(right_out,0) gpio.set(left_out,0) gpio.set(back_out,0) print("forward_in = " + str(Fin)) command =ser.write('F') # 发送前进指令 elif((Fin==0) and(Rin==1) and (Lin==0) and (Bin==0)): gpio.set(forward_out,0) gpio.set(right_out,1) gpio.set(left_out,0) gpio.set(back_out,0) print("right_in = " + str(Rin)) command = ser.write('R') # 发送右转指令 elif((Fin==0) and(Rin==0) and (Lin==1) and (Bin==0)): gpio.set(forward_out,0) gpio.set(right_out,0) gpio.set(left_out,1) gpio.set(back_out,0) print("left_in = " + str(Lin)) command =ser.write('L') # 发送左转指令 elif((Fin==0) and(Rin==0) and (Lin==0) and (Bin==1)): gpio.set(forward_out,0) gpio.set(right_out,0) gpio.set(left_out,0) gpio.set(back_out,1) print("back_in = " + str(Bin)) command =ser.write('B') # 发送后退指令 else: gpio.set(forward_out,0) gpio.set(right_out,0) gpio.set(left_out,0) gpio.set(back_out,0) print("others operation" ) command =ser.write('P') # 发送无效操作指令 8) 强制停止设置:exceptKeyboardInterrupt: print("Qiut") (3) 按键操作效果如下: 在进行通信之前,先进行了单遥控器的控制操作测试,已检验控制操作逻辑的正确性。从各个按键下的电平情况(图7-11)来看,没有出现电平跳动情况,控制操作响应较快,也比较稳定。
图7 无控状态下各引脚电平都为零
图8 按下前进按键引脚电平情况
图9 按下右转按键引脚电平情况
图10 按下左转按键引脚电平情况
图11 按下后退按键引脚电平情况 (4) 接收端测试 接收端采用的是Arduino的IDE开发环境,进行程序的开发,首先进行接收NanoPi M2发出的指令测试。接收端的测试程序如图12所示。
图12 Ardunio接收端界面及测试程序 将该程序下载到Ardunio板后,连接Ardunio与另一端无线数传模块(见图13)后,打开Ardunio的串口监视窗口,然后进行按键操作,可见效果如图14-16所示。
图13 无线数传接收端与Ardunio连接示意图
图14 无操作或多按键同时按下时接收到的是停车指令P
图15 接收到F前进和R右转指令
图16 接收到右转R—停P—左转L—停P—后退B指令 至此说明NanoPi M2和Ardunio已经通信成功,下一步只需判断所接收到的控制指令,控制小车即可。 4. 小车端硬件连接和控制流程 (1)小车端硬件连接 对于小车端的硬件连接需要注意的主要是供电方式,这里选择3s锂电池作为小车的动力电源,而9v方块电池作为Ardunio uno r3的供电电源。选择L298N作为小车的直流电机的控制驱动器,以及3DR的无线数传作为无线控制的信号接收设备。整体连接方案如图 17所示,实物连接如图18和19所示。
图 17 小车端硬件连接图
图18 实物连接图
图19 局部连接图 (2)控制流程 此时,遥控器端控制软硬件都已经准备好了,小车控制端的连接也已经完成,下来就需要根据接收到的指令完成对应的小车运动的控制。而控制小车的运动其实就是控制直流电机的驱动器L298N使其驱动电机的转向,L298N的控制逻辑如图20所示。
图20 L298N驱动电机的控制逻辑 软件控制流程如下: 1) 首先需要定义一个接受指令的字符变量:char command; 2) 然后定义接L298N控制引脚IN1,IN2,IN3,IN4的Ardunio引脚,这里选择Ardunio的6~9引脚与其对应;intpin_L1 = 6; int pin_L2 = 7; int pin_R1 =8; int pin_R2 = 9; 3) 然后设置引脚的输入输出模式,如pinMode(pin_L1,OUTPUT); 4) 设置串口波特率,需要注意的是这个波特率要与NanoPi M2的遥控端一致,参考第3小节第(2)部分的遥控器控制流程中的第2)条,波特率的设置(57600),因此,这里的波特率只能设置为57600,即Serial.begin(57600); 5) 定义小车的运动模式函数,分别为Foreward()、Turnleft()、Turnright()、Backward()和Stop(); 6) 进入循环控制主体,读取command,判断是什么指令,从而运行对应的函数即可,该部分程序见图21。 完整的程序在附件中给出。
图21 小车控制主循环部分程序 5. 遥控效果展示遥控效果展示是一个比较头疼的问题,因为发烧友的平台没法投放视频,我只能把录制的视频上传到优酷上,大家可以点开链接去优酷上观看。 视频展示优酷链接:http://v.youku.com/v_show/id_XMTYwMTk0MTE4OA==.html 这里先给大家展示两图片:
图22 遥控器控制小车运动
图23 遥控小车 6. 结束语至此,我的用NanoPi M2制作遥控器控制小车项目就结束了,所制作的遥控器能够完美的遥控我的小车,解决了遥控器制作过程的控制键电路设计和无线串口通信等关键技术,对于NanoPi M2 GPIO方面的开发有了较深的了解,我的试用就告一段落,特此申请结项。 如果后续还有进一步的改进和其它好玩的开发,也会继续给大家分享,还请大家对我的试用过程有什么问题的地方不吝赐教,一起探讨进步。
评分
|
|||
相关推荐
8 个讨论
|
|||
|
强!!!!!!!!!!!!
|
|
|
|
|
|
|
|
|
本帖最后由 辉哥的歌 于 2016-6-21 19:36 编辑
zrts123 发表于 2016-6-21 09:53 这个我很早就试过了,的确有这个问题,当时追了好远才追上的,呵呵。你解决了这个问题。我回头再测试一下试试 |
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
383个成员聚集在这个小组
加入小组NanoPi m3适合刷什么系统,刚接触玩,我刷了一个比较卡
5955 浏览 1 评论
7747 浏览 1 评论
5107 浏览 1 评论
【NanoPC-T4试用体验】4、手把手教你从单片机移植驱动到ARM Linux上
8663 浏览 1 评论
【NanoPC-T4试用体验】NanoPC-T4控制步进电机
25173 浏览 1 评论
NanoPi m3适合刷什么系统,刚接触玩,我刷了一个比较卡
5955浏览 1评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 16:36 , Processed in 1.191419 second(s), Total 52, Slave 44 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
10242