在这里,我们将使用AVR Atmega16微控制器构建另一个项目。如果您不熟悉AVR微控制器,则可以参考以前的AVR项目和教程。
对于所有电子爱好者来说,建造机器人始终是令人振奋的事情。如果机器人无需任何外部指令即可自动执行某些操作,则可以最大程度地提高这种刺激感。电子初学者最常用的机器人之一是Line Follower Robot。顾名思义,机器人将遵循表面上绘制的线。该线不必是直线。同样,线条可以是任何颜色。
我们之前使用不同的控制器构建了Line Follower机器人项目:
- 使用8051单片机的线跟随机器人
- 使用PIC单片机的Line Follower机器人
- 使用Arduino的Line Follower机器人
- 使用Raspberry Pi的Line Follower机器人
- 使用MSP430 Launchpad的线路跟随器机器人
今天,我们将使用AVR微控制器来构建Line Follower机器人。
通常,红外传感器用于检测线路。红外传感器擅长检测白色或黑色表面。虽然您可以使用其他复杂的传感器,这些传感器将能够检测所有颜色,并且可以使机器人遵循所有颜色线。即使通过改变角度改变了路径,机器人也应该能够检测到直线并保持跟随直线。同样,它应该在生产线停靠的任何地方停下来。
线性跟随器机器人如今已广泛用于制造业,医疗,家庭应用和商品仓库。机器人不仅限于这些应用程序,还可以将其应用程序扩展到许多未来的应用程序中。
直线跟随器机器人的概念
红外传感器是该项目的关键参与者。红外传感器放置在机器人的正面,以跟踪绘制的黑线和表面。机器人被放置在生产线之间,借助红外传感器,机器人可以跟踪生产线。红外传感器将读数反馈给微控制器,并在红外读数的帮助下,微控制器向左或向右移动电机,并再次将机器人带到路径。
Line Follower Robot能够借助IR传感器跟踪一条线路。该传感器具有红外发射器和红外接收器。红外发射器(IR LED)发射光,接收器(光电二极管)等待发射的光返回。红外光仅在被表面反射时才会返回。鉴于所有表面都不能反射红外光,只有彩色表面可以完全反射它们,而黑色表面可以完全观察到它们,如下图所示。在此处了解有关红外传感器模块的更多信息。
现在,我们将使用 两个红外传感器 来检查机器人是否与生产线在一条直线上,并使用两个电动机来校正机器人是否移出了轨道。这些电动机需要大电流,并且应该是双向的。因此,我们使用L293D之类的电机驱动器模块。我们还需要一个像ATmega16这样的微控制器 ,根据来自红外传感器的值来指示电动机。下面是其简化框图。
这两个红外传感器将被放置在生产线的任一侧。如果所有传感器均未检测到黑线,则AVR微控制器指示电动机向前移动,如下所示
如果左传感器在黑线上,则微控制器指示机器人通过单独旋转右轮来向左转。
如果右传感器在黑线上,则微控制器指示机器人通过单独旋转左轮来向右转。
如果两个传感器都在黑线上,则机器人将停止。
这样,机器人将能够沿线行驶而不会脱离轨道。现在让我们看看电路和代码的外观。
所需组件
- 直流齿轮电动机(2台)
- 红外传感器模块(2个)
- L293D模块
- 无线电源(例如电池,移动电源)
- 机器人躺椅
- Atmega16单片机IC
- 16Mhz晶体振荡器
- 两个100nF电容器
- 两个22pF电容器
- 按钮
- 跳线
- 面包板
- USBASP v2.0(要编程Atmega16)
电路原理图
如下图所示连接所有组件
为直线跟随器机器人编程Atmega16
此处,Atmega16使用USBASP和Atmel Studio7.0进行编程。如果您不知道如何使用USBASP编程Atmega16,请访问链接。在项目的最后给出了完整的程序,只需使用JTAG程序员和Atmel Studio 7.0在Atmega16中上载程序即可,如先前教程中所述。
我们试图使代码尽可能简短。因此,我们在此代码中使用了宏和特殊功能寄存器。
if (bit_is_clear(PINA ,leftSen )){ //检查左传感器是否关闭
该语句检查连接左传感器的PA0是LOW还是HIGH。
如果您想了解更多有关此语句和其他宏的信息,请转到此链接
阅读槽式红外传感器需要遵循以下四个条件。红外传感器的名称取决于它们在机器人正面的位置。左红外是左传感器,右红外是右传感器。以下条件将决定机器人的运动。
我们已经根据上述条件编写了代码。唯一的变化是,我们仅使用L293D的两个输入引脚来驱动两个电机。
下面给出了带有演示视频的完整代码。