【嵌入式原理设计】实验五:远程控制翻盖设计
目录
一、实验目的
二、实验环境
三、实验内容
四、实验记录及处理
五、实验小结
六、成果文件提取链接
一、实验目的
熟悉和掌握舵机及串口控制方式
二、实验环境
Win10+ESP32实验开发板
三、实验内容
1、熟悉舵机的控制方式;
2、用串口发送指令,让舵机旋转到指定的角度(自行设计控制指令和旋转角度)
3、(选做)编写程序,可以切换手动和自动运行两种方式:自动模式下,舵机来回摆动;手动模式下,舵机按指令转动。
四、实验记录及处理
- 器件连接
设备名称 | 设备管脚 | ESP32管脚 |
舵机 | G16 | G16 |
- 实物连接图(拍照,控制图片大小,能看清即可)及程序运行结果描述
输入1时,进入手动模式时,显示可以输入A-F任意一个字母对应相应度数。
当输入A时,舵机转动到30度。
部分代码如下,完整代码请查看网盘
void setup() {
Serial.begin(115200);
ledcSetup(channel, freq, resolution);
ledcAttachPin(servopin, channel);
Serial.println("servu=o_seral_simple ready" ) ;
}
void loop() {
if(menu_1>=1){
menu();
menu_1=menu_1-1;
}
if (Serial.available() > 0) {
user_input = Serial.read() - '0'; // 读取用户输入并转换为数字
while(Serial.available() > 0) Serial.read(); // 清空缓冲区
flag = user_input; // 根据输入设置flag
model_choose(flag); // 根据flag执行相应模式
}
}
//自动模式
void model_automatic() {
Serial.println("自动模式: 舵机会在0-180度之间往复");
for (int d = 0; d <= 180; d += 10) {
ledcWrite(channel, calculatePWM(d));
delay(1000);
}
for (int d = 180; d >= 0; d -= 10) {
ledcWrite(channel, calculatePWM(d));
delay(1000);
}
Serial.println("自动模式运行结束");
}
//用户输入选择
void model_user_choose() {
Serial.println("手动模式: 请输入A-F中的其中一个字母");
while(Serial.available() == 0) {} // 等待用户输入
val = Serial.read();
while(Serial.available() > 0) Serial.read(); // 清空缓冲区
int angle = 0;
switch (val) {
case 'A': angle = 30; break;
case 'B': angle = 60; break;
case 'C': angle = 90; break;
case 'D': angle = 120; break;
case 'E': angle = 150; break;
case 'F': angle = 0; break;
default: Serial.println("无效输入"); return;
}
ledcWrite(channel, calculatePWM(angle));
Serial.printf("舵机转动到 %d 度\n", angle);
}
五、实验小结
PWM(脉宽调制)控制:利用ledcSetup()和ledcAttachPin()函数,在特定的通道上配置并激活PWM,以精确调控舵机的旋转角度。PWM信号的周期设定为20毫秒,其中高电平占比决定了180度舵机从0°至180°的旋转范围。
循环控制:在自动操作模式下,通过for循环机制,实现舵机在0°至180°区间内的连续往复运动。
延时操作:采用delay()函数,在舵机的每次移动指令间插入暂停时段,以确保动作间的平稳过渡。
六、成果文件提取链接
链接: https://pan.baidu.com/s/14AjaJ6nyJAsIDe5WP5vfFQ?pwd=jiis 提取码: jiis