查看:
2386
|
回复:
1
|
安全带提示系统系统设计
|
|||
青锋断尘
16
主题
13
回复 |
发表于2019-01-16 21:28:19
|
只看该作者
1#
电梯直达
1 要求
现今,机动车的数量越来越多,安全带是司机在车辆驾驶过程中的生命保障,被给予的重视也越来越多。由于一些司机不好的习惯,不主动系安全带,在突发交通事故时将导致非常严重的后果。统计表明,不系安全带是造成道路交通死亡事故的第三大原因,仅次于超速行驶和酒后驾驶。因此,研究设计一种可以提醒司机和乘客系安全带的装置,降低交通事故对司机和乘客造成的伤害,有着非常大的实用意义。 随着电子技术的发展,单片机以其体积小、功能强、功耗低的特点在现实生活中广泛应用。本着实用、可靠、安全、简洁及经济等原则,设计开发了基于单片机的智能提醒安全带提示系统, 该系统由单片机通过依据模数转换器输入的信号和安全带插口输入的信号控制显示模块和语音模块, 报闪和语音提示同时提示, 可及时提醒司乘人员系上安全带。
2 安全带提示系统系统设计相关理论
2.1压力传感器原理电阻应变式压力传感器主要由弹性体、电阻应变片电缆线等组成,内部线路采用惠更斯电桥,当弹性体承受载荷产生变形时,电阻应变片(转换元件)受到拉伸或压缩应变片变形后,它的阻值将发生变化(增大或减小),从而使电桥失去平衡,产生相应的差动信号,供后续电路测量和处理。当垂直正压力P作用于梁上时,梁产生形变,电阻应变片R1、R3受压弯拉伸,阻值增加。R2、R4受压缩,阻值减小。电桥失去平衡,产生不平衡电压U,电压U与作用在传感器上的正压力P成正比,从而将非电量转化为电量输出。压力传感器原理如图2.1所示。
图2.1压力传感器原理图 2.2HX711原理HX711是一款24位A/D转换器芯片。与同类型其它芯片相比,该芯片集成了包括稳压电源、片内时钟振荡器等其它同类型芯片所需要的外围电路,具有集成度高、 响应速度快、抗干扰性强等优点。该芯片与后端 MC通道A的可编程增益为128或 64,对应的满额度差分输入信号幅值分别为±20mV 或±40mV。通道 B 则为固定的 32 增益,用于系统参数检测。芯片内提供的稳压电源可以直接向外部传感器和芯片内的A/D转换器提供电源。 通道 A 模拟差分输入可直接与桥式传感器的差分输出相接。由于桥式传感器输出的信号较小,为了充分利用 A/D 转换器的输入动态范围,该通道的可编程增益较大,为128或64。 这些增益所对应的满量程差分输入电压分别± 20mV或±40mV。 通道 B 为固定的 32 增益,所对应的满量程 差分输入电压为±80mV。通道 B 应用于包括电池在内的系统参数检测。HX711数据输出,输入通道和增益选择时序如图2.2所示。
图2.2数据输出,输入通道和增益选择时序图 2.3蜂鸣器控制原理蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件 蜂鸣器的发声原理由振动装置和谐振装置组成,而蜂鸣器又分为无源他激型与有源自激型。 无源他激型蜂鸣器的工作发声原理是:方波信号输入谐振装置转换为声音信号输出,无源他激型蜂鸣器的工作发声原理图如2.3.1所示: 图2.3.1无源他激型蜂鸣器的工作发声原理 有源自激型蜂鸣器的工作发声原理是:直流电源输入经过振荡系统的放大取样电路在谐振装置作用下产生声音信号,有源自激型蜂鸣器的工作发声原理图如2.3.2所示:
图2.3.2无源他激型蜂鸣器的工作发声原理 3系统硬件电路设计3.1 系统设计要求本系统设计的是一款全自动安全带提示系统,该系统适合于各种汽车,游乐场等具有危险性高的座椅的使用,该系统具有语音、灯光报警,OLED液晶显示、体重检测等功能,对于该安全带的使用范围来说,我们在设计时要多方面考虑各种因素,主要如下: 1. 安全带是否系上和人是否坐上有直接的联系,只有检测人坐上以后才考虑安全带是否系上,防止系统误判。 2. 安全带系统在报警提示时会提示到某一个安全带是否系上,减少某些场所安全人员逐步排查时的工作量。 3. 系统尽量做到安全可靠、低成本并且使用寿命要长。系统的安全性越高,人们使用也就更加放心。系统的花费成本越低,其利润价值越客观。 3.2 器件的选取主控芯片的选择本设计最终实现的是安全带提示系统,需要对位置上人的体重进行检测和判断,并且实现OLED显示和报警的功能,从价格和功能上的综合考虑,我们最终选择STC89C52单片机作为该系统的主控芯片,STC89C52RC是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K字节系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但是做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,具有很高的价格优势,在生活中得到广泛的应用,该系列的单片机不管是制作硬件还是开发软件,都具有良好的稳定性和可靠性。它的芯片在使用的过程中所消耗的电量很少,并且它的速度快,在实际的操作中很省时。 液晶显示器的选择液晶显示器有两个选择。第一种是选择OLCD12864液晶显示屏,其具有体积小,使用灵活,分辨率高,并且能够显示多行数据的特点。OLCD12864不但能够像普通液晶显示屏那样将字母和数字显示出来,另外,它还能将系统所需要的汉字和图形在屏幕上显示出来。除此之外,它还可以控制输入字符的整体距离,保证输入数据位置的准确,显示数据更加直观。同时,低电压低功耗是它的另一个显著的特点。有它构成的液晶显示方案与其他相比,液晶显示程序要简洁很多。第二种是选择LCD1602液晶显示屏,是一种工业字符型液晶显示屏,它的操作很简单,在实际使用中也非常容易控制。但是它只能够显示字母和阿拉伯数字。 出于对整个系统的综合考虑,我选择了价格相对比较便宜、分辨率高、功耗低、显示内容丰富的OLCD12864液晶显示屏作为本系统的显示屏幕。 报警电路器件的选择报警电路选择使用蜂鸣器来实现,它不仅使用方便,操作简单,而且声音频率可控,程序控制的时候简单。 3.3 总体方案设计本系统具有自动检测功能、报警功能、定位功能等,系统运用STC89C52单片机作为最小系统中央处理器。整个系统主要分为硬件和软件两大部分,在系统的设计过程中,可以将硬件部分分为信息采集模块、主控制模块、自动报警模块等三大部分进行设计。 本系统设计采用压力传感器采集座位的重量信息,然后将采集后的重量信息经过24位AD转换模块转换成电压信号,再将电压信号传到STC89C52单片机进行处理,根据安全带是否系上,将处理后的信息在OLED上显示出来。整个系统的结构框图如图3.1所示 图3.1系统整体结构图
3..4单片机最小系统设计STC89C52RC是一种小型单片机,是电子工程师常用器件。其主要特点为采用Flash存贮器技术,降低了制造成本,其软件、硬件与MCS-51完全兼容,且采用高密度非易失存储器制造技术制造,将多功能8位CPU和闪烁存储器组合在单个芯片中,其程序的电可擦写特性,使得开发与试验比较容易,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。STC89C52RC有很宽的工作电源电压,可为2.7~6V,当工作在3V时,电流相当于6V工作时的1/4。STC89C52RC工作于12Hz时,动态电流为5.5mA,空闲态为1mA,掉电状态仅为20nA。这样小的功耗很适合于电池供电的小型控制系统,该单片机的电路引脚图如图3.4所示。
1.时钟电路 晶振电路在本系统中充当的作用是为了让单片机能够产生合适的时钟脉冲。晶振脉冲的时钟周期可以是单片机产生中断,从而能够使单片机实现计时的功能。本系统设计的晶振电路由两个22pF的电容和一个晶体振荡器以及一个1M的电阻构成的,与单片机的OSCIN、OSCOUT引脚相连接。 2.复位电路 复位电路在每个系统的设计中都是非常重要的组成部分,它能够确保系统的电压稳定,它可以保障整个系统的电压稳定,从而能够正常工作。同时它还能使中央处理器和组件处于初始化,并且在每次系统启动时都能够从该状态开始工作。复位电路共有两个种类,分别是按键式和上电式。在该系统设计中采用的是按键式的复位,由一个按键、一个电容和一个电阻组成,与单片机的NRST引脚连接。单片机的最小系统如图3.4.1所示。 1.5 信号采集电路设计电阻应变式压力传感器主要由弹性体、电阻应变片电缆线等组成,内部线路采用惠更斯电桥,当弹性体承受载荷产生变形时,电阻应变片(转换元件)受到拉伸或压缩应变片变形后,它的阻值将发生变化(增大或减小),从而使电桥失去平衡,产生相应的差动信号,供后续电路测量和处理。压力传感器和AD转换硬件连接图如3.5所示。
图3.5 压力传感器和HX711硬件连接图 1.6报警电路设计源自激型蜂鸣器的工作发声原理是:直流电源输入经过振荡系统的放大取样电路在谐振装置作用下产生声音信号,有源自激型蜂鸣器电路硬件连接图如3.6所示:
3.7 OLED显示电路设计OLCD12864液晶显示屏,其具有体积小,使用灵活,分辨率高,并且能够显示多行数据的特点。同时,低电压低功耗是它的另一个显著的特点。有它构成的液晶显示方案与其他相比,液晶显示程序要简洁很多。OLED电路硬件连接图如3.7所示:
7805稳压电路设计稳压电路主要作用是为弱电部分供电,比如单片机还有其他传感器都是5V左右供电,所以要把220V先经过变压器降到交流12V左右,整流,然后再次用7805稳压到5V直流,才可以给单片机供电。。7805电路硬件连接图如3.8所示:
4 程序流程设计软件程序的设计在整个系统的设计中起着至关重要的作用,通常的情况下,一个系统的软件程序的工作效率就会决定着这个系统的整体效率,即使是两个硬件结构配置一模一样的系统。所以在设计软件程序的时候要更加的用心,更加细致,要使得设计出来的软件程序尽量结构优化,效率高。在本次设计中,整个系统的软件部分主要分为四大块来设计,分别为:主控制部分、参数监测部分、液晶显示部分、自动报警部分。本次系统设计的软件程序是用C语言进行编程,在Keil-MDK平台中完成的。 本系统的主控制部分采用的是STC89C52单片机,设计的主程序通过keil开发平台的环境下载到STC89C52单片机中开始工作。当系统开始工作时,主程序也就开始运行,它首先会初始化系统的硬件部分,然后判断是否有人坐下。如果有人坐下,再判断安全带是否系上,如果前者达到而后者没有,则系统报警,OLED显示安全带没有系的座位该系统的主控制流程图如图4.1 所示。
|
主题
回复
5 程序
#include "REG52.h"
#include "oled.h"
#include "HX711.h"
#define GapValue 475
#define u8 unsigned char
#define u16 unsigned int
sbit LED=P0^1;
sbit Warn=P0^2;
sbit Warn1=P0^3;
sbit Warn2=P0^4;
sbit Warn3=P0^5;
void delay(unsigned int z)
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
int a=0,b=0;
unsigned long Weight_Shiwu=0,init_Weight_Shiwu=0,Weight_Shiwu2=0,init_Weight_Shiwu2=0;
void Delay(void)
{
Weight_Shiwu=HX711_Read();
Weight_Shiwu2=HX711_Read2();
Weight_Shiwu=(unsigned long)((float)Weight_Shiwu/GapValue)- init_Weight_Shiwu+1; //计算实物的实际重量
Weight_Shiwu2=(unsigned long)((float)Weight_Shiwu2/GapValue)- init_Weight_Shiwu2+1; //计算实物的实际重量
if(Weight_Shiwu2<10000) //一号安全带
{
OLED_ShowNum(0,6,Weight_Shiwu2,4,16);
OLED_ShowNum(41,6,a,2,16);
if(Weight_Shiwu2>1000&&Warn1==1)
{
OLED_ShowNum(0,6,Weight_Shiwu2,4,16);
OLED_ShowNum(41,6,a,2,16);
a++;
LED=0;
delay(500);
OLED_ShowCHinese(37,4,9);
OLED_ShowCHinese(53,4,11);
OLED_ShowCHinese(69,4,12);//一号位
}
else if(Weight_Shiwu2>1000&&Warn1==0)
{
OLED_ShowCHinese(37,4,2);
OLED_ShowCHinese(53,4,3);
OLED_ShowCHinese(69,4,12);//安全位
}
LED=1;
}
else
{
Weight_Shiwu2=0;
OLED_ShowNum(0,6,Weight_Shiwu2,4,16);
}
if(Weight_Shiwu<10000) //二号安全带
{
OLED_ShowNum(100,6,b,2,16);
OLED_ShowNum(67,6,Weight_Shiwu,4,16);
if(Weight_Shiwu>1000&&Warn3==1)
{
OLED_ShowNum(67,6,Weight_Shiwu,4,16);
b++;
OLED_ShowNum(100,6,b,2,16);
LED=0;
delay(500);
OLED_ShowCHinese(37,4,10);
OLED_ShowCHinese(53,4,11);
OLED_ShowCHinese(69,4,12);//二号位
}
else if(Weight_Shiwu>1000&&Warn3==0)
{
OLED_ShowCHinese(37,4,2);
OLED_ShowCHinese(53,4,3);
OLED_ShowCHinese(69,4,12);//安全位
}
LED=1;
}
else
{
Weight_Shiwu=0;
OLED_ShowNum(67,6,Weight_Shiwu,4,16);
}
}
int main(void)
{
OLED_Init(); //初始化OLED
OLED_Clear();
init_Weight_Shiwu=HX711_Read();//获得初始重量
init_Weight_Shiwu2=HX711_Read2();//获得初始重量
init_Weight_Shiwu=(unsigned long)((float)init_Weight_Shiwu/GapValue);
init_Weight_Shiwu2=(unsigned long)((float)init_Weight_Shiwu2/GapValue);
Warn=0;
Warn1=1;
Warn2=0;
Warn3=1;
while(1)
{
Delay();
OLED_ShowCHinese(5,0,2);
OLED_ShowCHinese(21,0,3);
OLED_ShowCHinese(37,0,4);
OLED_ShowCHinese(53,0,5);
OLED_ShowCHinese(69,0,6);
OLED_ShowCHinese(85,0,7);
OLED_ShowCHinese(101,0,8);//安全带提示系统
}
}
|