一、項(xiàng)目介紹
隨著科技的發(fā)展,人們對(duì)低碳環(huán)保的認(rèn)知和需求不斷提高。騎自行車既能夠低碳環(huán)保,又能夠鍛煉身體,成為了很多人出行的首選。然而,由于自行車本身沒(méi)有帶指示燈,比如剎車指示燈等,所以自行車的安全性并不是很好,如果人們?cè)隍T自行車時(shí)緊急剎車,后車無(wú)法及時(shí)判斷前方自行車的行為,容易造成交通事故。因此,設(shè)計(jì)一款自動(dòng)剎車燈系統(tǒng)具有十分重要的意義。
本項(xiàng)目實(shí)現(xiàn)了通過(guò)安裝ADXL345陀螺儀和四枚LED燈還有STM32F103C8T6主控芯片來(lái)實(shí)現(xiàn)自行車自動(dòng)剎車燈的功能。當(dāng)自行車上安裝了該設(shè)備后,ADXL345通過(guò)IIC通信協(xié)議將X,Y,Z三軸的加速度實(shí)時(shí)值發(fā)送給SMT32F103C8T6主控芯片,并結(jié)合STM32高級(jí)定時(shí)器的PWM功能,輸出不同占空比的脈沖,控制不同的LED燈輸出多種亮度等級(jí),從而控制不同的LED的開(kāi)關(guān)以及明暗,并且通過(guò)不同亮度的紅光和綠光混合,能夠得到黃色的LED燈光。這樣,在自行車急剎或者加速時(shí),實(shí)時(shí)地控制LED燈的亮度和顏色,讓后方車輛能夠更清楚地了解前方自行車的行為,從而做出快速的反應(yīng),保障騎行者以及后車的安全。同時(shí),該系統(tǒng)也能夠提高自行車的可見(jiàn)性,并且對(duì)于追求低碳環(huán)保的人群來(lái)說(shuō),讓自行車既能低碳環(huán)保,又能夠鍛煉身體。
二、設(shè)計(jì)思路
2.1 項(xiàng)目目標(biāo)
本項(xiàng)目通過(guò)安裝ADXL345陀螺儀和四枚LED燈還有STM32F103C8T6主控芯片來(lái)實(shí)現(xiàn)自行車自動(dòng)剎車燈的功能,使得自行車在急剎或者加速時(shí),實(shí)時(shí)地控制LED燈的亮度和顏色,提高其可見(jiàn)性,降低交通事故的風(fēng)險(xiǎn)。同時(shí),該系統(tǒng)還能夠使自行車既能低碳環(huán)保,又能夠鍛煉身體。
2.2 項(xiàng)目硬件構(gòu)成
(1)自行車:作為安裝系統(tǒng)的物體,需要有一個(gè)固定的位置來(lái)安裝ADXL345陀螺儀和四枚LED燈。
(2)ADXL345陀螺儀:通過(guò)IIC通信協(xié)議與STM32F103C8T6主控芯片通信,并將X、Y、Z三軸的加速度實(shí)時(shí)值發(fā)送給SMT32F103C8T6主控芯片。
(3)四枚LED燈:使用不同亮度的紅光和綠光混合,能夠得到黃色的LED燈光。通過(guò)控制其亮度和顏色來(lái)提高自行車的可見(jiàn)性。
(4)STM32F103C8T6主控芯片:根據(jù)接收到的ADXL345數(shù)據(jù),結(jié)合STN32的高級(jí)定時(shí)器的PWM功能,輸出不同占空比的脈沖,控制不同的LED燈輸出多種亮度等級(jí)。
2.3 項(xiàng)目功能實(shí)現(xiàn)
(1)自行車加速度監(jiān)測(cè):ADXL345陀螺儀通過(guò)IIC通信協(xié)議與STM32F103C8T6主控芯片通信,實(shí)時(shí)地感知自行車的加速度變化。
(2)LED燈亮度和顏色控制:STM32F103C8T6主控芯片運(yùn)用高級(jí)定時(shí)器的PWM功能,能夠輸出不同占空比的脈沖,并控制不同的LED燈輸出多種亮度等級(jí),通過(guò)不同亮度的紅光和綠光混合,能夠得到黃色的LED燈光,提高自行車的可見(jiàn)性。
(3)系統(tǒng)安裝和調(diào)試:需要將ADXL345陀螺儀和四枚LED燈與STM32F103C8T6主控芯片連接起來(lái),并進(jìn)行系統(tǒng)測(cè)試和調(diào)試。
三、系統(tǒng)測(cè)試
3.1 功能樣機(jī)安裝與焊接
繪制好電路原理圖之后,按照原理圖將自動(dòng)剎車燈系統(tǒng)的各個(gè)模塊安裝在事先購(gòu)買好的洞洞板上,然后用導(dǎo)線將他們連接在一起,最后再焊接在一起,做成完整的自動(dòng)剎車燈電路板。
3.2 ADXL345模塊調(diào)試
當(dāng)上電后,將自動(dòng)剎車燈電路的串口2外設(shè)引腳連接至PC端,將加速度解算后的實(shí)際值發(fā)送至PC端,通過(guò)PC端串口調(diào)試助手顯示出具體數(shù)值,再觀察數(shù)值是否符合常理。
通過(guò)顯示的數(shù)據(jù)信息,可以推測(cè)出ADXL345陀螺儀能夠正常工作。
3.3 實(shí)物調(diào)試
最后階段,將對(duì)自行車自動(dòng)剎車燈進(jìn)行實(shí)物調(diào)試,確定其基本功能能夠正常實(shí)現(xiàn)。
當(dāng)系統(tǒng)上電后,左右各一枚LED發(fā)出低亮黃色燈光,如下圖。
靜置30S后,所有LED均熄滅,如下圖。
當(dāng)檢測(cè)到震動(dòng)后,重新亮起兩盞黃色LED燈,如下圖。
當(dāng)檢測(cè)到剎車時(shí),四枚LED燈均以高亮發(fā)出紅色燈光,如下圖。
結(jié)合自行車自動(dòng)剎車燈的功能需求和實(shí)物調(diào)試結(jié)果,可以發(fā)現(xiàn),調(diào)試結(jié)果完全符合自動(dòng)剎車燈的預(yù)期功能。
四、代碼設(shè)計(jì)
4.1 主函數(shù)
#include "stm32f10x.h"
#include "usart.h"
#include "led.h"
#include "RTC_Time.h"
#include < stdio.h >
#include "delay.h"
#include "sys.h"
#include "stdlib.h"
#include "stdio.h"
#include "string.h"
#include "adxl345.h"
int main(void)
{
u32 flag=0;
short x, y, z;
float accelerated;
LED_GPIO_Config();//初始化LED
USART2_Config();
delay_init(); //延時(shí)函數(shù)初始化
PWM_LED_INIT(); //PWM PA8-9
LED_Init(); //PB7 LED-R
PBout(7) = 1;
ADXL345_Init(); //PB 10,11
ADXL345_Read_Average(&x, &y, &z, 20);
ADXL345_AUTO_Adjust((char *)&x, (char *)&y, (char *)&z);
TIM_SetCompare1(TIM1, 50); //設(shè)置TIMx捕獲比較1寄存器(通道1)值(脈沖寬度) 占空比%20
TIM_SetCompare2(TIM1, 50); //設(shè)置TIMx捕獲比較2寄存器(通道2)值(脈沖寬度) 占空比%20
while (1)
{
ADXL345_Read_Average(&x, &y, &z, 5); //讀加速度值
accelerated=(x*3.9/1000*9.8); //加速度實(shí)際值
printf("X=%4.1f Y=%4.1f Z=%4.1f
",accelerated,(y*3.9/1000*9.8),(z*3.9/1000*9.8));
while(flag >425)
{
TIM_SetCompare1(TIM1, 0); //通道2 占空比%0
TIM_SetCompare2(TIM1, 0); //通道2 占空比%0
ADXL345_Read_Average(&x, &y, &z, 5);
accelerated=(x*3.9/1000*9.8);
if(accelerated< -5||accelerated >5)
{
break;
}
}
flag++;
if(accelerated< -4)
{
//四個(gè)LED低電平導(dǎo)通
TIM_SetCompare1(TIM1, 0); //GREEN不亮
TIM_SetCompare2(TIM1, 1000); //RED高亮
PBout(7) = 0;
flag=0;
}
if(accelerated >0)
{
PBout(7) = 1;
TIM_SetCompare1(TIM1, 50); //RED低亮
TIM_SetCompare2(TIM1, 50