全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > MEMS传感器 >

基于Arduino和超声波传感器避障小车制作方案

时间:2020-12-24 15:45

人气:

作者:admin

标签: arduino  机器 

导读:避障小车是一种智能设备,可以自动感知前方的障碍物,并通过朝另一个方向转动来避开障碍物。该设计允许小车通过避免碰撞在未知环境中导航,这是任何自主移动小车的主要要求。...

避障小车是一种智能设备,可以自动感知前方的障碍物,并通过朝另一个方向转动来避开障碍物。该设计允许小车通过避免碰撞在未知环境中导航,这是任何自主移动小车的主要要求。避障小车的应用不受限制,现在大多数军事组织都使用它,这有助于执行许多士兵无法完成的危险工作。

在本篇文章中,我们将使用Arduino和超声波传感器制作一个避障小车。这里,超声波传感器用于通过计算机器人和障碍物之间的距离来感测路径中的障碍物。如果机器人发现任何障碍物,它会改变方向并继续移动。

超声波传感器如何用于避免障碍物

在制作之前,了解超声波传感器的工作原理非常重要,因为这种传感器在检测障碍物方面起着重要作用。超声波传感器工作的基本原理是记录传感器在撞击表面后传输超声波束和接收超声波束所需的时间。然后使用该公式计算距离。在本文中,使用了广泛使用的HC-SR04超声波传感器。

因此,HC-SR04的Trig引脚高至少10 us。声波束以8个40KHz的脉冲传输。

o4YBAF_kRkKAGuLxAABmemJvaWE848.png

然后信号撞击表面并返回并由HC-SR04的接收器Echo引脚捕获。 Echo引脚在发送高电平时为高电平。

光束返回所用的时间保存在变量中,并使用如下所示的适当计算转换为距离

距离=(时间x空气中声音的速度(343 m / s))/ 2

可轻松找到避免机器人的障碍物的组件。为了搭建底盘,可以使用任何玩具底盘或者可以定制。

需要的组件

● Arduino NANO或Uno开发板

● HC-SR04超声波传感器

● LM298N电机驱动器模块

● 5V直流电动机

● 电池

● 车轮

● 机壳

● 跳线

电路原理

避障小车的Arduino编程

在本文末尾处将给出了完整程序。该程序将包括设置HC-SR04模块并将信号输出到电机引脚以相应地移动电机方向。此项目中不会使用任何库。

首先在程序中定义HC-SR04的TRIG和ECHO引脚。在本文中,trig引脚连接到GPIO9,echo引脚连接到Arduino NANO的GPIO10。

int trigPin = 9; // trig pin of HC-SR04

int echoPin = 10; // Echo pin of HC-SR04

定义用于输入LM298N电机驱动器模块的引脚。 LM298N有4个数据输入引脚,用于控制连接到它的电机方向。

int revleft4 = 4; //REVerse motion of Left motor

int fwdleft5 = 5; //ForWarD motion of Left motor

int revright6 = 6; //REVerse motion of Right motor

int fwdright7 = 7; //ForWarD motion of Right motor

LM298N电机驱动器模块

在setup()函数中,定义使用的GPIO引脚的数据方向。四个电机引脚和Trig引脚设置为输出,Echo引脚设置为输入。

pinMode(revleft4, OUTPUT); // set Motor pins as output

pinMode(fwdleft5, OUTPUT);

pinMode(revright6, OUTPUT);

pinMode(fwdright7, OUTPUT);

pinMode(trigPin, OUTPUT); // set trig pin as output

pinMode(echoPin, INPUT); //set echo pin as input to capture reflected waves

在loop()函数中,从HC-SR04获取距离并根据距离移动电机方向。距离将显示机器人前方的物体距离。通过将超声波束发射至10 us并在10us后接收来获取距离。

digitalWrite(trigPin, LOW);

delayMicroseconds(2);

digitalWrite(trigPin, HIGH); // send waves for 10 us

delayMicroseconds(10);

duration = pulseIn(echoPin, HIGH); // receive reflected waves

distance = duration / 58.2; // convert to distance

delay(10);

如果距离大于定义的距离意味着其路径中没有障碍物并且它将向前移动。

if (distance > 19)

{

digitalWrite(fwdright7, HIGH); // move forward

digitalWrite(revright6, LOW);

digitalWrite(fwdleft5, HIGH);

digitalWrite(revleft4, LOW);

}

如果距离小于规定的距离以避开障碍物意味着前方存在一些障碍物。因此,在这种情况下,机器人将停止一段时间并在此之后向后移动再次停止一段时间,然后转向另一个方向。

if (distance < 18)

{

digitalWrite(fwdright7, LOW);//Stop

digitalWrite(revright6, LOW);

digitalWrite(fwdleft5, LOW);

digitalWrite(revleft4, LOW);

delay(500);

digitalWrite(fwdright7, LOW); //movebackword

digitalWrite(revright6, HIGH);

digitalWrite(fwdleft5, LOW);

digitalWrite(revleft4, HIGH);

delay(500);

digitalWrite(fwdright7, LOW);//Stop

digitalWrite(revright6, LOW);

digitalWrite(fwdleft5, LOW);

digitalWrite(revleft4, LOW);

delay(100);

digitalWrite(fwdright7, HIGH);

digitalWrite(revright6, LOW);

digitalWrite(revleft4, LOW);

digitalWrite(fwdleft5, LOW);

delay(500);

}
编辑:hfy

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信