如何使用AVR单片机构建一个线跟随机器人

如何使用AVR单片机构建一个线跟随机器人,第1张

  今天我们将使用AVR 单片机构建一个线跟随机器人

  大多数红外传感器用于检测线路。红外传感器擅长检测白色或黑色表面。尽管您可以使用其他能够检测所有颜色的复杂传感器,并且可以制造出可以遵循所有颜色线的机器人。即使通过改变角度改变路径并保持跟随线,机器人也应该能够检测到线。此外,它应该在停止区进入线路的任何地方停止。

  线跟随机器人现在广泛用于制造业、医疗、家庭应用和货物仓库。机器人不仅限于这些应用,还可以在未来的许多应用中扩展其应用。

  线跟随机器人的概念

  红外传感器是该项目的关键参与者。红外传感器放置在机器人的前面,以跟踪绘制的黑线和表面。机器人放置在生产线之间,在红外传感器的帮助下,机器人跟踪生产线。红外传感器将读数反馈给微控制器,在红外读数的帮助下,微控制器向左侧或右侧移动电机,并再次将机器人带到路径上。

  Line Follower Robot 能够在 IR 传感器的帮助下跟踪线路。该传感器具有红外发射器和红外接收器。IR 发射器(IR LED)发射光,接收器(光电二极管)等待发射的光返回。IR 光只有在被表面反射时才会返回。然而,所有表面都不会反射红外光,只有白色表面可以完全反射它们,黑色表面将完全观察它们,如下图所示。

如何使用AVR单片机构建一个线跟随机器人,pYYBAGMZnQOACoDZAABrmNe7pso302.png,第2张

如何使用AVR单片机构建一个线跟随机器人,pYYBAGMZnP6AGzxkAAHg9_fnWQA930.png,第3张

  现在我们将使用 两个 IR 传感器 来检查机器人是否在轨道上,并使用两个电机来纠正机器人是否移出轨道。这些电机需要大电流并且应该是双向的;因此我们使用像 L293D 这样的电机驱动模块。我们还需要一个像 ATmega16这样的微控制器 来根据来自 IR 传感器的值来指示电机。其简化框图如下所示。

  这两个 IR 传感器将放置在线路的任一侧。如果没有传感器检测到黑线,则 AVR 微控制器会指示电机向前移动,如下所示

如何使用AVR单片机构建一个线跟随机器人,pYYBAGMZnPqALuWZAABwkwj-aQg861.png,第4张

  如果左传感器出现在黑线上,则微控制器通过单独旋转右轮来指示机器人左转。

如何使用AVR单片机构建一个线跟随机器人,pYYBAGMZnPaABiPqAACrhihyZJs613.png,第5张

  如果右传感器出现在黑线上,则微控制器通过单独旋转左轮来指示机器人右转。

如何使用AVR单片机构建一个线跟随机器人,pYYBAGMZnPKAMw_iAACl0yilYqA334.png,第6张

  如果两个传感器都在黑线上,机器人停止。

如何使用AVR单片机构建一个线跟随机器人,poYBAGMZnO6AaJ2FAABORQd5lqI517.png,第7张

  这样,机器人将能够在不超出轨道的情况下跟随线路。现在让我们看看电路和代码的样子。

  所需组件

  直流齿轮马达(2台)

  红外传感器模块(2个)

  L293D 模块

  无线电源(例如电池、移动电源)

  机器人躺椅

  Atmega16微控制器IC

  16Mhz 晶体振荡器

  两个 100nF 电容器

  两个 22pF 电容

  按钮

  跳线

  面包板

  USBASP v2.0(Atmega16编程)

  电路原理图

  如下图所示连接所有组件

如何使用AVR单片机构建一个线跟随机器人,poYBAGMZnOmACxKNAAE8htT5SZw981.png,第8张

  为线跟随机器人编程 Atmega16

  这里 Atmega16 使用 USBASP 和 Atmel Studio7.0 进行编程。如果您不知道如何使用 USBASP 对 Atmega16 进行编程,请访问链接。完整的程序在项目结束时给出,只需使用 JTAG 编程器和 Atmel Studio 7.0 上传 Atmega16 中的程序,如上一教程所述。

  我们试图使代码尽可能简短。所以我们在这段代码中使用了宏和特殊功能寄存器。

  if (bit_is_clear( PINA , leftSen )){ // 检查左传感器是否关闭

  该语句检查连接左侧传感器的 PA0 是低电平还是高电平。

  我们遵循四个条件来读取槽式红外传感器。红外传感器根据它们在机器人正面的位置命名。左红外是左传感器,右红外是右传感器。以下条件将决定机器人的运动。

如何使用AVR单片机构建一个线跟随机器人,pYYBAGMZnOWATnuYAAA9rk8B4tg823.png,第9张

  我们根据上述条件编写了代码。唯一的变化是我们只使用 L293D 的两个输入引脚来驱动两个电机。

/* 使用 Atmega16 的线跟随机器人

电路文摘(www.circuitdigest.com)*/



#include

#define leftSen PA0 //在 PA0 处连接左侧传感器

#define rightSen PA1 //在 PA1 处连接右传感器



诠释主要(无效)

{

DDRA=0xFC;// 使 PA0,PA1 作为两个传感器的输入 0x0b11111100

DDRC=0xFF;// 使端口作为输出连接电机引脚



而(1)

{

PINA=0x03;//初始化PA0和PA1

if(bit_is_clear(PINA,leftSen)){ // 检查左传感器是否关闭



if(bit_is_clear(PINA,rightSen)) { // 检查右传感器是否关闭

端口C=0b00000000;// 如果两个传感器都为零

} // 然后停止机器人

别的{

PORTC=0b00000001;// 如果右为ON,则向左走

}

}



else // 检查左传感器是否打开

{

if(bit_is_clear(PINA,rightSen)) { // 检查右传感器是否关闭

PORTC=0b00000010;// 这意味着左传感器打开

} // 所以向右走

别的{

端口C=0b00000011;// 如果两个传感器都打开

} // 然后继续移动机器人

}

}

}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2999729.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-26
下一篇 2022-09-26

发表评论

登录后才能评论

评论列表(0条)

保存