資料介紹
描述
能夠測量分隔兩個位置的距離的需求可以在我們?nèi)粘I畹牟煌I(lǐng)域有許多應(yīng)用。
從獲得兩個位置之間足夠距離的那一刻起,就可以通過執(zhí)行這些功能的算法來開發(fā)和設(shè)計自動門系統(tǒng)、安全系統(tǒng)、監(jiān)控和各種自動化系統(tǒng)。
從那里,您將學(xué)習(xí)如何組裝有趣的機器人。這個有趣的機器人是一個小型機器人,它使用帶有 LED 和超聲波傳感器的教學(xué)案例來計算距離。
其案例如圖1所示。
對于這個教學(xué)案例的實施,您將學(xué)習(xí)如何使用 UNO arduino 組裝基本電路并創(chuàng)建編程。
如您所見,外殼具有類似于笑臉的結(jié)構(gòu)和一些側(cè)面 LED,以指示其前方物體或人的接近程度。LED 點亮的這個距離將在所提供的程序中實現(xiàn)。
在這個項目中,使用了超聲波傳感器 HC-SR04,它的工作原理是發(fā)射和接收聲波。
在本文中,您將學(xué)習(xí)如何編程和使用 HC-SR04 超聲波傳感器并了解其工作原理。
因此,通過本文,您將了解到:
- 了解HC-SR04超聲波傳感器的結(jié)構(gòu);
- 了解HC-SR04超聲波傳感器的操作;
- 執(zhí)行超聲波傳感器 HC-SR04 和 Arduino UNO R3 之間的通信
- 將超聲波傳感器 HC-SR04 的結(jié)構(gòu)展示給 SILICIOS LAB 開發(fā)的教學(xué)案例。
現(xiàn)在,我們將開始全面介紹使用 Arduino UNO 開發(fā)的 Didactic 超聲波傳感器 HC-SR04。
探索如何開發(fā)有趣的機器人
該項目包括展示一個使用 HC-SR04 超聲波傳感器和 UNO arduino 開發(fā)板的教學(xué)模型。
該項目基本上由 LED、超聲波傳感器 HC-SR04、UNO arduino 開發(fā)板組成,它將發(fā)送必要的脈沖來讀取傳感器的距離,如圖 2 所示。
超聲波傳感器發(fā)出的信號類似于在空間中傳播的波,通過這種方式,它將檢測到離物體最近的結(jié)構(gòu),如圖 3 所示。
HC-SR04 超聲波傳感器基本上由一個振蕩晶體、一個發(fā)射器和接收器聲波脈沖以及電源引腳構(gòu)成。
傳感器發(fā)送高頻聲波。它們與路徑上的某個物體發(fā)生碰撞并返回傳感器,傳感器將捕獲它們。
最后,我們使用平均速度方程,如方程 1 所示,它允許我們計算聲波行進(jìn)的距離。
Espa?o (m) = Velocidade (m/s)* 速度 (s)
根據(jù)計算出的距離,LED 將被激活以指示有趣機器人與物體的接近程度。
要設(shè)置實驗,首先確保您的 Arduino 已通過斷開 USB 電纜的連接來關(guān)閉。現(xiàn)在,將組件連接起來,如下圖 5 所示。
根據(jù)圖 5 所示的接線圖,實驗由傳感器、arduino uno 電路、LED 和電阻器組成的電路組成。
使用的傳感器是 HC-SR04,它有 4 個引腳,電源引腳 (Vdc) 通過原型板連接到 arduino uno 的 5 伏電壓,以及它的 GND。
觸發(fā)引腳將連接到數(shù)字引腳 4,它負(fù)責(zé)每 10 微秒(微秒)發(fā)送一次脈沖。最后是連接到數(shù)字引腳 5 的 Echo 引腳。
正確連接電路后,根據(jù)完整代碼開始編程,如下圖所示。
//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
}
正確連接電路后,根據(jù)下面給出的代碼開始編程,該代碼說明了每個 LED 的數(shù)字引腳的定義、變量的初始化以及負(fù)責(zé)處理 Trigger 和 Echo 引腳上的信號的函數(shù)。
//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 函數(shù)。所有 LED 引腳都配置為數(shù)字輸出。代碼如下所示。
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 根據(jù)距離范圍觸發(fā)。void 循環(huán)函數(shù)中的代碼如下所示。
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 來發(fā)出距離信號。
從物體到有趣的機器人的距離越大,激活的 LED 數(shù)量就越多。
除此代碼外,還開發(fā)了一個特殊案例,它將接收超聲波傳感器、電阻器和 LED。Arduino 將與外部連接。
搞笑機器人案例如圖 12 所示。
從電路的組裝和arduino uno的編程,可以存儲教學(xué)案例橫向區(qū)域中使用的每個LED,以及將超聲波傳感器和對應(yīng)于所需螺釘?shù)目?a href='http://www.1cnz.cn/tags/耦合/' target='_blank' class='arckwlink_none'>耦合到結(jié)案。
這可以在圖 13 中看到。
緊接著,外殼的背面將存儲為 LED 選擇的電阻器。為此,為每個電阻器建模了一個小腔,如圖 14 所示。
為了最終確定控制結(jié)構(gòu),我們開發(fā)了NEXTPCB 印刷電路板。該板旨在幫助對有趣的機器人進(jìn)行編程。
NEXTPCB印刷電路板
從有趣的機器人項目中,開發(fā)了NEXTPCB 印刷電路板,如圖 15 所示。
該印刷電路板是根據(jù)以下電子原理圖開發(fā)的。
如果需要,您可以訪問此鏈接并下載所有文件以生產(chǎn)您的印刷電路板 - NEXTPCB Gerber 文件
從這個項目中,您將能夠組裝您的有趣機器人并使用NEXTPCB 印刷電路板獲得您的印刷電路板。
結(jié)論
因此,從這個項目的開發(fā)中,除了分析與NANO arduino的通信外,還可以了解HR-SR04超聲波傳感器的結(jié)構(gòu)并了解其操作。
當(dāng)傳感器發(fā)出聲波爆發(fā)時,實驗得出結(jié)論,在某些情況下,這些爆發(fā)與具有不均勻表面的結(jié)構(gòu)發(fā)生碰撞。
當(dāng)發(fā)生這種現(xiàn)象時,距離值有可能出現(xiàn)錯誤。您會注意到,在某些位置,不止一個 LED 會亮起。
致謝
我們感謝NEXTPCB 印刷電路板提供印刷電路板。
此外,我們要感謝Escola Rob? Lúdico do Brasil 對該項目的支持和發(fā)展。
- 有趣的小型delta機器人
- 瞳步迎賓講解機器人
- 瞳步消毒機器人方案
- ABB機器人CP中級應(yīng)用培訓(xùn) 11次下載
- 了解機器人電子教材下載 19次下載
- 機器人無線充電電路設(shè)計 47次下載
- 基于Matlab的機構(gòu)與機器人分析資料下載 11次下載
- 基于DSP和PC的農(nóng)業(yè)機器人控制系統(tǒng) 17次下載
- 基于DSP芯片的足球機器人實現(xiàn)與設(shè)計 26次下載
- 機器人弧焊FANUC Robot使用說明書下載 2次下載
- 機器人技術(shù)及其應(yīng)用說明 4次下載
- 使用單片機設(shè)計一個仿人機器人的散件清單和資料詳細(xì)說明 20次下載
- Arduino教學(xué)機器人的使用教程免費下載 37次下載
- 機器人設(shè)計教程之機器人控制和決策子系統(tǒng) 23次下載
- X-MEN I型人形機器人組裝說明書 1次下載
- 新松協(xié)作機器人智能工廠 1139次閱讀
- 面對疫情 醫(yī)療機器人能幫上什么忙? 2126次閱讀
- dfrobotminiQ 4WD教育機器人介紹 2108次閱讀
- 工業(yè)機器人編程入門_工業(yè)機器人的編程要求 9571次閱讀
- 機器人教育是什么_機器人教育發(fā)展前景 1873次閱讀
- 醫(yī)用機器人的定義_醫(yī)用機器人發(fā)展 3122次閱讀
- 醫(yī)用機器人的功能_醫(yī)用機器人分類 2227次閱讀
- 機器人控制器有哪些類型_機器人控制器發(fā)展 1.1w次閱讀
- 協(xié)作機器人的起源_為什么需要協(xié)作機器人 8127次閱讀
- 做好機器人得先學(xué)會選電機 2387次閱讀
- 如何利用減速器替代電機轉(zhuǎn)速控制機器人運動 4523次閱讀
- 機器視覺的機器人取代四臺傳統(tǒng)的火焰處理機器人 3270次閱讀
- 如何區(qū)分機器人、協(xié)作機器人和移動機器人? 6828次閱讀
- 軟體機器人 前所未見的機器人 3692次閱讀
- 機器人的最佳編程語言是什么?機器人十大流行編程語言匯總 3.4w次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應(yīng)用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關(guān)電源設(shè)計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅(qū)動電路設(shè)計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 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十天學(xué)會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多