資料介紹
描述
能夠測量分隔兩個位置的距離的需求可以在我們日常生活的不同領域有許多應用。
從獲得兩個位置之間足夠距離的那一刻起,就可以通過執行這些功能的算法來開發和設計自動門系統、安全系統、監控和各種自動化系統。
從那里,您將學習如何組裝有趣的機器人。這個有趣的機器人是一個小型機器人,它使用帶有 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中級應用培訓 12次下載
- 了解機器人電子教材下載 19次下載
- 機器人無線充電電路設計 49次下載
- 基于Matlab的機構與機器人分析資料下載 13次下載
- 基于DSP和PC的農業機器人控制系統 18次下載
- 基于DSP芯片的足球機器人實現與設計 27次下載
- 機器人弧焊FANUC Robot使用說明書下載 2次下載
- 機器人技術及其應用說明 4次下載
- 使用單片機設計一個仿人機器人的散件清單和資料詳細說明 20次下載
- Arduino教學機器人的使用教程免費下載 38次下載
- 機器人設計教程之機器人控制和決策子系統 25次下載
- X-MEN I型人形機器人組裝說明書 1次下載
- 新松協作機器人智能工廠 1402次閱讀
- 面對疫情 醫療機器人能幫上什么忙? 2236次閱讀
- dfrobotminiQ 4WD教育機器人介紹 2240次閱讀
- 工業機器人編程入門_工業機器人的編程要求 9787次閱讀
- 機器人教育是什么_機器人教育發展前景 1975次閱讀
- 醫用機器人的定義_醫用機器人發展 3257次閱讀
- 醫用機器人的功能_醫用機器人分類 2462次閱讀
- 機器人控制器有哪些類型_機器人控制器發展 1.2w次閱讀
- 協作機器人的起源_為什么需要協作機器人 8322次閱讀
- 做好機器人得先學會選電機 2498次閱讀
- 如何利用減速器替代電機轉速控制機器人運動 4646次閱讀
- 機器視覺的機器人取代四臺傳統的火焰處理機器人 3370次閱讀
- 如何區分機器人、協作機器人和移動機器人? 7029次閱讀
- 軟體機器人 前所未見的機器人 3770次閱讀
- 機器人的最佳編程語言是什么?機器人十大流行編程語言匯總 3.5w次閱讀
下載排行
本周
- 1Eurotherm TKS Temperature 用戶手冊
- 1.46 MB | 2次下載 | 免費
- 2無線系統中天線和RF元件電磁建模
- 7.48 MB | 1次下載 | 4 積分
- 3納祥科技NX6806中文規格書,8位AD和DA單片機拓展,國產替代PCF8591
- 3.04 MB | 1次下載 | 免費
- 4藍牙無線遙控小車
- 10.49 MB | 1次下載 | 2 積分
- 5Multisim模擬電路仿真教程
- 1.93 MB | 1次下載 | 3 積分
- 6MNGate系列智能網關詳細使用手冊
- 11.62 MB | 次下載 | 2 積分
- 7PC3302 7V 1.5A 1.25MHz升壓10白光LED驅動器英文手冊
- 1.04 MB | 次下載 | 免費
- 8FCO-3C-WT|超寬溫晶體振蕩器
- 4.87 MB | 次下載 | 免費
本月
- 1晶體三極管的電流放大作用詳細說明
- 0.77 MB | 32次下載 | 2 積分
- 2Python從入門到精通背記手冊
- 18.77 MB | 25次下載 | 1 積分
- 3雙極型三極管放大電路的三種基本組態的學習課件免費下載
- 4.03 MB | 23次下載 | 1 積分
- 4多級放大電路的學習課件免費下載
- 1.81 MB | 21次下載 | 2 積分
- 5九陽豆漿機高清原理圖
- 2.47 MB | 16次下載 | 1 積分
- 61875功放原理圖
- 0.04 MB | 11次下載 | 免費
- 7SW6306V AACC四口多協議升降壓移動電源SOC中文手冊
- 1.20 MB | 10次下載 | 1 積分
- 8東芝彩色電視機29SF6C維修說明書
- 4.86 MB | 9次下載 | 1 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935127次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
- 1.48MB | 420063次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191382次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183337次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81585次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73814次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65988次下載 | 10 積分
評論