精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

電子發燒友App

硬聲App

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

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

3天內不再提示
電子發燒友網>電子資料下載>電子資料>Arduino ESP32多合一機器人開源

Arduino ESP32多合一機器人開源

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

資料介紹

描述

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

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

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

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

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

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

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

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

補給品

pYYBAGNPQvCAEHGHAAkBtLc4qJA850.jpg
?

組裝底部機箱

?
?
?
pYYBAGNPQvaAceucAAZwGZwEIHs887.jpg
?
1 / 11
?

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

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

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

按照架構將 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°。這一步很重要,因為紅外傳感器用于檢查機器人左右兩側的障礙物。

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

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

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

您現在已經組裝了頂部和底部機箱。好工作。

讓我們繼續其他步驟。

準備超聲波傳感器和 ESP32 CAM

?
?
?
pYYBAGNPQwGAcvCuAAMqxE1uDiQ050.jpg
?
1 / 5
?

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

然后將Holder安裝在已經安裝在底盤上的微伺服上。

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

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

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

接線組件

?
?
?
poYBAGNPQwOAE6gPAAD0AQQpZcg065.jpg
?
1 / 9
?

現在我們可以開始給智能汽車接線了。

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

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

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

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

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

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

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

現在我們可以繼續連接頂部機箱上的其他組件。

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

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

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

接線細節:

L298N電機驅動器:

+12V → 鋰電池 (+)

GND → Lipo 電池 (-)重要:將 GND 連接到 lipo 電池 (-) 和 arduino 板的任何 GND 引腳

+5V → arduino Vin

EnA → arduino 數字引腳 3

In1 → arduino 數字引腳 4

In2 → arduino 數字引腳 5

In3 → arduino 數字引腳 6

In4 → arduino 數字引腳 7

EnB → arduino 數字引腳 11

OUT1 → 電機 FWD+BWD 右

OUT2 → 電機 FWD+BWD 右

OUT3 → 電機 FWD+BWD 左

OUT4 → 電機 FWD+BWD 左

蜂鳴器模塊:

GND → Arduino V

VCC → Arduino G

I/O → arduino 數字引腳 13

微伺服:

GND → Arduino V

VCC → Arduino G

IN → arduino 數字引腳 12

紅外右傳感器:

GND → Arduino V

VCC → Arduino G

OUT → arduino 數字引腳 2

紅外左傳感器:

GND → Arduino V

VCC → Arduino G

OUT → arduino 數字引腳 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電阻串聯)

100k電阻→12V

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

1M電阻→arduino G

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

完成組裝

?
?
?
poYBAGNPQuyAGBHRAAdKjx19z3s193.jpg
?
1 / 2
?

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

編程 Arduino UNO

poYBAGNPQwyAML5lAADe6n13y00234.jpg

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

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

重要提示:請記住在連接 USB 數據線之前斷開藍牙
/**********************************************************************
  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°。

重要提示:如果需要,將面支架重新定位在伺服器上。

您現在可以使用串行命令測試機器人運動和動作模式。

以下是串行命令的說明:

#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
?

現在是時候對 ESP32 CAM 進行編程以傳輸實時視頻了。按照本教程使用 FTDI 編程器將 ESP32 CAM 連接到您的筆記本電腦/計算機 USB。

https://randomnerdtutorials.com/program-upload-code-esp32-cam/

創建一個名為\esp32cam-robot的文件夾并保存 app_httpd.cpp ,esp32cam-robot.ino。

在 Arduino IDE 上打開esp32cam-robot.ino文件。

在上傳代碼之前,您需要在以下變量中插入您的網絡憑據:

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

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

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

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

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

在串行監視器上,您應該看到類似這樣的內容。記下 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
?

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

?


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

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數據手冊
  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開發指南
  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數字電路基礎pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅動電路設計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  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次下載  |  免費