電子發(fā)燒友App

硬聲App

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

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

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>Arduino ESP32多合一機器人開源

Arduino ESP32多合一機器人開源

2022-10-21 | zip | 0.28 MB | 次下載 | 2積分

資料介紹

描述

嗨,在花了幾個晚上做機器人之后,我決定與你分享我的上一份工作。一個基于 Arduino/ESP32 的機器人,能夠避開障礙物、跟蹤線路、跟隨并顯示來自攝像頭的實時視頻

該機器人駕駛室通過藍牙(連接到Arduino)或WIFI(ESP32板連接到Arduino)進行控制。

我希望以一種非常簡單的方式制作這個機器人的分步指南。

避障機器人是一種完全自主的機器人,它能夠避開移動時遇到的任何障礙物。簡單的說,當它在前進的過程中遇到障礙物時,會自動停止前進并后退一步。然后它看起來左右兩側(cè)并開始以最佳方式移動,這意味著如果右側(cè)有另一個障礙物則向左方向移動,或者如果左側(cè)有另一個障礙物則向右方向移動。避障機器人非常有用,它是許多大型項目的基礎,例如自動汽車、制造工廠中使用的機器人,甚至是航天器中使用的機器人。

線路跟蹤機器人使用一些紅外接近傳感器檢測線路,并根據(jù)從傳感器接收到的輸入,Arduino 將在電機驅(qū)動器的幫助下引導電機移動。

跟隨機器人使用接近傳感器,可以檢測附近的任何物體并跟隨該物體。如果您來到機器人前面,它會開始跟隨您。該機器人由超聲波傳感器和紅外傳感器組成,有助于跟蹤物體。這就像機器人只有避障,但在工作中是相反的。它使用了 2 個紅外傳感器和一個超聲波傳感器。紅外傳感器用于跟隨人或物體,超聲波傳感器用于移動機器人。

藍牙機器人可以通過連接到 Arduino 的藍牙設備進行控制。我開發(fā)了一個可以控制機器人方向和激活動作模式的 Android 應用程序。

ESP32板可以通過WIFI傳輸實時視頻。我開發(fā)了一個 Android 應用程序,您可以在其中看到機器人運動過程中的實時視頻。您可以將機器人用作物聯(lián)網(wǎng)設備。

補給品

pYYBAGNPQvCAEHGHAAkBtLc4qJA850.jpg
?

組裝底部機箱

?
?
?
pYYBAGNPQvaAceucAAZwGZwEIHs887.jpg
?
1 / 11
?

將底部機箱放在一個平面上,然后將雙 H 橋 L298N 安裝在其上(使用 4 個螺釘)。

注意雙 H 橋方向(參見圖片以供參考)。

使用較長的螺釘和螺母將 4 直流電機安裝在底盤上(參見圖片以供參考)。

按照架構(gòu)將 4 直流電機連接到雙 H 橋 L298N。請記住,雙 H 橋 L298N 能夠控制 2 個直流電機,我們必須將右電機和左電機連接在一起。

使用孔將 5V 5 路跟蹤模塊組裝在底部機箱的前部位置(參見圖片以供參考)。對于此步驟,您必須使用 2 個印刷墊片和 2 個 M2 螺母/螺釘。

使用小 M3 螺釘將 4 Standoff M3x50mm 擰到底部機箱上。該支架將用于將底架與頂架固定

組裝頂部機箱

?
?
?
poYBAGNPQvuAI3N0AAjbOilL3v0733.jpg
?
1 / 6
?

將頂部機箱放在平面上并將 Arduino 板安裝在其上(使用 4 個螺釘)。

將 Arduino Sensor Shield V5.0 放在 Arduino 板的頂部,注意將相應的引腳耦合在一起。

用螺釘將 2 IR 傳感器安裝在機箱上。使用底盤上的定向支撐,以使傳感器定向為 30°。這一步很重要,因為紅外傳感器用于檢查機器人左右兩側(cè)的障礙物。

將 Micro 伺服 SG90 安裝在機箱方孔上。使用 2 個螺絲固定。

用螺絲將蜂鳴器模塊安裝在機箱上。使用正確方向的支撐。

用 2 顆螺絲將電池座安裝在機箱上。使用正確方向的支撐。

您現(xiàn)在已經(jīng)組裝了頂部和底部機箱。好工作。

讓我們繼續(xù)其他步驟。

準備超聲波傳感器和 ESP32 CAM

?
?
?
pYYBAGNPQwGAcvCuAAMqxE1uDiQ050.jpg
?
1 / 5
?

