李云飞 肖江 彭浩东 胡申辉 刘泓杏
摘要:近年来,机器人逐步的进入了人们的视线,而针对机器人的循迹避障问题,采用的是一种基于Arduino单片机的循迹避障系统。该系统主要是通过Arduino单片机为核心,通过光电传感器来实现循迹功能、超声波模块实现自动避障功能,电机驱动模块来控制电机的驱动,从而到达小车的循迹避障功能。该系统稳定性好,能够很好地应用于机器人运输等领域,具有很好地实用价值。
关键词:Arduino 寻迹 避障
一、硬件和软件设计
1、硬件系统
该智能小车总体上可以分为:电源模块、光电传感器模块、超声波模块、Arduino模块和直流电机驱动模块。该小车可以实现循迹和自动避障功能。主要是以Arduino UNO开发板为主要控制芯片,来控制超声波模块、光电传感器模块,采用直流电机为动力。
2、Arduino模块
该设计采用的是Arduino开发板,Arduino是一款便捷,灵活,易于上手的开源电子平台。包含硬件和软件。它构建与原始码simple I/O介面版。具有类似于C,C++的开发环境。硬件部分是用来做电路连接的Arduino开发板。Arduino IDE则是计算机的程序,在其中编写程序代码;将程序通过USB转接线上传到 Arduino 开发板后,程序便会操作器实现想要实现的寻迹避障功能。
二、寻迹模块
于通过光电传感器实现此功能,光电传感器是通过把光强度的变化转变成电信号来进行控制的。光电传感器一般有发送器、接收器和检测电路构成的。而该设计采用的是红外探测器。红外探测器是能对外界红外光辐射产生响应的光电传感器,是目前传感器领域发展的重点之一。通过这种光电传感器就能很方便进行小车的循迹功能。我们所用到的就是在智能小车上安装光电传感器来进行小车的寻迹功能从而达到实验目的。
三、超声避障模块
对于超声避障模块。首先我们要进行了解对于超声避障主要是通过超声波模块,探测到物体就马上输出脉冲,到单片机中预处理。再通过电机驱动模块进行控制,从而实现避障功能。超声波我们选择的是HC-SR04超声波传感器,该传感器具有低功耗的特点,能够适用于电池供电的设备,方便我们在此基础上安装移动电源,而且方便连接,价格也便宜。通过超声波模块可以判断前方是否有障碍物,从而小车是否进行避障,这样就能解决小车避障的问题。
四、功能实现
首先定义小车的前进,左转,右转函数,再通过if判断实现寻基于避障功能,避障的优先级高于循迹。具体思路是,首先判断前方20cm内是否有障碍物,如果有且距离大于10cm,则调用run1函数慢速前进,而如果距离小于10cm则调用spin_left函数左转,以此实现避障。其次当前方20cm无障碍物时,通过光电传感器检测黑线,如果两块RPR220传感器都检测不到黑线,则保持前进,如果左寻迹传感器检测到信号,则代表小车向右偏离轨道,此时调用函数向左转并点亮左led小灯提示偏离轨迹,直到信号消失,如果右寻迹传感器检测到信号,则代表小车向左偏离轨道,此时调用函数向右转并点亮右led小灯提示偏离轨迹,直到信号消失。基于Arduino实现寻迹避障的功能,功能在Arduino-IDE中实现:
void setup()
{
Serial.begin(9600);初始化电机驱动IO为输出方式初始化超声波引脚
pinMode(Echo,INPUT);定义超声波输入脚
pinMode(Trig,OUTPUT);定义超声波输出脚
pinMode(Left_motor_go,OUTPUT);
pinMode(Left_motor_back,OUTPUT);
pinMode(Right_motor_go,OUTPUT);
pinMode(Right_motor_back,OUTPUT);
pinMode(key,INPUT);定义按键接口为输入接口
pinMode(beep,OUTPUT);
pinMode(SensorRight,INPUT);定义右循迹红外传感器为输入
pinMode(SensorLeft,INPUT);定义左循迹红外传感器为输入
digitalWrite(key,HIGH);
digitalWrite(beep,HIGH);
}
void Distance_test() 量出前方距离
{
digitalWrite(Trig,LOW);给触发脚低电平
delayMicroseconds(2);
digitalWrite(Trig,HIGH);
delayMicroseconds(10);//10us
digitalWrite(Trig,LOW);持續给触发脚低电
float Fdistance = pulseIn(Echo,HIGH);读取高电平时间
Fdistance= Fdistance/58;
Serial.print("Distance:");输出距离
Serial.println(Fdistance);显示距离
Distance = Fdistance;
}
void loop()
{
while(1)
{
SR = digitalRead(SensorRight);
SL = digitalRead(SensorLeft);
Distance_test();
Serial.println( Distance);
if(Distance<=10)
{
spin_left(4);
}
else if(Distance<20&&Distance>10)
run1();
else
{
if (SL ==LOW&&SR== LOW)
run();//调用前进函数
else if (SL == LOW & SR == HIGH)
right();
else if (SR == LOW & SL == HIGH)
left();
}
delay(200);
}
}
五、总结
Arduino在智能小车这方面的运用只是这个领域方面的一小部分。寻迹和避障也只是一个基础的功能。同时对于Arduino这一方面的前端研发还有更为强大的功能。我也相信通过Arduino的发展,能够将这些功能实体化衍生到我们生活的各处。本文只是在Arduino的基础之内,设计了一款综合性功能的小车的应用。旨在引起读者对于这一领域的兴趣。进一步的去探索Arduino更多的功能。
参考文献:
[1]蔡睿妍.Arduino 的原理及应用[J]电子设计工程,2012.20(16)155-157.
[2]赵建伟,班钰,王义,等基于 Arduino 的智能小车的 控制系统设计[J].兵工自动化,2015,34(5):74-76.96.
作者简介:李云飞(2000年— ) ,男,汉族,四川省成都市人,学生,研究方向:物联网智能应用。