在建造了许多室内机器人后,决定建造一个能够在崎岖地形中行驶的户外机器人。称之为“M1-Robot”。
M1型机器人电机很容易驱动四台直流电机与Arduino一起驱动,所以它是任何机器人项目的完美之选,这可能成为一个更强大的机器人的神奇心脏,所以从头开始设计越野四轮驱动M1。
它不仅仅是一辆遥控车,它可以按照一套指令编程为自动驾驶,甚至可以通过远程计算机进行控制,它可以通过游戏控制器和自定义操纵杆(如遥控车)使用。
第1步:设计
设计自己的产品或原型很有趣,但当你决定以实时尺寸规模制作它时会变得更加复杂。因此,该项目最终选择了Google Sketch-up 2017作为功能强大且简单易用的设计工具,它允许您将模型的蓝图导出到激光切割机甚至3D打印机。
头三个星期用来设计和建造机器人的船体。至于材料,可以选择一张一张3毫米木板。由于时间的限制,机器人的最终布线不太好,包括将整个路障塞入船体。
该项目的机器人的名字是M1Rover。因为计划使用M2,M3等序列名开发它的版本。它在套件中设计,你所要做的就是用一些螺丝装配它。
第2步:组件和功能
- 运行时间长达三个小时;
- 专为Arduino Uno,Mega和Nano设计;
- 5V-9V DC工作电压;
- 3毫米厚的木质底盘;
- 直径68mm的车轮L298N双H桥电机/步进电机;
- 9v电池为直流电机供电;
- 9v电池为Arduino供电;
- LED灯7用于后部和前部;
- HC-06蓝牙模块;
- Arduino传感器屏蔽v5.0;
- 超声波换能器HC SR04;
第3步:电机控制器
H-Bridge通常用于控制电机的速度和方向,但也可用于其他项目,例如驱动某些照明项目(如高功率LED阵列)的亮度。
- 确保将所有理由捆绑在一起; Arduino,电源和电机控制器。
- 如果您不想控制PWM功能,则不需要PWM引脚。
第4步:组装机箱
机箱已经使用激光切割机切割成几个部分,正如之前提到的那样,模型是在易于组装的套件中创建的,所以您所要做的就是按照下面的说明操作。
考虑到设计也很重要,当涉及到RC车时,它应该包含前灯和后灯。在M1-Robot的前面放置了4个白色LED,每个LED连接到220欧姆电阻,而在后面放了2个红色LED,每个LED有220欧姆电阻。这些LED可以由同一应用程序控制。
第5步:电路
电路有点棘手,因为当您决定同时控制许多电子部件时,您应该注意每个部件的顺序。
- ArduinoSensor Shield 5.0;
- ArduinoUno R3 L298N双H桥电机/步进电机;
- 9v电池为直流电机供电;
- LED灯7(2后)和(4前);
- HC-06蓝牙模块;
- 超声波换能器HC SR04;
- 伺服电机9g;
- 有源蜂鸣器;
- 4个带轮子的直流电机;
第6步:软件
在编写M1-Robot的代码时考虑了大量的事情,使用GUI软件,您可以获得有关机器人状态的更多信息。
实际上代码分为两部分:
- Arduino代码
Arduino代码与任何类型的控制器兼容,因为所有电子部件都经过编程以通过串口命令工作,因此您可以使用蓝牙模块发送器/接收器,PC,手机。
- C#windows应用程序(附截图)
第7步:包装
- 起动机
这款M1rover套件包含基本组件,而顶板允许轻松安装任何传感,操纵或计算机硬件。只需将传感器连接到板载和Rover电源即可开始使用。
- EXPLORER
Explorer软件包支持基本的室内和室外自主功能,并且我使用通过IP地址连接到互联网的移动电话凸轮的IP摄像机。
- MAPPING
Explorer包可以在车辆室外时进行基本的GPS跟踪,当您实时观察坐标路径时非常酷。
- MANIPULATION
使用机器人手臂和2个手指50mm Gripper与世界互动。
重要提示:
并非所有伺服系统都具有完整的180度旋转。很多人没有。您可以编写测试以确定机械限制的位置。使用servo.writeMicroseconds而不是servo.write,因为它允许你使用1000-2000作为基本范围。许多伺服系统将支持600到2400之外的范围。
因此,尝试不同的值,看看你在哪里得到的嗡嗡声告诉你已达到极限。然后在你写作时只能保持在这些限度内。使用servo.attach(pin,min,max)时可以设置这些限制。
应该说,如果你想,你可以设置附加的最小和最大微秒,然后只需使用servo.write。它使用map()将您传递的0-180度值更改为微秒值。
如果你把它保持在最后一个停止位置很快就会出现,它正在拉动大电流并迅速升温,通过这种方式加载它可以很容易地“烹饪”伺服电机任何时间长度。
找到真正的移动范围,并确保代码不会尝试将其推到终点站点,constrain()Arduino函数对此有用:
servo.write(constrain(angle,10,160)); //约束10..160范围内的角度。