2020-7-31 20:57:41 [显示全部楼层]
23738浏览
查看: 23738|回复: 25

[项目] ESP32-CAM做的摄像头小车

[复制链接]
本帖最后由 gada888 于 2021-10-28 12:49 编辑

引言:
ESP32系列模块由于可以用Arduino ide来进行编程,因此广受欢迎。而ESP32 CAM模块由于经济小巧并自带摄像头而更为创客们所青睐。今天给大家介绍一个互动性强的ESP32 CAM游戏,用ESP32 CAM来做一款摄像头小车,带LED灯光控制和伺服电机控制。当然稍加改动,就可以做出许多更实用的项目
ESP32-CAM做的摄像头小车图1

第一步:展示内容
打开摄像头,获取静态照片,获取流视频,小车的前进,后退和左右转弯。LED的灯光开闭,伺服电机的控制等
ESP32-CAM做的摄像头小车图3
ESP32-CAM做的摄像头小车图4

第二步:IP地址的获取
ESP32模块的IP地址是通过手机上下载的Fing软件获取的。
ESP32-CAM做的摄像头小车图2
第三步:硬件搭建
所需器材:(1) ESP32-CAM控制器(2);小车底盘(3);电机驱动(4);电源转接头
;(5);USB数据线;(6);DF的电源模块 (7);5v2A移动电源;

第四步:了解一下ESP32-CAM的连线和烧录
ESP32-CAM的烧录需要FTDI模块的帮助,然后安装支持文件和进行相关的板子的设置。
ESP32-CAM做的摄像头小车图5
ESP32-CAM做的摄像头小车图6
ESP32-CAM做的摄像头小车图7
ESP32-CAM做的摄像头小车图8
ESP32-CAM做的摄像头小车图9
ESP32-CAM做的摄像头小车图10
ESP32-CAM做的摄像头小车图11
ESP32-CAM做的摄像头小车图12



第五步:
发一些硬件的图片。让人有个直观的认识
DF的电源模块
5v2A移动电源,必须是用2A来驱动,否则无法工作
电机驱动的型号不详,某宝里买的-MX1508-2路直流电机驱动模块 正反转 PWM调速 双H桥步进电机迷你超L298N
ESP32-CAM做的摄像头小车图15



ESP32-CAM做的摄像头小车图13
小车底盘是自己改装的
第六步:总体介绍
摄像头小车的设计系统是由ESP32-cam,电机驱动和电源模块来完成的。可以实现小车
的前进,后退,左转和右转。开灯,打开伺服等动作,操控起来没有迟滞感,流视频也很流畅。
第七部:连线图
ESP32-CAM做的摄像头小车图14
第八部:代码部分的设计
代码部分的WIFI密码等要填你自己的信息
这个代码是主文件,其它几个支持文件是从样例里直接拷贝的。上图手写ok字样那张上面有支持文件的名称。
[mw_shl_code=applescript,false]/*
This sketch is made by gada888
2020-7-27
*/

const char* ssid = "xxxxx";
const char* password = "xxxxx";

#include "esp_camera.h"
#include <WiFi.h>
#include "soc/soc.h"
#include "soc/rtc_cntl_reg.h"

// WARNING!!! Make sure that you have either selected ESP32 Wrover Module,
//            or another board which has PSRAM enabled

//CAMERA_MODEL_AI_THINKER
#define PWDN_GPIO_NUM     32
#define RESET_GPIO_NUM    -1
#define XCLK_GPIO_NUM      0
#define SIOD_GPIO_NUM     26
#define SIOC_GPIO_NUM     27

#define Y9_GPIO_NUM       35
#define Y8_GPIO_NUM       34
#define Y7_GPIO_NUM       39
#define Y6_GPIO_NUM       36
#define Y5_GPIO_NUM       21
#define Y4_GPIO_NUM       19
#define Y3_GPIO_NUM       18
#define Y2_GPIO_NUM        5
#define VSYNC_GPIO_NUM    25
#define HREF_GPIO_NUM     23
#define PCLK_GPIO_NUM     22

