话说2018年春节的时候,3d打印了一个机械臂。
还是老样子,在纸上先画一个机械臂大概的形状
在CAD中画出具体参数,看看用什么养的配置比较合适,作业半径会是多少。
确定参数就可以开始做三维建模。
一步一步开始搭建机械臂的每个部分。
...continue reading
3,750 total views, no views today
话说2018年春节的时候,3d打印了一个机械臂。
还是老样子,在纸上先画一个机械臂大概的形状
在CAD中画出具体参数,看看用什么养的配置比较合适,作业半径会是多少。
确定参数就可以开始做三维建模。
一步一步开始搭建机械臂的每个部分。
...continue reading
3,750 total views, no views today
为了造一套门禁系统,淘宝上搞来了一套RFID读卡器。
RC522,看上去是比较多的型号,哪家店都买得到。
5,280 total views, no views today
用Mac对Nano编程,但是碰到了这个问题
点击下载后,出现了这个问题
avrdude: stk500_recv(): programmer is not responding
我能保证Board和Serial都没有选错,板子型号为: Arduino Nano w/ ATmega328, 串口为: /dev/tty.usbserial-A92D9FNR,但是还是出现问题。
截图当中,为了模拟这个问题,所以将串口选到了/dev/tty.Bluetooth-incoming-Port,所以,出现这个问题,第一就应该先检查板子型号和对应的串口名称,因为最可能是这方面出现的错误。
经过搜索,发现网上也有同样的问题:
http://forum.arduino.cc/index.php?topic=123573.0
全文如下
I had the same problem! If you are using an Arduino Nano w/ OSX you need to install the drivers. Download and execute it: http://www.ftdichip.com/Drivers/VCP/MacOSX/FTDIUSBSerialDriver_v2_2_14.dmg And you'll find this files: FTDIUSBSerialDriver_10_3.pkg which is specific to OSX 10.3 (Panther) FTDIUSBSerialDriver_10_4_10_5_10_6.pkg which is specific to OSX 10.4 (Tiger), OSX 10.5 (Leopard) and 10.6 (Snow Leopard). Execute "FTDIUSBSerialDriver_10_4_10_5_10_6.pkg" if you are using OSX 10.5+ (Leopard+) Best!
所以,到这个网址下载最新的FTDI驱动,安装好就可以使用了
http://www.ftdichip.com/Drivers/VCP/MacOSX/FTDIUSBSerialDriver_v2_2_14.dmg
1,985 total views, no views today
很长时间没折腾了,因为前段时间忙家里的事情、学校的事情,所以就耽搁了。昨天搞了一个通宵,搞定了今天上午的一个报告,下午就继续搞飞机了。
我们原定的目标就是通过Arduino来作为四轴飞行器的控制板,那么必然就需要用Arduino来控制四个电机的转速,其实就是多PWM输出。在去年我已经实现了单电机的输出,发现了不少问题。
首先,舵机的信号格式和我们用的电调的信号格式是相同的,一般来说,航模上的电调信号线接于接收器的三号通道上,但是,如果接在别的通道上也是能正常工作的,这也证明了他们之间信号是相同的。
但是,上次通过Arduino上的Servo库来控制电机时,发现Servo库输出的pwm宽度会超过电调接收的范围,从而导致电机无法启动。然而,通过遥控器遥控时就不存在这个问题。所以,我今天就首先对遥控器的pwm信号进行测量,然后对Arduino输出的pwm信号进行测量。然后计算出控制方式。注意:这里的pwm信号是通过Arudino上Servo库输出的pwm信号,它是脉冲宽度调制,不是Arduino默认的pwm,默认的pwm是通过占空比来模拟一个模拟量。
好了,不多说,上图。
首先,测试电池是否有能力带动两个电机同时稳定地工作,我用遥控器电路对他们进行了测试。先搭建了一个下图所示的电路,进行测试。
http://v.youku.com/v_show/id_XMjcwNzAxNzY0.html
然后就需要测量遥控器输出的脉冲宽度和Arduino输出的脉冲宽度,搭了下面这个电路。为此我还去买了能测占空比的ut10a,但是那个万用表实在不给力,根本没有办法量到数据。-_-b
这张图当中电调只是起到供电的作用,所以并没有连电机。
无奈,但是发现Arduino有pulseIn()这个函数,可以计算一个高电平或低电平持续时间,正好,把数据拿下了。
最高位: 1900us 最低位: 1100us
那么就碰到了另外一个问题,既然没有仪器来测量脉冲宽度,那如何去测量Arduino输出的PWM脉冲的宽度呢?我在万念俱灰的情况下,把两个Arduino上的数字端口连在了一起,就像下面图中的一样,看看是否能自己测量自己。
结果很出乎意料,居然得到数据了,真的很佩服Arduino写底层库的人,中断控制得如此完美:-)
可以看到,Servo库在输出0时,对应的脉冲宽度为522ms;而输出180时,对应的脉冲宽度为2373ms。远远大于遥控器输出的范围,所以导致一开始电调无法识别Arduino的pwm信号。这样经过简单的计算就可得出,电调的最低位应为56度,最高位应为133度。:-D
有了这个重要的数据,下面就可以用它来控制电机了。不过首先还是先让程序控制舵机,保证他能正常运行,呵呵。
测试通过之后,就上电机啦。通过控制板上的两个旋钮,其实就是可变电阻,来控制电机的速度。
上视频
http://v.youku.com/v_show/id_XMjcwNzA0MDAw.html
控制板特写
右边的电源模块特写,整个系统的动力电源和控制电源分为两路,控制电源由我自己做的手机电池包来提供.
电机特写,呵呵,山寨味道太浓了
最后,我测了下电机的电流,在两个电机空载,半油门的情况下,电流为4A左右。这两个电机都是经过风风雨雨的,什么坠机、落水都经历过,轴已经有点不正常了,所以也只是带大概估计一下。
下面就是测试程序
#include <Servo.h> //Author: HE Qichen //Date: 2011-5-27 //Website: http://heqichen.cn //Email: heqichen(a)gmail.com #define inputPin1 A8 #define inputPin2 A9 #define motorPin1 5 #define motorPin2 6 Servo motor1; Servo motor2; void setup() { motor1.attach(motorPin1); motor2.attach(motorPin2); motor1.write(motorSpeedTransfer(0)); motor2.write(motorSpeedTransfer(0)); Serial.begin(9600); } void loop() { int input1, input2; int speed1, speed2; input1 = analogRead(inputPin1); input2 = analogRead(inputPin2); speed1 = motorSpeedTransfer(input1); speed2 = motorSpeedTransfer(input2); motor1.write(speed1); motor2.write(speed2); Serial.print("#1 value: "); Serial.print(speed1, DEC); Serial.print(" #2 value: "); Serial.println(speed2, DEC); delay(500); } int motorSpeedTransfer(int s) { return (s/13 + 56); }
2,614 total views, no views today
今天完成了遥控车的改造,这是自主控制的第一步。这辆车是在淘宝上买的,结构很简单,控制很简陋。方向就是将电机打死,这时候电流会非常大,而且对于将来的自主移动的精细控制带来不利因素。所以很早就想把它改成舵机控制的了,下面就是整个改造的过程。
这就是需要改造的部分。
先将需要改造的部分画下来,便于设计框架结构。我不是机械出身的,所以就画个大概吧。
结构图完成
在图纸上设计新的结构
根据设计切割材料
最后完成的样子,由于是临时电路,也就没固定,看上去有点像垃圾车-_-b
改造部分的特写
再来一张
这些只是机械部份,然后就是控制部份。由于舵机能够转动的角度范围到180度,而该车的转向轮仅能转动在30-40度之间。同时,自主移动机器人目标是在Arduino上面开发。所以我就一步到位,先用Arduino读取天地飞的pwm信号,然后经过转换,输出新的pwm信号给舵机,这样就不会因为卡住而损坏舵机了。
最后效果如下
http://v.youku.com/v_show/id_XMjYzOTc2NzA4.html
使用的程序非常简单,如下:
#include <Servo.h> //Author: HE Qichen //Date: 2011-5-3 //Website: http://heqichen.cn //Email: heqichen(a)gmail.com Servo directionServo; void setup() { pinMode(2, INPUT); directionServo.attach(3); } void loop() { int t, a; t = pulseIn(2, HIGH); a = map(t, 1000, 2000, 65, 115); directionServo.write(a); }
1,540 total views, no views today
在四轴飞行器上除了要有陀螺仪外,还要有个重要的传感器就是重力传感器。由于它们各自的误差,若使用单一的传感器会造成严重的精读问题,使飞行器丧失稳定性。所以要用两个传感器进行相互矫正。
现在重力传感器应用非常广,目前iphone等智能手机上都有重力传感器,包括笔者的一台山寨手机上都有重力传感器。
这次就是要用Android来读取重力传感器的数据。这个重力传感器模块是从淘宝购买的,模块非常简单,自己够买芯片来焊接也不成问题。根据它的datasheet,就能够知道如何使用这款重力加速度模块了。下面就进行详细的介绍
这个模块使用的芯片型号是MMA7260Q,(datasheet下载[PDF,229KB]),测试中的电路就是下面图片中的样子
控制的目标是通过重力传感器的数据来控制舵机的转动。但是发现会有少量的抖动,于是在程序中加入了一个简单的滤波器,阶数没有仔细调,但是基本上能够进行控制了。
http://v.youku.com/v_show/id_XMjYzNjIyODIw.html
下面是芯片的特写
1,442 total views, no views today
今天拿到了四轴飞行器的一个重要部件,就是陀螺仪。^_^ 下面这张图上的就是了,这是一个三轴陀螺仪,seeedstudio GROVE套装的一个部件。
这个陀螺仪使用ITG3200芯片,可以直接使用了I2C接口连接到Arduino上面。默认的地址是0x68,但是可以修改成0x69,只要将板子上的JP1连起来就可以修改。接口四个针脚的定义就像下面这张图中所画的。
是的。。你没看错,他们用红色作为地线 -_-b
...continue reading
1,598 total views, no views today
今天看到一台嵌入之梦的小车,但是上电之后发了疯似的乱跑,所以刷之。但新车间却没有网络,没办法,自己一点一点试。。结果如下
CT1 接受pwm,控制速度 CT2 前进控制信号,高电位转动 CT3 后退控制信号,高电位转动
但是由于小车上的UNO与我的Ubuntu连接有问题,貌似只有Windows是好的,Mac OS有时也会出问题。所以最后车上改用了Mega 1280。
但是又发现一个问题,就是Arduino使用USB供电的时候很正常,然而,使用车上接出来的5V电源时,程序就会混乱,完全没有一点规律。猜测可能是由于电机转动导致整个系统的电压下降,无法提供足够的电压给Arduino的板子上。这大概也是之前uno不会发疯的原因。没办法,在小车上再接一块9V层叠式电池,作为Arduino的电源。最后终于行了。
后面程序的作用是往前走,遇到前方有物体是后退,打弯,然后继续往前,一个简单的壁障程序。没有用到速度控制。下面就是这个小车最后的样子,手机拍的,将就看吧
1,570 total views, no views today
我想通过改造一辆遥控小车,造出个自主移动机器人,遥控车就是下面这张图片中的车。
并且希望通过大家的智慧,把这个机器人做好,比如说,想在上面放一个无线摄像头;比如说,在上面放一个机械手臂;比如说,在这上面装一个超声测距模块……我将集中大家的智慧,集合到这个小车上面,^_^
http://v.youku.com/v_show/id_XMjYyMzQ4OTYw.html
如果你有想法,请告诉我
1,351 total views, no views today
经过了几个星期的折腾,四轴飞行器电机控制方式终于有所突破,先上图 哈哈
其实这个电路十分简单,就是两个按钮接入Arduino,然后Arduino输出PWM信号到电调,电调再输出电流到电机,从而就行成了按钮控制电机的一个装置。
不过,在完成这样一个小小的系统也经历了很多挫折。
...continue reading
2,051 total views, no views today