提示:记录毕设
路灯是一个城市基础设施的重要组成部分,也是人类生活中必不可少的工具。但目前国内的路灯设备基本上处于人工监控的状态,需要大量的人力资源进行维护和维修,其次,路灯往往不能在光线发生变化时及时调整开关状态,从而造成了巨大的能源浪费。此外,由于路灯的布设环境复杂,布设地域广,在发生故障时往往难以被路灯巡检人员及时发现,这就造成了故障路灯难以及时得到修复,为人们的夜间出行带来了安全隐患。
随着物联网的发展,越来越多的物联网技术被运用到各行各业之中。路灯作为城市照明的基础,直接影响着人们的生活质量,所以,使用物联网技术设计一种智能化路灯,在智慧城市的推进过程中有着重要的作用。为了解 决 目 前 路 灯 设 备 存 在 的 智 能 化程度低、人力资源需求高、能源浪费大、检修效率低等问题,文中设计了一种基于STM32的路灯智能监测控制系统。该系统能够实现光照强度、PM2.5等环境数据的采集,根据光照强度和时间进行自动开关路灯操作,并实时监测路灯的工作状态。此外,该系统能够通过4G无线传输方式与上位机进行信息交互,实现远程数据传输及远程控制。
基于STM32的车间煤矿井下探测系统,主控使用STM32F103ZET6,在正点原子的精英板上开发。
以STM32单片机为核心器件,设计一个精加车间环境检测系统。路灯智能监测控制系统主要由六个部分组成,分别是MCU、环境信息采集模块、路灯控制模块、故障检测模 块、无线通信模块和上位机 理模块。其中,MCU为主控制器,是系统的核心模块,环境信息采集模块负责采集各类环境数据,路灯控制模块负责控制路灯的开关,故障检测模块负责对路灯运行状态进行监测,无线通信模块负责实现上位机与下位机之间的数据通信,上位机管理模块是用户可视化的展示与控制界面。
int main(void)
{
while(1)
{
/*****************************************************/
//以下是读取温湿度光照等数据
/*****************************************************/
Light=ADC_IN1(); //in0
Light=Light/Light_Check;
delay_ms(1);
wendu=ADC_IN2(); //in1
wendu=wendu/wendu_Check;
delay_ms(1);
shidu=ADC_IN3(); //in2
shidu=shidu/shidu_Check;
delay_ms(1);
/*****************************************************/
//以下是蜂鸣器报警
/*****************************************************/
if(CH4>=Set_CH4||CO>=Set_CO||HS>=Set_CH4||O2>=Set_O2)BEEP=0;
else BEEP=1;
/*****************************************************/
//以下是OLED显示
/*****************************************************/
show_caption();
show_chinese();
show_data();
/*****************************************************/
//以下代码是测试用
/*****************************************************/
if(send_flag==1)
{
LED=!LED;
send_flag=0;
}
}
}
承接stm32单片机、STC系列单片机设计、嵌入式。咨询liaxi,
“2424644692”(qq)
int main(void)
{
vu8 key=0;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
delay_init(); // 延时初始化
all_usart_init(); // 串口初始化
LED_Init(); //LED初始化
KEY_Init();
PCF8591_Init(); //pcf8591初始化
TIM3_PWM_Init(899,0); //不分频。PWM频率=72000000/900=80Khz
DHT11_Start();
TIM2_Int_Init(999,7199); //10Khz的计数频率,计数到1000为100ms
OLED_Init(); //oled初始化
OLED_Clear(); //清屏
//show_caption();
Show_Chinese();
while(1)
{
/*****************************************************/
//以下是按键
/*****************************************************/
key=KEY_Scan(0); //得到键值
if(key==1);
else if(key==2) OLED_ShowString(60 ,0," ",16);
else if(key==3) system_mode=!system_mode;
else if(key==4) OLED_ShowString(60 ,0,"Wring!!!",16);
else delay_ms(10);
/*****************************************************/
//以下是读取pcf8591,light范围0-255
/*****************************************************/
if(!system_mode)//自动
{
light=ADC_IN2();
}
else //手动
{
if(ADC_IN2()/2.55+2>=60)
{
if(key==1) //有障碍或者接收到A
{
light=255;
TIM_SetCompare2(TIM3,1020-light*4);
delay_ms(1000);delay_ms(1000);delay_ms(1000);delay_ms(1000);delay_ms(1000);
}
else light=0;
}
else if(key==5)
{
light=255;
TIM_SetCompare2(TIM3,1020-light*4);
delay_ms(1000);delay_ms(1000);delay_ms(1000);delay_ms(1000);delay_ms(1000);
}
else light=0;
}
light_change=light/2.55;
OLED_ShowNum(34,3,light_change+2,3,16);
//电压
OLED_ShowNum(0,0,ADC_IN2()/20,3,16);
/*****************************************************/
//以下是切换模式
/*****************************************************/
if(system_mode) OLED_ShowString(38 ,6,"S",16);
else OLED_ShowString(38 ,6,"Z",16);
/*****************************************************/
//以下是调节pwm调节亮度,led0pwmval范围0-900
/*****************************************************/
TIM_SetCompare2(TIM3,1020-light*4);
/*****************************************************/
//以下是采集模拟量和温湿度
//dht_flag是读取标志,每800ms这个标志位会被置1一次
//OLED_ShowNum,这是在oled屏上显示的函数
//ADC_IN()是采集过来的电压值
/*****************************************************/
if(dht_flag==1)
{
dht_flag=0;
DHT11_ReadData(&shidu,&wendu);
OLED_ShowNum(98,3,shidu,3,16);
OLED_ShowNum(98,6,wendu,3,16);
}
sprintf(topicmsg,"%s%d%s%d%s","{\\\"temp\\\":",light_change,",\\\"humi\\\":",100-light_change,"}");
//sprintf(topicmsg,"%s%d%s%d%s","{\\\"temp\\\":",wendu,",\\\"humi\\\":",shidu,"}");
Send_Aliyun(topicmsg);
delay_ms(500);
sprintf(topicmsg1,"%s%d%s%d%s","{\\\"wendu\\\":",wendu,",\\\"shidu\\\":",shidu,"}");
Send_Aliyun(topicmsg1);
delay_ms(500);
key=0;
/*****************************************************/
//以下是ESP8266向PC发送数据,每1s发送一次
/*****************************************************/
// if(esp_flag==1)
// {
// esp_flag=0;
// LED=!LED;
// }
}
}
void show_caption(void)
{
//云端平台监测系统
OLED_ShowCHinese(0,0,0);
OLED_ShowCHinese(16,0,1);
OLED_ShowCHinese(32,0,2);
OLED_ShowCHinese(48,0,3);
OLED_ShowCHinese(64,0,4);
OLED_ShowCHinese(80,0,5);
OLED_ShowCHinese(96,0,6);
OLED_ShowCHinese(112,0,7);
}
void Show_Chinese(void)
{
OLED_ShowString(2 ,3,"Lig:",16);
OLED_ShowString(68,3,"Hum:",16);
OLED_ShowString(2 ,6,"Mod:",16);
OLED_ShowString(68,6,"Tem:",16);
OLED_ShowString(32,0,"V",16);
}
void Send_Aliyun(char* topic_msg)
{
char Aliyun[200];
sprintf(Aliyun,"%s%s%s", "{\"topic&msg\":\"", topic_msg, "\"}\r\n");
//printf(Aliyun);
usart1_Sendchar(Aliyun);
}