资料介绍
描述
能够测量分隔两个位置的距离的需求可以在我们日常生活的不同领域有许多应用。
从获得两个位置之间足够距离的那一刻起,就可以通过执行这些功能的算法来开发和设计自动门系统、安全系统、监控和各种自动化系统。
从那里,您将学习如何组装有趣的机器人。这个有趣的机器人是一个小型机器人,它使用带有 LED 和超声波传感器的教学案例来计算距离。
其案例如图1所示。
对于这个教学案例的实施,您将学习如何使用 UNO arduino 组装基本电路并创建编程。
如您所见,外壳具有类似于笑脸的结构和一些侧面 LED,以指示其前方物体或人的接近程度。LED 点亮的这个距离将在所提供的程序中实现。
在这个项目中,使用了超声波传感器 HC-SR04,它的工作原理是发射和接收声波。
在本文中,您将学习如何编程和使用 HC-SR04 超声波传感器并了解其工作原理。
因此,通过本文,您将了解到:
- 了解HC-SR04超声波传感器的结构;
- 了解HC-SR04超声波传感器的操作;
- 执行超声波传感器 HC-SR04 和 Arduino UNO R3 之间的通信
- 将超声波传感器 HC-SR04 的结构展示给 SILICIOS LAB 开发的教学案例。
现在,我们将开始全面介绍使用 Arduino UNO 开发的 Didactic 超声波传感器 HC-SR04。
探索如何开发有趣的机器人
该项目包括展示一个使用 HC-SR04 超声波传感器和 UNO arduino 开发板的教学模型。
该项目基本上由 LED、超声波传感器 HC-SR04、UNO arduino 开发板组成,它将发送必要的脉冲来读取传感器的距离,如图 2 所示。
超声波传感器发出的信号类似于在空间中传播的波,通过这种方式,它将检测到离物体最近的结构,如图 3 所示。
HC-SR04 超声波传感器基本上由一个振荡晶体、一个发射器和接收器声波脉冲以及电源引脚构成。
传感器发送高频声波。它们与路径上的某个物体发生碰撞并返回传感器,传感器将捕获它们。
最后,我们使用平均速度方程,如方程 1 所示,它允许我们计算声波行进的距离。
Espaço (m) = Velocidade (m/s)* 速度 (s)
根据计算出的距离,LED 将被激活以指示有趣机器人与物体的接近程度。
要设置实验,首先确保您的 Arduino 已通过断开 USB 电缆的连接来关闭。现在,将组件连接起来,如下图 5 所示。
根据图 5 所示的接线图,实验由传感器、arduino uno 电路、LED 和电阻器组成的电路组成。
使用的传感器是 HC-SR04,它有 4 个引脚,电源引脚 (Vdc) 通过原型板连接到 arduino uno 的 5 伏电压,以及它的 GND。
触发引脚将连接到数字引脚 4,它负责每 10 微秒(微秒)发送一次脉冲。最后是连接到数字引脚 5 的 Echo 引脚。
正确连接电路后,根据完整代码开始编程,如下图所示。
//inicio - leds
int Led_azul1 = 2;
int Led_azul2 = 3;
int Led_amarelol = 6;
int Led_amarelo2 = 7;
int Led_vermelho1 = 8;
int Led_vermelho2 = 9;
int Led_verde1 = 10;
int Led_verde2 = 11;
//fim - leds
int inches = 0;
float cm = 0;
int triggerPin = 4;
int echoPin = 5;
long readUltrasonicDistance(int triggerPin, int echoPin)// funçao responsavel por processar o sinal dos pinos Trig e Echo
{
pinMode(triggerPin, OUTPUT); // apaga o pino de Trig
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
// coloca o pino de Trig em nivel logico alto por 10 us
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
pinMode(echoPin, INPUT);
// Lê o pino Echo, e retorna o tempo de trajetoria da onda em microsegundos
return pulseIn(echoPin, HIGH);
}
void setup()
{
pinMode(Led_azul1,OUTPUT);
pinMode(Led_azul2,OUTPUT);
pinMode(Led_amarelol,OUTPUT);
pinMode(Led_amarelo2,OUTPUT);
pinMode(Led_vermelho1,OUTPUT);
pinMode(Led_vermelho2,OUTPUT);
pinMode(Led_verde1,OUTPUT);
pinMode(Led_verde2,OUTPUT);
Serial.begin(9600);
}
void loop()
{
// medida do sinal em centimetros
cm = 0.01723 * readUltrasonicDistance(4, 5);
// para converter o valor de centimetros em polegadas basta dividir por 2.54
inches = (cm / 2.54);
/*ANOTACOES
distancia minima 3
distancia maxima 336
intervalo 333
Quantidade de leds 8
relação cm/leds = 41.625
led_azul1 3 cm a 44.625 cm
led_azul2 44.625 cm a 86.25 cm
led_amarelo1 86.25 cm a 127.875 cm
led_amarelo2 127.875 cm a 169.5 cm
led_vermelho1 169.5 cm a 211.125 cm
led_vermelho2 211.125 cm a 252.75 cm
led_verde1 252.75 cm a 294.375 cm
led_verde2 294.375 cm a 336 cm
*/
//INICIO - CONDICAO LEDS
if((cm>=3)&&(cm<44.625)){
digitalWrite(Led_azul1, HIGH);
digitalWrite(Led_azul2, LOW);
digitalWrite(Led_amarelol,LOW);
digitalWrite(Led_amarelo2,LOW);
digitalWrite(Led_vermelho1, LOW);
digitalWrite(Led_vermelho2, LOW);
digitalWrite(Led_verde1,LOW);
digitalWrite(Led_verde2,LOW);
}
else if((cm>=44.625)&&(cm<86.25)){
digitalWrite(Led_azul1,LOW);
digitalWrite(Led_azul2,HIGH);
digitalWrite(Led_amarelol,LOW);
digitalWrite(Led_amarelo2,LOW);
digitalWrite(Led_vermelho1, LOW);
digitalWrite(Led_vermelho2, LOW);
digitalWrite(Led_verde1,LOW);
digitalWrite(Led_verde2,LOW);
}
else if((cm>=86.25)&&(cm<127.875)){
digitalWrite(Led_azul1, LOW);
digitalWrite(Led_azul2, LOW);
digitalWrite(Led_amarelol,HIGH);
digitalWrite(Led_amarelo2,LOW);
digitalWrite(Led_vermelho1, LOW);
digitalWrite(Led_vermelho2, LOW);
digitalWrite(Led_verde1,LOW);
digitalWrite(Led_verde2,LOW);
}
else if((cm>=127.875)&&(cm<169.5)){
digitalWrite(Led_azul1, LOW);
digitalWrite(Led_azul2, LOW);
digitalWrite(Led_amarelol,LOW);
digitalWrite(Led_amarelo2,HIGH);
digitalWrite(Led_vermelho1, LOW);
digitalWrite(Led_vermelho2, LOW);
digitalWrite(Led_verde1,LOW);
digitalWrite(Led_verde2,LOW);
}
else if((cm>=169.5)&&(cm<211.125)){
digitalWrite(Led_azul1, LOW);
digitalWrite(Led_azul2, LOW);
digitalWrite(Led_amarelol,LOW);
digitalWrite(Led_amarelo2,LOW);
digitalWrite(Led_vermelho1, HIGH);
digitalWrite(Led_vermelho2, LOW);
digitalWrite(Led_verde1,LOW);
digitalWrite(Led_verde2,LOW);
}
else if((cm>=211.125)&&(cm<252.75)){
digitalWrite(Led_azul1, LOW);
digitalWrite(Led_azul2, LOW);
digitalWrite(Led_amarelol,LOW);
digitalWrite(Led_amarelo2,LOW);
digitalWrite(Led_vermelho1, LOW);
digitalWrite(Led_vermelho2, HIGH);
digitalWrite(Led_verde1,LOW);
digitalWrite(Led_verde2,LOW);
}
else if((cm>=252.75)&&(cm<294.375)){
digitalWrite(Led_azul1, LOW);
digitalWrite(Led_azul2, LOW);
digitalWrite(Led_amarelol,LOW);
digitalWrite(Led_amarelo2,LOW);
digitalWrite(Led_vermelho1, LOW);
digitalWrite(Led_vermelho2, LOW);
digitalWrite(Led_verde1,HIGH);
digitalWrite(Led_verde2,LOW);
}
else if((cm>=294.375)&&(cm<336)){
digitalWrite(Led_azul1, LOW);
digitalWrite(Led_azul2, LOW);
digitalWrite(Led_amarelol,LOW);
digitalWrite(Led_amarelo2,LOW);
digitalWrite(Led_vermelho1, LOW);
digitalWrite(Led_vermelho2, LOW);
digitalWrite(Led_verde1,LOW);
digitalWrite(Led_verde2,HIGH);
}
//FIM - CONDICAO LEDS
inches = (cm / 2.54);
Serial.print(inches);Serial.print("in, ");Serial.print(cm);Serial.println("cm");delay(100); // aguarda 100 milisegundos
}
正确连接电路后,根据下面给出的代码开始编程,该代码说明了每个 LED 的数字引脚的定义、变量的初始化以及负责处理 Trigger 和 Echo 引脚上的信号的函数。
//inicio - leds
int Led_azul1 = 2;
int Led_azul2 = 3;
int Led_amarelol = 6;
int Led_amarelo2 = 7;
int Led_vermelho1 = 8;
int Led_vermelho2 = 9;
int Led_verde1 = 10;
int Led_verde2 = 11;
//fim - leds
int inches = 0;
float cm = 0;
int triggerPin = 4;
int echoPin = 5;
long readUltrasonicDistance(int triggerPin, int echoPin)// funçao responsavel por processar o sinal dos pinos Trig e Echo
{
pinMode(triggerPin, OUTPUT); // apaga o pino de Trig
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
// coloca o pino de Trig em nivel logico alto por 10 us
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
pinMode(echoPin, INPUT);
// Lê o pino Echo, e retorna o tempo de trajetoria da onda em microsegundos
return pulseIn(echoPin, HIGH);
}
之后,我们就有了 void setup 函数。所有 LED 引脚都配置为数字输出。代码如下所示。
void setup()
{
pinMode(Led_azul1,OUTPUT);
pinMode(Led_azul2,OUTPUT);
pinMode(Led_amarelol,OUTPUT);
pinMode(Led_amarelo2,OUTPUT);
pinMode(Led_vermelho1,OUTPUT);
pinMode(Led_vermelho2,OUTPUT);
pinMode(Led_verde1,OUTPUT);
pinMode(Led_verde2,OUTPUT);
Serial.begin(9600);
}
LED 根据距离范围触发。void 循环函数中的代码如下所示。
void loop()
{
// medida do sinal em centimetros
cm = 0.01723 * readUltrasonicDistance(4, 5);
// para converter o valor de centimetros em polegadas basta dividir por 2.54
inches = (cm / 2.54);
/*ANOTACOES
distancia minima 3
distancia maxima 336
intervalo 333
Quantidade de leds 8
relação cm/leds = 41.625
led_azul1 3 cm a 44.625 cm
led_azul2 44.625 cm a 86.25 cm
led_amarelo1 86.25 cm a 127.875 cm
led_amarelo2 127.875 cm a 169.5 cm
led_vermelho1 169.5 cm a 211.125 cm
led_vermelho2 211.125 cm a 252.75 cm
led_verde1 252.75 cm a 294.375 cm
led_verde2 294.375 cm a 336 cm
*/
//INICIO - CONDICAO LEDS
if((cm>=3)&&(cm<44.625)){
digitalWrite(Led_azul1, HIGH);
digitalWrite(Led_azul2, LOW);
digitalWrite(Led_amarelol,LOW);
digitalWrite(Led_amarelo2,LOW);
digitalWrite(Led_vermelho1, LOW);
digitalWrite(Led_vermelho2, LOW);
digitalWrite(Led_verde1,LOW);
digitalWrite(Led_verde2,LOW);
}
else if((cm>=44.625)&&(cm<86.25)){
digitalWrite(Led_azul1,LOW);
digitalWrite(Led_azul2,HIGH);
digitalWrite(Led_amarelol,LOW);
digitalWrite(Led_amarelo2,LOW);
digitalWrite(Led_vermelho1, LOW);
digitalWrite(Led_vermelho2, LOW);
digitalWrite(Led_verde1,LOW);
digitalWrite(Led_verde2,LOW);
}
else if((cm>=86.25)&&(cm<127.875)){
digitalWrite(Led_azul1, LOW);
digitalWrite(Led_azul2, LOW);
digitalWrite(Led_amarelol,HIGH);
digitalWrite(Led_amarelo2,LOW);
digitalWrite(Led_vermelho1, LOW);
digitalWrite(Led_vermelho2, LOW);
digitalWrite(Led_verde1,LOW);
digitalWrite(Led_verde2,LOW);
}
else if((cm>=127.875)&&(cm<169.5)){
digitalWrite(Led_azul1, LOW);
digitalWrite(Led_azul2, LOW);
digitalWrite(Led_amarelol,LOW);
digitalWrite(Led_amarelo2,HIGH);
digitalWrite(Led_vermelho1, LOW);
digitalWrite(Led_vermelho2, LOW);
digitalWrite(Led_verde1,LOW);
digitalWrite(Led_verde2,LOW);
}
else if((cm>=169.5)&&(cm<211.125)){
digitalWrite(Led_azul1, LOW);
digitalWrite(Led_azul2, LOW);
digitalWrite(Led_amarelol,LOW);
digitalWrite(Led_amarelo2,LOW);
digitalWrite(Led_vermelho1, HIGH);
digitalWrite(Led_vermelho2, LOW);
digitalWrite(Led_verde1,LOW);
digitalWrite(Led_verde2,LOW);
}
else if((cm>=211.125)&&(cm<252.75)){
digitalWrite(Led_azul1, LOW);
digitalWrite(Led_azul2, LOW);
digitalWrite(Led_amarelol,LOW);
digitalWrite(Led_amarelo2,LOW);
digitalWrite(Led_vermelho1, LOW);
digitalWrite(Led_vermelho2, HIGH);
digitalWrite(Led_verde1,LOW);
digitalWrite(Led_verde2,LOW);
}
else if((cm>=252.75)&&(cm<294.375)){
digitalWrite(Led_azul1, LOW);
digitalWrite(Led_azul2, LOW);
digitalWrite(Led_amarelol,LOW);
digitalWrite(Led_amarelo2,LOW);
digitalWrite(Led_vermelho1, LOW);
digitalWrite(Led_vermelho2, LOW);
digitalWrite(Led_verde1,HIGH);
digitalWrite(Led_verde2,LOW);
}
else if((cm>=294.375)&&(cm<336)){
digitalWrite(Led_azul1, LOW);
digitalWrite(Led_azul2, LOW);
digitalWrite(Led_amarelol,LOW);
digitalWrite(Led_amarelo2,LOW);
digitalWrite(Led_vermelho1, LOW);
digitalWrite(Led_vermelho2, LOW);
digitalWrite(Led_verde1,LOW);
digitalWrite(Led_verde2,HIGH);
}
//FIM - CONDICAO LEDS
inches = (cm / 2.54);
Serial.print(inches);Serial.print("in, ");Serial.print(cm);Serial.println("cm");delay(100); // aguarda 100 milisegundos
}
正如您在上面的代码中看到的,传感器以厘米为单位读取距离。
之后,我们验证插入此距离的间隔,并激活一组 LED 来发出距离信号。
从物体到有趣的机器人的距离越大,激活的 LED 数量就越多。
除此代码外,还开发了一个特殊案例,它将接收超声波传感器、电阻器和 LED。Arduino 将与外部连接。
搞笑机器人案例如图 12 所示。
从电路的组装和arduino uno的编程,可以存储教学案例横向区域中使用的每个LED,以及将超声波传感器和对应于所需螺钉的孔耦合到结案。
这可以在图 13 中看到。
紧接着,外壳的背面将存储为 LED 选择的电阻器。为此,为每个电阻器建模了一个小腔,如图 14 所示。
为了最终确定控制结构,我们开发了NEXTPCB 印刷电路板。该板旨在帮助对有趣的机器人进行编程。
NEXTPCB印刷电路板
从有趣的机器人项目中,开发了NEXTPCB 印刷电路板,如图 15 所示。
该印刷电路板是根据以下电子原理图开发的。
如果需要,您可以访问此链接并下载所有文件以生产您的印刷电路板 - NEXTPCB Gerber 文件
从这个项目中,您将能够组装您的有趣机器人并使用NEXTPCB 印刷电路板获得您的印刷电路板。
结论
因此,从这个项目的开发中,除了分析与NANO arduino的通信外,还可以了解HR-SR04超声波传感器的结构并了解其操作。
当传感器发出声波爆发时,实验得出结论,在某些情况下,这些爆发与具有不均匀表面的结构发生碰撞。
当发生这种现象时,距离值有可能出现错误。您会注意到,在某些位置,不止一个 LED 会亮起。
致谢
我们感谢NEXTPCB 印刷电路板提供印刷电路板。
此外,我们要感谢Escola Robô Lúdico do Brasil 对该项目的支持和发展。
- 有趣的小型delta机器人
- 瞳步迎宾讲解机器人
- 瞳步消毒机器人方案
- ABB机器人CP中级应用培训 11次下载
- 了解机器人电子教材下载 19次下载
- 机器人无线充电电路设计 47次下载
- 基于Matlab的机构与机器人分析资料下载 11次下载
- 基于DSP和PC的农业机器人控制系统 17次下载
- 基于DSP芯片的足球机器人实现与设计 26次下载
- 机器人弧焊FANUC Robot使用说明书下载 2次下载
- 机器人威廉希尔官方网站 及其应用说明 4次下载
- 使用单片机设计一个仿人机器人的散件清单和资料详细说明 20次下载
- Arduino教学机器人的使用教程免费下载 37次下载
- 机器人设计教程之机器人控制和决策子系统 23次下载
- X-MEN I型人形机器人组装说明书 1次下载
- 新松协作机器人智能工厂 1139次阅读
- 面对疫情 医疗机器人能帮上什么忙? 2126次阅读
- dfrobotminiQ 4WD教育机器人介绍 2108次阅读
- 工业机器人编程入门_工业机器人的编程要求 9571次阅读
- 机器人教育是什么_机器人教育发展前景 1873次阅读
- 医用机器人的定义_医用机器人发展 3122次阅读
- 医用机器人的功能_医用机器人分类 2227次阅读
- 机器人控制器有哪些类型_机器人控制器发展 1.1w次阅读
- 协作机器人的起源_为什么需要协作机器人 8127次阅读
- 做好机器人得先学会选电机 2387次阅读
- 如何利用减速器替代电机转速控制机器人运动 4523次阅读
- 机器视觉的机器人取代四台传统的火焰处理机器人 3270次阅读
- 如何区分机器人、协作机器人和移动机器人? 6828次阅读
- 软体机器人 前所未见的机器人 3692次阅读
- 机器人的最佳编程语言是什么?机器人十大流行编程语言汇总 3.4w次阅读
下载排行
本周
- 1山景DSP芯片AP8248A2数据手册
- 1.06 MB | 532次下载 | 免费
- 2RK3399完整板原理图(支持平板,盒子VR)
- 3.28 MB | 339次下载 | 免费
- 3TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 4DFM软件使用教程
- 0.84 MB | 295次下载 | 免费
- 5元宇宙深度解析—未来的未来-风口还是泡沫
- 6.40 MB | 227次下载 | 免费
- 6迪文DGUS开发指南
- 31.67 MB | 194次下载 | 免费
- 7元宇宙底层硬件系列报告
- 13.42 MB | 182次下载 | 免费
- 8FP5207XR-G1中文应用手册
- 1.09 MB | 178次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33566次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21549次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6656次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537798次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420027次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191187次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183279次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多