目录
一、实验目的
二、实验环境
三、实验内容
四、实验记录及处理
五、实验小结
六、成果文件提取链接
一、实验目的
熟悉和掌握各模块联合控制的工作方式
二、实验环境
Win10+ESP32实验开发板
三、实验内容
1、用串口和OLED显示当前小车与障碍物的距离值;
2、当后侧障碍物到达警戒距离时开始提示报警,并随距离靠近变为急促;(警戒距离自己设定)
3、加入电机运行控制,例如通过UART控制小车的前进、后退、加速、减速、停止。
四、实验记录及处理
- 器件连接
OLED
设备名称 | 设备管脚 | ESP32管脚 |
SCL | 22 | 22 |
SDA | 21 | 21 |
蜂鸣器:
设备名称 | 设备管脚 | ESP32管脚 |
I/O | 27 | 27 |
超声波距离传感器
设备名称 | 设备管脚 | ESP32管脚 |
Trig | 4 | 4 |
Echo | 16 | 16 |
电机:
设备名称 | 设备管脚 | ESP32管脚 |
A-1A | 25 | 25 |
A-1B | 26 | 26 |
- 实物连接图(拍照,控制图片大小,能看清即可)及程序运行结果描述
任务:
显示当前小车与障碍物的距离值
OLED显示:OLED屏幕会显示当前测量的距离值,单位为厘米。显示内容类似于:如果大于450cm或者小于15cm,屏幕会显示Invalid Data
电机运行控制
串口命令控制:通过串口输入以下命令,可以控制电机的运行状态:1是加速,2是后退,3是加快,4是减速,5是停止
程序控制代码,部分代码如下,完整代码请查看网盘链接:
long duration; //持续时间
float distance; //测量距离
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
pinMode(motor1_PWM, OUTPUT);
pinMode(motor2_PWM, OUTPUT);
ledcSetup(motorChannel1,freq,resolution);
ledcAttachPin(motor1_PWM,motorChannel1);
ledcSetup(motorChannel2,freq,resolution);
ledcAttachPin(motor2_PWM,motorChannel2);
pinMode(TrigPin,OUTPUT);
pinMode(EchoPin,INPUT);
pinMode(buzzer,OUTPUT);
digitalWrite(buzzer,HIGH);
u8g2.begin();
u8g2.enableUTF8Print();
}
void motor_on(){
ledcWrite(motorChannel2, 1000); //正转
ledcWrite(motorChannel1, 0);
Serial.printf("前进");
delay(3000);
}
void motor_back(){
ledcWrite(motorChannel2, 0); //反转
ledcWrite(motorChannel1, 1000);
Serial.printf("后退");
delay(3000);
}
void motor_slow(){
if(motorSpeed1<1500){
motorSpeed1+=increment;
if(motorSpeed1>1000) motorSpeed1=1000;
ledcWrite(motorChannel1,motorSpeed1);
}
Serial.printf("减速");
}
void motor_fast(){
if (motorSpeed1 > 0) {
motorSpeed1 -= increment;
if (motorSpeed1 < 0) motorSpeed1 = 0; // 确保不低于最小值
ledcWrite(motorChannel1, motorSpeed1);
}
Serial.printf("加速");
}
void motor_stop(){
ledcWrite(motorChannel2,0); //停止
ledcWrite(motorChannel1,0);
Serial.printf("停止");
delay(1000);
motorSpeed1=0;
}
void motor_choose(int choose) {
switch (choose) {
case 1: motor_on(); break;
case 2: motor_back(); break;
case 3: motor_fast();break;
case 4: motor_slow();break;
case 5: motor_stop();break;
default: Serial.println("无效选择"); break;
}
}
void buzzer03()
{
for(int i=0;i<3;i++)
{
digitalWrite(buzzer,LOW);
delay(400); //用不同的延时时间来改变报警声音的效果
digitalWrite(buzzer, HIGH);
delay(200);
}
}
五、实验小结
超声波测距:使用超声波传感器(TrigPin 和 EchoPin)测量小车与障碍物之间的距离。通过触发超声波脉冲并测量回波时间来计算距离。
蜂鸣器报警:当距离小于设定的警戒距离时,蜂鸣器报警
电机控制:使用PWM信号通过GPIO控制电机的前进、后退、加速、减速和停止。通过串口接收用户指令来控制电机的运行状态。
六、成果文件提取链接
链接: https://pan.baidu.com/s/14AjaJ6nyJAsIDe5WP5vfFQ?pwd=jiis 提取码: jiis