STM32 Project Sharing: Smart Home Security System

Project Finished Product Image:

STM32 Project Sharing: Smart Home Security System

Bilibili Video Link:

https://www.bilibili.com/video/BV1K1z3YJE6a/?share_source=copy_web&vd_source=097fdeaf6b6ecfed8a9ff7119c32faf2

(Material sharing at the end of the article)

01

Project Overview

1. Function Details

STM32 Smart Home Security System

Functions are as follows:

  1. STM32F103C8T6 microcontroller board as the main control unit

  2. DHT11 temperature and humidity sensor for collecting temperature and humidity

  3. MQ-7 for collecting smoke concentration/carbon monoxide

  4. Door magnetic module for intrusion alarm monitoring

  5. DS1302 clock module to display real-time time

  6. Flame sensor to determine the presence of open flames

  7. OLED display to show current time and environmental information

  8. Button to set thresholds, buzzer alarm

  9. Mobile app to receive environmental data and control alarm switch

2. Bill of Materials

  • STM32F103C8T6 microcontroller

  • OLED screen

  • DHT11 temperature and humidity sensor

  • ESP8266-01S WiFi module

  • MQ-7 carbon monoxide sensor

  • Flame sensor

  • Door magnetic module

  • DS1302 clock module

02

Schematic Design

STM32 Project Sharing: Smart Home Security System

03

PCB Hardware Design

PCB Diagram

STM32 Project Sharing: Smart Home Security SystemSTM32 Project Sharing: Smart Home Security System

04

Program Design

#include "stm32f10x.h"  // Include necessary header files
#include "main.h"       // Include necessary header files
#include "delay.h"      // Include necessary header files
#include "usart1.h"     // Include necessary header files
#include "timer2.h"     // Include necessary header files
#include "dhtll.h"
#include "oled.h"
#include "rtc.h"
#include "adc.h"
#include "key.h"      // Include necessary header files

u8 rexflag = 0;
u8 rexnum = 0;
u8 xinxi = 0;
u8 sendflag = 0;
u8 YW=0;
u8 MC=0;
u8 WD=0;
u8 SD=0;
u8 HY=0;
u8 tempbai,tempshi,tempge;

u8 humibai,humishi,humige;
u8 temp;
u8 humi;
int YWADC;
u16 YWADCbai,YWADCshi,YWADCge;
uint8_t jingbao = 0;
u8 keyflag = 0;
u8 settemp = 40;
u8 sethumi = 85;
u16 setyw = 40;
u8 tempKG=11,humiKG=11,ywKG=11,hyKG=11,mcKG=11;

