STM32项目分享:室内无线控制系统

描述

项目成品图片:


 

STM32


 


 

01

项目简介


 

1.功能详解


 

STM32室内无线控制系统

功能如下:


 

环境监测:温湿度、光照信息实时监测并在OLED上显示

防盗报警:当有人闯入时触发蜂鸣器报警
 

自动控制:根据光照强度大小控制灯光和窗帘的开关
 

空调控制:根据环境温度信息判断是否超出阈值范围打开空调
 

按键控制:按键可以手动开关防盗报警、照明灯和窗帘的控制
 

机智云平台:通过连接机智云APP远程查看环境信息数据,并可以手动控制窗帘、照明灯的开关


 


 

2.材料清单

STM32F103C8T6单片机

OLED 屏幕
 

DHT11温湿度传感器
 

ESP8266-01S  WiFi模块
 

光敏传感器
 

继电器
 

风扇模块
 

大功率LED灯模块
 

有源蜂鸣器
 

步进电机


 

02


 

原理图设计


 

STM32


 

03


 

PCB硬件设计


 

   PCB图

STM32STM32


 

04

程序设计


 

#include "stm32f10x.h"                  // Device header#include "Delay.h"#include "LED.h"#include "Key.h"#include "OLED.h"#include "DHT11.h"#include "sys.h"#include "usart.h"#include "usart2.h"#include "string.h"#include "stdio.h"#include "timer.h"#include "mq2.h"#include "Motor.h"#include "gizwits_product.h"#include "Delay.h"
//显示全局变量===============================================================================================================================uint16_t ADValue;uint16_t Voltage;u8 temp = 0,humi = 0;u8 hongwai=0;int key_num;      //按键返回值
//得到数据变量===========================================void shuju(){ADValue = AD_GetValue();Voltage = 99 - 99 * ADValue / 4095;DHT11_Read_Data(&temp,&humi);}//按键==========================================u8 mode_flag = 0;   //模式控制:0-自动 ,1-手动u8 alarm_flag=0;u8 chuanglian_flag=0;u8 guangzhao_flag=0;void anjian(){key_num=Key_GetNum();//OLED_ShowString(3,14,":");//OLED_ShowNum(3,14,key_num,1);if(key_num==1)  {hongwai=1;}else{hongwai=0;}
//if(key_num == 2)//{//if(++mode_flag==2)mode_flag=0;//}//报警if(key_num==3)  {if(++alarm_flag==2)alarm_flag=0;}//窗帘if(key_num==4)  {if(++chuanglian_flag==2)chuanglian_flag=0;}//光照if(key_num==5)  {if(++guangzhao_flag==2)guangzhao_flag=0;}}//自动控制============================================//u8 flag=0;u8 kongtiao_1=0;void auto1(){//照明控制if(guangzhao_flag==0){if(Voltage>50){LED1_ON();}if(Voltage<=50){LED1_OFF();}}//窗帘控制if(chuanglian_flag==0){if(Voltage>50&&flag==0){flag=1;for(int i=0;i<=(8*16);i++)    {Motor_One(5);}}if(Voltage<=50&&flag==1){flag=0;for(int i=0;i<=(8*16);i++)    {Motor_One1(5);}}}
//报警控制if(alarm_flag==0){if(hongwai==1){BEEP_OFF();}else{BEEP_ON();}}//风扇控制if(temp>30){FAN_ON();WARM_ON();kongtiao_1=1;}if(temp<20){FAN_ON();WARM_OFF();kongtiao_1=1;}if(temp<=30&&temp>=20){FAN_OFF();WARM_ON();kongtiao_1=0;}}
//显示界面==============================================================void xianshi(){//第一行OLED_ShowChinese(1,1,0); //温OLED_ShowChinese(1,2,1); //度OLED_ShowString(1,5,":");OLED_ShowNum(1,6,temp,2);OLED_ShowChinese(1,5,2); //湿OLED_ShowChinese(1,6,1); //度OLED_ShowString(1,13,":");OLED_ShowNum(1,14,humi,2);
//第二行OLED_ShowChinese(2,1,4); //空OLED_ShowChinese(2,2,5); //调OLED_ShowString(2,5,":");if(kongtiao_1==1){OLED_ShowChinese(2,4,16); //开}else{OLED_ShowChinese(2,4,17); //关}//if(mode_flag==0)//{//OLED_ShowChinese(3,8,21); //自//}//else//{//OLED_ShowChinese(3,8,20); //手//}
//OLED_ShowNum(2,6,kongtiao,1);OLED_ShowChinese(2,5,6); //窗OLED_ShowChinese(2,6,7); //帘OLED_ShowString(2,13,":");if(flag==1){OLED_ShowChinese(2,8,16); //开}else{OLED_ShowChinese(2,8,17); //关}//OLED_ShowNum(2,14,chuanglian,1);
//第三行OLED_ShowChinese(3,1,8);  //光OLED_ShowChinese(3,2,9);  //照OLED_ShowChinese(3,3,18); //强OLED_ShowChinese(3,4,19); //度OLED_ShowString(3,9,":");OLED_ShowNum(3,11,Voltage,2);
//第四行OLED_ShowChinese(4,1,10);  //是OLED_ShowChinese(4,2,11);  //否OLED_ShowChinese(4,3,12);  //有OLED_ShowChinese(4,4,13);  //人OLED_ShowChinese(4,5,14);  //闯OLED_ShowChinese(4,6,15);  //入OLED_ShowString(4,13,":");if(hongwai==1){OLED_ShowChinese(4,8,10); //是}else{OLED_ShowChinese(4,8,11); //否}//OLED_ShowNum(4,15,hongwai,1);}
void userHandle(void){
    currentDataPoint.valuealarm = hongwai;//Add Sensor Data Collection    currentDataPoint.valuekongtiao = kongtiao_1;//Add Sensor Data Collection    currentDataPoint.valuetemp = temp ;//Add Sensor Data Collection    currentDataPoint.valuehumi = humi ;//Add Sensor Data Collection    currentDataPoint.valueliangdu = Voltage ;//Add Sensor Data Collection
}
int main(void){Delay_init();LED_Init();OLED_Init();DHT11_Init();  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级TIM2_Int_Init(72-1,1000-1);//定时1ms   72,000,000Hz/1,000Hz=72,000=72*1000uart_init(115200); //串口1初始化为115200uart2_init(9600);userInit();AD_Init();Key_Init();Motor_Init();gizwitsInit();gizwitsSetMode(WIFI_AIRLINK_MODE);Delay_ms(1000);Delay_ms(1000);while (1){shuju();xianshi();anjian();auto1();userHandle();gizwitsHandle((dataPoint_t *)¤tDataPoint);}}
 


 

05

实验效果


 

STM32STM32

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分