找回密码
 注册
关于网站域名变更的通知
查看: 412|回复: 1
打印 上一主题 下一主题

51单片机防酒后驾驶 MQ-3酒精检测系统的仿真

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-1-10 13:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
51单片机防酒后驾驶 MQ-3酒精检测系统的仿真
* A, y! c3 U) s( k
* f' ?* f, i5 h, w4 G% I; Z. |

. Q0 b9 a' l& `3 W9 v基于单片机的防酒后驾驶控制系统的仿真图:
+ u* T) L1 o5 }$ o1 s
! e  O/ _0 e- {# U( M0 {

% n: _1 ~& B; n+ a& x/ Y- ]
课题任务的内容和要求
(1)  学习气体测量传感器的原理和使用,并完成数据采集、调理电路的设计;
(2)  学习单片机系统的设计及编程,完成系统整体设计;
(3)  通过不同颜色显示灯及触发措施,对应三种酒精含量范围(醉酒状态、少量饮酒状态、正常状态),;
(4)  测量结果动态显示。

: G1 e/ K# c; G1 U* T
酒精传感器采集酒精浓度信息,将其转化为变化的电压信号。电压信号经过处理后通过A/D转换电路实现对信号的模数转换,然后送至单片机系统进行逻辑判断处理。如果驾驶员未饮酒,LED显示绿灯,汽车正常启动;如果驾驶员处于少量饮酒状态,LED显示黄灯,且会发出声光报警;如果驾驶员处于醉酒状态时,LED显示红灯,且会控制继电器动作,自动切断汽车启动系统电源,从而使汽车无法启动,有效的防止驾驶员酒后驾车。
流程图:

7 e( M4 Q0 {( |* y$ A" y, G
5 ~; w& j5 g/ \5 G! b! G
3 A& N* d( m: y- h4 _$ D8 p' w 5 ~, R8 X! P. r# D1 |

8 I2 O: f7 }1 x7 ~; LMQ-3模块的资料:
8 I, P  ^4 x7 _$ b
2 K0 Z- C, {. h4 K1 P% }5 J' G4 l6 n; {5 J+ t+ V$ t
单片机源程序:
8 l& L* d* `- d0 D
        #include, t; N+ a1 x# m% F! E) E, y
        #include<1602.h>: Z- \" W$ f1 R( T+ k6 @
        sbit CL=P2^2;: p+ u; i# ^' x  u- E
        sbit ST=P2^3;9 A! V1 B$ H$ ^2 N. l( E
        sbit OE=P2^5;5 L( t; A& Z; k8 x8 p8 q! G
        sbit EOC=P2^4;                //这四个是定义AD转换器的; S% F, }, K+ y+ V& K0 s, b
        sbit DOUT=P3^2;         //传感器TTL输出接单片机外部中断0$ A. `5 E7 Z- z) R4 A
        sbit SK=P2^6;                 //蜂鸣器
! D# q) M) |8 X- d( p7 Z        uchar code WU[]="  Welcome use  ";3 ^& g" ?- x, O7 [$ \" U
        uchar code TS[]="Alcohol Tester";
: b! K9 O, u; m- P3 ?        uchar code YC[]="  You Can Drive!";" T; y# O8 y  t
        uchar code YN[]=" It's Dangerous!";- `! h& T. N' h% j( Q+ Z7 f
        uchar code GD[]="Drive  carefully";                  ( Y  P1 j0 f$ Q
        uchar code AP[]="Watch out,Please";& h% b) @3 ~! t  g: Q% K
        uchar code YD[]=" You have drunk";5 X6 d5 }6 {3 m( e5 Q$ P# s( ]
        uchar code FS[]="Forbidden Start!";
  O) i+ B# c9 b; f+ P2 [3 j' v        uchar nd[]="Alcohol:     ppm      ";! n5 i- t5 [- D; F1 }
        uchar i=0,flag=0;5 ^0 v9 p/ w1 L2 ]8 V3 D
        uint Z;! d1 C2 e, B' [4 r5 o7 R8 r$ W/ A
/*******************蜂鸣器报警**************/
% p& V9 T- [! f3 W- A        void Beep(uchar t)9 V* w% o' {, x1 q
        {! ?  }! N+ P6 s4 w# P6 |: E
         uchar i,j;! \5 k  {) X6 `+ Z
        for(i=0;i<200;i++)
/ {/ a1 M* d, D6 A9 B                {
  y" D- N$ l8 i7 S1 ]0 g                         SK=~SK;
1 ]7 O4 \+ Y7 M2 v                        for(j=0;j<t;j++);
! A! A, p. b. A4 l/ W                }
1 r5 U9 l9 `. V4 O" s0 D8 D                SK=1;( Q& |, S* f1 ^2 s" V. v
        }
, B) l2 i* S# t$ d: r/ i  k/*******************AD转换**************/
1 c& [% K, L! c3 Z% s# k& _- ]' ?7 x        void AD0809()
5 p/ W8 v9 J* A+ l( s        {5 n- @+ o# i  n+ [" q$ e/ ]
                ST=0;( ~; A! q8 i; L1 k) \( r3 p
                ST=1;  T- o2 c8 y4 A  H1 I: \
                ST=0;                 //        启动ADC0809
  J+ r! a4 E( [& k. T1 E                while(EOC==0);        // 等待数据转化
% H+ M3 V- T2 E& \                OE=1;                        // 传输数据
. ~' R' J7 t, W; p' A) B; t3 i& a: i                Z=P1;* ?& S0 T9 _1 k2 F
                OE=0;                   // 关闭传输数据7 c% D7 j3 y0 y
                delay(1);
! g* [% }! N( e: _3 p. N* e                Z=Z*500.0/255;5 \) x, O! J  G& Z7 u0 Q& Q* O5 v
                nd[10]=(Z/100-1)*2+Z%100/10/5+'0';
9 r3 L4 G& T: b% C  a' h/ S+ v                nd[11]=(Z%100/10%5)*2+'0';+ n' q5 Y. F! f. d
                nd[12]='0';        
5 H7 O$ ~& j  ~: o/ s* K: u        }0 a1 n/ ]" ?/ E3 a1 t
/*******************主函数**************/- Q8 j  D' S: v/ m0 Q
        void main()
, w; B  A! d9 P" G1 |& z, |                {        
2 l# [) L8 X# i                        lcd_init();
# `+ g, t) G2 D" C1 C0 G  J                        lcd_pos(0);
  S! N3 A# I/ b; i                        dis_date(WU);
9 z5 I) k5 e9 z. P! j                        lcd_pos(0x41);3 K: B0 K' R. ]7 z
                        dis_date(TS);: C* o9 P+ ^6 G" g1 ^9 ?
                        delay(2000);
