避障机器人是另一种著名的机器人,可以为嵌入式项目增添色彩。对于那些是新的避障机器人,它只是一个普通的轮式机器人,可以在不撞到任何障碍的情况下导航。在项目中,有很多方法可以构建一个避障机器人,我们将使用一个超声波传感器(前)和两个红外线传感器(左/右),以便我们的机器人在所有三个方向上都能看到眼睛。通过这种方式,您可以通过检测所有三个侧面的对象并进行相应的操作来使其变得更加智能和快捷。在这里,我们正在针对这种避障机器人起诉PIC单片机PIC16F877A。
避障机器人的操作可以从称为“家庭清洁机器人”的实时产品中观察到。尽管其中使用的技术和传感器非常复杂,但概念仍然相同。让我们看看使用普通的传感器和PIC微控制器可以完成多少工作。
另请检查我们的其他避免障碍机器人:
- 基于Raspberry Pi的避障机器人
- 使用Arduino的DIY智能吸尘机器人
所需材料:
- PIC16F877A
- 红外传感器(2个)
- 超声波传感器(1个)
- 直流减速电机(2Nos)
- L293D电机驱动器
- 躺椅(您也可以使用硬纸板建造自己的躺椅)
- 行动电源(任何可用的电源)
避障机器人的概念:
避障机器人的概念非常简单。我们使用传感器来检测机器人周围物体的存在,并使用此数据来避免机器人在这些物体上碰撞。为了检测物体,我们可以使用红外传感器和超声波传感器之类的任何传感器。
在我们的机器人中,我们将US传感器用作前传感器,将两个IR传感器分别用于左侧和右侧。如果没有物体,机器人将向前移动。因此,机器人将向前移动,直到超声波(美国)传感器检测到任何物体为止。
当US传感器检测到物体时,就该改变机器人的方向了。我们可以向左或向右转,使用IR传感器帮助确定转弯方向,以检查机器人的左侧或右侧附近是否存在任何物体。
如果 在机器人的正面和右侧检测到物体,则机器人将返回并向左转。我们使机器人向后运行一定距离,以使其在转弯时不会与物体碰撞。
如果 在机器人的正面和左侧检测到物体,则机器人将返回并向右转。
如果机器人到达房间的一个角落,它将感应到所有四个物体都存在。在这种情况下,我们必须向后驱动机器人,直到任何一侧都自由。
另一种可能的情况是,前面将有一个对象,但左侧或右侧可能都没有任何对象,在这种情况下,我们必须朝任意方向随机旋转。
希望这会给您一个关于避障器工作原理的粗略想法,现在让我们继续使用Circuit Diagram来构建该机器人并享受它的运行。
电路图和说明:
上图显示了该基于PIC的避障机器人的完整电路图。如您所见,我们使用了两个红外传感器分别检测机器人左侧和右侧的物体,并使用了超声波传感器来测量机器人前方物体的距离。我们还使用了L293D电动机驱动器模块来驱动该项目中存在的两个电动机。这些只是用于车轮的普通直流齿轮电动机,因此可以很容易地获得。下表将帮助您进行连接。
序号 |
从连接 |
连接到 |
1个 |
红外传感器左销 |
RD2(引脚21) |
2 |
红外传感器右输出引脚 |
RD3(引脚22) |
4 |
电机1通道A引脚 |
RC4(引脚23) |
5 |
电机1通道B引脚 |
RC5(引脚25) |
6 |
电机2通道A引脚 |
RC6(引脚26) |
7 |
电机2通道B引脚 |
RC7(引脚27) |
8 |
美国触发针 |
RB1(引脚34) |
9 |
美国回音针 |
RB2(引脚35) |
诸如L293D之类的电动机驱动器模块是必不可少的,因为运行DC齿轮电动机所需的电流量不能由PIC微控制器的I / O引脚提供。传感器和模块由+ 5V电源供电,该电源由7805进行调节。即使使用+ 12V,也可以为电机驱动器模块供电,但是对于该项目,我只是坚持使用了+ 5V。
在我的案例中,完整的机器人由移动电源供电。您也可以使用任何普通的移动电源,并通过调节器部分,或使用上述电路,并为机器人使用9V或12V电池,如上面的电路图所示。连接完成后,如下所示
为PIC单片机编程:
对PIC进行编程以使其成为障碍物避免者真的很容易。我们只需要读取这三个传感器的值并相应地驱动电动机即可。在这个项目中,我们使用超声波传感器。我们已经学习了如何将超声波与PIC微控制器接口,如果您是新手,请回到该教程以了解美国传感器如何与PIC配合使用,因为我将在此处跳过有关它的详细信息以避免重复。
该完整的程序或该机器人在此页面的末尾给出,我进一步解释下面的程序的重要区块。
众所周知,所有程序都以输入和输出引脚声明开始。此处,电机驱动器模块的四个引脚和触发引脚是输出引脚,而回波引脚和两个IR输出引脚将被输入。我们应该初始化计时器1模块,以将其与超声波传感器一起使用。
TRISD = 0x00; //声明PORTD为接口LCD TRISB1 = 0的输出;// US传感器的触发引脚作为输出引脚TRISB2 = 1发送;// US传感器的回波引脚设置为输入引脚TRISB3 = 0; // RB3是LED TRISD2 = 1的输出引脚;TRISD3 = 1; //两个红外传感器引脚都声明为输入TRISC4 = 0; TRISC5 = 0; //将电机1的引脚声明为输出TRISC6 = 0; TRISC7 = 0; //将电机2引脚声明为输出T1CON = 0x20;
在此程序中,我们必须经常检查传感器与对象之间的距离,因此我们创建了一个名为 calculate_distance() 的函数,在该函数中,我们将通过美国传感器接口教程中讨论的方法来测量距离。代码如下所示
void compute_distance()//用于计算美国距离的函数{TMR1H = 0; TMR1L = 0; //清除定时器位Trigger = 1; __delay_us(10); 触发= 0; 而(Echo == 0); TMR1ON = 1; 而(Echo == 1); TMR1ON = 0; time_taken =(TMR1L-(TMR1H << 8)); 距离=(0.0272 * time_taken)/ 2; }
下一步将是比较超声波传感器和红外传感器的值,并相应地移动机器人。在此程序中,我将cm值用作临界距离,在该临界距离以下,机器人应开始更改方向。您可以使用首选值。如果没有物体,机器人将向前移动
如果(距离> 5){RC4 = 0; RC5 = 1;//电机1正向RC6 = 1; RC7 = 0; //马达2前进}
如果检测到物体,则距离将低于cm。在这种情况下,我们考虑左右超声波传感器的值。基于此值,我们决定左转或右转。使用ms的延迟,以便可以看到方向变化。
if(RD2 == 0 && RD3 == 1 && distance <= 5)//左传感器被阻塞{back_off(); RC4 = 1;RC5 = 1;//电机1停止RC6 = 1; RC7 = 0; //电机2向前__delay_ms(500); } compute_distance(); if(RD2 == 1 && RD3 == 0 && distance <= 5)//右传感器被阻塞{back_off(); RC4 = 0; RC5 = 1;//电机1正向RC6 = 1; RC7 = 1;//电机2停止__delay_ms(500); }
有时,超声波传感器会检测到物体,但是红外传感器不会检测到物体。在这种情况下,机器人默认情况下会向左转。您也可以根据自己的喜好将其向右转或随机向右转。如果双方都有物体,则我们将其向后移动。执行此操作的代码如下所示。
compute_distance(); 如果(RD2 == 0 && RD3 == 0 && distance <= 5)//两个传感器都打开{back_off(); RC4 = 0; RC5 = 1;//电机1正向RC6 = 1; RC7 = 1;//电机2停止__delay_ms(500); } compute_distance(); 如果(RD2 == 1 && RD3 == 1 &&距离<= 5)//两个传感器都被阻止{back_off(); RC4 = 1;RC5 = 0; //电机1反向RC6 = 1; RC7 = 1;//电机2停止__delay_ms(1000); }
避障机器人在行动:
该项目的工作非常有趣,值得一看。完成电路和代码后,只需打开Bot的电源并将其放在地上即可。它应该能够识别障碍并明智地避免它们。但是,这是有趣的部分。您可以修改代码并使其做更多的事情,例如避免爬楼梯,通过存储宝贵的转弯使其更聪明而又不是呢?
该机器人将帮助您了解编程的基本知识,并了解实际的硬件将如何响应您的代码。对该机器人进行编程并观察其在现实世界中的代码行为总是很有趣。
在这里,我们使用了与使用PIC微控制器为LED闪烁制作的PIC性能板相同的板,并在PIC教程系列的其他项目中使用了该板。
您的机器人外观应类似于上图所示。以下视频显示了该项目的完整工作。
希望您理解该项目并喜欢建造一个。如果您有任何疑问或卡住,可以使用评论部分来发布您的问题,我将尽力回答。