日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ESP32-CAM模块网络摄像头demo加装舵机控制教程

發(fā)布時間:2023/12/31 编程问答 90 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ESP32-CAM模块网络摄像头demo加装舵机控制教程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

操作指引

  • 目錄
    • 硬件
    • 接線方式
    • 修改網(wǎng)絡攝像頭demo程序
    • 修改HTML文件
    • 修改模塊的app_httpd.c文件
  • 最后說一下占空比怎么計算。
    • 180°電機控制
    • 360°電機控制

目錄

硬件

1、ESP32-CAM模塊 + USB串口
2、360°舵機
3、180°舵機

接線方式

把電機按照產(chǎn)品描述連接5V跟GND,信號線按照設定PWM的輸出GPIO口接,如我,GPIO14為180°電機控制信號,GPIO15為360°電機控制信號。

電機線描述如下圖

修改網(wǎng)絡攝像頭demo程序

1、打開VSCode,打開demo程序

2、在文件夾camera_web_server中的main文件夾中創(chuàng)建電機控制的.c文件,在main文件夾的include中創(chuàng)建電機控制的.h文件

3、打開app_mcpwm.h文件,添加電機控制函數(shù)聲明。目前需要用到的是以下幾個函數(shù)

//app_mcpwm.h #ifndef _APP_MCPWM_H_ // #define _APP_MCPWM_H_ //頭文件預處理#ifdef __cplusplus extern "C" { #endifvoid app_mcpwm_main(); //電機初始化函數(shù)void motor_forward(float duty); //PWM占空比設置,用于180°電機控制角度void motor_step(); //360°電機正轉(zhuǎn)void motor_back(); //360°電機反轉(zhuǎn)void motor_stop(); //360°電機停止 #ifdef __cplusplus } #endif#endif

4、打開app_mcpwm.c文件,開始對電機控制函數(shù)進行實現(xiàn)。

#include <stdio.h> #include "string.h" #include "app_mcpwm.h" #include "driver/mcpwm.h" //電機PWM輸出控制的部分其實芯片廠商已經(jīng)給出對應的接口,具體實現(xiàn)在esp-idf目錄下的driver目錄中。我們這里把頭文件#include "driver/mcpwm.h"添加進來就可以使用與PWM相關的函數(shù)。void moto_init(){ //做PWM的初始化mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM0A, 14); //首先是初始化GPIO14,設置成MCPWM0A的輸出引腳mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM0B, 15); //首先是初始化GPIO15,設置成MCPWM0B的輸出引腳mcpwm_config_t mcpwmConfig = { //設置Time0計時器的狀態(tài).frequency = 50, //設置頻率,單位是HZ。周期=1/頻率,算出周期=20ms .cmpr_a = 2.5, //PWM0A用于控制180°電機,0°的高電平是0.5ms,所以初始化占空比=0.5ms/20ms = 2.5% .cmpr_b = 7.5, //PWM0B用于控制360°電機,靜止的高電平是1.5ms,所以初始化占空比=1.5ms/20ms = 7.5% .counter_mode = MCPWM_UP_COUNTER, //設置Time0計時器的計數(shù)方式為往上加.duty_mode = MCPWM_DUTY_MODE_0, //MCPWM_DUTY_MODE_0以為高電平占周期的占比方式};mcpwm_init(MCPWM_UNIT_0, MCPWM_TIMER_0, &mcpwmConfig); //初始化開始,完成這一步后模塊開始輸出PWM波 }void app_mcpwm_main(){ //主函數(shù)進來的接口moto_init(); }void motor_forward(float duty){ mcpwm_set_duty(MCPWM_UNIT_0, MCPWM_TIMER_0, MCPWM_OPR_A, duty); //修改PWM0A的占空比為duty }void motor_step(){mcpwm_set_duty(MCPWM_UNIT_0, MCPWM_TIMER_0, MCPWM_OPR_B, 5); //修改PWM0B的占空比為5% }void motor_back(){mcpwm_set_duty(MCPWM_UNIT_0, MCPWM_TIMER_0, MCPWM_OPR_B, 10); //修改PWM0B的占空比為10% } void motor_stop(){mcpwm_set_duty(MCPWM_UNIT_0, MCPWM_TIMER_0, MCPWM_OPR_B, 7.5); //修改PWM0B的占空比為7.5% }

5、在app_main.c文件中加入電機控制函數(shù)的調(diào)用

以上這幾部就已經(jīng)可以寫好電機控制的函數(shù)了。但是我們的目標是由HTML網(wǎng)頁控制電機轉(zhuǎn)動。接著往下。

修改HTML文件

以VScode打開main目錄下的WWW目錄下的index_ov2640.html

1、我們的目標是添加兩個控制電機的控件,可以參考AE Level,在該控件下添加連個一樣的布局。

2、打開index_ov2640.html,,找到AE Level的那一行,把真?zhèn)€布局拷貝復制修改如下

這里可以看到在新增控制180和360中,

<input type="range" id="motor2_place" min="-2" max="2" value="0" class="default-action">

注意其中的id=xxx,這個id最中會傳到模塊中。


修改最大最小值,保存
我們可以看到HTML已經(jīng)改好了

修改模塊的app_httpd.c文件

找到函數(shù)

static esp_err_t cmd_handler(httpd_req_t *req)

該函數(shù)是HTML操作類請求的入口
最后面添加

此部分為處理關鍵字名子為motor1_place和motor2_place的函數(shù)部分:
1、motor1_place處理中先根據(jù)角度轉(zhuǎn)換成對應占空比,在設置到模塊中。
2、motor1_place處理中則直接根據(jù)1:正轉(zhuǎn);-1:反轉(zhuǎn);0:停止來修改不同的占空比。

修改完成后,進行編譯燒錄,即可完成。

最后說一下占空比怎么計算。

180°電機控制

180°電機的官方使用說明如下

0°~180°對應的脈沖寬度為0.5ms—2.5ms

以頻率為50HZ來算,那么周期T
T = 1 / 頻率 = 1 / 50 =0.02s = 20ms
那么0°~180°對應占空比是0.5/20 — 2.5/20 也就是2.5 — 12.5

設置x為要轉(zhuǎn)的角度,設占空比為y,那么可以得到以下公式:

y = x * (12.5 - 2.5)/180 +2.5

故對于180°電機,初始化占空比為2.5,設置某角度則根據(jù)上述公式計算出占空比。

360°電機控制

360°電機的官方使用說明如下

360°電機需要控制的是方向跟速度。
1ms — 1.5ms :正轉(zhuǎn),且速度越靠近1.5ms越慢
1.5 : 停止
1.5ms — 2ms : 反轉(zhuǎn),且速度越靠近1.5ms越慢

那么我們設定速度為固定最大,即:

1ms:正轉(zhuǎn)
1.5 : 停止
2ms : 反轉(zhuǎn)

以頻率為50HZ來算,那么周期T
T = 1 / 頻率 = 1 / 50 =0.02s = 20ms
那么

正轉(zhuǎn)對應占空比:5%
停止對應占空比:7.5%
反轉(zhuǎn)對應占空比:10%

總結

以上是生活随笔為你收集整理的ESP32-CAM模块网络摄像头demo加装舵机控制教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。