使用 3D 打印面部支架并將超聲波傳感器 HC-SR04 插入 2 圓孔中。

然后將Holder安裝在已經(jīng)安裝在底盤上的微伺服上。

使用 4 母對母電纜連接超聲波傳感器 HC-SR04。

將 ESP32 Cam 安裝在 3D 打印的面部支架上。

使用 2 根母對母電纜(5V 和 GND)連接 ESP32 Cam。

接線組件

?
?
?
poYBAGNPQwOAE6gPAAD0AQQpZcg065.jpg
?
1 / 9
?

現(xiàn)在我們可以開始給智能汽車接線了。

在將機箱組裝在一起之前,我們必須將組件連接到底部機箱上,以便使用孔穿過。

使用 5 母-母電纜將跟蹤模塊 5V 5 路連接到底部機箱上。

使用 6 母-母電纜將雙 H 橋 L298N 連接到底部機箱上。

使用 2 公公電纜連接 GND、5V 端口。

將雙 H 橋上的 GND、12V 端口連接到電池座。重要提示:將電源開關置于 OFF 位置。

現(xiàn)在您可以使用頂部機箱上的孔穿過之前接線的母-母電纜。不要忘記微伺服電纜。

將 Top Cassis 放在頂部并使用 M3 螺釘將其與底部機箱固定。

現(xiàn)在我們可以繼續(xù)連接頂部機箱上的其他組件。

使用 3 根母對母電纜連接頂部機箱上的兩個 IR 傳感器。

使用 3 根母對母電纜連接頂部機箱上的蜂鳴器模塊。

嘗試使用彈性或類似的東西將所有電纜放在一起。

接線細節(jié):

L298N電機驅(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 → 電機 FWD+BWD 右

OUT2 → 電機 FWD+BWD 右

OUT3 → 電機 FWD+BWD 左

OUT4 → 電機 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

藍牙模塊 HC-06

GND → Arduino G

5V → Arduino V

TX → Arduino RX

RX → arduino TX

ESP32 凸輪

GND → Arduino G

5V → Arduino V

RX → arduino TX重要:連接時必須斷開藍牙

帶電壓讀取器的面包板

pYYBAGNPQwWAbklDAAAXw-B90uo215.jpg
?

使用粘合劑將迷你面包板安裝在頂部機箱上。

使用公公電纜將雙 H 橋上的 12V 端口連接到面包板。

電池電壓(100k和1M電阻串聯(lián))

100k電阻→12V

100k/1M 電阻 → arduino 模擬引腳 5

1M電阻→arduino G

迷你面包板也可用于您自己的實驗!

完成組裝

?
?
?
poYBAGNPQuyAGBHRAAdKjx19z3s193.jpg
?
1 / 2
?

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

編程 Arduino UNO

poYBAGNPQwyAML5lAADe6n13y00234.jpg

創(chuàng)建一個名為 \Catosci_SmartCar 的文件夾并保存所有 .ino、.cpp 和 .h 文件。

在 Arduino IDE 上打開 Catosci_SmartCar.ino 文件并上傳到 Arduino 板。

重要提示:請記住在連接 USB 數(shù)據(jù)線之前斷開藍牙
/**********************************************************************
  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)在可以使用串行命令測試機器人運動和動作模式。

以下是串行命令的說明:

#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

pYYBAGNPQw6AMhySAABLarQ6hQ4876.jpg
?

現(xiàn)在是時候?qū)?ESP32 CAM 進行編程以傳輸實時視頻了。按照本教程使用 FTDI 編程器將 ESP32 CAM 連接到您的筆記本電腦/計算機 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)絡憑據(jù):

const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

然后,單擊Arduino IDE 中的上傳按鈕

當您開始在調(diào)試窗口上看到一些點時,按下 ESP32-CAM 板載 RST 按鈕。

幾秒鐘后,代碼應該成功上傳到您的板上。

當您看到“ Done uploading ”消息時,您需要從 GND 移除 GPIO 0 并按下 RST 按鈕以運行您的新代碼。

在串行監(jiān)視器上,您應該看到類似這樣的內(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'

安卓應用

?
?
?
poYBAGNPQxGAYoMQAAGNrdIG7Mo555.jpg
?
1 / 2
?

您現(xiàn)在可以使用我開發(fā)的應用程序通過藍牙控制機器人并通過 wifi 觀看實時視頻。

?


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

評論

查看更多

下載排行

本周

  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元宇宙深度解析—未來的未來-風口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關電源設計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數(shù)字電路基礎pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅(qū)動電路設計》 溫德爾著
  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十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費