话说2018年春节的时候,3d打印了一个机械臂。
还是老样子,在纸上先画一个机械臂大概的形状
在CAD中画出具体参数,看看用什么养的配置比较合适,作业半径会是多少。
确定参数就可以开始做三维建模。
一步一步开始搭建机械臂的每个部分。
...continue reading
4,093 total views, 2 views today
话说2018年春节的时候,3d打印了一个机械臂。
还是老样子,在纸上先画一个机械臂大概的形状
在CAD中画出具体参数,看看用什么养的配置比较合适,作业半径会是多少。
确定参数就可以开始做三维建模。
一步一步开始搭建机械臂的每个部分。
...continue reading
4,093 total views, 2 views today
为了造一套门禁系统,淘宝上搞来了一套RFID读卡器。
RC522,看上去是比较多的型号,哪家店都买得到。
5,440 total views, 1 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
2,030 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,730 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,599 total views, no views today
在四轴飞行器上除了要有陀螺仪外,还要有个重要的传感器就是重力传感器。由于它们各自的误差,若使用单一的传感器会造成严重的精读问题,使飞行器丧失稳定性。所以要用两个传感器进行相互矫正。
现在重力传感器应用非常广,目前iphone等智能手机上都有重力传感器,包括笔者的一台山寨手机上都有重力传感器。
这次就是要用Android来读取重力传感器的数据。这个重力传感器模块是从淘宝购买的,模块非常简单,自己够买芯片来焊接也不成问题。根据它的datasheet,就能够知道如何使用这款重力加速度模块了。下面就进行详细的介绍
这个模块使用的芯片型号是MMA7260Q,(datasheet下载[PDF,229KB]),测试中的电路就是下面图片中的样子
控制的目标是通过重力传感器的数据来控制舵机的转动。但是发现会有少量的抖动,于是在程序中加入了一个简单的滤波器,阶数没有仔细调,但是基本上能够进行控制了。
http://v.youku.com/v_show/id_XMjYzNjIyODIw.html
下面是芯片的特写
1,525 total views, 1 views today
今天拿到了四轴飞行器的一个重要部件,就是陀螺仪。^_^ 下面这张图上的就是了,这是一个三轴陀螺仪,seeedstudio GROVE套装的一个部件。
这个陀螺仪使用ITG3200芯片,可以直接使用了I2C接口连接到Arduino上面。默认的地址是0x68,但是可以修改成0x69,只要将板子上的JP1连起来就可以修改。接口四个针脚的定义就像下面这张图中所画的。
是的。。你没看错,他们用红色作为地线 -_-b
...continue reading
1,654 total views, no views today
今天看到一台嵌入之梦的小车,但是上电之后发了疯似的乱跑,所以刷之。但新车间却没有网络,没办法,自己一点一点试。。结果如下
CT1 接受pwm,控制速度 CT2 前进控制信号,高电位转动 CT3 后退控制信号,高电位转动
但是由于小车上的UNO与我的Ubuntu连接有问题,貌似只有Windows是好的,Mac OS有时也会出问题。所以最后车上改用了Mega 1280。
但是又发现一个问题,就是Arduino使用USB供电的时候很正常,然而,使用车上接出来的5V电源时,程序就会混乱,完全没有一点规律。猜测可能是由于电机转动导致整个系统的电压下降,无法提供足够的电压给Arduino的板子上。这大概也是之前uno不会发疯的原因。没办法,在小车上再接一块9V层叠式电池,作为Arduino的电源。最后终于行了。
后面程序的作用是往前走,遇到前方有物体是后退,打弯,然后继续往前,一个简单的壁障程序。没有用到速度控制。下面就是这个小车最后的样子,手机拍的,将就看吧
1,683 total views, no views today
我想通过改造一辆遥控小车,造出个自主移动机器人,遥控车就是下面这张图片中的车。
并且希望通过大家的智慧,把这个机器人做好,比如说,想在上面放一个无线摄像头;比如说,在上面放一个机械手臂;比如说,在这上面装一个超声测距模块……我将集中大家的智慧,集合到这个小车上面,^_^
http://v.youku.com/v_show/id_XMjYyMzQ4OTYw.html
如果你有想法,请告诉我
1,448 total views, no views today
经过了几个星期的折腾,四轴飞行器电机控制方式终于有所突破,先上图 哈哈
其实这个电路十分简单,就是两个按钮接入Arduino,然后Arduino输出PWM信号到电调,电调再输出电流到电机,从而就行成了按钮控制电机的一个装置。
不过,在完成这样一个小小的系统也经历了很多挫折。
...continue reading
2,172 total views, no views today