当前位置: 首页 > news >正文

【嵌入式原理设计】实验六:倒车控制设计

目录

一、实验目的 

二、实验环境

三、实验内容

四、实验记录及处理

五、实验小结

六、成果文件提取链接

一、实验目的 

        熟悉和掌握各模块联合控制的工作方式

二、实验环境

        Win10+ESP32实验开发板

三、实验内容

        1、用串口和OLED显示当前小车与障碍物的距离值;

        2、当后侧障碍物到达警戒距离时开始提示报警,并随距离靠近变为急促;(警戒距离自己设定)

        3、加入电机运行控制,例如通过UART控制小车的前进、后退、加速、减速、停止。

四、实验记录及处理

        

  1. 器件连接

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

  1. 实物连接图(拍照,控制图片大小,能看清即可)及程序运行结果描述

任务:

显示当前小车与障碍物的距离值

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

相关文章:

  • 深入Linux序列:进程的终止与等待
  • Python Cookbook-2.13 使用C++的类iostream语法
  • SSD网络预测与训练阶段总结
  • mysql多表查询
  • 【嵌入式Linux应用开发基础】网络编程(4):UDP协议
  • 数字可调控开关电源设计(论文+源码)
  • Windows 图形显示驱动开发-WDDM 3.2-自动显示切换(七)
  • ubuntu安装docker compose
  • 2015-2025大连社保年度缴费基数
  • 说一下类装载的执行过程?
  • JxBrowser 7.42.1 版本发布啦!
  • 对话式AI引擎:DeepSeek技术引领多模态交互新篇章
  • 刚充值Deepseek账号,但接入官方的API却遇到了问题【VSCode Cline Cursor Deepseek deepseek-reasoner】
  • 表单验证和正则表达式
  • debain12.9安装unsloth大模型微调环境
  • 为什么用match case 而不用if else
  • 算法-二叉树篇11-左叶子之和
  • 计算机网路:自顶向下方法——第三章 运输层
  • 如何评估 LLM:大型语言模型评估方法全解析与综述
  • 【Linux 操作系统】进程管理 - 冯诺依曼体系|进程|环境变量|进程地址空间
  • 大四本科生已发14篇SCI论文?重庆大学:成立工作组核实
  • 巴基斯坦军方:印度袭击已致巴方31人死亡
  • 习近平抵达莫斯科对俄罗斯进行国事访问并出席纪念苏联伟大卫国战争胜利80周年庆典
  • 外交部:应美方请求举行贸易代表会谈,中方反对美滥施关税立场没有变化
  • 新疆生产建设兵团草湖项目区副主任宋全伟接受审查调查
  • 十四届全国政协原常委、民族和宗教委员会原副主任苟仲文被提起公诉