資料介紹
描述
嗨,在花了幾個晚上做機(jī)器人之后,我決定與你分享我的上一份工作。一個基于 Arduino/ESP32 的機(jī)器人,能夠避開障礙物、跟蹤線路、跟隨并顯示來自攝像頭的實時視頻。
該機(jī)器人駕駛室通過藍(lán)牙(連接到Arduino)或WIFI(ESP32板連接到Arduino)進(jìn)行控制。
我希望以一種非常簡單的方式制作這個機(jī)器人的分步指南。
避障機(jī)器人是一種完全自主的機(jī)器人,它能夠避開移動時遇到的任何障礙物。簡單的說,當(dāng)它在前進(jìn)的過程中遇到障礙物時,會自動停止前進(jìn)并后退一步。然后它看起來左右兩側(cè)并開始以最佳方式移動,這意味著如果右側(cè)有另一個障礙物則向左方向移動,或者如果左側(cè)有另一個障礙物則向右方向移動。避障機(jī)器人非常有用,它是許多大型項目的基礎(chǔ),例如自動汽車、制造工廠中使用的機(jī)器人,甚至是航天器中使用的機(jī)器人。
線路跟蹤機(jī)器人使用一些紅外接近傳感器來檢測線路,并根據(jù)從傳感器接收到的輸入,Arduino 將在電機(jī)驅(qū)動器的幫助下引導(dǎo)電機(jī)移動。
跟隨機(jī)器人使用接近傳感器,可以檢測附近的任何物體并跟隨該物體。如果您來到機(jī)器人前面,它會開始跟隨您。該機(jī)器人由超聲波傳感器和紅外傳感器組成,有助于跟蹤物體。這就像機(jī)器人只有避障,但在工作中是相反的。它使用了 2 個紅外傳感器和一個超聲波傳感器。紅外傳感器用于跟隨人或物體,超聲波傳感器用于移動機(jī)器人。
藍(lán)牙機(jī)器人可以通過連接到 Arduino 的藍(lán)牙設(shè)備進(jìn)行控制。我開發(fā)了一個可以控制機(jī)器人方向和激活動作模式的 Android 應(yīng)用程序。
ESP32板可以通過WIFI傳輸實時視頻。我開發(fā)了一個 Android 應(yīng)用程序,您可以在其中看到機(jī)器人運動過程中的實時視頻。您可以將機(jī)器人用作物聯(lián)網(wǎng)設(shè)備。
補(bǔ)給品

組裝底部機(jī)箱

將底部機(jī)箱放在一個平面上,然后將雙 H 橋 L298N 安裝在其上(使用 4 個螺釘)。
注意雙 H 橋方向(參見圖片以供參考)。
使用較長的螺釘和螺母將 4 直流電機(jī)安裝在底盤上(參見圖片以供參考)。
按照架構(gòu)將 4 直流電機(jī)連接到雙 H 橋 L298N。請記住,雙 H 橋 L298N 能夠控制 2 個直流電機(jī),我們必須將右電機(jī)和左電機(jī)連接在一起。
使用孔將 5V 5 路跟蹤模塊組裝在底部機(jī)箱的前部位置(參見圖片以供參考)。對于此步驟,您必須使用 2 個印刷墊片和 2 個 M2 螺母/螺釘。
使用小 M3 螺釘將 4 Standoff M3x50mm 擰到底部機(jī)箱上。該支架將用于將底架與頂架固定
組裝頂部機(jī)箱

將頂部機(jī)箱放在平面上并將 Arduino 板安裝在其上(使用 4 個螺釘)。
將 Arduino Sensor Shield V5.0 放在 Arduino 板的頂部,注意將相應(yīng)的引腳耦合在一起。
用螺釘將 2 IR 傳感器安裝在機(jī)箱上。使用底盤上的定向支撐,以使傳感器定向為 30°。這一步很重要,因為紅外傳感器用于檢查機(jī)器人左右兩側(cè)的障礙物。
將 Micro 伺服 SG90 安裝在機(jī)箱方孔上。使用 2 個螺絲固定。
用螺絲將蜂鳴器模塊安裝在機(jī)箱上。使用正確方向的支撐。
用 2 顆螺絲將電池座安裝在機(jī)箱上。使用正確方向的支撐。
您現(xiàn)在已經(jīng)組裝了頂部和底部機(jī)箱。好工作。
讓我們繼續(xù)其他步驟。
準(zhǔn)備超聲波傳感器和 ESP32 CAM

