小流浪者
组件和用品
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 2 | ||||
| × | 2 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
必要的工具和机器
| ||||
|
应用和在线服务
|
关于这个项目
背景
我的侄子(9 岁)和我的侄女(7 岁)在看到我不久前制作的避障机器人的视频时完全疯了。
遗憾的是,它的教程永远不会出现,因为它早于我的硬盘驱动器即将耗尽以及我发现备份和 DropBox、GitHub 等的好处。 :)
所以我决定看看我是否能想出一些既(有点)教育性又有趣的东西。我尽可能地简化了我的玩具并想出了这个小漫游车。
底盘是一个盒子,最初装有蟹棒。事实证明,大小刚刚好。 (感谢爸爸用装满箱子的方式咀嚼那些:D)人造黄油容器也可能是合适的尺寸。
作为免责声明,我将在这里描述我们如何制造这些机器人,并且我们让孩子们自己完成几乎所有的工作。无论如何,我不建议这样做。作为负责任的父母/监护人/阿姨/叔叔/保姆……由您决定是否可以信任每个有问题的孩子来完成各种任务。尽管这不是真正必要的,但孩子们在对机器人工作时还是被要求戴上防护眼镜。我们使用的盒子是由非常柔软的塑料制成的,所以我让我的侄子和侄女在简要介绍了将地毯刀指向自己或他们自己的四肢的危险之后自己切入那些盒子。为了为 LED 钻孔,我们使用了一个小型无绳电动螺丝刀,限制潜在伤害。
我很高兴地报告,我待命的医疗包仍未使用。 :)
但重申一遍,你是成年人了!
电路
我使电路变得比我通过连接两个伺服器的方式更复杂一些。
<人物>对于孩子们……我一直这么说,但“孩子们”包括我姐姐(35 岁)和我妈妈(65 岁),他们和实际的孩子。 :)
<人物> <人物> 图>因此,对于我的观众,我将图像打印在 A4 纸上,试图使面包板的比例与现实世界保持 1:1 的比例,并为他们提供了正确颜色和长度的所有跳线。
电路组装好后,只需将程序加载到 Arduino 上。如果需要,我在代码中加入了注释以帮助您稍微调整代码。如果一切连接正确,舵机应该开始转动并且 LED 会闪烁。如果您将手放在传感器前面,一个伺服伺服器将停止,另一个会短暂地向另一个方向旋转。
一切就绪!
组装
是时候带你去“底盘”并在上面打洞了。
在前面,标记传感器的位置并切出“眼”孔。
在侧面,很好地测量您希望轮子移动的位置并在侧面切一个洞,在盒子底部的边缘,足够大的伺服器可以安装但足够小,因此安装支架不会移动通过。
使用小钻头为 LED 钻出 2 个小孔。
在盒子底部,向后,拧入脚轮(或热胶)。
<人物> <人物> 图> <人物> 图>现在您已准备好将所有物品放入盒子中,并用热胶将这些东西固定到位。
胶水凝固后,将轮子安装到伺服系统上。
装饰盒子! (并在上面贴照片!那太棒了!)
<人物>装上电池,看着小车在房间里随意走动,直到电池用完。或者你厌倦了噪音。否则狗会抓住它! :D
代码
- 小流浪
LittleRoverArduino
这是 4 针超声波传感器的代码版本#include/*如果您的传感器只有 3 针,请取消注释第 6 行并注释掉第 7 行*///int distanceR =A0; //触发pinint距离=6; //触发pinint pingDelay =10; //超声波传感器的脉冲长度int distanceR =A0; //Echo pinint led1 =8, led2 =9; //LEDsServo leftPower;Servo rightPower;unsigned long flashTime;无符号长nextSensorTime;浮动障碍Dist =0.0f;void setup() { //Serial.begin(115200); leftPower.attach(3); rightPower.attach(5); leftPower.write(90); rightPower.write(90); pinMode(led1,输出); pinMode(led2,输出);延迟(1000);}void loop(){ LEDs(); /* 这通过将检查限制为每秒 5 次来防止传感器过快耗尽电池您可以增加此数量以减少检查的频率,但随后它可能会撞到墙上... */ if(millis() - nextSensorTime> 200){ nextSensorTime =millis(); /* 我在这里做了 2 个读数,因为有时传感器会感到困惑并且什么都不返回... */ float reading1 =TakeReading();延迟(100);浮动阅读2 =TakeReading(); Serial.println(reading1); Serial.println(reading2); //然后我们取最远的距离为 barrierDist 障碍Dist =reading1>=reading2 ?阅读1:阅读2; //如果距离小于10cm,则转弯,否则,直行。 if(obstacleDist <10.0f){ //Serial.println("turn");转动(); }else{ //Serial.println("forward");向前(); } }}void LEDs(){ if(millis() - flashTime> 1000) flashTime =millis(); if(millis() - flashTime <500){ digitalWrite(led1, LOW);数字写入(led2,高); }else if(millis() - flashTime> 500){ digitalWrite(led1, HIGH);数字写入(led2,低); }}void forward(){ /* 如果你发现你的机器人在倒退,交换 135 和 45。 */ leftPower.write(135); rightPower.write(45);}void turn(){ /* 如果你想让你的机器人转向另一个方向,取消下面 92-93 行的注释并注释掉 95-96 */ //leftPower.write(90); //rightPower.write(135); leftPower.write(45); rightPower.write(90);延迟(350);}浮动TakeReading(){无符号长回声=0;浮动结果 =0.0f; pinMode(距离,输出);数字写入(距离,低);延迟微秒(2);数字写入(距离,高);延迟微秒(pingDelay);数字写入(距离,低); pinMode(距离R,输入);数字写入(距离R,高);回声 =脉冲输入(距离R,高,38000);结果=回声/58.138;返回结果;}
示意图
littlerover_87IypZOgwm.fzz制造工艺