基于STM32F103单片机的太阳能路灯无线控制路灯原理图PCB

系统功能设计

本系统由STM32F103C8T6单片机核心板、太阳能电池板、锂电池充放电保护、升压、WIFI模块、高亮LED灯、光照检测组成。
1、通过太阳能给锂电池充电,具有充电保护。锂电池通过升压升压到5V给整个单片机系统供电;
2、上电默认自动状态,通过光敏电阻检测光照,进而控制灯的亮度,天越黑,灯越亮;分0-4档。
3、可以通过手机APP,通过蓝牙控制灯的亮灭,点击“关闭”将关闭Led;点击“打开”将根据光照情况控制led灯即步骤2的作用。
4、单片机检测太阳能电池板的电压,并将太阳能是否在给电池充电状态发送给手机,手机APP相应状态显示。

太阳能发电路设计
太阳能电池板(Solar panel)是通过吸收太阳光,将太阳辐射能通过光电效应或者光化学效应直接或间接转换成电能的装置,大部分太阳能电池板的主要材料为“硅”,但因制作成本较大,以至于它普遍地使用还有一定的局限。
其电路接口原理图如下图所示。一般在太阳能电池板接口串接一个二极管1N5819,单向导电作用,保护太阳能电池板。
在这里插入图片描述

功能底板:
在这里插入图片描述

STM32F103C8T6单片机核心板:
USB供电接口,复位按键 开关按键
在这里插入图片描述
合理优秀的布局布线:
在这里插入图片描述

#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include 
#include "timer.h"
#include "adc.h"
#include "key.h"char dis0[16];	//1602显示第一行
char dis1[16];unsigned int adcx;//读取ad转换值
unsigned int ligh ;    //光照unsigned char pwmled = 0;//led pwmunsigned char i ;	
unsigned char wifiSendCount =0;//wifi 发送数据 延时unsigned char WifiCtrFlag = 1;			   //wifi控制标志float SunVolt=0.0;				  //检测电流int main(void){ delay_init();	    	 //延时函数初始化	  uart_init(9600);	 	//串口初始化为9600TIM3_Int_Init(9,7199); 	 LED_Init();		  		//初始化与LED连接的硬件接口
//	KEY_Init();  Adc_Init();		  		//ADC初始化	    delay_ms(100);i=50;while(i--) delay_ms(100);//延时printf("AT+CIPMUX=1\r\n");		   //允许链接i=5;while(i--) delay_ms(100);//延时printf("AT+CIPSERVR=1,8080\r\n");	   //创建端口号8080//**All notes can be deleted and modified**//while(1){adcx=Get_Adc_Average(ADC_Channel_1,5);//读取ad转换值 5次求平均			ligh =(float)adcx*99/4096;	//转化adcx=Get_Adc_Average(ADC_Channel_0,5);//读取ad转换值 5次求平均			SunVolt  =(float)adcx*3.3*3/4096;	//电阻进行分压所有*3if(WifiCtrFlag == 1){if(ligh < 40)			   //电压对比确定亮灭程度//调整pwm{pwmled = 1;}else if(ligh < 50)			{pwmled = 2;}else if(ligh < 60)	{pwmled = 3;}else if(ligh < 70)	{pwmled = 4;}else  {pwmled = 5;}		}	else{pwmled = 1 ; //关闭led}wifiSendCount++;//wifi 数据发送延时计数if(wifiSendCount >= 3)//定时发送数据到时{wifiSendCount = 0;//清空UART_SendStr(USART1 , "AT+CIPSEND=0,6\r\n",16);		//发数据 at命令delay_ms(200);if(SunVolt>=3.9)//太阳能在充电状态  采用1n5819充电电流大 电压拉低 达到4.0表示在充电{sprintf(dis0,"*BYD%c#",((pwmled%10)-1)+0x30);//打印电压及档位			}else{sprintf(dis0,"*BND%c#",((pwmled%10)-1)+0x30);//打印电压及档位}				UART_SendStr(USART1 , dis0 , 6);//发送UART_SendStr(USART1 , "\r\n" , 2);//发送}delay_ms(100);//控制在中断中处理		}											    
}	void dealFun(void)
{static unsigned char countFan =0;countFan++;if(countFan<pwmled)	   //led1 占空比调节{led_ligh=0;			  //打开}else if(countFan<=5)	//关闭时间段{led_ligh=1;			//关闭if(countFan == 5)	 countFan=0;  //一个周期结束}}

.原文:http://www.jh-tec.cn/archives/8306


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部