使用 3D 打印面部支架并將超聲波傳感器 HC-SR04 插入 2 圓孔中。
然后將Holder安裝在已經(jīng)安裝在底盤上的微伺服上。
使用 4 母對母電纜連接超聲波傳感器 HC-SR04。
將 ESP32 Cam 安裝在 3D 打印的面部支架上。
使用 2 根母對母電纜(5V 和 GND)連接 ESP32 Cam。
接線組件

現(xiàn)在我們可以開始給智能汽車接線了。
在將機(jī)箱組裝在一起之前,我們必須將組件連接到底部機(jī)箱上,以便使用孔穿過。
使用 5 母-母電纜將跟蹤模塊 5V 5 路連接到底部機(jī)箱上。
使用 6 母-母電纜將雙 H 橋 L298N 連接到底部機(jī)箱上。
使用 2 公公電纜連接 GND、5V 端口。
將雙 H 橋上的 GND、12V 端口連接到電池座。重要提示:將電源開關(guān)置于 OFF 位置。
現(xiàn)在您可以使用頂部機(jī)箱上的孔穿過之前接線的母-母電纜。不要忘記微伺服電纜。
將 Top Cassis 放在頂部并使用 M3 螺釘將其與底部機(jī)箱固定。
現(xiàn)在我們可以繼續(xù)連接頂部機(jī)箱上的其他組件。
使用 3 根母對母電纜連接頂部機(jī)箱上的兩個 IR 傳感器。
使用 3 根母對母電纜連接頂部機(jī)箱上的蜂鳴器模塊。
嘗試使用彈性或類似的東西將所有電纜放在一起。
接線細(xì)節(jié):
L298N電機(jī)驅(qū)動器:
+12V → 鋰電池 (+)
GND → Lipo 電池 (-)重要:將 GND 連接到 lipo 電池 (-) 和 arduino 板的任何 GND 引腳
+5V → arduino Vin
EnA → arduino 數(shù)字引腳 3
In1 → arduino 數(shù)字引腳 4
In2 → arduino 數(shù)字引腳 5
In3 → arduino 數(shù)字引腳 6
In4 → arduino 數(shù)字引腳 7
EnB → arduino 數(shù)字引腳 11
OUT1 → 電機(jī) FWD+BWD 右
OUT2 → 電機(jī) FWD+BWD 右
OUT3 → 電機(jī) FWD+BWD 左
OUT4 → 電機(jī) FWD+BWD 左
蜂鳴器模塊:
GND → Arduino V
VCC → Arduino G
I/O → arduino 數(shù)字引腳 13
微伺服:
GND → Arduino V
VCC → Arduino G
IN → arduino 數(shù)字引腳 12
紅外右傳感器:
GND → Arduino V
VCC → Arduino G
OUT → arduino 數(shù)字引腳 2
紅外左傳感器:
GND → Arduino V
VCC → Arduino G
OUT → arduino 數(shù)字引腳 8
HC-SR04 超聲波
聲納傳感器:
VCC → Arduino URF +5V
Trig → arduino URF 模擬引腳 2
Echo → arduino URF 模擬引腳 3
GND → Arduino URF GND
跟蹤模塊:
GND → Arduino G
5V → Arduino V
OUT2 → arduino 模擬引腳 4
OUT3 → arduino 模擬引腳 1
OUT4 → arduino 模擬引腳 0
藍(lán)牙模塊 HC-06
GND → Arduino G
5V → Arduino V
TX → Arduino RX
RX → arduino TX
ESP32 凸輪
GND → Arduino G
5V → Arduino V
RX → arduino TX重要:連接時必須斷開藍(lán)牙
帶電壓讀取器的面包板