void startCameraServer();

void setup() {
  WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);
  
  Serial.begin(115200);
  Serial.setDebugOutput(true);
  Serial.println();

  camera_config_t config;
  config.ledc_channel = LEDC_CHANNEL_0;
  config.ledc_timer = LEDC_TIMER_0;
  config.pin_d0 = Y2_GPIO_NUM;
  config.pin_d1 = Y3_GPIO_NUM;
  config.pin_d2 = Y4_GPIO_NUM;
  config.pin_d3 = Y5_GPIO_NUM;
  config.pin_d4 = Y6_GPIO_NUM;
  config.pin_d5 = Y7_GPIO_NUM;
  config.pin_d6 = Y8_GPIO_NUM;
  config.pin_d7 = Y9_GPIO_NUM;
  config.pin_xclk = XCLK_GPIO_NUM;
  config.pin_pclk = PCLK_GPIO_NUM;
  config.pin_vsync = VSYNC_GPIO_NUM;
  config.pin_href = HREF_GPIO_NUM;
  config.pin_sscb_sda = SIOD_GPIO_NUM;
  config.pin_sscb_scl = SIOC_GPIO_NUM;
  config.pin_pwdn = PWDN_GPIO_NUM;
  config.pin_reset = RESET_GPIO_NUM;
  config.xclk_freq_hz = 20000000;
  config.pixel_format = PIXFORMAT_JPEG;
  //init with high specs to pre-allocate larger buffers
  if(psramFound()){
    config.frame_size = FRAMESIZE_UXGA;
    config.jpeg_quality = 10;  //0-63 lower number means higher quality
    config.fb_count = 2;
  } else {
    config.frame_size = FRAMESIZE_SVGA;
    config.jpeg_quality = 12;  //0-63 lower number means higher quality
    config.fb_count = 1;
  }
  
  // camera init
  esp_err_t err = esp_camera_init(&config);
  if (err != ESP_OK) {
    Serial.printf("Camera init failed with error 0x%x", err);
    delay(1000);
    ESP.restart();
  }

  //drop down frame size for higher initial frame rate
  sensor_t * s = esp_camera_sensor_get();
  s->set_framesize(s, FRAMESIZE_QVGA);  // UXGA|SXGA|XGA|SVGA|VGA|CIF|QVGA|HQVGA|QQVGA
  
  //Servo
  ledcAttachPin(2, 3);  
  ledcSetup(3, 50, 16);
  ledcWrite(3, 4850);
  
  //Flash
  ledcAttachPin(4, 4);  
  ledcSetup(4, 5000, 8);
  
  //Wheel
  ledcAttachPin(12, 5);  //You can adjust the speed of the wheel. (gpio12, gpio13)
  ledcSetup(5, 5000, 8);      
  ledcAttachPin(13, 6);
  ledcSetup(6, 5000, 8);
  ledcWrite(6, 0);   
  pinMode(15, OUTPUT);  //If I output PWM to GPIO 15 using ledcWrite, it will lose control. Why?
  pinMode(14, OUTPUT);  

  Serial.println("ssid: " + (String)ssid);
  Serial.println("password: " + (String)password);
  
  WiFi.begin(ssid, password);

  long int StartTime=millis();
  while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      if ((StartTime+10000) < millis()) break;
  }

  startCameraServer();

  char* apssid = "ESP32-CAM";
  char* appassword = "12345678";         //AP password require at least 8 characters.
  Serial.println("");
  Serial.println("WiFi connected");   
  Serial.print("Camera Ready! Use 'http://");
  if (WiFi.status() == WL_CONNECTED) {
    Serial.print(WiFi.localIP());
    Serial.println("' to connect");
    WiFi.softAP((WiFi.localIP().toString()+"_"+(String)apssid).c_str(), appassword);   
   
    for (int i=0;i<5;i++) {
      ledcWrite(4,10);
      delay(200);
      ledcWrite(4,0);
      delay(200);   
    }        
  }
  else {
    Serial.print(WiFi.softAPIP());
    Serial.println("' to connect");
    WiFi.softAP((WiFi.softAPIP().toString()+"_"+(String)apssid).c_str(), appassword);   
   
    for (int i=0;i<2;i++) {
      ledcWrite(4,10);
      delay(1000);
      ledcWrite(4,0);
      delay(1000);   
    }  
  }     
}

