提示:记录毕设

前言

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

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

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


一、任务书

1.1设计(研究)目标:

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

1.2研究内容:

1.2.1系统总体设计

  • 以**STM32系列单片机(STM32F103)**作为核心控制器,设计智能路灯控制系统的硬件架构和软件逻辑。
  • 研究系统的模块化组成,包括环境数据采集、路灯控制、故障检测、无线通信、远程管理等功能模块。
  • 确定系统工作流程,实现自动调光、远程监控、故障报警、能耗优化等智能化功能。

1.2.2 硬件模块设计与实现

  • 主控模块(MCU)
    • STM32最小系统设计(电源、时钟、复位电路)。
    • 外设接口扩展(ADC、PWM、UART、I²C等)。
  • 环境信息采集模块
    • 光照传感器(BH1750):检测环境光照强度,实现自动开关灯。
    • 红外/微波传感器(HC-SR501):检测行人或车辆,实现动态调光。
    • 温湿度传感器(DHT11):可选,用于环境监测或故障预警。
  • 路灯控制模块
    • PWM调光:通过MOSFET/继电器控制LED路灯亮度(0%~100%)。
    • 智能策略:根据光照、人车流量自动调节亮度,节能优化。
  • 故障检测模块
    • 电流/电压检测(INA219):监测路灯工作状态,判断断路、短路或老化。
    • 温度检测(DS18B20):防止LED过热损坏。
  • 无线通信模块
    • Wi-Fi(ESP8266)LoRa(SX1278):上传数据至云端或上位机。
    • 4G/NB-IoT(SIM7000):适用于广域路灯网络管理。

1.2.3 软件系统设计

  • 嵌入式程序设计(Keil/STM32CubeIDE)
    • 多传感器数据融合:实时采集光照、人体感应等数据,优化控制策略。
    • 自适应调光算法
      • 根据环境光照自动开关灯(如黄昏开启,黎明关闭)。
      • 基于人车流量动态调节亮度(如无人时30%亮度,检测到运动时100%亮度)。
    • 故障诊断逻辑
      • 电流异常(如开路、短路)触发报警并上报。
      • 定时自检功能,定期反馈路灯状态。
  • 通信协议与数据交互
    • MQTT/HTTP协议:与云平台(如阿里云、ThingsBoard)通信。
    • Modbus RTU:支持工业级远程监控。
  • 低功耗管理
    • 空闲时进入休眠模式,通过中断唤醒(如定时器或传感器触发)。

1.2.4 无线通信与远程管理

  • 数据传输
    • 路灯状态(开关、亮度、故障代码)实时上传至服务器。
    • 接收上位机指令(如手动开关、亮度调节)。
  • 上位机管理模块
    • 可视化界面(LabVIEW/Qt/Web):显示路灯分布、状态、能耗数据。
    • 远程控制:支持单灯或分组控制,设置调光策略。
    • 报警管理:故障路灯定位,推送维修通知(短信/邮件)。

1.2.5 系统优化与测试

  • 抗干扰设计
    • 硬件滤波(RC电路)抑制电源噪声。
    • 软件去抖(如滑动平均滤波)提高传感器稳定性。
  • 节能优化
    • 根据季节调整开关灯时间(GPS授时或云端同步)。
    • 深度学习预测人车流量(需扩展边缘计算能力)。
  • 实验验证
    • 实验室模拟环境测试(如光照变化、故障注入)。
    • 实际道路部署,验证系统可靠性及节能效果。

1.2.6 创新点与应用价值

  • 智能调光:结合环境光+人车检测,实现按需照明,节能30%以上。
  • 远程运维:减少人工巡检成本,提升故障响应速度。
  • 可扩展性:支持智慧城市物联网集成(如与交通信号灯联动)。

二、代码思路

2.1 代码部分
  • 打开定时器2,作为系统运行时间;
  • esp8266每1S刷新一次;
  • dht11每800ms刷新一次;
2.2 硬件设计部分
  • 光照传感器的数据信号处理模块的处理器使用的是STC15W404AS,在该模块中使用单片机的串口1进行下载和仿真,串口2通过RS485总线接收STM32所发送的采集指令,并将封装好的传感器数据帧发送给数据处理模块,串口3通过IIC总线接收BH1750传感器采集的光照强度数据。

  • 故障检测模块的主要功能为检测路灯是否能够正常打开或关闭,并在路灯出现故障时,及时将故障信息上传到上位机端,以便检修人员及时进行修复。当路灯正常点亮时,路灯供电电路的电流在2A~3A之间,所以该模块使用了电流互感器和电磁继电器对路灯电路中的电流是否达到了正常范围进行检测。电流互感器感应到路 灯 电 路 中 的 电 流 后,经 过1000倍 的缩小后驱动电磁继电器闭合,从而使电磁继电器负载端输出一个5V高电平,STM32的PD13引 脚 只 需 检测该电平的高低状态即可判定当前路灯的开关状态。

2.4 昼夜模式

具体实现过程中,系统分为夜间模式和非夜间模式,夜间12点到次日凌晨6点,系统进入夜间工作模式,此时路灯除采集温湿度信息外,主要采集人体红外传感器的数据,若有人经过,通过人体红外感应传感器可获取相应信号,此时控制路灯自动点亮,当人离开路灯一定范围,通过检测到的数据控制路灯熄灭,这样路灯就不会处于整晚点亮状态,可有效节省电能。若系统工作在非夜间模式下,此时路灯除采集温湿度数据外,主要采集光敏传感器的数据,根据采集到的光照强度对比设置的阈值,决定是否点亮路灯及是否调整路灯的亮度,实现按需照明。

  • 夜间模式
    在这里插入图片描述

  • 白天模式
    在这里插入图片描述

三、硬件及框图

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

在这里插入图片描述

四、代码以及框图等资料

//企鹅号:2424644692
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;
		}					
	}
}


在这里插入图片描述

五、联系我们

(qq)“2424644692”
承接stm32单片机、STC 51/52系列单片机设计、嵌入式。

六、部分代码,加了阿里云

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


喜欢请点赞哦!

在这里插入图片描述

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