一、制作基于Arduino的自平衡踏板车
制作时间:前后约3星期
制作难度:★★★★☆
GEEK指数:★★★☆☆
双向电梯
1 自平衡踏板车1.0版本
1.1 先展示一些小细节
1.2 元件
1.3 工具
1.4 固定框和马达
1.5 电路
1.6 代码
2 改进版自平衡踏板车(2.0版本)
2.1 建造细节
2.2 元件
2.3 工具
2.4 固定框和马达
2.5 电路
2.6 代码
2.7 DIYer签到处
1 自平衡踏板车1.0版本
前段时间,我看到有人DIY了一只平衡滑板,觉得自己也可以做一个类似的平衡平台来测试一下技术。所以我专门去购买了儿童踏板车的一些后端部件(里面有马达和驱动轮),还有XenonJohn建议的电子元件。
我们可以用和平衡滑板相同的方法在平衡组件上搭一块站立台板,但轮子要分得更开,台板还要旋转90度。
儿童踏板车的后端部件非常小,但速度够快,易于测试。
另外,注意不要有太大的冲撞!比如我们就只少了腿上几块皮,还在墙上戳了个小洞洞。
1.1 先展示一些小细节
现在,我们成功买到了儿童踏板车一些后端部件(马达和驱动轮)和XenonJohn推荐的的电子元件,还弄到了一些三夹板、平面金属板和钢管。
我们将所有东西焊在一起,做出一块可供站立的区域,还有前方凸出的握把。马达要用螺丝钉固定在两侧,电路则固定在前面。再把电池式手电筒拆成两半,装到一只马达上面当做电池盒用,这样电工们就得换个新的手电筒了。
我们又找了一块旧的胶合板制作站立台板,现在它看上去稍微有点踏板车的雏形了。
我颠来倒去几次,终于搞对了马达的极性。过程尽管艰难,但马达第一次跑起来效果就很不错。马达的额定电压是24V,我们用的电池只有18V,所以需要调整一下力矩和功率值,调整之后效果显著,马达跑得很好。
1.2 元件
这次DIY,你需要用到以下元件(网购较方便):
○ Arduino UNO——看看手边有没有,没有可以网购
○ Sabertooth 2x52马达控制器
○ 5自由度的加速度计
○ 2只从儿童踏板车上拆下来的后端部件,或者分别购买马达和驱动轮
○ 电池——密封铅酸电池物美价廉,动力钻也可以买得很便宜。如果锂电池是你的菜,锂电池也不错。
○ 用于加速度计的屏蔽多芯电缆,用于马达的大功率电缆
○ 安全操作开关
○ 控制转弯的拨动开关
○ 调整平衡位置的拨动开关
○ Arduino直流接口
○ 匹配Arduino的DIL管脚
○ 双面胶
○ 螺丝钉
1.3 工具
除了正常工具之外,最好请有焊接机的人帮你焊接固定框。
需要用到的其他工具:
● 钻子和钻头
● 烙铁和焊锡
● 剪线钳和剥皮钳
● 热缩材料和热气枪
1.4 固定框和马达
为了制作固定框,我们在每一侧都用了几块三夹板、两片金属盘,把踏板车的马达部件固定住。
切割两块三夹板,宽度适合双脚踩踏就行。
再在金属板上钻几个洞,好匹配踏板车驱动轮部件上的螺栓孔,再把金属盘焊接到三夹板搭建的台板上面。
我们还在前端装了一根立杆,在立杆上焊了T型把手,方便双手握把。又在直立的把手和第二块三夹板上之间加了一块三角板加强固定。
现在可以把轮子拧上去了。
1.5 电路
你可以看到,这儿并没有很多电子元件,只有Arduino、IMU(惯性测量单元)、马达驱动和一堆开关。
开关和IMU的接线都必须是屏蔽线,除非IMU非常靠近Arduino。IMU应该尽量装在台板的中央或前面,比如我们就把IMU固定在了前端的盒子里。
从图中你可以看到,我们其实把所有东西都固定在了那个盒子里,骑踏板车的时候只能操作切断开关,左右驾驶和倾斜控制。
另外,电池被安装在了马达的顶部。
1.6 代码
代码和XenonJohns写的基本上一样,只是额外调整了功率值和力矩值,因为我们在用18V的电池跑24V的马达。
在代码的开始处,我们定义了2个负责调节功率和力矩的变量。
2 改进版自平衡踏板车(2.0版本)
在制作了第一版自平衡踏板车作为测试平台之后,我们觉得它还挺酷的,所以决定再制作一版。
这次我们需要添加一些小特色:
1.2只14.4V的锂电池 2.马达和车轮组件的固定框 3.高度可调节的把手 4.性能优异的CNC(电脑数控)平台 5.花纹钢板
所以,这一版的制作材料基本和上一版的踏板车完全相同。
2.1 建造细节
首先,我们对第一个装置中存在的争论点进行了讨论,在这个版本中达成了一致。
最大的问题是儿童踏板车的后端部件是廉价的压盘,超重时会弯曲变形。所以我们用激光切割了一块金属盘来代替固定框固定马达和轮子。固定框用25mm的钢管制成,还进行了增强,好让它支撑更多重量。
前把手做成了高度可调节的,这样小矮个也可以骑了。
由于市面上没有比较便宜的、用我们现在用的这种电池的手电筒,只好自己做了个电池盒。
然后加上了花纹钢板,看起来更专业一点。
2.2 元件
除了电池之外,其他的元件都和上一版相同。
你需要用到:
● Arduino UNO——看看手边有没有,没有可以网购
● Sabertooth 2x52马达控制器
● 5自由度的加速度计
● 2个从儿童踏板车上拆下来的后端部件,或者分别购买马达和轮子
● 电池——密封铅酸电池物美价廉,动力钻也可以买得很便宜。如果锂电池是你的菜,锂电池也不错。
● 用于加速度计的屏蔽多芯电缆,用于马达的大功率电缆
● 安全操作开关
● 控制转弯的拨动开关
● 调整平衡位置的拨动开关
● Arduino直流接口
● 匹配Arduino的DIL管脚
● 双面胶
● 螺丝钉
2.3 工具
除了正常工具之外,最好请有焊接机的人帮你焊接固定框。
需要用到的其他工具:
● 钻子和钻头
● 烙铁和焊锡
● 剪线钳和剥皮钳
● 热缩材料和热气枪
2.4 固定框和马达
固定框做得非常牢固。我们为“轮子+马达”的组件使用了25mm的RHS方管和激光切割的金属盘,所以它不会再像上一个固定框那样扭曲了。
前把手做成可调节式,我们还在顶部加了漂亮的握把。
2.5 电路
就像你在电路图中看到的那样,这次的电路非常简单,和我们制作的前一个版本完全一样。
开关和IMU的接线都必须是屏蔽线,除非IMU非常靠近Arduino。IMU应该尽量装在台板的中央或前面,比如我们就把IMU固定在了前端的盒子里。
从图中你可以看到,我们其实把所有东西都固定在了那个盒子里,骑踏板车的时候只能操作切断开关,左右驾驶和倾斜控制。
另外,电池被安装在了马达的顶部。
2.6 代码
二、制作基于Arduino的自动避障机器龟
制作时间:一天
制作难度:★★★☆☆
GEEK指数:★★★☆☆
在本教程中我将一步步地教你如何利用板载Arduino UNO微控制器制作自动避让机器人乌龟Duino(TurtleDuino)。我用五金里买的材料,以及网上买的电子器件设计了这个乌龟Duino。
双向电梯
1 准备材料
2 切割底座
3 乌龟的脖子
4 制作乌龟的脑袋
5 制作乌龟的脑袋,第2部分
6 布线
7 Arduino设计和莫霍克发型
8 DIYer签到处
1 准备材料
购物清单:
Arduino UNO(Sparkfun.com)
2个大型连续转动伺服电机(sparkfun ROB-09347)
1个中型180度转动伺服电机(sparkfun ROB-10333)
面包板(sparkfun PRD-09567)
跳线(sparkfun PRD-11026)
SPST拨动开关(sparkfun COM-09276)
22号安装线(sparkfun PRD-08023)
伺服电器扩展(sparkfun ROB-08738)
Arduino的9伏电池插口(sparkfun PRY-09518)
9伏电池仓(可选)
9伏电池
4节AA电池
分离长插头(sparkfun PRT-10158)
旧的遥控汽车轮子
2个大型伺服电机支架
五金店采购:
1/2英寸(1.27厘米)45度PVC管(乌龟的脖子)(在电气区)
1/2英寸(1.27厘米)PVC单孔导管扣带,或者导管夹(用于支撑乌龟的脖子)(在区)
2英寸(5.08厘米)进线口帽(乌龟的甲壳)(在电气区)
1英寸(2.54厘米)进线口帽(乌龟的脑袋)(在电气区)
液态电工胶布(在电气区)
热熔胶枪套件(在工具区)
焊接套件(在工具区)
五金部分:
3/8英寸(0.95厘米)×6×24英寸(61厘米)手工板(用于制作乌龟的底座)
#6-32×1英寸(2.54厘米)机械螺钉(大约20颗)
#6平垫圈(小包装)
#6×1/2英寸(1.27厘米)金属板螺钉(用于将脖子的角架、前轮,和甲壳连接在底座上)
#4×1/2英寸(1.27厘米)金属板螺钉(用于将伺服电机和arduino连接在底座上)(小包装)
#6螺母(小包装)、4个#6-32×2英寸(5.08厘米)长螺栓(用于将脑袋连接在脖子上,和将ping伺服电机连接在脑袋上)
90度角角板
2英寸(5.08厘米)油漆刷(用于绘制超酷的莫霍克发型)(在油漆区)
2 切割底座
在这一步中我们要切割底座、安装后部的伺服电机、前轮和后轮,以及4节AA电池的电池仓。
将乌龟外壳的底部零件取下并拆开,然后将外壳放在一块1/2英寸(1.27厘米)×6×4英尺(1.22米)白杨木上,用3英寸(7.62厘米)铅笔(之所以是3英寸铅笔,是因为空间比较狭窄)将甲壳的内径勾勒出来。在甲壳前面留出大约2英寸(5.08厘米)的底座,然后将勾勒出来的部分切割下来。(参见图片)
现在,让我们用两个伺服电机,或者你自己做的电机,用#4金属板螺钉(一定要用适合连续转动的螺钉)将后部伺服电机安装在底座背部靠近外侧边缘的位置,这样一来,露在外面的就只有伺服电机的转轴了。
在底座的2个伺服电机之间钻一个1/4英寸(0.635厘米)的通孔,这个孔是用来穿电机和4节AA电池的电池仓的正负极导线,将它们连接在面包板上。我用2个小型乐高零件将前轮安装上去,并用#6×1/2英寸(1.27厘米)金属板螺钉将它们拧在了底座上。我用热熔胶将后轮固定在伺服电机长长的圆形机臂上,然后用螺钉将它们固定在伺服电机转轴上。
最后拧上4节AA电池的电池仓的螺钉。[忘了将导线穿过1/4英寸(0.635厘米)的孔)]。
3 乌龟的脖子
现在我们要将脖子连接在底座上了。拿起1/2英寸(1.27厘米)45度PVC管,将较宽的一头切掉。将PVC管角架用螺钉固定在底座前面的中间,让角架大约距离前边缘有两英寸(5.08厘米)距离。
参见图片,将管子的另一头以某一角度切割,然后像图片中那样,在管子的上半部分末端钻一个3/16英寸(0.48厘米)的孔(这些孔将被用于将90度角角板安装在脖子上,来支撑乌龟的脑袋。这个孔必须对准了以后再钻,从脖子的左侧一直到右侧。)
4 制作乌龟的脑袋
对我来说,制作脑袋是整个项目中最难的一步了。
所以请跟我一起来挑战难关,我会尽可能让你顺利通过的。
拿起1英寸(2.54厘米)的进线口帽,将内部的零件都取出并拆掉。将ping传感器的圆柱体面对面地放在脑袋上,然后勾勒出圆柱体的轮廓,这样你就知道要在脑袋前面如何切割了。参见图片。(我建议你使用dremel工具)
在你为ping传感器切割好开口之后,将它放进脑袋里,从脑袋前面伸出1/8英寸(0.3厘米)的长度。在脑袋的前面两侧各钻一个3/16英寸(0.48厘米)的孔,位置就在ping传感器的安装孔上方。接着,将ping传感器通过两个小的扣环安装在脑袋上。参见图片了解细节。
然后,将伺服电机放进脑袋里,从内侧将脑袋顶部安装孔的位置标记下来。用3/16钻头将两个伺服电机安装孔钻好,然后用2个6-32×2英寸(5.08厘米)螺栓和2个6-32螺母将伺服电机安装好。
5 制作乌龟的脑袋,第2部分
拿出90度角角板,用伺服电机附带的两颗螺钉和两个套管将伺服电机的中型机臂安装好。参见图片了解细节。将机臂用螺钉安装在伺服电机上。将ping传感器和伺服电机的导线穿过乌龟的脖子,连接到面包板上。
但是,首先要将伺服电机的扩展件安装在伺服电机和ping传感器上,让它们能够接到面包板。现在,将角板安装在机臂上,然后用一对6-32×2英寸(5.08厘米)螺栓和螺母将它安装在乌龟的脖子上。
6 布线
首先将面包板背面的粘合剂剥掉,将它放在底座的后部,位于后部伺服电机的上方。测量并切割一条比arduino长1/8英寸(0.32厘米)的木板。这块板将会用#4×1/2英寸(1.27厘米)的金属板螺钉固定在乌龟脑袋支架的顶部。
将Arduino板用#4×1/2英寸(1.27厘米)金属板螺钉固定在这块板上。现在,就该排线了,用分离插头的管脚将两个后部伺服电机、ping伺服电机和ping传感器和面包板接起来(从插头管脚中去除4个3管脚的部分,连接伺服电机)。
用安装线将后部电机的电源(4节AA电池的电池仓)负极(黑色)和正极(红色)连接在面包板的轨道上,黑色连蓝色轨道,红色则连面包板的红色轨道。
将左右伺服电机的红色引线接在红色轨道上,而黑色引线接在面包板的蓝色轨道上。
左边电机的白色引线接在Arduino的11号D管脚上
右边电机的白色引线接在Arduino的10好D管脚上
Ping电机:棕色是负极(接地)
橙色是正极(电源)
黄色是信号线
将棕色引线接在面包板的蓝色轨道上,橙色引线接在面包板的红色轨道上。
黄线则接在Arduino的6号D管脚上。
Ping传感器:将ping传感器上标有GRN的管脚接在Arduino的GRN端。
将ping传感器上标有5v的管脚接在Arduino的5v端。
最后将标有SIG的管脚接在Arduino的7号D管脚上。
安装9伏电池和电池仓。
现在,拿出SPST拨动开关,在每头焊接一条8英寸(20.32厘米)的引线。拿出9伏插口,将红线剪掉一般,然后将开关的一条引线焊接在插口的一头,开关的另一条引线焊接在插口的另一头。
在甲壳后部较低的位置钻一个1/4英尺(0.635厘米)的孔,安装开关。
7 Arduino设计和莫霍克发型
莫霍克发型:拿出3英寸(7.62厘米)油漆刷和强力胶,将胶水大量涂抹在刷子末端1/4英寸(0.635厘米)的范围内。两边都浸泡好胶水(记得戴手套)然后等待20分钟让它晾干。在干了以后,剪下1/2英寸(1.27厘米)的刷毛,拿去用PVC接合剂或者任何其他的塑料胶水将它粘在脑袋上。
将Arduino插入计算机中,下载下面的设计程序。好了,恭喜你已经完成了乌龟Duino的制作。
乌龟Duino自动避让机器人 代码部分
// 乌龟Duino自动避让机器人By:RobDavinci
#include //include Servo library
const int RBackward = 180;
const int LForward = RBackward;
const int LBackward = RForward;
const int RNeutral = 90;
const int LNeutral = 90; //电机速度常数
const int pingPin = 7;
const int irPin = 0; //锐利的红外传感器管脚
const int dangerThresh = 10; //障碍物的阈值(单位厘米)
int leftDistance, rightDistance; //两侧距离
Servo panMotor;
Servo leftMotor;
Servo rightMotor; //声明电机
long duration; //接收PING)))信号所需的时间
void setup()
{
rightMotor.attach(11);
leftMotor.attach(10);
panMotor.attach(6); //将电机安装在适当管脚上
panMotor.write(90); //将PING)))焊盘设为中央
}
void loop()
{
int distanceFwd = ping();
if (distanceFwd》dangerThresh) //如果无障碍
{
leftMotor.write(LForward);
rightMotor.write(RForward); //前进
}
else //如果有障碍
{
leftMotor.write(LNeutral);
rightMotor.write(RNeutral);
panMotor.write(0);
delay(500);
rightDistance = ping(); //扫描右侧
delay(500);
panMotor.write(180);
delay(700);
leftDistance = ping(); //扫描左侧
delay(500);
panMotor.write(90); //回到中央
delay(100);
compareDistance();
}
}
void compareDistance()
{
if (leftDistance》rightDistance) //如果左侧障碍较少
{
leftMotor.write(LBackward);
rightMotor.write(RForward); //向左转
delay(2000);
}
else if (rightDistance》leftDistance) //如果右侧障碍较少
{
leftMotor.write(LForward);
rightMotor.write(RBackward); //向右转
delay(2000);
}
else //如果障碍同样多
{
leftMotor.write(LForward);
rightMotor.write(RBackward); //转180度
delay(2000);
}
}
long ping()
{
//发出PING)))信号脉冲
pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin, LOW);
//获取接收回声所需的时间
pinMode(pingPin, INPUT);
duration = pulseIn(pingPin, HIGH);
//将持续时间转换为距离
return duration / 29 / 2;
}
在DIY制作Arduino机器人过程中,小编希望这篇教程让你能体验到和我一样的快乐。
-
开源硬件
+关注
关注
8文章
204浏览量
29716 -
Arduino
+关注
关注
187文章
6461浏览量
186543 -
智能硬件
+关注
关注
205文章
2331浏览量
107393
发布评论请先 登录
相关推荐
评论