完成度:85%
成品图:
这个项目分为以下几个部分来实施:
已解决:
使用L298N扩展板驱动直流电机:这个之前已经研究过了,详见:https://nyan.im/posts/301.html
驱动舵机控制机械臂:舵机可以直接插在我准备使用的sensor shield v6 上,并且通过arduino的舵机库servo.h来驱动。
无线数传:我之前考虑过通过wifi、蓝牙、fm、2.4g和红外遥控等方式来进行控制。本来已经确定使用wifi来进行控制,这样的话一种选择是自己改装openwrt路由器,引出串口,另一种是买wifi扩展板,但是tb上的wifi扩展版价格贵得离谱……于是放弃了这一方案,最后选定了apc220无线数传模块,虽然贵了点,但是跟xbee的模块比已经很良心了…最重要的是很多代码都是现成的,而且传感器扩展上都有现成的接口。
待解决:
串口通讯:在这个项目中我需要从上位机通过串口给arduino发送指令。arduino ide中内置有进行串口通讯的函数,这个很好解决。但是为了方便操作,我可能需要编写一个上位机控制程序,捕捉键盘的输入,然后将按照预先的设置将指令通过串口发送给arduino。
无线摄像头:我找了一圈发现不管2.4g还是wifi摄像头的驱动要么不支持win8,要么根本不支持64位…>< 这不是作死嘛…难道让我一边开着虚拟机一边调试么..果断放弃…后来又考虑过把摄像头模块接在arduino上然后通过串口回传,但是uno的性能对于处理视频有些吃力….于是干脆不要摄像头了,等找到合适的方案了后期再加上就是了..
需要使用的配件:
- arduino uno
- apc220 无线数传模块
- Xbee传感器扩展板V6
- 电池组x3
- 5自由度机械臂套装
- 995舵机x4
- 996舵机x1
- 杜邦跳线
- 机器人底盘
- L298N直流电机驱动板
——————————————————————————————————————–
09.17
arduino的io扩展板v7和apc220无线模块收到了,赶紧插上测试了一遍….io扩展板使用很方便,舵机的3个引脚可以直接插在上面,这样就不用在面包板上连各种乱七八糟的线了。但是有一个问题,就是每次从电脑向arduino上传代码的时候都必须把扩展板拿掉,不然会提示串口被占用….
(后来我弄明白了在io扩展板上有一个 RUN/PROG的小开关,用于切换运行和编程 模式。在下载代码或进行串口通讯的时候需要把开关拨到PROG位置,不然扩展板会占用Rx和Tx从而导致下载或通讯失败。)
APC220的无线模块让我很怨念….我在买的时候看这个模块很流行(很多教程和文章中都提到或使用了这个模块),就没问兼容性的问题。拿到之后才发现装驱动虽然能装上,但是设备管理器中始终显示问号……问了卖家之后才知道这货的驱动不兼容win8…..于是我就只能苦逼地在xp虚拟机下操作了…..
——————————————————————————————————————–
09.18
我把机械臂的套件按照卖家给的安装图安装上了,装完之后才发现我买的5自由度的版本的爪子不能在平面内转动…..早知道就买6自由度的版本了…
装完之后做了些简单的测试,比如用一个for循环让角度从0-180 度依次叠加,然后用servo库将角度值写入舵机。
servo库使用很简单,例如:
#include <Servo.h>//导入舵机库
Servo servo1;//定义一个舵机对象
void setup(){
servo1.attach(3);//将这个舵机对象链接到引脚3(必须pwm引脚)
}
void loop(){
servo1.write(90);//写入90度角度值
}
我本来想把安装机械爪的舵机安装成水平转动的(像图中那样),但是这种结构实在是太不稳定了,所以我就只好老老实实按照安装图来装了.
09.28
组装好了之后我要想办法把机械臂装到底盘上去…..但我实在不想吐槽底盘上的螺丝孔设计得实在是太猎奇了…..我试了半天总算找到了两个能对上的孔….
然后我就发现了一个更严重的问题….底盘太小,机械臂太重,舵机随便动一下整个装置就倒了….于是我就华丽丽地放了两个哑铃片上去…
(注意:不要把arduino以及任何电路板直接放在导体上,否则底部的引脚短路了就神作了)
09.29
机械部分组装好之后按照上面的原理图把各个模块连起来…然后将【这个文件】中的代码写入Arduino。(代码尚不完善,仅供参考)
我使用的引脚是:
servo1:3
servo2:5
servo3:6
servo4:9
servo5:10
ENA:11
I1:7
I2:8
ENB:12
I3:2
I4:4
为了省事我直接使用了Serial.read()函数,这样每个指令只需要通过串口读入一个字节,就不需要折腾缓冲区什么的了..如果谁知道怎么让arduino读取一段字符串,请告诉我,万分感谢。
现在我有一个想法,就是使用c/c++编写一个上位机的程序,每当键盘按下一个键,就把这个字符发送到串口,但是目前还没有找到合适的解决方案。
发表回复/Leave a Reply