基于STM32的智能路灯照明系统

提示:记录毕设

文章目录

  • 前言
  • 一、任务书
        • 1.1设计(研究)目标:
        • 1.2设计(研究)内容:
  • 二、代码思路
        • 2.1 代码部分
        • 2.2 硬件设计部分
  • 三、硬件及框图
  • 四、代码以及框图等资料
  • 五、联系我们
  • 六、部分代码,加了阿里云
  • 喜欢请点赞哦!

前言

路灯是一个城市基础设施的重要组成部分,也是人类生活中必不可少的工具。但目前国内的路灯设备基本上处于人工监控的状态,需要大量的人力资源进行维护和维修,其次,路灯往往不能在光线发生变化时及时调整开关状态,从而造成了巨大的能源浪费。此外,由于路灯的布设环境复杂,布设地域广,在发生故障时往往难以被路灯巡检人员及时发现,这就造成了故障路灯难以及时得到修复,为人们的夜间出行带来了安全隐患。

随着物联网的发展,越来越多的物联网技术被运用到各行各业之中。路灯作为城市照明的基础,直接影响着人们的生活质量,所以,使用物联网技术设计一种智能化路灯,在智慧城市的推进过程中有着重要的作用。为了解 决 目 前 路 灯 设 备 存 在 的 智 能 化程度低、人力资源需求高、能源浪费大、检修效率低等问题,文中设计了一种基于STM32的路灯智能监测控制系统。该系统能够实现光照强度、PM2.5等环境数据的采集,根据光照强度和时间进行自动开关路灯操作,并实时监测路灯的工作状态。此外,该系统能够通过4G无线传输方式与上位机进行信息交互,实现远程数据传输及远程控制。

基于STM32的车间煤矿井下探测系统,主控使用STM32F103ZET6,在正点原子的精英板上开发。


一、任务书

1.1设计(研究)目标:

以STM32单片机为核心器件,设计一个精加车间环境检测系统。路灯智能监测控制系统主要由六个部分组成,分别是MCU、环境信息采集模块、路灯控制模块、故障检测模 块、无线通信模块和上位机 理模块。其中,MCU为主控制器,是系统的核心模块,环境信息采集模块负责采集各类环境数据,路灯控制模块负责控制路灯的开关,故障检测模块负责对路灯运行状态进行监测,无线通信模块负责实现上位机与下位机之间的数据通信,上位机管理模块是用户可视化的展示与控制界面。

1.2设计(研究)内容:

  • 总体要求
    1、题目的意义;
    2、各种传感器及设备的一般技术和特殊技术的学习:
    3、总体方案的选型设计:
    4、STM32单片机及其外围设备的软硬件系统的技术开发:
    5、系统的调试和总体运行原理
  • 其他设计内容;具体要求:
    1、硬件要求1张1号以上的大图:
    2、软件以流程图方式表示:
    3、有调试的说明。

二、代码思路

2.1 代码部分

  • 打开定时器2,作为系统运行时间;
  • esp8266每1S刷新一次;
  • dht11每800ms刷新一次;

2.2 硬件设计部分

  • 光照传感器的数据信号处理模块的处理器使用的是STC15W404AS,在该模块中使用单片机的串口1进行下载和仿真,串口2通过RS485总线接收STM32所发送的采集指令,并将封装好的传感器数据帧发送给数据处理模块,串口3通过IIC总线接收BH1750传感器采集的光照强度数据。
  • PM2.5的数据信号处理模块设计与光照类似,主要功能是通过RS485总线接收MCU的采集指令,并对传感 器 采 集 的TTL信 号 进 行 打 包 处 理 后 转 换 为RS485信号发送给MCU。
  • 故障检测模块的主要功能为检测路灯是否能够正常打开或关闭,并在路灯出现故障时,及时将故障信息上传到上位机端,以便检修人员及时进行修复。当路灯正常点亮时,路 灯 供 电 电 路 的 电 流 在2A~3A之间,所以该模块使用了电流互感器和电磁继电器对路灯电路中的电流是否达到了正常范围进行检测。电流互感器感应到路 灯 电 路 中 的 电 流 后,经 过1000倍 的缩小后驱动电磁继电器闭合,从而使电磁继电器负载端输出一个5V高电平,STM32的PD13引 脚 只 需 检测该电平的高低状态即可判定当前路灯的开关状态。

三、硬件及框图

  • ESP826601s
  • DHT11
  • OLED
  • 按键
  • 电流互感器
  • LED

四、代码以及框图等资料


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的智能路灯照明系统_第1张图片

五、联系我们

承接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);
}


喜欢请点赞哦!

在这里插入图片描述

你可能感兴趣的:(毕业设计,stm32,单片机,嵌入式硬件)