void loop() {
  // put your main code here, to run repeatedly:
  delay(10000);
}[/mw_shl_code]
代码烧录完后,在手机上打开浏览器,在地址栏输入你在Fing软件里看到的ESP32的IP地址,之后便可以看到你想看的html页面了。
代码已更新(ok-Car-cam)

car.rar

11.76 KB, 下载次数: 680

ok-Car-cam.rar

46.03 KB, 下载次数: 551

gada888  版主
 楼主|

发表于 2021-10-7 20:58:24

dekit 发表于 2021-10-7 11:43
#在这里快速回复#请问图中的DF电源模块是什么型号?淘宝中找不到。 我用移动电源直接接esp32和电动机驱动板 ...

只要是5V2A电源就行。有的移动电源有5V1A和5V2A两个USB输出口的。我用的ROMOSS电源(充电宝),在咸鱼里有卖的。电机驱动板和我图示的一样?不一样要测试其启动电流的,如果用掉电流大,那就无法启动。因为ESP32-CAM耗电大。
回复

使用道具 举报

gada888  版主
 楼主|

发表于 2021-4-30 23:00:08

永夜星空 发表于 2021-4-30 11:52
博主,新人请教一个问题,设置方向按钮在屏幕中的位置和具体功能的代码是哪部分? ...

ESP32-CAM做的摄像头小车图1
在它C++这个文件里改html界面。界面部分是html的代码。打开这个文件,一直往下找,看到button。stop什么的就是要改的界面文字和按钮位置
ESP32-CAM做的摄像头小车图2

回复

使用道具 举报

gada888  版主
 楼主|

发表于 2021-10-28 12:46:36

本帖最后由 gada888 于 2021-10-28 13:07 编辑
阿冲 发表于 2021-10-28 01:00
您好,博主,下载了您提供的 car.rar 文件 进行了编译结果 如网友 所说 报错一样,请博主帮看下怎么回事吧 ...

文件已更新了,你试一下在这里给我个反馈,我很久没测试ESP32-CAM版子了。那个主文件(ESP32-CAM Remote Control Car.ino)我记得后来用的是乐鑫官方文件,稍稍改了一下而已。
回复

使用道具 举报

pATAq  版主

发表于 2020-7-31 22:12:23

很好的教程
回复

使用道具 举报

rzyzzxw  版主

发表于 2020-8-1 09:40:29

高级高级
回复

使用道具 举报

BUILDERlym  学徒

发表于 2020-8-2 17:55:05

很厉害啊
回复

使用道具 举报

BUILDERlym  学徒

发表于 2020-8-2 18:32:31

请问这个可以连接arduino uno用吗
回复

使用道具 举报

gada888  版主
 楼主|

发表于 2020-8-3 09:49:43

BUILDERlym 发表于 2020-8-2 18:32
请问这个可以连接arduino uno用吗

不可以,虽然都用同一个ide编译程序。这个从硬件到软件都是和arduino的设计思路不同。
回复

使用道具 举报

春爷  学徒

发表于 2020-12-10 02:52:23

按照sample程序没有问题,按照您的程序怎么解析失败呢?

回复

使用道具 举报

gada888  版主
 楼主|

发表于 2021-2-4 18:02:23

本帖最后由 gada888 于 2021-2-4 18:04 编辑
春爷 发表于 2020-12-10 02:52
按照sample程序没有问题,按照您的程序怎么解析失败呢?