使用粘合劑將迷你面包板安裝在頂部機(jī)箱上。
使用公公電纜將雙 H 橋上的 12V 端口連接到面包板。
電池電壓(100k和1M電阻串聯(lián))
100k電阻→12V
100k/1M 電阻 → arduino 模擬引腳 5
1M電阻→arduino G
迷你面包板也可用于您自己的實驗!
完成組裝

現(xiàn)在您可以完成組裝 4 個塑料輪并將所有電線組合在一起的工作。
編程 Arduino UNO

創(chuàng)建一個名為 \Catosci_SmartCar 的文件夾并保存所有 .ino、.cpp 和 .h 文件。
在 Arduino IDE 上打開 Catosci_SmartCar.ino 文件并上傳到 Arduino 板。
重要提示:請記住在連接 USB 數(shù)據(jù)線之前斷開藍(lán)牙
/**********************************************************************
  Filename    : Catosci_SmartCar.ino
  Product     : Catosci 4WD Car for UNO
  Description : A Multifunctional Bluetooth Remote Car.
  Auther      : Carlo Iurisci
  Modification: 2022/03/25
**********************************************************************/
#include "Catosci_4WD_Car_for_Arduino.h"
#include "Automatic_Obstacle_Avoidance_Mode.h"
#include "Automatic_Tracking_Line_Mode.h"
#include "BluetoothOrders.h"
#define UPLOAD_VOL_TIME    3000
#define UPLOAD_DATA_TIME   500
#define COMMANDS_COUNT_MAX  8
#define INTERVAL_CHAR '@'
//#define DEBUG
u32 lastUploadVoltageTime;
u32 lastUploadDataTime;
String inputStringBLE = "";
bool stringComplete = false;
int paramters[COMMANDS_COUNT_MAX], paramterCount = 0;
int bleCarMode = MODE_NONE;
void setup() {
  pinsSetup();
  Serial.begin(9600);
  servoSetup();
//  while (!strip.begin());
//  strip.setAllLedsColor(0xFF0000);
}
void loop() {
  // invia misura Vbatteria all'App ogni UPLOAD_VOL_TIME
  upLoadVoltageToApp();
  // invia lettura sensori all'App ogni UPLOAD_DATA_TIME
  upLoadAndReadSonarValueToApp();
  
  if (stringComplete) {         //da eseguiro solo alla ricezione di un comando
    String inputCommandArray[COMMANDS_COUNT_MAX];
    String inputStringTemp = inputStringBLE;
    for (u8 i = 0; i < COMMANDS_COUNT_MAX; i++) {
      int index = inputStringTemp.indexOf(INTERVAL_CHAR);
      if (index < 0) {
        break;
      }
      paramterCount = i;  //
      inputCommandArray[i] = inputStringTemp.substring(0, index);
      inputStringTemp = inputStringTemp.substring(index + 1);
      paramters[i] = inputCommandArray[i].toInt();
    }
    stringComplete = false;
    inputStringBLE = "";
    char commandChar = inputCommandArray[0].charAt(0);
    switch (commandChar)
    {
      case ACTION_MOVE:
        if (paramterCount == 2) {
          motorRun(paramters[1], paramters[2]); //app contol catoscicar_speed is 0 ~ 100 ,pwm is 0~255
        }
        break;
      case ACTION_CAR_MODE:
        if (paramterCount == 1) {
          bleCarMode = paramters[1];
          switch (bleCarMode)
          {
            case MODE_NONE: case MODE_GRAVITY:
              resetCarAction();
              writeServo(OA_SERVO_CENTER);
              break;
            case MODE_ULTRASONIC: 
              oa_CalculateVoltageCompensation();
              break;
            case MODE_ULTRASONIC_NOIR:
              oa_CalculateVoltageCompensation();
              break;
            case MODE_FOLLOW:
              oa_CalculateVoltageCompensation();
              break;           
            case MODE_TRACKING:
              tk_CalculateVoltageCompensation();
              break;
            default:
              break;
          }
        }
        break;
      case ACTION_BUZZER:
        if (paramterCount == 1) {
          setBuzzer(paramters[1]);
        }
        break;
      default:
        break;
    }
  }
  switch (bleCarMode) //loop per modalità di controllo
  {
    case MODE_NONE: case MODE_GRAVITY:
      break;
    case MODE_ULTRASONIC: 
      updateAutomaticObstacleAvoidance();
      break;
    case MODE_ULTRASONIC_NOIR:
      updateAutomaticObstacleAvoidanceNoInfrared();
      break;
    case MODE_FOLLOW:
      UltrasonicFollow();
      break;           
    case MODE_TRACKING:
      updateAutomaticTrackingLine();
      break;
    default:
      break;
  }
void upLoadVoltageToApp() {
  int voltage = 0;
  if (millis() - lastUploadVoltageTime > UPLOAD_VOL_TIME) {
    if (getBatteryVoltage()) {
      voltage = batteryVoltage * 1000;
    }
    String sendString = String(ACTION_GET_VOLTAGE) + String(INTERVAL_CHAR) + String((voltage)) + String(INTERVAL_CHAR);
    Serial.println(sendString);
    
    lastUploadVoltageTime = millis();
  }
}
void upLoadAndReadSonarValueToApp() {
  // invia lettura sensori all'App
  if (millis() - lastUploadDataTime > UPLOAD_DATA_TIME) {
    String sendString = String(ACTION_ULTRASONIC)+String(INTERVAL_CHAR)+String(getSonar());
    sendString += String(INTERVAL_CHAR)+ String(digitalRead(IR_AVOIDANCE_RIGHT_PIN));
    sendString += String(INTERVAL_CHAR) + String(digitalRead(IR_AVOIDANCE_LEFT_PIN)) + String(INTERVAL_CHAR);
    Serial.println(sendString);
    
    lastUploadDataTime = millis();
  }
}
void serialEvent() {
  while (Serial.available()) {
    char inChar = (char)Serial.read();
    inputStringBLE += inChar;
    if (inChar == '\n') {
      stringComplete = true;
      Serial.println(inputStringBLE);
    }
  }
}
		上傳完成后,代碼將開始運行。
迷你伺服將定位到 90°。
重要提示:如果需要,將面支架重新定位在伺服器上。
您現(xiàn)在可以使用串行命令測試機(jī)器人運動和動作模式。
以下是串行命令的說明:
#define ACTION_MOVE        'A'  //control movement of the smartcar A#speedl#speedr#
#define ACTION_CAR_MODE    'H'  //smartcar mode.
//        H#MODE_NONE->stop
//        H#MODE_GRAVITY->stop
//        H#MODE_ULTRASONIC->obstacle avoidance with sonar and ir
//        H#MODE_ULTRASONIC_NOIR->obstacle avoidance with sonar and no-ir
//        H#MODE_TRACKING->tracking with ir
//        H#MODE_FOLLOW->follow with sonar and ir
#define ACTION_BUZZER      'D'  //control buzzer          D#1# buzzer on / D#0# buzzer off
#define MODE_NONE            0
#define MODE_GRAVITY         1
#define MODE_ULTRASONIC      2
#define MODE_ULTRASONIC_NOIR 3
#define MODE_TRACKING        4
#define MODE_FOLLOW          5
		編程 ESP32 CAM

現(xiàn)在是時候?qū)?ESP32 CAM 進(jìn)行編程以傳輸實時視頻了。按照本教程使用 FTDI 編程器將 ESP32 CAM 連接到您的筆記本電腦/計算機(jī) USB。
https://randomnerdtutorials.com/program-upload-code-esp32-cam/
創(chuàng)建一個名為\esp32cam-robot的文件夾并保存 app_httpd.cpp ,esp32cam-robot.ino。
在 Arduino IDE 上打開esp32cam-robot.ino文件。
在上傳代碼之前,您需要在以下變量中插入您的網(wǎng)絡(luò)憑據(jù):
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
		然后,單擊Arduino IDE 中的上傳按鈕
