宋百玲,劉偉學(xué),孫振偉,張紅志,李孟飛,李 沖,張東振
(東北林業(yè)大學(xué) 交通學(xué)院,哈爾濱 150040)
?
汽車危險報警燈與轉(zhuǎn)向燈的隨動系統(tǒng)設(shè)計
宋百玲,劉偉學(xué),孫振偉,張紅志,李孟飛,李沖,張東振
(東北林業(yè)大學(xué) 交通學(xué)院,哈爾濱 150040)
摘要:通過運用AVR單片機及汽車電路轉(zhuǎn)換原理設(shè)計一個電路系統(tǒng),對車燈系統(tǒng)的構(gòu)造進行改善,使轉(zhuǎn)向燈打開的同時危險報警燈相應(yīng)關(guān)閉,使其他車輛和行人輕松分辨該車的轉(zhuǎn)向,從而增強了機動車的安全性能,將起到避免交通事故的作用。該系統(tǒng)具有功能強、使用靈活、可靠性高、成本低、體積小、面向控制和具有智能化功能的優(yōu)點。
關(guān)鍵詞:AVR單片機;轉(zhuǎn)向燈;危險報警燈;隨動系統(tǒng)
0引言
隨著汽車行業(yè)的高速發(fā)展,汽車的保有量迅速增加。同時,每年因交通事故造成的人民生命財產(chǎn)損失也不計其數(shù),汽車安全性能越來越受到人們的重視。當(dāng)遇到緊急情況時,汽車應(yīng)打開危險報警燈,兩側(cè)閃光燈閃起,以提醒其他車輛和行人。此時汽車若再打開轉(zhuǎn)向燈,則失去了轉(zhuǎn)向指示功能,容易引發(fā)交通事故。目前國內(nèi)外雖然有很多關(guān)于這個問題的研究,但是針對這個問題的具體解決方案和設(shè)計仍然沒有實現(xiàn)[1-2]。設(shè)計的汽車危險報警燈與轉(zhuǎn)向燈的隨動系統(tǒng)便可以解決這個問題,運用AVR單片機和汽車電路轉(zhuǎn)換原理設(shè)計,能夠使轉(zhuǎn)向燈打開的同時危險報警燈相應(yīng)地關(guān)閉,使其他車輛和行人輕松辨別其轉(zhuǎn)向,從而達到增強汽車安全性,避免交通事故的目的[3]。在原來的設(shè)計下,當(dāng)汽車危險報警燈時,兩側(cè)閃光燈同時閃爍,此時轉(zhuǎn)向燈開關(guān)對其控制不起作用[4]。
通過在電路系統(tǒng)中對單片機寫入相應(yīng)的程序,使不同的按鍵信號輸出高低不同的電平,從而控制發(fā)光二極管的熄滅和閃爍頻率,從而實現(xiàn)在打開危險報警燈時的轉(zhuǎn)向指示功能。電路圖如圖1所示,左側(cè)為左轉(zhuǎn)向燈、右轉(zhuǎn)向燈、危險報警燈開關(guān);中間為單片機控制系統(tǒng):右側(cè)為燈光系統(tǒng)(小燈泡額定電壓為2.5V,正常工作時電阻為10 Ω,串聯(lián)電阻均為10 Ω)。正常情況下,汽車左轉(zhuǎn)時打開L開關(guān),D1、D3、D5燈閃起;汽車右轉(zhuǎn)時打開右轉(zhuǎn)向開關(guān),D2、D4、D6燈閃起。當(dāng)危險報警開關(guān)D打開后,D1、D2、D3、D4、D5、D6燈同時閃起。而此時若右轉(zhuǎn),再打開右轉(zhuǎn)向開關(guān)R,則D1、D3、D5燈會立即熄滅,當(dāng)右轉(zhuǎn)向開關(guān)R關(guān)閉后又恢復(fù)閃爍;此時若需左轉(zhuǎn),再打開左轉(zhuǎn)向開關(guān)L、D2、D4、D6燈會立即熄滅,當(dāng)左轉(zhuǎn)向開關(guān)L關(guān)閉后又恢復(fù)閃爍,從實現(xiàn)轉(zhuǎn)向功能[5-7]。
圖1 電路設(shè)計Fig.1 Circuit design
1電路設(shè)計
單片機作為一種微型電腦,通過對它輸入特定程序,便可實現(xiàn)相應(yīng)的需求。通過對按鍵和發(fā)光二極管的控制來模擬汽車危險報警和轉(zhuǎn)向燈,AVR單片機控制原理如圖2所示,S20按鍵控制12345678發(fā)光二極管亮滅,代替危險報警燈;S21按鍵控制1234發(fā)光二極管發(fā)光5678發(fā)光二極管熄滅,代替新型右轉(zhuǎn)向燈;S22按鍵控制5678發(fā)光二極管發(fā)光1234發(fā)光二極管熄滅,代替新型左轉(zhuǎn)向燈。
圖2 AVR單片機控制原理Fig.2 The control principle of AVR single chip microcomputer
發(fā)光二極管工作的基本原理就是通過給其正負兩端加上一定的電壓,二極管由正極到負極有一定電流經(jīng)過,從而發(fā)光。發(fā)光二極管采取灌電流的工作方式,即當(dāng)單片機向?qū)?yīng)的控制I/O口寫入“0”時,與之相連接的二極管發(fā)光,當(dāng)單片機向?qū)?yīng)的控制I/O口寫入“1”時,與之相連接的二極管熄滅[5]。
ATmeaga128A共有53個I/O口,其中D0-D7連接到PB0-PB7作為8位LED發(fā)光二極管的控制口,S20、S21、S22分別連接到單片機的PC4、PC5、PD0作為3個按鍵的控制口[8-9]。通過將單片機的PB0-PB7口設(shè)置為輸出狀態(tài),根據(jù)S20、S21、S22三個按鍵的按下情況,控制不同的發(fā)光二極管點亮或熄滅。
2控制程序設(shè)計
#include “avr/io.h”
#include “stdio.h”
#include “math.h”
#include “string.h”
volatile unsigned char aaa=0;
#define S20_DIR DDRC&=(~(1<<4))
#define S20_IN_MODE PORTC|=(1<<4)
#define S20_CHECK(PINC&(1<<4))
#define S21_DIR DDRC&=(~(1<<5))
#define S21_IN_MODE PORTC|=(1<<5)
#define S21_CHECK(PINC&(1<<5))
#define S22_DIR DDRD&=(~(1<<0))
#define S22_IN_MODE PORTD|=(1<<0)
#define S22_CHECK(PIND&(1<<0))
#define led_dir DDRB=0XFF
#define led_off PORTB=0XFF
#define led_on PORTB=0
#define left_led_on PORTB=0X0F
#define left_led_off PORTB=0XFF
#define right_led_on PORTB=0XF0
#define right_led_off PORTB=0XFF
int main()
{
S20_DIR;
S20_IN_MODE;
S21_DIR;
S21_IN_MODE;
S22_DIR;
S22_IN_MODE;
led_dir;
led_off;
while(1)
{
if(!S20_CHECK)
{
led_on;
while(!S20_CHECK);
aaa++;
if(aaa==2){aaa=0;led_off;}
}
// else
// {led_off;}
if(!S21_CHECK)
{left_led_on;}
// else{left_led_off;}
if(!S22_CHECK)
{right_led_on;}
// else
// {right_led_off;}
}
}
/*volatile signed char aa=0;
volatile unsigned int i,j,val;
volatile unsigned int *p;//=(volatile unsigned int*)(0x0100);
int main()
{
int a[9]={1,8,9,51,0,2,45,8};
/*for(i=0;i<8;i++)
for(j=0;j<8-i;j++)
{