電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>如何組裝有趣的機器人

如何組裝有趣的機器人

2022-12-01 | zip | 0.06 MB | 次下載 | 免費

資料介紹

描述

能夠測量分隔兩個位置的距離的需求可以在我們?nèi)粘I畹牟煌I(lǐng)域有許多應(yīng)用。

從獲得兩個位置之間足夠距離的那一刻起,就可以通過執(zhí)行這些功能的算法來開發(fā)和設(shè)計自動門系統(tǒng)、安全系統(tǒng)、監(jiān)控和各種自動化系統(tǒng)。

從那里,您將學(xué)習(xí)如何組裝有趣的機器人。這個有趣的機器人是一個小型機器人,它使用帶有 LED 和超聲波傳感器的教學(xué)案例來計算距離。

其案例如圖1所示。

poYBAGNtnC2AByb9AAB8FSQBRG0414.jpg
圖 1 - 實施 HC-SR04 超聲波傳感器的教學(xué)案例。
?

對于這個教學(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 所示。

pYYBAGNtnEKAfVV_AAgIyTMGc34249.jpg
圖 2 - 為超聲波傳感器的操作建議的電路。
?

超聲波傳感器發(fā)出的信號類似于在空間中傳播的波,通過這種方式,它將檢測到離物體最近的結(jié)構(gòu),如圖 3 所示。

HC-SR04 超聲波傳感器基本上由一個振蕩晶體、一個發(fā)射器和接收器聲波脈沖以及電源引腳構(gòu)成。

傳感器發(fā)送高頻聲波。它們與路徑上的某個物體發(fā)生碰撞并返回傳感器,傳感器將捕獲它們。

最后,我們使用平均速度方程,如方程 1 所示,它允許我們計算聲波行進的距離。

Espa?o (m) = Velocidade (m/s)* 速度 (s)

根據(jù)計算出的距離,LED 將被激活以指示有趣機器人與物體的接近程度。

要設(shè)置實驗,首先確保您的 Arduino 已通過斷開 USB 電纜的連接來關(guān)閉。現(xiàn)在,將組件連接起來,如下圖 5 所示。

poYBAGNtnEmAQ_9rAAFnKlmpWAg991.png
圖 5 - 建議電路的接線圖。
?

根據(jù)圖 5 所示的接線圖,實驗由傳感器、arduino uno 電路、LED 和電阻器組成的電路組成。

使用的傳感器是 HC-SR04,它有 4 個引腳,電源引腳 (Vdc) 通過原型板連接到 arduino uno 的 5 伏電壓,以及它的 GND。

觸發(fā)引腳將連接到數(shù)字引腳 4,它負責(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ù)字引腳的定義、變量的初始化以及負責(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 所示。

pYYBAGOIFnCAI3fvAAB6CiriFbM097.jpg
圖 12- 用于超聲波傳感器、電阻器和 LED 的教學(xué)案例。
?

從電路的組裝和arduino uno的編程,可以存儲教學(xué)案例橫向區(qū)域中使用的每個LED,以及將超聲波傳感器和對應(yīng)于所需螺釘?shù)目?a href='http://srfitnesspt.com/tags/耦合/' target='_blank' class='arckwlink_none'>耦合到結(jié)案。

這可以在圖 13 中看到。

poYBAGNtnC2AByb9AAB8FSQBRG0414.jpg
圖 13 - 將 LED 和傳感器安裝到外殼上。
?

緊接著,外殼的背面將存儲為 LED 選擇的電阻器。為此,為每個電阻器建模了一個小腔,如圖 14 所示。

poYBAGOIN6WADzRUAAB602PnUdc557.jpg
圖 14 - 用于存放電阻器的后殼結(jié)構(gòu)。
?

為了最終確定控制結(jié)構(gòu),我們開發(fā)了NEXTPCB 印刷電路板該板旨在幫助對有趣的機器人進行編程。

NEXTPCB印刷電路板

從有趣的機器人項目中,開發(fā)了NEXTPCB 印刷電路板,如圖 15 所示。

poYBAGOIN6iAEMu2AADHJhPkQ5s731.png
圖 15 - 有趣的機器人 NEXTPCB 印刷電路板。
?

該印刷電路板是根據(jù)以下電子原理圖開發(fā)的。

poYBAGOIN6uAIx5rAAMsd0Vz0n8527.png
圖 15 - 控制滑稽機器人的電子原理圖。
?

如果需要,您可以訪問此鏈接并下載所有文件以生產(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ā)展。


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應(yīng)用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關(guān)電源設(shè)計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅(qū)動電路設(shè)計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學(xué)會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費