STM32项目分享:基于STM32的小区无线手机充电装置设计
“我们不做一锤子买卖,只做技术成长的长期伙伴!”
目录
一、视频展示
二、项目简介
三、原理图设计
四、PCB硬件设计
五、程序设计
六、资料分享
一、视频展示
基于STM32的小区无线手机充电装置设计 -视频分享
二、项目简介
题目:基于STM32的小区无线手机充电装置设计
主控: STM32f103c8t6
显示:OLED显示屏
ESP8266
OLED显示
红外光电
IM1253B功率模块
声光报警:LED+蜂鸣器
功能:
1、OLED液晶显示屏实时的显示充电电压、电流和功率;。
2、通过ESP8266无线模块使用MQTT协议连接阿里云平台实现数据的无线传输。
3、可手动设置电压,电流阈值。
4、当充电时,检测到超过阈值,则触发蜂鸣器报警,并关闭电源,防止电流过大出现意外情况。
5、光电检测是否开始充电,当检测到有手机时提供电流,并停止检测,当手机离开时,断开电流,继续检测。
6、设置插座式接口,可自行安装一拖三充电。
三、原理图设计

四、PCB硬件设计


五、程序设计
#include "stm32f10x.h" // Device header
#include "delay.h"
#include "lcd.h"
#include "processData.h"
#include "IOput.h"
#include "timer.h"extern u16 buf[20];
extern u8 receiving_flag; // 新增一个标志,用于标记是否开始接收数组extern u8 set_flag,add_flag,dec_flag,show_flag;
float money;
u8 error_flag=0,timecount;
u8 control_flag;//判断手动或自动
u8 send_flag;//判断超过阈值jdq断
u8 work_flag;//手动开关继电器
u16 max1=230;
u16 max2=10;
u16 max3=200;void show_state(void)
{OLED_ShowCHinese(21, 2, 27);OLED_ShowCHinese(43, 2, 28);OLED_ShowCHinese(65, 2, 29);OLED_ShowCHinese(88, 2, 30);OLED_ShowCHinese(0, 6, 31);OLED_ShowCHinese(16, 6, 32);OLED_ShowCHinese(32, 6, 33);OLED_ShowCHinese(48, 6, 34);OLED_ShowCHinese(64, 6, 35);OLED_ShowCHinese(80, 6, 36);OLED_ShowCHinese(96, 6, 37);OLED_ShowCHinese(112, 6, 38);
}void show_xs(void)
{// money = Energy_data * 1;
// OLED_Showdecimal(64, 0, money, 3, 4, 16);// 显示“电压:”汉字和电压数值OLED_ShowCHinese(0, 2, 9);OLED_ShowCHinese(16, 2, 10);OLED_ShowString(32, 2, ":", 16);OLED_Showdecimal(50, 2, Voltage_data, 3, 4, 16);// 显示“电流:”汉字和电流数值OLED_ShowCHinese(0, 4, 11);OLED_ShowCHinese(16, 4, 12);OLED_ShowString(32, 4, ":", 16);OLED_Showdecimal(50, 4, Current_data, 3, 4, 16);// // 显示“功率:”汉字和功率数值
// OLED_ShowCHinese(0, 6, 25);
// OLED_ShowCHinese(16, 6, 26);
// OLED_ShowString(32, 6, ":", 16);
// OLED_Showdecimal(50, 6, Energy_data, 3, 4, 16);// 显示“功率:”汉字和功率数值OLED_ShowCHinese(0, 6, 13);OLED_ShowCHinese(16, 6, 14);OLED_ShowString(32, 6, ":", 16);OLED_Showdecimal(50, 6, Power_data, 3, 4, 16);// 显示“模式:”汉字
// OLED_ShowCHinese(0, 0, 15);
// OLED_ShowCHinese(16, 0, 16);
// OLED_ShowString(32, 0, ":", 16);
}void show_xg1(void)
{// 显示“阈值修改”汉字OLED_ShowCHinese(21, 0, 5);OLED_ShowCHinese(43, 0, 6);OLED_ShowCHinese(65, 0, 7);OLED_ShowCHinese(88, 0, 8);// 显示“电压:”汉字、电压数值和阈值OLED_ShowCHinese(0, 2, 9);OLED_ShowCHinese(16, 2, 10);OLED_ShowString(32, 2, ":", 16);OLED_Showdecimal(50, 2, Voltage_data, 5, 2, 16);OLED_ShowString(0, 4, "max:", 16);OLED_ShowNum(70, 4, max1, 3, 16);
}void show_xg2(void)
{// 显示“阈值修改”汉字OLED_ShowCHinese(21, 0, 5);OLED_ShowCHinese(43, 0, 6);OLED_ShowCHinese(65, 0, 7);OLED_ShowCHinese(88, 0, 8);// 显示“电流:”汉字、电流数值和阈值OLED_ShowCHinese(0, 2, 11);OLED_ShowCHinese(16, 2, 12);OLED_ShowString(32, 2, ":", 16);OLED_Showdecimal(50, 2, Current_data, 5, 2, 16);OLED_ShowString(0, 4, "max2:", 16);OLED_ShowNum(70, 4, max2, 3, 16);
}void show_xg3(void)
{// 显示“阈值修改”汉字OLED_ShowCHinese(21, 0, 5);OLED_ShowCHinese(43, 0, 6);OLED_ShowCHinese(65, 0, 7);OLED_ShowCHinese(88, 0, 8);// 显示“功率:”汉字、功率数值和阈值OLED_ShowCHinese(0, 2, 13);OLED_ShowCHinese(16, 2, 14);OLED_ShowString(32, 2, ":", 16);OLED_Showdecimal(50, 2, Energy_data, 5, 2, 16);OLED_ShowString(0, 4, "max3:", 16);OLED_ShowNum(70, 4, max3, 3, 16);
}
int main(void)
{// 初始化延时函数、中断优先级分组、串口、输出、输入和OLED显示delay_init();NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);uart_init(4800); // 串口初始化为4800Usart2_Init(9600);output_init();input_init();TIM2_Int_Init(71,9999);OLED_Init();delay_ms(1);OLED_Clear();read_data(); // 发送读取数据命令
// electricity_clear();while (1){timecount++;delay_ms(100);clear_data();delay_ms(100);Analysis_data();key_scan();if (set_flag == 1){show_flag++;set_flag = 0;if (show_flag == 5){show_flag = 1;}}if (show_flag == 0){show_state(); // 显示智能电表状态}if (show_flag == 1){show_xs(); // 显示数据
// if(time_count >= 300)
// {
// time_count = 0;
// UsartPrintf(USART2,"电压:%f\r\n",Voltage_data);
// UsartPrintf(USART2,"电流:%f\r\n",Current_data);
// UsartPrintf(USART2,"功率:%f\r\n",Power_data);
// }}if (show_flag == 2){if (add_flag == 1){max1++;add_flag = 0;}if (dec_flag == 1){max1--;dec_flag = 0;}show_xg1(); // 修改电压阈值}if (show_flag == 3){if (add_flag == 1){max2++;add_flag = 0;}if (dec_flag == 1){max2--;dec_flag = 0;}show_xg2(); // 修改电流阈值}if (show_flag == 4){if (add_flag == 1){max3++;add_flag = 0;}if (dec_flag == 1){max3--;dec_flag = 0;}show_xg3(); // 修改功率阈值}if (show_flag == 1){if(GD==0){if ((Voltage_data < max1 && Current_data < max2 && Power_data < max3) && error_flag==0){JDQ=0;BEEP = 1;}else{JDQ=1;BEEP = 0;error_flag=1;} // 蜂鸣器报警if(add_flag==1){add_flag=0;error_flag=0;}}else{JDQ=1;}if(error_flag==0){OLED_ShowCHinese(0, 0, 41);OLED_ShowCHinese(16, 0, 42);}else{OLED_ShowCHinese(0, 0, 43);OLED_ShowCHinese(16, 0, 44);}}if(timecount>=50){timecount = 0;USART_SendData(USART2,'B');delay_ms(1);USART_SendData(USART2,'a');delay_ms(1);USART_SendData(USART2,Voltage_data);delay_ms(1);USART_SendData(USART2,'b');delay_ms(1);USART_SendData(USART2,Current_data);delay_ms(1);USART_SendData(USART2,'c');delay_ms(1);USART_SendData(USART2,Power_data);delay_ms(1);USART_SendData(USART2,'d');delay_ms(1);USART_SendData(USART2,error_flag);delay_ms(1);USART_SendData(USART2,'E');delay_ms(1);}}
}
六、资料分享
点击即可查看当前资料分享。
