首页 » 软件优化 » 基于 Arduino/ESP32 的智能机器人(机器人蓝牙智能引脚电机)

基于 Arduino/ESP32 的智能机器人(机器人蓝牙智能引脚电机)

南宫静远 2024-07-24 03:52:36 0

扫一扫用手机浏览

文章目录 [+]

首先我们来看看机器人小车的功能:

1)避障:能够避开移动时遇到的任何障碍物。
简单的说,当在前进的过程中遇到障碍物时,小车会自动停止前进并后退一步。
然后观察左右两侧并开始以最佳方式移动。

2)巡线跟踪:使用红外接近传感器来检测线路,并根据从传感器接收到的输入,Arduino 将在电机驱动器的帮助下引导电机移动。

基于 Arduino/ESP32 的智能机器人(机器人蓝牙智能引脚电机) 软件优化
(图片来自网络侵删)

3)跟随:机器人使用接近传感器,可以检测附近的任何物体并跟随该物体。
如果有人来到机器人前面,它会开始跟随。
该机器人由超声波传感器和红外传感器组成,有助于跟踪物体。
它使用了 2 个红外传感器和一个超声波传感器。
红外传感器用于跟随人或物体,超声波传感器用于移动机器人。

4)蓝牙:可以通过连接到 Arduino 的蓝牙设备进行控制。
开发了一个可以控制机器人方向和激活动作模式的 Android 应用程序。

5)WIFI传输实时视频:开发了一个 Android 应用程序,可以在其中看到机器人运动过程中的实时视频,也可以将机器人用作物联网设备。

项目的主要组成:

Arduino UNOEsp32-CamArduino Sensor Shield V5.0SparkFun 双 H 桥电机驱动器 L298直流电机,12 V跟踪模块 5V 5 路红外传感器、蜂鸣器超声波传感器 - HC-SR04SG90微型伺服电机HC-06 蓝牙模块

除以上主要器件板卡之外,还包含底座、电池座、轮子、线缆的配套器件。

组装机器人底部

将底部机箱放在一个平面上,然后将双 H 桥 L298N 安装在其上(使用 4 个螺钉)。
注意双 H 桥方向。
双 H 桥 L298N 能够控制 2 个直流电机,我们必须将右电机和左电机连接在一起。

组装组装顶部机箱

1)将顶部机箱放在平面上并将 Arduino 板安装在其上(使用 4 个螺钉)。

2)将 Arduino Sensor Shield V5.0 放在 Arduino 板的顶部,注意将相应的引脚耦合在一起。

3)用螺钉将 2个 IR 传感器安装在机箱上。
使用底盘上的定向支撑,以使传感器定向为 30°。
这一步很重要,因为红外传感器用于检查机器人左右两侧的障碍物。

4)将 Micro 伺服 SG90 安装在机箱方孔上。
使用 2 个螺丝固定。

5)用螺丝将蜂鸣器模块、电池底座安装在机箱上。

超声波传感器和 ESP32-CAM

使用 3D 打印面部支架并将超声波传感器 HC-SR04 插入 2 圆孔中。
将Holder安装在已经安装在底盘上的微伺服上。
使用 4 母对母电缆连接超声波传感器 HC-SR04。
将 ESP32 Cam 安装在 3D 打印的面部支架上。
使用 2 根母对母电缆(5V 和 GND)连接 ESP32 Cam。

接线组件

现在我们可以开始接线了,Arduino Sensor Shield板卡接线方式如下:

接线细节:

L298N电机驱动器:

+12V → 锂电池 (+);+5V → Arduino Vin

GND → Lipo 电池 (-)或 Arduino 板的任何 GND 引脚

EnA、EnB → Arduino 数字引脚 3、11

In1、2、3、4 → Arduino 数字引脚 4、5、6、7

OUT1 → 电机 FWD+BWD 右

OUT2 → 电机 FWD+BWD 右

OUT3 → 电机 FWD+BWD 左

OUT4 → 电机 FWD+BWD 左

蜂鸣器模块:I/O → Arduino 数字引脚 13

微伺服:IN → Arduino 数字引脚 12

红外右传感器:OUT → arduino 数字引脚 2

红外左传感器:OUT → arduino 数字引脚 8

HC-SR04 超声波:

Trig → Arduino URF 模拟引脚 2

Echo → Arduino URF 模拟引脚 3

跟踪模块:

OUT2 → Arduino 模拟引脚 4

OUT3 → Arduino 模拟引脚 1

OUT4 → Aarduino 模拟引脚 0