2 Q/ B# u3 D& d$ B                        EA=1;                // 开放总中断% |3 m$ E$ \7 Z7 v' N
                        EX0=1;                // 允许外部中断0
# L  p1 ?$ Q& M1 c                        ET0=1;                // 允许定时器0中断7 O* n$ i! Z- W) X; {
                        TCON=0x01;         //         外部中断0下降沿触发) E3 |3 P0 H4 }0 g- q
                        TMOD=0X01;          //  定时器工作方式1- s: n2 S* P* E8 h, |8 ]$ t0 h
                        TR0=1;                   //  打开定时器0) k. E0 x5 Y/ X. t
                        TH0=(65536-100)/256;7 W# @9 V! Q) o2 a
                         TL0=(65536-100)%256;  //设置T0工作频率5 m1 G* K6 _2 n  q
                        OE=0;                                 
7 v1 t. ?, x3 L- O* z2 D                        while(1)
( t3 `, F6 V( Z" H) \9 h, [- g, K! {5 B                                {        ) B. o' m* Q  }8 T
                                 AD0809();" q5 c; E+ N7 e  T6 S
                                 if(flag==1)                   // 进入酒精检测模式
, }" U4 Z2 r: k2 L8 q6 h                                {
/ _. M3 y, p; c                                                lcd_pos(0);! D- O# W8 T  b* J4 n
                                                dis_date(nd);
5 d: b: @6 n9 o4 |                                        if(nd[10]>0x32)4 y4 f! U, u8 C# x# c& j
                                         {* [& Q1 Z* q* {  X5 a- N
                                                P3=0x3b;                        // 醉酒饮酒 2 _  G, r2 `" x7 I& s7 v
                                                lcd_pos(0x40);) i) |, s/ M3 e" _4 b% w* ]9 c" }: m
                                                dis_date(FS);
, s+ O, F$ W) R* W! I5 W                                         }2 _  z6 F% o- y  ~& O
                                         else
8 R2 u: i/ x( X2 `; ?8 B* v2 W                                         {        
/ A! n, p) ^; {4 A6 s* d$ o$ P                                                P3=0xdb;                //少量模式) y" m2 c1 q1 |: j: ^" r  F
                                                lcd_pos(0x40);7 M3 T" Y, F2 y8 n! C/ ?9 D! h$ t
                                                dis_date(YN);: {( x% L" e3 @. R2 ^5 q# {
                                         ! h# f& N$ U8 M+ h: c; \' S6 n
3 f' [( q: Z, S; A7 e

* v  \/ \' H# q) X! \8 x…………限于本文篇幅 余下代码请下载附件…………+ Q# \. }: O! x* }, i2 d1 ~' b
5 A% Y4 a% J3 u" X

5 T5 D  B3 Z' L0 d% }1 t9 z- p& L
8 @8 g# `% {: k0 N& v0 }
9 l. ~# c5 a6 Z1 ^9 e7 {下载:
: k$ E1 c% |  D. v; ^+ B8 A
游客,如果您要查看本帖隐藏内容请回复
2 }& N1 N# q1 q6 S$ W! f
8 ?% U, w' S- F: M
( S& k7 t( Q- q; B0 B, L

该用户从未签到

2#
发表于 2019-1-10 16:54 | 只看该作者
看看楼主的代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-9 06:18 , Processed in 0.140625 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表