一.系统概述
太阳能发电系统主要功能和特性:
1. 硬件平台及核心控制器:使用51单片机作为核心控制器。集成温度传感器和光照传感器,用于温度和光照强度的采集。集成LCD1602显示屏,用于实时显示采集到的温度、光照和电池电压数据。实时监测电池电压状态,并可调节电压值以适应不同的电源需求。
2. 数据显示与设定:在LCD1602显示屏上实时显示温度、光照和电池电压数据。可以通过按键设定电池电压的阈值,当电压低于设定阈值时触发相应的控制动作。
3. 电源切换控制及LED指示:当电池电压低于设定的阈值时,系统会控制继电器模拟电源切换,确保设备持续供电。同时控制LED灯常亮指示当前电源状态。
4. 远程监控与数据传输:数据可以通过串口发送到串口调试助手端,实现实时的数据监控和调试。可以模拟APP端的远程监控功能,使用户能够远程获取设备运行状态和数据。
二.仿真概述
1. 显示屏上会显示检测到的温度和光强数据,此时电压低于阈值,继电器闭合。
2. 检测到的光强、电压以及温度数据会通过虚拟串口上传到上位机端,上位机端用虚拟串口助手进行模拟,虚拟串口助手链接如下:
波特律动 串口助手https://serial.keysking.com/
3. 在关闭仿真的条件下双击电压采集端的下箭头,就可以对采集端的电流进行调节,进而对采集端的电压进行调节,将原来的2.5A调节成5A,显示屏端可以看到电压值超过设定阈值,此时继电器就会断开,此时还可以通过按键进行电压阈值的调节。
三.程序设计
#include <REGX52.H>
#include <intrins.h>
#include <stdio.h>
#include "DS18B20.h"
#include "LCD1602.h"
#include "delay.h"
#include "key.h"
#include "Timer0.h"
#include "ADC0832.h"
sbit LEDRED = P1^7; //LED灯
sbit Relay = P2^0; //继电器
float T;
unsigned char KeyNum,flag = 1;
unsigned int Return,Temp1,Voltage1,Voltage1Max;
unsigned char UartBuf=0;
void InitUART(void);
void SendStr(unsigned char *p);
void SendOneByte(unsigned char c);
char putchar(char c)
{
//输出重定向到串口
SendOneByte(c);
return c; //返回给函数的调用者printf
}
void main()
{
InitUART(); //串口初始化
Relay = 0;
LCD_Init(); //显示初始化
LCD_ShowString(1,1,"T:00"); //显示参数
LCD_ShowString(1,9,"G:0000");
LCD_ShowString(2,1,"V:0000");
LCD_ShowString(2,9,"MAX:0000");
Voltage1Max = 100;
Timer0_Init();
while(1)
{
ADC0832(0); //ADC采集
VCCjisuan(); //数据计算
Count();
Return = Return_V();
DS18B20_ConverT(); //温度采集
Delay(10);
T = DS18B20_ReadT(); //温度
LCD_ShowNum(1,3,T,2); //显示
ADC0832(1);
VCCjisuan();
Voltage1 = VCC*3.3/10;
LCD_ShowNum(2,3,Voltage1,4);
KeyNum = Key();
if(KeyNum == 1) //按键
{
Voltage1Max = Voltage1Max + 10;
if(Voltage1Max > 349)
{
Voltage1Max = 349;
}
}
if(KeyNum == 2)
{
Voltage1Max = Voltage1Max - 10;
if(Voltage1Max < 11)
{
Voltage1Max = 11;
}
}
LCD_ShowNum(2,13,Voltage1Max,4);
if(Voltage1 < Voltage1Max)
{
Relay = 1;
LEDRED = 0;
}
else
{
Relay = 0;
LEDRED = 1;
}
Temp1 = (unsigned int)T;
printf("%u" ,Temp1);
printf(" %u",Return);
printf(" %u",Voltage1);
printf("\r\n");
}
}