當(dāng)您開始在調(diào)試窗口上看到一些點時,按下 ESP32-CAM 板載 RST 按鈕。
幾秒鐘后,代碼應(yīng)該成功上傳到您的板上。
當(dāng)您看到“ Done uploading ”消息時,您需要從 GND 移除 GPIO 0 并按下 RST 按鈕以運行您的新代碼。
在串行監(jiān)視器上,您應(yīng)該看到類似這樣的內(nèi)容。記下 ESP32 IP 地址。
20:43:13.775 -> ..........
20:43:18.265 -> WiFi connected
20:43:18.265 -> Camera Ready! Use 'http://192.168.1.27' to connect
20:43:18.359 -> Starting web server on port: '80'
20:43:18.359 -> Starting stream server on port: '81'
		安卓應(yīng)用

您現(xiàn)在可以使用我開發(fā)的應(yīng)用程序通過藍(lán)牙控制機(jī)器人并通過 wifi 觀看實時視頻。
?
- 構(gòu)建ESP32 MicroPython Wifi的機(jī)器人汽車
 - Arduino機(jī)器人開源
 - 如何制作ESP32 CAM板監(jiān)控機(jī)器人汽車
 - Arduino繪圖機(jī)器人開源分享
 - 基于ESP32 CAM的人工智能機(jī)器人 6次下載
 - 基于ESP32-CAM的監(jiān)控RC機(jī)器人 1次下載
 - Arduino機(jī)器人開源項目
 - 使用Websockets創(chuàng)建自己的ESP32機(jī)器人汽車
 - Arduino Uno迷你機(jī)器人開源分享
 - Arduino機(jī)器人開源分享
 - Arduino機(jī)器人Ludos開源
 - PCB ESP32基礎(chǔ)機(jī)器人
 - arduino / VScode+platformIO搭建esp32/esp8266編譯環(huán)境(一篇足矣)
 - ESP32 開發(fā)之旅② Arduino For ESP32說明
 - Arduino教學(xué)機(jī)器人的使用教程免費下載 38次下載
 
