STM32项目分享:面向复杂路段的可控智能交通信号灯设计
“我们不做一锤子买卖,只做技术成长的长期伙伴!”
目录
一、视频展示
二、项目简介
三、原理图设计
四、PCB硬件设计
五、程序设计
六、资料分享
一、视频展示
面向复杂路段的可控智能交通信号灯设计 -视频分享
二、项目简介
题目:面向复杂路段的可控智能交通信号灯设计
主控:STM32
显示:OLED显示屏
红外光电*2
DHT11温湿度传感器
光检测模块:光照传感器
声音传感器
雨滴传感器
4g模块
功能:
1、实时检测当前温湿度,光照强度,雨滴情况,车流量
2、可通过按键切换页面
3、数据可通过4g模块发送到云端。
4、默认白天(红10s,绿10s,黄3s),晚上(红15s,绿15s,黄3s),当有雨出现时(红17s,绿17s,黄3s)
5、当声音检测超过70时,自动判定为紧急车辆通行,全部红灯10s,结束后,才会恢复。
6、可按键控制灯的时长,灯时长变化情况还按原基础的情况加以变化。
7、光电检测车流量,流量过大(超过10后),如果白天则按(红15s,绿15s,黄3s),如果晚上则不变(红15s,绿15s,黄3s)。
三、原理图设计
四、PCB硬件设计
五、程序设计
#include "stm32f10x.h" // Device header
#include "delay.h"
#include "lcd.h"
#include "dht11.h"
#include "IOput.h"
#include "usart.h"
#include "timer.h"
#include "adc.h"
#include "4g.h"int Red1 = 0,Green1 = 0,yellow1 = 0;
int Red2 = 0,Green2 = 0,yellow2 = 0;
extern u8 res;
u8 flag_rgb = 1;
u8 flag_Ds = 1,flag_Ds1 = 1;
u8 flag_red = 1,flag_green = 0,flag_yellow = 0;
u8 show_flag,show1_flag,max_wd=30,max_sd=50,max_hy=50,max_yw=65,max_voi = 40,flag_all = 1;
void wifi(){if(res=='a'){OLED_Clear();res=0;set_flag=1;}else if(res=='b'){res=0;add_flag=1;}else if(res=='c'){res=0;dec_flag=1;}}
void show_led_rgb(u8 pos, u8 red,u8 green,u8 yello)
{if(red == 1){OLED_ShowCH(0,pos," 红 ");}else if(green == 1){OLED_ShowCH(0,pos," 绿 ");}else if(yello == 1){OLED_ShowCH(0,pos," 黄 ");}
}
void judge_rgb(u8 flag,u8 mode,u8 red,u8 green,u8 yellow)
{if(flag_Ds == 1){flag_Ds = 0;Red1 = red;Green1 = green;yellow1 = yellow;Red2 = red;Green2 = green;yellow2 = yellow;}OLED_ShowNum(16,2,Red1,2,16);OLED_ShowNum(48,2,Green1,2,16);OLED_ShowNum(80,2,yellow1,2,16);OLED_ShowNum(16,6,Red2,2,16);OLED_ShowNum(48,6,Green2,2,16);OLED_ShowNum(80,6,yellow2,2,16);
// OLED_ShowNum(104,6,time_count,2,16);if(mode == 1 && flag != 3){if(flag_rgb == 1){flag_rgb = 0;time_count = 0;}if(time_count >= 100)//白天{time_count = 0;if(flag_red == 1){show_led_rgb(0,1,0,0);show_led_rgb(4,0,1,0);Red1--;Green2--;if(Red1 <= 0){Red1 = 0;flag_red = 0;flag_green = 1;flag_yellow = 0;}if(Green2 <= 0){Green2 = 0;}}if(flag_green == 1){show_led_rgb(0,0,1,0);show_led_rgb(4,1,0,0);Green1--;Red2--;if(Green1 <= 0){Green1 = 0;flag_red = 0;flag_green = 0;flag_yellow = 1;}if(Red2 <= 0){Red2 = 0;}}if(flag_yellow == 1){show_led_rgb(0,0,0,1);show_led_rgb(4,0,0,1);yellow1--;yellow2--;if(yellow1 <= 0){yellow1 = 0;flag_red = 1;flag_green = 0;flag_yellow = 0;flag_Ds = 1;}if(yellow2 <= 0){yellow2 = 0;}}}}
}
void All_Red(u8 red,u8 green,u8 yellow)
{if(flag_Ds1 == 1){flag_Ds1 = 0;Red1 = red;Green1 = green;yellow1 = yellow;Red2 = red;Green2 = green;yellow2 = yellow;}OLED_ShowNum(16,2,Red1,2,16);OLED_ShowNum(48,2,Green1,2,16);OLED_ShowNum(80,2,yellow1,2,16);OLED_ShowNum(16,6,Red2,2,16);OLED_ShowNum(48,6,Green2,2,16);OLED_ShowNum(80,6,yellow2,2,16);
// OLED_ShowNum(104,6,time_count,2,16);if(time_count >= 100){time_count = 0;show_led_rgb(0,1,0,0);show_led_rgb(4,1,0,0);Red1--;Red2--;if(Red1 <=0 && Red2 <= 0){Red1 = 0;Red2 = 0;flag_all = 0;flag_Ds1 = 1;}}
}
u8 light,tushi,count_1 = 0;u8 fire = 0,yanwu = 0;
u16 voice = 0,num_car = 0;
u8 flag_ds = 1,flag_zd = 1;
u8 open_flage;
u8 time_red = 0,time_green = 0,time_yellow = 0;
int main (void)
{delay_init();NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);DHT11_Init();OLED_Init();delay_ms(1);OLED_Clear();output_init();input_init();Adc_Init();TIM3_Int_Init(72-1,10000-1);Usart1_Init(115200);Init_4G();OLED_Clear();while(1){wifi();count_1++;yanwu=100-Get_Adc_Average(1,10)*100/4096;fire=100-Get_Adc_Average(4,10)*100/4096;voice = Get_Adc_Average(5,10)*200/4096;DHT11_Read_Data(&temp,&humi);key_scan(1,0,0);if(set_flag==1 && show_flag!=2){show1_flag=0;set_flag=0;show_flag++;if(show_flag>=3){show_flag=0;}}if(show_flag==0){if(flag_zd == 1){ if(voice > max_voi){flag_ds = 3;//紧急车辆同行while(flag_all){All_Red(10,10,3);if(flag_all ==0){break;}}flag_ds = 0;flag_all = 1;}else if(num_car >= 10 && flag_ds != 3){if(yanwu >= 50){flag_ds = 1;//白天judge_rgb(flag_ds,1,15,15,3);}else{flag_ds = 0;//晚上judge_rgb(flag_ds,1,15,15,3);}}else{if(fire >= 40 && flag_ds != 3 ){flag_ds = 2;//下雨天judge_rgb(flag_ds,1,17,17,3);}else{if(yanwu >= 50 && flag_ds != 3){flag_ds = 1;//白天judge_rgb(flag_ds,1,10,10,3);}else{// flag_ds = 0;//晚上if(flag_ds != 3)judge_rgb(flag_ds,1,15,15,3);}}}}else{judge_rgb(0,1,time_red,time_yellow,time_green);}}if(show_flag == 1){if(GD==0){open_flage=1;}if(GD1==1 && open_flage==1){open_flage=0;num_car++;}if(num_car >= 100){num_car = 0;}OLED_ShowCH(0,0,"温度:");OLED_ShowNum(40,0,temp,2,16);OLED_ShowCH(64,0,"湿度:");OLED_ShowNum(104,0,humi,2,16);OLED_ShowCH(0,2,"雨情:");OLED_ShowNum(40,2,fire,2,16);OLED_ShowCH(64,2,"光照:");OLED_ShowNum(104,2,yanwu,2,16);OLED_ShowCH(0,4,"车流:");OLED_ShowNum(40,4,num_car,2,16);OLED_ShowCH(64,4,"声音:");OLED_ShowNum(104,4,voice,2,16);OLED_ShowNum(104,6,count_1,2,16);if(add_flag == 1){add_flag = 0;OLED_ShowCH(0,6,"自动模式");flag_zd = 1;}if(dec_flag == 1){dec_flag = 0;OLED_ShowCH(0,6,"手动模式");flag_zd = 0;}}if(show_flag==2){OLED_ShowCH(0,0,"红灯时长:");OLED_ShowCH(0,2,"黄灯时长:");OLED_ShowCH(0,4,"绿灯时长:");OLED_ShowCH(0,6,"最大雨情:");OLED_ShowNum(72,0,time_red,2,16);OLED_ShowNum(72,2,time_yellow,2,16);OLED_ShowNum(72,4,time_green,2,16);OLED_ShowNum(72,6,max_hy,2,16);if(set_flag==1&&show_flag==2){set_flag=0;show1_flag++;if(show1_flag>=4){show_flag=0; OLED_Clear();}}if(show1_flag==0){OLED_ShowCH(112,0,"←");if(add_flag==1){add_flag=0;time_red++;}if(dec_flag==1){dec_flag=0;time_red--;}if(time_red>=100 || time_red<=0){time_red=0;}}if(show1_flag==1){OLED_ShowCH(112,2,"←");if(add_flag==1){add_flag=0;time_yellow++;}if(dec_flag==1){dec_flag=0;time_yellow--;}if(time_yellow>=100 || time_yellow<=0){time_yellow=0;}}if(show1_flag==2){OLED_ShowCH(112,4,"←");if(add_flag==1){add_flag=0;time_green++;}if(dec_flag==1){dec_flag=0;time_green--;}if(time_green>=100 || time_green<=0){time_green=0;}}if(show1_flag==3){OLED_ShowCH(112,6,"←");if(add_flag==1){add_flag=0;max_hy++;}if(dec_flag==1){dec_flag=0;max_hy--;}if(max_hy>=100 || max_hy<=0){max_hy=0;}}}if(count_1>=150){SendMassage_4G("temp",temp);delay_ms(250);SendMassage_4G("humi",humi);delay_ms(250);SendMassage_4G("gz",yanwu);delay_ms(250);SendMassage_4G("yuqin",fire);delay_ms(250);SendMassage_4G("chel",num_car);delay_ms(250);SendMassage_4G("shengy",voice);count_1=0;}}
}
六、资料分享
点击即可查看当前资料分享。