int main(void) {
    SystemInit();  // Adjust main frequency to 72M
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    Delay_Init();                   // Delay function initialization
    Delay_Ms(500);
    OLED_Init(); // OLED initialization
    OLED_Clear();
    while(DHT11_Init()) { Delay_Ms(500); } // Check if DS18B20 exists
    ds1302_init();
    buzz_init();
    ir_init();
    mq2_init();
    butt_init();
    Adc_Init();
    KEY_Init();
    Usart2_Init(115200); // Serial port 1 function initialization, baud rate 9600
    TIM2_Init();
    Isr_Init();
    wifiinit();
    showbegin();
    ds1302_write_time();
    ds1302_read_time();
    while(1) { // Main loop
        setzhi();  // Set alarm values
        if(keyflag==0) {
            DHT11_Read_Data(&temp,&humi);
            YWADC = (Get_Adc_Average(9,10)); // Get calculated actual voltage value with decimals
            YWADC = (YWADC -600);
            if(YWADC<6) YWADC = 0;
            YWADC = YWADC /25;
            if(tempKG==11) { if(temp>settemp) { WD=11; GPIO_SetBits(GPIOA, GPIO_Pin_7); }}
            if(humiKG==11) { if(humi>sethumi) { SD=11; GPIO_SetBits(GPIOA, GPIO_Pin_7); }}
            if(temp<=settemp||(tempKG==22)) { WD=22; }
            if(humi<=sethumi||(humiKG==22)) { SD=22; }
            if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12) != 0 &amp;&amp; GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0 &amp;&amp; YWADC<=setyw &amp;&amp; temp<=settemp &amp;&amp; humi<=sethumi) { GPIO_ResetBits(GPIOA, GPIO_Pin_7); }
            if(((GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12) == 0)&amp;&amp;(hyKG==11)) || ((GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) != 0)&amp;&amp;(mcKG==11)) || ((YWADC>setyw)&amp;&amp;(ywKG==11))) {
                jingbao =1;
                GPIO_SetBits(GPIOA, GPIO_Pin_7);
                if((GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12) == 0)&amp;&amp;(hyKG==11)) { // Fire alarm
                    HY=11;
                    OLED_Clear();
                    OLED_ShowCHinese(80,4,14); // Alarm
                    OLED_ShowCHinese(96,4,15); // Alarm
                    OLED_ShowCHinese(80,2,22); // Fire
                    OLED_ShowCHinese(96,2,23); // Fire
                    showhuo();  // Show fire image
                }
                if((YWADC>setyw)&amp;&amp;(ywKG==11)) { // Smoke alarm
                    YW=11;
                    OLED_Clear();
                    OLED_ShowCHinese(80,4,14);
                    OLED_ShowCHinese(96,4,15);
                    OLED_ShowCHinese(80,2,17);
                    OLED_ShowCHinese(96,2,18); //
                    showmei();
                }
                if((GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) != 0)&amp;&amp;(mcKG==11)) { // Theft alarm
                    MC=11;
                    OLED_Clear();
                    OLED_ShowCHinese(80,4,14);
                    OLED_ShowCHinese(96,4,15);
                    OLED_ShowCHinese(80,2,3);
                    OLED_ShowCHinese(96,2,21); //
                    showman();
                }
            } else {
                MC=22; YW=22; HY=22;
                if(jingbao == 1) {
                    OLED_Clear();
                    jingbao = 0;
                }
                OLED_ShowCHinese(0,2,9); // Temperature
                OLED_ShowCHinese(16,2,10);
                OLED_ShowChar(32,2,':');
                OLED_ShowNum(40,2,temp,2,16);
                OLED_ShowChar(56,2,'C');
                OLED_ShowCHinese(0,4,11); // Humidity
                OLED_ShowCHinese(16,4,10);
                OLED_ShowChar(32,4,':');
                OLED_ShowNum(40,4,humi,2,16);
                OLED_ShowChar(56,4,'%');
                OLED_ShowCHinese(0,6,12); // Smoke
                OLED_ShowCHinese(16,6,13);
                OLED_ShowChar(32,6,':');
                OLED_ShowChar(56,6,'%');
                OLED_ShowNum(40,6,YWADC,2,16);
                showtime();
            }
            wifiset();
        } else if(keyflag==1) {
            OLED_ShowCHinese(16,0,9); // Temperature
            OLED_ShowCHinese(32,0,10);
            OLED_ShowCHinese(48,0,24); // Threshold
            OLED_ShowCHinese(64,0,25);
            OLED_ShowCHinese(80,0,26); // Set
            OLED_ShowCHinese(96,0,27);
            OLED_ShowNum(48,4,settemp,3,16);
        } else if(keyflag==2) {
            OLED_ShowCHinese(16,0,11); // Humidity
            OLED_ShowCHinese(32,0,10);
            OLED_ShowCHinese(48,0,24); // Threshold
            OLED_ShowCHinese(64,0,25);
            OLED_ShowCHinese(80,0,26); // Set
            OLED_ShowCHinese(96,0,27);
            OLED_ShowNum(48,4,sethumi,3,16);
        } else if(keyflag==3) {
            OLED_ShowCHinese(16,0,19); // Smoke
            OLED_ShowCHinese(32,0,20);
            OLED_ShowCHinese(48,0,24); // Threshold
            OLED_ShowCHinese(64,0,25);
            OLED_ShowCHinese(80,0,26); // Set
            OLED_ShowCHinese(96,0,27);
            OLED_ShowNum(48,4,setyw,3,16);
        } else if(keyflag==4) {
            OLED_ShowCHinese(16,0,9); // Temperature
            OLED_ShowCHinese(32,0,10);
            OLED_ShowCHinese(48,0,28); // Alarm
            OLED_ShowCHinese(64,0,14);
            OLED_ShowCHinese(80,0,29); // Switch
            OLED_ShowCHinese(96,0,30);
            if(tempKG==11) { OLED_ShowCHinese(48,4,31); OLED_ShowCHinese(64,4,29); }
            if(tempKG==22) { OLED_ShowCHinese(48,4,30); OLED_ShowCHinese(64,4,32); }
        } else if(keyflag==5) {
            OLED_ShowCHinese(16,0,11); // Temperature
            OLED_ShowCHinese(32,0,10);
            OLED_ShowCHinese(48,0,28); // Alarm
            OLED_ShowCHinese(64,0,14);
            OLED_ShowCHinese(80,0,29); // Switch
            OLED_ShowCHinese(96,0,30);
            if(humiKG==11) { OLED_ShowCHinese(48,4,31); OLED_ShowCHinese(64,4,29); }
            if(humiKG==22) { OLED_ShowCHinese(48,4,30); OLED_ShowCHinese(64,4,32); }
        } else if(keyflag==6) {
            OLED_ShowCHinese(16,0,19); // Smoke
            OLED_ShowCHinese(32,0,20);
            OLED_ShowCHinese(48,0,28); // Alarm
            OLED_ShowCHinese(64,0,14);
            OLED_ShowCHinese(80,0,29); // Switch
            OLED_ShowCHinese(96,0,30);
            if(ywKG==11) { OLED_ShowCHinese(48,4,31); OLED_ShowCHinese(64,4,29); }
            if(ywKG==22) { OLED_ShowCHinese(48,4,30); OLED_ShowCHinese(64,4,32); }
        } else if(keyflag==7) {
            OLED_ShowCHinese(16,0,22); // Fire
            OLED_ShowCHinese(32,0,23);
            OLED_ShowCHinese(48,0,28); // Alarm
            OLED_ShowCHinese(64,0,14);
            OLED_ShowCHinese(80,0,29); // Switch
            OLED_ShowCHinese(96,0,30);
            if(hyKG==11) { OLED_ShowCHinese(48,4,31); OLED_ShowCHinese(64,4,29); }
            if(hyKG==22) { OLED_ShowCHinese(48,4,30); OLED_ShowCHinese(64,4,32); }
        } else if(keyflag==8) {
            OLED_ShowCHinese(16,0,33); // Theft
            OLED_ShowCHinese(32,0,34);
            OLED_ShowCHinese(48,0,28); // Alarm
            OLED_ShowCHinese(64,0,14);
            OLED_ShowCHinese(80,0,29); // Switch
            OLED_ShowCHinese(96,0,30);
            if(mcKG==11) { OLED_ShowCHinese(48,4,31); OLED_ShowCHinese(64,4,29); }
            if(mcKG==22) { OLED_ShowCHinese(48,4,30); OLED_ShowCHinese(64,4,32); }
        }
        if(sendflag) { // Send data via serial every 1s
            sendflag = 0;
            tempbai = temp/100;
            tempshi = temp%100/10;
            tempge  = temp%10;
            humibai = humi/100;
            humishi = humi%100/10;
            humige  = humi%10;
            YWADCbai = YWADC/100;
            YWADCshi = YWADC%100/10;
            YWADCge  = YWADC%10;
            u2_printf("%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d",tempbai,tempshi,tempge,humibai,humishi,humige,YWADCbai,YWADCshi,YWADCge,WD,SD,YW,HY,MC,tempKG,humiKG,ywKG,hyKG,mcKG);
            u2_printf("AT+CIPSEND=0,29\r\n");
        }
    }
}  

05

Experimental Results

STM32 Project Sharing: Smart Home Security SystemSTM32 Project Sharing: Smart Home Security System

Material Sharing (Baidu Cloud)

https://pan.baidu.com/s/1264zuyALDj1dv8NlyOQw2A?pwd=xrdx Extraction Code: xrdx

(Or scan the QR code below to obtain)STM32 Project Sharing: Smart Home Security SystemFor physical purchase, scan the QR code belowSTM32 Project Sharing: Smart Home Security System

Leave a Comment