|
本系統主要由如下幾大模塊構成:MQ-2煙霧傳感器模塊、人體紅外傳感器模塊、溫度傳感器模塊、1602顯示模塊和GSM通訊模塊,系統的主控制器采用的是STM32F103芯片,功能強大,內部資源豐富。以上相關內容的資料都在附件中請自取,并且包含有本系統的程序框圖,硬件原理圖和系統總體程序。更多細節內容我就不做過多介紹,附件中的資料已經很豐富了,還請大家能夠秉持一種學習的態度,我們一起進步。
有關黑幣的扣除并非我設置,所以如果大家的黑幣很緊張的話,建議大家從第一個開始下載,也可以像我一樣分享資料獲取黑幣的方法。
以下的截圖只是文件中的部分內容展示,具體內容還請大家自行下載學習。
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件).
51hei.png (27.88 KB, 下載次數: 70)
下載附件
2020-6-6 02:59 上傳
51hei.png (51.62 KB, 下載次數: 64)
下載附件
2020-6-6 03:00 上傳
51hei.png (42.39 KB, 下載次數: 50)
下載附件
2020-6-6 02:59 上傳
51hei.png (8 KB, 下載次數: 64)
下載附件
2020-6-6 03:00 上傳
(請一定讀懂程序!!!無論您出于什么目的,我都希望您能真正的弄懂這個程序,
比如板子如何與GSM模塊建立的通訊,I/O口怎么配的(結合原理圖看),ADC又如何調?為什么?等等問題)
文件MDK-ARM-->Project是家居系統的總程序(請提前下載好keil軟件)
單片機源程序如下:
- ////頭文件
- #include "stm32f10x.h"
- #include "GPIOLIKE51.h"
- #include "display.h"
- #include "ds18b20.h"
- #include "key.h"
- #include "usart.h"
- #include "timer.h"
- #include "ADC.h"
- #include "iwdg.h"
- #include "I2C.h"
- #include "EXTI.h"
- uchar table1[]="NOW: % C "; //液晶屏顯示內容
- uchar table2[]="SET: % C "; //液晶屏顯示內容
- #define BEEP BIT_ADDR(GPIOA_ODR_Addr,11) //蜂鳴器接口
- #define STEAL GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_10) //防盜模塊接口
- char Alarm_flag; //溫度發送短信標志位,=1表示已經發送,=0表示沒有發送
- char Smoke_Alarm; //煙霧發送短信標志位,=1表示已經發送,=0表示沒有發送
- char Steal_Alarm; //防盜發送短信標志位,=1表示已經發送,=0表示沒有發送
- void GPIO_Configuration(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure; //等同于int a;
- RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA , ENABLE); //GPIOC APB2
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;//選中管腳11
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//50MHz
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //
- GPIO_Init(GPIOA, &GPIO_InitStructure);//以上設結構體置應用到GPIOA
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //選中管腳10
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ; //上拉輸入
- GPIO_Init(GPIOB, &GPIO_InitStructure); //以上設結構體置應用到GPIOB
- }
- /************************************檢測各部分是否異常***********************************************************/
- void Check(void)
- {
- if(temperature>Set_temp) //如果實際溫度值大于設置值
- {
- if((temperature>0)&(temperature<100)) //溫度在正常范圍內才報警
- {
- BEEP=1; //啟動蜂鳴器
- if(Alarm_flag==0) //警報標志位為1時發送溫度報警信息
- {
- Send_Message3(); //發送溫度過高報警短信
- }
- Alarm_flag=1; //標志位置一,表示短信已經發送,避免重復發送短信
- }
- }
- if(temperature<=Set_temp) //正常情況
- {
- Alarm_flag=0; //清除標志位,下次溫度超過繼續發送短信一次
- }
- if(Steal_flag==1)
- {
- if(STEAL==0) //檢測到人體
- {
- BEEP=1; //啟動蜂鳴器
- if(Steal_Alarm==0) //警報標志位為1時發送防盜報警信息
- {
- Send_Message2();
- }
- Steal_Alarm=1; //標志位置一,表示短信已經發送,避免重復發送短信
- }
- }
- if(STEAL==1) //正常情況
- {
- Steal_Alarm=0; //清除標志位,下次繼續發送短信一次
- }
- if(Smoke>Set_smoke) //檢測到濃度超標
- {
- BEEP=1; //啟動蜂鳴器
- if(Smoke_Alarm==0) //警報標志位為1時發送煙霧報警信息
- {
- Send_Message1();
- }
- Smoke_Alarm=1; //標志位置一,表示短信已經發送,避免重復發送短信
- }
- if(Smoke<=Set_smoke) //正常情況
- {
- Smoke_Alarm=0; //清除標志位,下次溫度超過繼續發送短信一次
- }
- if((Smoke<=Set_smoke)&&(temperature<=Set_temp)&&(STEAL==1))
- {
- BEEP=0; //關閉蜂鳴器
- }
- }
- //=============================================================================
- //文件名稱:Delay
- //功能概要:延時
- //參數說明:nCount:延時長短
- //函數返回:無
- //=============================================================================
- void Delay(uint z) //延時約3ms
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=5000;y>0;y--);
- }
- //=============================================================================
- //文件名稱:main
- //功能概要:主函數
- //參數說明:無
- //函數返回:int
- //=============================================================================
- int main(void)
- {
- GPIO_Configuration();
- GPIO_Configuration_LCD();
- GPIO_Configuration_USART();
- NVIC_Configuration();
- Set_ADC_Init();
- I2C_Init_Set();
- TIMER_Init();
- DS18B20_Init();
- temperature=DS18B20_Get_Temp(); //讀取實時溫度 第一次讀取跳過85度
- LCD_Initinal();
- GPIO_Configuration_KEY();
- Set_temp=I2C_EE_BufferRead(EEPROM_ADDRESS1); //讀取對應地址的值
- Set_smoke=I2C_EE_BufferRead(EEPROM_ADDRESS2); //讀取對應地址的值
-
- Delay(40000);Delay(40000);
- GSM_Init(); //GSM初始化
- LCD_Display_String(1,table1); //顯示內容
- LCD_Display_String(2,table2); //顯示內容
- IWDG_Configuration();
- while (1)
- {
- Read_Message();
- KEY();
- if(Adjust==0)
- {
- if(TIM_GetITStatus(TIM2, TIM_IT_Update)==SET) //每0.5s讀取一次溫度
- {
- temperature=DS18B20_Get_Temp(); //讀取實時溫度
- TIM_ClearITPendingBit(TIM2, TIM_IT_Update); //清除定時器中斷
-
- ADC_RegularChannelConfig(ADC1,ADC_Channel_9,1,ADC_SampleTime_7Cycles5); //選取通道和采樣周期
- ADC_SoftwareStartConvCmd(ADC1,ENABLE); //使能指定的ADC的軟件轉換啟動功能
- Smoke=0.000806*ADC_GetConversionValue(ADC1)/(10/14.7)*20-10; //3.3V分4096份 ,每份約0.000806V, 硬件已被分壓,除以10k/(10+4.7k)得出真實電壓值(0-5V),
- //再根據y=20x(0代表0%,5V代表100%),10是校準值,是沒有檢測到煙霧時顯示的值,確保在潔凈空氣中濃度值盡可能低
- if(Smoke<0) //數值低于0做0處理
- Smoke=0;
- Write_Value(6,Smoke); //顯示濃度值
-
- if(Switch_flag==1) //防盜功能開啟狀態
- {
- Count++;
- if(Count>=20) //啟動定時器10s后開啟功能
- {
- Count=0;
- Steal_flag=1;
- }
- }
- }
- Write_Value(12,temperature); //顯示溫度到LCD1602
- Write_Value(0x40+12,Set_temp); //顯示設置溫度
-
- Write_Value(0x40+6,Set_smoke); //顯示設置溫度
- }
-
- Check();
- IWDG_Feed(); //10秒喂狗一次
- }
- }
復制代碼
所有資料51hei提供下載:
程序+原理圖+PCB+學習資料+材料清單.7z
(779.35 KB, 下載次數: 181)
2020-6-6 03:01 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
Surprise!.7z
(13.29 MB, 下載次數: 104)
2020-6-6 03:01 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
參考資料.7z
(10.85 MB, 下載次數: 106)
2020-6-6 03:01 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|