基于STM32的阿里云智能路灯照明控制系统

提示:记录毕设

前言

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

随着物联网的发展,越来越多的物联网技术被运用到各行各业之中。路灯作为城市照明的基础,直接影响着人们的生活质量,所以,使用物联网技术设计一种智能化路灯,在智慧城市的推进过程中有着重要的作用。为了解 决 目 前路灯设备存在的智能化程度低、人力资源需求高、能源浪费大、检修效率低等问题,文中设计了一种基于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传感器采集的光照强度数据。

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

2.4 昼夜模式

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

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

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

三、硬件及框图

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


在这里插入图片描述

五、联系我们

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


喜欢请点赞哦!

在这里插入图片描述

  • 15
    点赞
  • 108
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
[目录] 1 总体设计方案 2 设计原理分析 [原文] 引言 声光控路灯控制器可以自动实现白天光线较暗和晚上遇到声响时,路灯自动点亮,从而实现人来灯亮,人走灯灭,既方便又实用。不仅节约了电能,而且能延长灯泡使用寿命。可广泛应用于楼梯,走廊,卫生间及生活小区等公共场所的照明控制。此控制器经济实用,即使一般的脚步声也能出灯泡发光照明好。 1 总体设计方案 1.1 设计思路 整个电路由电源电路,声控电路,光控电路及延时电路等部分组成。电源由太阳能电池供电,光敏控电路对外界光亮程度进行检测,输出与光亮程度相对应的电压信号。从而实现白天灯泡不亮晚上遇到声响时,通过声控电路使灯泡自动点亮,声控电路主要将声音信号转变为电信号,从而要实现自动控制,延时电路声音消失后延长一段光照时间。必要时可加一个手动开关,以增强电路的实用性。总体方框图如图1所示。 1.3.1 电源电路 由太阳能电池组成,大约输出10V左右的直流电压供后级电路使用。 1.3.2 光控电路 该电路主要由R4和光敏电阻GR组成,白天因光敏电阻GR受光线照射,电阻变小,IC的1脚呈低电位,IC的输出端为低电平,VS阻断,灯路关闭,这时,无论有多大声响,灯都不会亮。到夜晚,GR的电阻随环境光线的减弱而增大,与上述过程相反,VS导通。若出现光控时间偏早或偏晚,调节R4阻值,使GR两端的电压在阈值附近变化(天黑亮灯前后)。 2.3.3 声控电路 ......

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值