ESP32-CAM模块网络摄像头demo加装舵机控制教程
操作指引
- 目錄
- 硬件
- 接線方式
- 修改網絡攝像頭demo程序
- 修改HTML文件
- 修改模塊的app_httpd.c文件
- 最后說一下占空比怎么計算。
- 180°電機控制
- 360°電機控制
目錄
硬件
1、ESP32-CAM模塊 + USB串口
2、360°舵機
3、180°舵機
接線方式
把電機按照產品描述連接5V跟GND,信號線按照設定PWM的輸出GPIO口接,如我,GPIO14為180°電機控制信號,GPIO15為360°電機控制信號。
電機線描述如下圖
修改網絡攝像頭demo程序
1、打開VSCode,打開demo程序
2、在文件夾camera_web_server中的main文件夾中創建電機控制的.c文件,在main文件夾的include中創建電機控制的.h文件
3、打開app_mcpwm.h文件,添加電機控制函數聲明。目前需要用到的是以下幾個函數
4、打開app_mcpwm.c文件,開始對電機控制函數進行實現。
#include <stdio.h> #include "string.h" #include "app_mcpwm.h" #include "driver/mcpwm.h" //電機PWM輸出控制的部分其實芯片廠商已經給出對應的接口,具體實現在esp-idf目錄下的driver目錄中。我們這里把頭文件#include "driver/mcpwm.h"添加進來就可以使用與PWM相關的函數。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計時器的狀態.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計時器的計數方式為往上加.duty_mode = MCPWM_DUTY_MODE_0, //MCPWM_DUTY_MODE_0以為高電平占周期的占比方式};mcpwm_init(MCPWM_UNIT_0, MCPWM_TIMER_0, &mcpwmConfig); //初始化開始,完成這一步后模塊開始輸出PWM波 }void app_mcpwm_main(){ //主函數進來的接口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文件中加入電機控制函數的調用
以上這幾部就已經可以寫好電機控制的函數了。但是我們的目標是由HTML網頁控制電機轉動。接著往下。
修改HTML文件
以VScode打開main目錄下的WWW目錄下的index_ov2640.html
1、我們的目標是添加兩個控制電機的控件,可以參考AE Level,在該控件下添加連個一樣的布局。
2、打開index_ov2640.html,,找到AE Level的那一行,把真個布局拷貝復制修改如下
這里可以看到在新增控制180和360中,
注意其中的id=xxx,這個id最中會傳到模塊中。
修改最大最小值,保存
我們可以看到HTML已經改好了
修改模塊的app_httpd.c文件
找到函數
static esp_err_t cmd_handler(httpd_req_t *req)該函數是HTML操作類請求的入口
最后面添加
此部分為處理關鍵字名子為motor1_place和motor2_place的函數部分:
1、motor1_place處理中先根據角度轉換成對應占空比,在設置到模塊中。
2、motor1_place處理中則直接根據1:正轉;-1:反轉;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為要轉的角度,設占空比為y,那么可以得到以下公式:
y = x * (12.5 - 2.5)/180 +2.5
故對于180°電機,初始化占空比為2.5,設置某角度則根據上述公式計算出占空比。
360°電機控制
360°電機的官方使用說明如下
360°電機需要控制的是方向跟速度。
1ms — 1.5ms :正轉,且速度越靠近1.5ms越慢
1.5 : 停止
1.5ms — 2ms : 反轉,且速度越靠近1.5ms越慢
那么我們設定速度為固定最大,即:
1ms:正轉
1.5 : 停止
2ms : 反轉
以頻率為50HZ來算,那么周期T
T = 1 / 頻率 = 1 / 50 =0.02s = 20ms
那么
正轉對應占空比:5%
停止對應占空比:7.5%
反轉對應占空比:10%
總結
以上是生活随笔為你收集整理的ESP32-CAM模块网络摄像头demo加装舵机控制教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pytorch可视化实例:gradcam
- 下一篇: 【第102期】游戏策划:在校生求职简历怎