肯定有步骤操作错了,不是只有这一个主程序,一共四个程序文件。ESP32-CAM做的摄像头小车图1
回复

使用道具 举报

1906017327  学徒

发表于 2021-2-19 17:04:15

你好,我在网上找了很多ESP32cam的例子,只要博主的案例比较清晰而且开发深度高。请问我可以请教一下ESP32cam这主板能和测距传感器在Arduion上编译程序吗。我好像遇到不知道怎么分配引脚的问题了
回复

使用道具 举报

gada888  版主
 楼主|

发表于 2021-3-6 21:09:37

1906017327 发表于 2021-2-19 17:04
你好,我在网上找了很多ESP32cam的例子,只要博主的案例比较清晰而且开发深度高。请问我可以请教一下ESP32c ...

不好意思,刚刚看到。你如果用普通的超声模块的话,连线引脚如下:
Trig -> IO2
Echo -> IO13
VCC -> 3.3V or VCC
GND -> GND
回复

使用道具 举报

永夜星空  学徒

发表于 2021-4-30 11:52:49

博主,新人请教一个问题,设置方向按钮在屏幕中的位置和具体功能的代码是哪部分?
回复

使用道具 举报

永夜星空  学徒

发表于 2021-5-4 11:18:33

C:\Users\测评\Desktop\1.jpg
报错啊……
回复

使用道具 举报

永夜星空  学徒

发表于 2021-5-4 11:23:00

报错啊……
TueMay-202105042262..png
回复

使用道具 举报

gada888  版主
 楼主|

发表于 2021-5-4 15:26:34

本帖最后由 gada888 于 2021-5-5 17:41 编辑

ESP32-CAM做的摄像头小车图1
ESP32-CAM做的摄像头小车图2
ESP32-CAM做的摄像头小车图3你学点html和html5就很快会改了。我最后这个是改的乐鑫官方app-httpd.cpp里的html5代码。
回复

使用道具 举报

dekit  学徒

发表于 2021-10-7 11:42:18

请问图中的DF电源模块是什么型号?淘宝中找不到。
我用移动电源直接接esp32和电动机驱动板cam会开启不了。
回复

使用道具 举报

dekit  学徒

发表于 2021-10-7 11:43:33

#在这里快速回复#请问图中的DF电源模块是什么型号?淘宝中找不到。 我用移动电源直接接esp32和电动机驱动板cam会开启不了
回复

使用道具 举报

dekit  学徒

发表于 2021-10-7 23:16:42

ESP32-CAM做的摄像头小车图1
你好,我的2A的充电宝,直接一个USB口输出2路电源线到esp32 cam和电动机驱动板,估计电压互相干扰了。
想找图中的这个电源控制器,分别输出到esp32 cam 和 电动机驱动板。但是不知具体型号,找不到地方购买。
回复

使用道具 举报

gada888  版主
 楼主|

发表于 2021-10-8 09:08:45

dekit 发表于 2021-10-7 23:16
你好,我的2A的充电宝,直接一个USB口输出2路电源线到esp32 cam和电动机驱动板,估计电压互相干扰了。
想 ...

你可以试试双电源分别独立供电给ESP32-cam和电机驱动
回复

使用道具 举报

gada888  版主
 楼主|

发表于 2021-10-9 12:52:55

本帖最后由 gada888 于 2021-10-9 12:55 编辑
dekit 发表于 2021-10-7 23:16
你好,我的2A的充电宝,直接一个USB口输出2路电源线到esp32 cam和电动机驱动板,估计电压互相干扰了。
想 ...

25W DC-DC 降压模块
https://www.dfrobot.com.cn/goods-604.html
https://wiki.dfrobot.com.cn/_SKU ... B%E6%A8%A1%E5%9D%97
不好意思,我一开始没明白你的意思,好久以前的项目了。

回复

使用道具 举报

12下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail