探路者
组件和用品
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 3 | ||||
| × | 1 | ||||
| × | 20 |
必要的工具和机器
| ||||
|
应用和在线服务
| ||||
|
关于这个项目
概要
该论文展示了一种避障机器人的设计,该机器人具有在其行驶过程中检测物体并通过做出正确决定在这些物体周围导航的能力。它展示了一个基于 Arduino UNO 和 Adafruit Motor Shield 的机器人单元,其中代码是用 Arduino IDE 软件编写的。避障是开发移动机器人的重要关键因素之一。放置在微伺服电机上的超声波距离传感器的实施为检测周围物体产生了更高的精度。这种设计的机器人不同于其他现有机器人,因为它集成了磁性蜂鸣器和 CC RGB 漫射 LED,通过它实现了在 4 种情况下指示物体检测过程和控制直流齿轮电机速度的能力。作为一个自主机器人,执行了在不产生任何影响的情况下在未知条件下进行机动的潜力。此外,通过提高不同环境中的物体检测能力,这种设计的技术可以用于军事行动和人道主义援助。
多媒体 图> 图> 图> 图> 图>
解读
块代码中添加的包含库如下,
AFMotor.h
Servo.h
内联代码中分配的已定义连接如下,
定义BuzzPIN A0
定义TrigPIN A1
定义EchoPIN A2
定义LEDBPIN A3
定义LEDGPIN A4
定义LEDRPIN A5
定义DCMROFF 25
机器人架构中提供的预期程序如下,
- 能够在预定距离范围内检测其路径上的物体。
- 寻找相对于开放方向的新路径。
- 指示物体检测并控制其速度。
所有操作都将自主执行,无需任何外部控制。
该项目展示了设计移动机器人的基本细节,该机器人具有避开障碍物、自主导航和通过在 4 种不同情况下打开 CC RGB 漫射 LED 的选择性颜色来指示直流齿轮电机的运动的能力。通过检测机器人前方180度范围内的障碍物,所设计的机器人在光声指示、电机速度控制和激烈机动技术方面与其他避障机器人相比具有差异性;通过适当的编程来组合这是一项艰巨的任务。该机器人在 Arduino UNO Rev3 平台上构建,借助 Arduino IDE v1.8.5 软件集成正确的汇编代码以获得必要的功能。这种集成使机器人能够在没有人工干预的情况下以相当高的精度执行所需的操作。通过结合广播摄像机和无线技术的进一步发展,该机器人可以有效地用于军事行动以检测不同类型的活动,而其基本单元可用于帮助视觉或听觉受损的人类通知周围物体的位置。
Youth Zest 项目展示
代码
- 计划
程序Arduino
组装程序,用于相应地设置这台自主机器。#include// 为 Arduino 套件库添加 Adafruit 电机扩展板。#include // 添加伺服电机库。#define BuzzPIN A0 // 将 PIN A0 分配为 BuzzPIN(将 Arduino UNO“A0”PIN 与蜂鸣器“+”PIN 连接)。#define TrigPIN A1 // 将 PIN A1 分配为 TrigPIN(将 Arduino UNO“A1”PIN 与超声波声纳传感器“Trig”连接PIN).#define EchoPIN A2 // 将 PIN A2 分配为 EchoPIN(将 Arduino UNO“A2”PIN 与超声波声纳传感器“Trig”PIN 连接)。#define LEDBPIN A3 // 将 PIN A3 分配为 LEDBPIN(连接 Arduino UNO“A3” PIN with RGB Diffused Common Cathode "LEDB" PIN).#define LEDGPIN A4 // 将 PIN A4 分配为 LEDGPIN(将 Arduino UNO "A4" PIN 与 RGB 扩散共阴极 "LEDG" PIN 连接。#define LEDRPIN A5 // 分配 PIN A5 作为 LEDRPIN(将 Arduino UNO“A5”PIN 与 RGB 扩散共阴极“LEDR”PIN 连接)。#define DCMROFF 25 // 这设置偏移以允许两个直流牵引电机之间的差异。AF_DCMo Tor M1 (1, MOTOR12_64KHZ); // 使用 M1 输出创建 DCMotor #1,设置为 64kHz PWM 频率。AF_DCMotor M2 (2, MOTOR12_64KHZ); // 使用 M2 输出创建 DCMotor #2,设置为 64kHz PWM 频率。伺服 SER1; // 创建 Servo 对象来控制 Servo.int Search (void) { // 整型变量声明。浮动持续时间 =0.0; // 浮点型变量声明。浮动CM =0.0; // 浮点型变量声明。数字写入(TrigPIN,低); // TrigPIN 输出为 0V(逻辑低电平)。延迟微秒(2); // 延迟 2us,向超声波声纳传感器“TrigPIN”发送 10us 高脉冲。数字写入(TrigPIN,高); // TrigPIN 输出为 5V(逻辑高电平)。延迟微秒(10); // 延迟 10us。数字写入(TrigPIN,低); // TrigPIN 输出为 0V(逻辑低电平)。持续时间 =脉冲输入(EchoPIN,高); // 开始计时,再次 Upto EchoPIN 返回逻辑“High Level”并将“Time”放入名为“Duration”的变量中。 CM =(持续时间/58.8); // 将距离转换为 CM。返回CM; // 返回 CM。}int RightDistance, LeftDistance; // 两边的距离.float Distance =0.00; // 浮点型变量声明.void setup () { // 设置循环。 pinMode (BuzzPIN, OUTPUT); // 将 BuzzPIN 声明为“输出 PIN”。 pinMode (TrigPIN, OUTPUT); // 将 TrigPIN 声明为“输出 PIN”。 pinMode (EchoPIN, INPUT); // 将 EchoPIN 声明为“输出 PIN”。 pinMode(LEDBPIN,输出); // 将 LEDBPIN 声明为“输出 PIN”。 pinMode (LEDGPIN, OUTPUT); // 将 LEDGPIN 声明为“输出 PIN”。 pinMode(LEDRPIN,输出); // 将 LEDRPIN 声明为“输出 PIN”。 SER1.attach (10); // 将引脚 10 上的伺服(Arduino 套件的 Adafruit 电机扩展板上的 SER1 连接到伺服对象)。}void loop () { // 主循环。 SER1.写(80); // 告诉伺服器定位在 80 度(面朝前)。延迟(100); // 延迟 0.1 秒。距离=搜索(); // 以 CM 为单位测量距离。 if (Distance <30) { // 如果在 30cm 内发现障碍物。数字写入(BuzzPIN,高); // BuzzPIN 输出为 5V(逻辑高电平)。数字写入(LEDBPIN,低); // LEDBPIN 输出为 0V(逻辑低电平)。数字写入(LEDGPIN,低); // LEDGPIN 输出为 0V(逻辑低电平)。数字写入(LEDRPIN,高); // LEDRPIN 输出为 5V(逻辑高电平)。 M1.setSpeed (100); // 减速。 M2.setSpeed (100); // 减速。更改路径(); // 如果前进被阻塞 改变方向。 } else if ((Distance>=30) &&(Distance <60)) { // 如果在 30cm 到 60cm 之间发现障碍物。数字写入(BuzzPIN,低); // BuzzPIN 输出为 0V(逻辑低电平)。数字写入(LEDBPIN,高); // LEDBPIN 输出为 5V(逻辑高电平)。数字写入(LEDGPIN,低); // LEDGPIN 输出为 0V(逻辑低电平)。数字写入(LEDRPIN,低); // LEDRPIN 输出为 0V(逻辑低电平)。 M1.setSpeed (150); // 速度略有增加。 M2.setSpeed (150); // 速度略有增加。向前 (); // 机器人向前移动。 } else if ((Distance>=60) &&(Distance <90)) { // 如果在 60cm 到 90cm 之间发现障碍物。数字写入(BuzzPIN,低); // BuzzPIN 输出为 0V(逻辑低电平)。数字写入(LEDBPIN,低); // LEDBPIN 输出为 0V(逻辑低电平)。数字写入(LEDGPIN,高); // LEDGPIN 输出为 5V(逻辑高电平)。数字写入(LEDRPIN,低); // LEDRPIN 输出为 0V(逻辑低电平)。 M1.setSpeed (200); // 加速。 M2.setSpeed (200); // 加速。向前 (); // 机器人向前移动。 } else { // 如果在 90 厘米内找不到障碍物。数字写入(BuzzPIN,低); // BuzzPIN 输出为 0V(逻辑低电平)。数字写入(LEDBPIN,高); // LEDBPIN 输出为 5V(逻辑高电平)。数字写入(LEDGPIN,高); // LEDGPIN 输出为 5V(逻辑高电平)。数字写入(LEDRPIN,高); // LEDRPIN 输出为 5V(逻辑高电平)。 M1.setSpeed (250); // 速度完全增加。 M2.setSpeed (250); // 速度完全增加。向前 (); // 机器人向前移动。 }}void ChangePath () { // 路径更改循环。停止 (); // 机器人停止。向后(); // 机器人向后运行。停止 (); // 机器人停止。 SER1. 写 (12); // 检查到右边的距离。延迟(500); // 延迟 0.5 秒。 RightDistance =搜索 (); // 设置正确的距离。延迟(500); // 延迟 0.5 秒。 SER1. 写入(160); // 检查到左边的距离。延迟(1000); // 延迟 1 秒。 LeftDistance =搜索 (); // 设置左距离。延迟(500); // 延迟 0.5 秒。 SER1.写(80); // 返回中心。延迟(500); // 延迟 0.5 秒。比较距离(); // 找到最长的距离。}void CompareDistance () { // 距离比较循环。 if (RightDistance> LeftDistance) { // 如果 Right 受阻较少。右转 (); // 机器人转向正确的方向。 } else if (LeftDistance> RightDistance) { // 如果左侧的障碍物较少。左转 (); // 机器人转向左方向。 } else { // 如果两者都受到同等程度的阻碍。回转 (); // 机器人转身。 }}void Forward() { // 前向循环。 M1.run(前进); // 将 DCMotor #1 转为正向。 M2.run(前进); // 将 DCMotor #1 转为 Forward.}void Backward () { // 向后循环。 M1.run (向后); // 将 DCMotor #1 向后转动。 M2.run (向后); // 将 DCMotor #2 向后转动。延迟(500); // 延迟 1 秒。}void TurnRight () { // 右转循环。 M1.run (向后); // 将 DCMotor #1 向后转动。 M2.run(前进); // 将 DCMotor #2 转为正向。 M1.setSpeed (100+DCMROFF); // 校准 DCMotor #1 的速度。延迟(300); // 延迟 0.7 秒。}void TurnLeft () { // 左转循环。 M1.run(前进); // 将 DCMotor #1 转为正向。 M2.run (向后); // 将 DCMotor #2 向后转动。 M2.setSpeed (100+DCMROFF); // 校准 DCMotor #2 的速度。延迟(300); // 延迟 0.7 秒。}void TurnAround () { // Trun Around 循环。 M1.run(前进); // 将 DCMotor #1 转为正向。 M2.run (向后); // 将 DCMotor #2 向后转动。 M2.setSpeed (100+DCMROFF); // 校准 DCMotor #2 的速度。延迟(700); // 延迟 2.1 秒。}void Stop () { // 停止循环。 M1.run (RELEASE); // 释放 DCMotor #1。 M2.run (RELEASE); // 释放 DCMotor #2。延迟(100); // 延迟 0.1 秒。}
定制零件和外壳
底盘
机器人底盘,用于相应地设置这台自主机器。示意图
电路图,用于相应地设置这台自主机器。制造工艺