蓝牙模块 HC-06:

TX → Arduino RX

RX → Arduino TX

ESP32-CAM:

RX → arduino TX重要:连接时必须断开蓝牙

完成组装之后的:

编程 Arduino UNO

1)下载并安装 Arduino 桌面 IDE。

2)创建一个名为 \Catosci_SmartCar 的文件夹并保存所有 .ino、.cpp 和 .h 文件。

3)在Arduino IDE 上打开 Catosci_SmartCar.ino 文件并上传到 Arduino 板。

重要提示:请记住在连接 USB 数据线之前断开蓝牙

#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 DEBUGu32 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); } }}

上传完成后,代码将开始运行。

可以使用串行命令测试机器人运动和动作模式。

编程 ESP32-CAM:

现在是时候对 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 connected20:43:18.265 -> Camera Ready! Use 'http://192.168.1.27' to connect20:43:18.359 -> Starting web server on port: '80'20:43:18.359 -> Starting stream server on port: '81'安卓应用

现在可以使用开发的应用程序通过蓝牙控制机器人并通过 wifi 观看实时视频。

从 GitHub 下载 apk 文件:

https://github.com/catosci/CatosciApp/blob/main/release/catosci.apk

如果做到这一步,那么就恭喜你成功了!

END

原文链接:https://mp.weixin.qq.com/s/uRHS659_iD0akz6UwTu3qw

文章来源于:项目分享| 实时视频传输的多合一机器人

文章转载自:达尔闻说

原文链接:项目分享| 实时视频传输的多合一机器人

Arduino UNO说明

先来简单的看下Arduino UNO。
下图中有标识的部分为常用部分。
图中标出的数字口和模拟口,即为常说的I/O。
数字口有0~13,模拟口有0~5。
除了最重要的I/O口外,还有电源部分。
UNO可以通过两种方式供电方式,一种通过USB供电,另一种是通过外接6~12V的DC电源。
除此之外,还有4个LED灯和复位按键,稍微说下4个LED。
ON是电源指示灯,通电就会亮了。
L是接在数字口13上的一个LED,之后会有个样例来说明。
TX、RX是串口通讯指示灯,比如我们在 下载程序的过程中,这两个灯就会不停闪烁。

ESP32-CAM:机器视觉视觉摄像头说明

ESP32-CAM:规格、引脚排列和用户指南

ESP32-CAM 规格

模块型号 ESP32-CAM

套餐 DIP-16

尺寸 2740.54.5 毫米

SPI闪存 默认 32Mbit

内存 520KB SRAM +4M PSRAM

蓝牙 蓝牙 4.2 BR/EDR 和 BLE 标准

无线网络 802.11 b/g/n/

支持接口 UART/SPI/I2C/PWM

支持TF卡 最大支持4G

IO口 9

串口波特率 默认 115200 bps

图像输出格式 JPEG(仅支持 OV2640)、BMP、灰度

频谱范围 2412 ~2484MHz

天线 板载PCB天线,增益2dBi

发射功率 802.11b:17±2 dBm (@11Mbps)

802.11g:14±2 dBm (@54Mbps)

802.11n:13±2 dBm (@MCS7)

接收灵敏度 CCK,1 Mbps:-90dBm

CCK,11 Mbps:-85dBm

6 Mbps(1/2 BPSK):-88dBm

54 Mbps(3/4 64-QAM):-70dBm

MCS7(65 Mbps,72.2 Mbps):-67dBm

功耗 Deep-sleep: 6mA@5V

Modem-sleep: 20mA@5V

Light-sleep: 6.7mA@5V

安全 WPA/WPA2/WPA2-企业/WPS

电源范围 5V

工作温度 -20℃~85℃

存储环境 -40℃~90℃,<90%RH

重量 10克

关于 ESP32-CAM 的快速总结:

该板由乐鑫的 ESP32-S SoC供电,这是一款功能强大的可编程 MCU,具有开箱即用的 WIFI 和蓝牙功能。

它是最便宜的(约 7 美元)ESP32 开发板,同时提供板载摄像头模块、MicroSD 卡支持和 4MB PSRAM。

添加用于信号增强的外部 wifi 天线需要额外的焊接工作。

该板没有传统的 USB 端口,您必须使用 FTDI 编程器、附加 HAT 或 Arduino UNO 以及 Arduino IDE/ESP-IDF DEV 工具来向其上传代码。

作为一款外形尺寸足够小的低成本电路板,它非常受许多物联网和机器视觉应用的欢迎。

相关文章