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

基于51单片机的方向盘模拟系统

在现代汽车中,方向盘不仅是控制方向的装置,还集成了多种功能,如音响控制、定速巡航等。为了研究和测试这些功能,可以设计一个基于51单片机的方向盘模拟系统。该系统可以模拟方向盘的转动和相关功能的操作。

一、系统功能

方向盘模拟系统主要包括以下功能:

  1. 模拟方向盘转动:通过电机驱动方向盘转动。
  2. 检测压力传感器:使用压力传感器模拟驾驶员对方向盘的握持力度。
  3. 重力加速度模拟:通过滑动变阻器和模数转换器模拟重力加速度传感器。
  4. 按键控制:通过按键控制LED灯的点亮与熄灭。
  5. 数据显示:通过LCD1602显示屏显示压力值和加速度值。
  6. 报警和电机控制:当加速度值在3秒内没有变化,或者两个压力传感器的差值大于50时,蜂鸣器报警,继电器控制的电机停止转动。

二、硬件资源

系统基于STC89C52单片机,采用两个MPX4115压力传感器作为两路压力到位开关电路,采用滑动变阻器连接数模转换器模拟重力加速度传感器电路。一个按键控制LED灯的点亮与熄灭。两路压力值与加速度值通过LCD1602显示屏显示。

三、程序编程

以下是方向盘模拟系统的C语言代码示例:

#include <REGX52.H>
#include <intrins.h>
#include <stdio.h>
#include "Delay.h"
#include "LCD1602.h"#define uchar unsigned char
#define uint unsigned intsbit beep = P2^5;
sbit CS=P1^0;
sbit CLK=P1^1;
sbit DIO=P1^2;
sbit CS1=P1^3;
sbit CLK1=P1^4;
sbit DIO1=P1^5;
sbit CS2   =  P1^6;
sbit CLK2  =  P1^7;
sbit DIO2  =  P2^6;
sbit motor =  P2^7;
sbit key = P3^1;
sbit led = P3^0;
sbit key1 = P3^2;static int timerCount;
typedef unsigned char u8;
typedef unsigned int  u16;static uchar u,U,R,u1,U1,R1,u2,U2,R2,lastResistance;
static int number;
static int resistanceChanged;
static int flag = 0;void beep_warning();
void Time0_Init()
{TMOD = 0x01;TH0 = 0xfa >> 8;TL0 = 0xfa & 0xFF;ET0 = 1;TR0 = 1;EA = 0;
}void Time0_Int() interrupt 1
{static unsigned int timerCount = 0;TH0 = 0xfa >> 8;TL0 = 0xfa & 0xFF;timerCount++;if (timerCount >= 27){timerCount = 0;if (R != lastResistance){resistanceChanged = 0;}else{resistanceChanged = 1;}lastResistance = R;}
}uchar get_AD_Res()
{uchar i, data1=0, data2=0;CS=0;CLK=0;DIO=1;_nop_();CLK=1;_nop_();CLK=0;DIO=1;_nop_();CLK=1;_nop_();CLK=0;DIO=0;_nop_();CLK=1;_nop_();CLK=0;DIO=1;_nop_();for(i=0; i<8; i++){CLK=1;_nop_();CLK=0;_nop_();data1=(data1<<1)|(uchar)DIO;}for(i=0; i<8; i++){data2=data2|(uchar)DIO<<i;CLK=1;_nop_();CLK=0;_nop_();}CS=1;return(data1 == data2)?data1:0;
}void beep_warning()
{number = R1-R2;if(number<=0){number = ~(number-1);}if(flag==0){EA = 0;if(number>50){beep = 1;motor = 1;}else{beep = 0;motor = 0;}}if(flag==1){if(resistanceChanged==1){beep = 1;motor = 1;}else{beep = 0;motor = 0;}}LCD_ShowNum(2,10,resistanceChanged,3);
}void main()
{beep=0;motor=0;led = 0;LCD_Init();Time0_Init();LCD_ShowString(1,1,"zuo:");LCD_ShowString(1,10,"you:");LCD_ShowString(2,1,"Vt:");while(1){u=get_AD_Res();U=(250*u)/128;R=200*U/250;u1=get_AD_Res1();U1=(250*u1)/128;R1=200*U1/250;u2=get_AD_Res2();U2=(250*u2)/128;R2=200*U2/250;LCD_ShowNum(1,5,R2,3);LCD_ShowNum(1,14,R1,3);LCD_ShowNum(2,4,R,3);beep_warning();if(!key){led=~led;while(!key);}if(~key1){EA=1;flag++;{if(flag>1){flag = 0;}}while(~key1);}}
}

四、实现现象

通过Proteus仿真和实际硬件测试,系统能够实现以下功能:

  1. 方向盘转动:电机根据模拟信号转动方向盘。
  2. 压力显示:LCD1602显示屏显示左右压力传感器的值。
  3. 重力加速度显示:LCD1602显示屏显示重力加速度值。
  4. 报警功能:当压力传感器的差值大于50或加速度值3秒内无变化时,蜂鸣器报警,电机停止转动。
  5. LED控制:按键控制LED灯的点亮与熄灭。

具体动态效果可以参考B站演示视频 。

五、总结

基于51单片机的方向盘模拟系统能够模拟汽车方向盘的各种操作,为汽车电子系统的研究和测试提供了一个实用的平台。通过扩展硬件和软件,该系统还可以增加更多功能,如语音提示、数据记录等。

✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进

❤欢迎关注我的知乎:对error视而不见

代码获取、问题探讨及文章转载可私信。

☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。

🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!👇

点击领取更多详细资料


http://www.mrgr.cn/news/37203.html

相关文章:

  • 【学习笔记】手写 Tomcat 七
  • 算法学习021 c++有多少张桌子 并查集算法学习 中小学算法思维学习 比赛算法题解 信奥算法解析
  • TMR技术的发展及其应用技术的介绍
  • PDF 秒变 JPG,2024 这些工具来助力
  • 2024四川省赛 The 2024 Sichuan Provincial Collegiate Programming Contest补题记录
  • Java | Leetcode Java题解之第440题字典序的第K小数字
  • 增量式编码器实现原理
  • Materials - 基础视差原理
  • sysbench 命令:跨平台的基准测试工具
  • 秒懂Linux之信号
  • PSS-sdy_opengl_sdd
  • 将查询的数据库信息存入session,反复使用的方法是否可以
  • windows C++-管理计划程序实例
  • Meta宣布为Ray-Ban Meta智能眼镜增加全新AI功能
  • 2024引领视频剪辑潮流的专业工具
  • NASA:ATLAS/ICESat-2 L3 A沿线内陆地表水数据V006数据集
  • 坝上草原与闪电湖多伦湖自驾行程记录与攻略
  • 计算机的错误计算(一百零五)
  • 代码随想录算法训练营第56天 | 1、冗余连接,2、冗余连接II
  • 【有啥问啥】深度理解主动学习:机器学习的高效策略