- ESP32能取代STM32嗎?哪個更好? 1.3w次閱讀
 - 字節(jié)發(fā)布機(jī)器人領(lǐng)域首個開源視覺-語言操作大模型,激發(fā)開源VLMs更大潛能 561次閱讀
 - 基于ESP32開發(fā)的螞蟻機(jī)器人方案 1234次閱讀
 - 機(jī)器人技術(shù)中常用的路徑規(guī)劃算法的開源庫 1188次閱讀
 - 什么是ESP32-CAM攝像頭? 2.4w次閱讀
 - 使用ESP32實現(xiàn)UDP通信的方法 6519次閱讀
 - ESP8266/ESP32自動下載原理 4741次閱讀
 - 如何使用Arduino制造一個自動平衡機(jī)器人 4833次閱讀
 - 如何在ESP32上使用代碼運行TensorFlow模型? 4818次閱讀
 - 面對疫情 醫(yī)療機(jī)器人能幫上什么忙? 2236次閱讀
 - dfrobotSparki機(jī)器人套裝簡介 2207次閱讀
 - dfrobotRomeo BLE多合一控制器簡介 2557次閱讀
 - dfrobotRomeo 三合一Arduino兼容控制器介紹 2580次閱讀
 - 協(xié)作機(jī)器人的起源_為什么需要協(xié)作機(jī)器人 8322次閱讀
 - 機(jī)器人離線編程與機(jī)器人編程趨勢 6243次閱讀
 
下載排行
本周
- 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單片機(jī)與C語言視頻教程 下載
 - 158M | 183279次下載 | 免費
 - 8proe5.0野火版下載(中文版免費下載)
 - 未知 | 138040次下載 | 免費
 
	                電子發(fā)燒友App
	            
	        
	        
          
        
        
	                    
                        
                        
                        
                        
                        


創(chuàng)作
發(fā)文章
發(fā)帖  
提問  
發(fā)資料
發(fā)視頻
上傳資料賺積分
           
            
            
                
            
評論