哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于STM32設計的智能空調

DS小龍哥-嵌入式技術 ? 來源:DS小龍哥-嵌入式技術 ? 作者:DS小龍哥-嵌入式技 ? 2023-06-27 09:18 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、項目背景

隨著人們生活水平的不斷提高,對居住環(huán)境的舒適度要求也越來越高??照{作為一種重要的家電設備,已經成為了現代家庭中必不可少的一部分。本文介紹了一種基于STM32的智能空調設計方案,可以自動地根據環(huán)境溫度進行溫度調節(jié)。

image-20230618181209765

image-20230618181649941

二、設計思路

2.1 整體構架

智能空調系統(tǒng)由溫度檢測傳感器微控制器、OLED顯示屏、按鍵及直流電源等組件構成。傳感器用于檢測環(huán)境溫度,通過微控制器進行處理后,將結果輸出到OLED顯示屏上展示。按鍵可根據需求調整預設閥值,切換模式等操作。

2.2 硬件設計

(1)溫度檢測傳感器

選擇DS18B20數字溫度傳感器作為本系統(tǒng)的溫度檢測器件。該傳感器具有精度高,響應速度快等特點,可以滿足該系統(tǒng)的檢測需求。

(2)微控制器

使用STM32F103系列的微控制器,在該控制器活躍的生態(tài)環(huán)境下,以及其先進的處理能力,可以對信號進行快速采集、處理和控制。

(3)OLED顯示屏

本系統(tǒng)使用的是一塊128 * 64 OLED顯示屏,顯示屏具有高亮度、高對比度和低功耗等優(yōu)點,易于與STM32微控制器進行通信。

2.3 軟件設計

在軟件設計方面,實現了溫度檢測傳感器數據的采集,使用處理算法對數據進行處理,根據預設閥值自動調節(jié)溫度,同時可以根據用戶需求,切換制冷、制熱和關閉等3種模式。最后,將結果通過OLED顯示屏進行輸出。

三、代碼設計

3.1 DS18B20溫度檢測代碼

#include "main.h"
 #include "delay.h"
 ?
 #define GPIO_PORT_TEMP     GPIOA        //溫度數據引腳所在的端口
 #define GPIO_PIN_TEMP      GPIO_Pin_0   //溫度數據引腳所在的引腳編號
 ?
 #define RCC_PORT_TEMPP     RCC_APB2Periph_GPIOA  // 溫度引腳所在端口時鐘
 ?
 void USART_SendByte( USART_TypeDef * pUSARTx, uint8_t ch );
 ?
 void delay_us(uint32_t us){     // 延時us微秒函數
     uint8_t i;
     for(i=0;i< us;i++){
         asm("nop");  
     }
 }
 ?
 float get_temp(){   // 獲取溫度函數
     uint16_t temp;
     uint8_t buf[2];
 ?
     GPIO_InitTypeDef GPIO_InitStruct;
     TIM_TimeBaseInitTypeDef TIM_InitStruct;
 ?
     RCC_APB2PeriphClockCmd(RCC_PORT_TEMPP,ENABLE);
 ?
     //DATA拉低480us復位
     GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
     GPIO_InitStruct.GPIO_Pin = GPIO_PIN_TEMP;        
     GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
     GPIO_Init(GPIO_PORT_TEMP , &GPIO_InitStruct);    
     GPIO_ResetBits(GPIO_PORT_TEMP , GPIO_PIN_TEMP ); 
     delay_us(500);                                  
     GPIO_SetBits(GPIO_PORT_TEMP , GPIO_PIN_TEMP );   
     delay_us(60);                                   
 ?
     //查詢DS18B20是否存在
     GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;        
     GPIO_InitStruct.GPIO_Pin = GPIO_PIN_TEMP;         
     GPIO_Init(GPIO_PORT_TEMP , &GPIO_InitStruct);    
     while (GPIO_ReadInputDataBit(GPIO_PORT_TEMP , GPIO_PIN_TEMP ) == RESET);     
 ?
     //通信開始
     GPIO_ResetBits(GPIO_PORT_TEMP , GPIO_PIN_TEMP );  
     delay_us(480);                                  
     GPIO_SetBits(GPIO_PORT_TEMP , GPIO_PIN_TEMP );    
     delay_us(60);                                   
 ?
     //讀取溫度數據
     GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;        
     GPIO_InitStruct.GPIO_Pin = GPIO_PIN_TEMP ;        
     GPIO_Init(GPIO_PORT_TEMP , &GPIO_InitStruct);
     delay_us(10);
     if (GPIO_ReadInputDataBit(GPIO_PORT_TEMP , GPIO_PIN_TEMP ) == RESET){
         temp |=0x01;
     }
     else{
         temp &=0xfe;
     } 
     delay_us(50);
     if (GPIO_ReadInputDataBit(GPIO_PORT_TEMP , GPIO_PIN_TEMP ) == RESET){
         temp |=0x02;
     }
     else{
         temp &=0xfd;
     }
     delay_us(50);
     if (GPIO_ReadInputDataBit(GPIO_PORT_TEMP , GPIO_PIN_TEMP ) == RESET){
         temp |=0x04;
     }
     else{
         temp &=0xfb;
     }
     delay_us(50);
     if (GPIO_ReadInputDataBit(GPIO_PORT_TEMP , GPIO_PIN_TEMP ) == RESET){
         temp |=0x08;
     }
     else{
         temp &=0xf7;
     }
     delay_us(50);
     if (GPIO_ReadInputDataBit(GPIO_PORT_TEMP , GPIO_PIN_TEMP ) == RESET){
         temp |=0x10;
     }
     else{
         temp &=0xef;
     }
     delay_us(50);
     if (GPIO_ReadInputDataBit(GPIO_PORT_TEMP , GPIO_PIN_TEMP ) == RESET){
         temp |=0x20;
     }
     else{
         temp &=0xdf;
     }
     delay_us(50);
     if (GPIO_ReadInputDataBit(GPIO_PORT_TEMP , GPIO_PIN_TEMP ) == RESET){
         temp |=0x40;
     }
     else{
         temp &=0xbf;
     }
     delay_us(50);
     if (GPIO_ReadInputDataBit(GPIO_PORT_TEMP , GPIO_PIN_TEMP ) == RESET){
         temp |=0x80;
     }
     else{
         temp &=0x7f;
     }
     delay_us(50);
 ?
     //讀取溫度小數點數據
     if (GPIO_ReadInputDataBit(GPIO_PORT_TEMP , GPIO_PIN_TEMP ) == RESET){
         buf[0] |=0x01;
     }
     else{
         buf[0] &=0xfe;
     }
     delay_us(50);
     if (GPIO_ReadInputDataBit(GPIO_PORT_TEMP , GPIO_PIN_TEMP ) == RESET){
         buf[0] |=0x02;
     }
     else{
         buf[0] &=0xfd;
     }
     delay_us(50);
     if (GPIO_ReadInputDataBit(GPIO_PORT_TEMP , GPIO_PIN_TEMP ) == RESET){
         buf[0] |=0x04;
     }
     else{
         buf[0] &=0xfb;
     }
     delay_us(50);
     if (GPIO_ReadInputDataBit(GPIO_PORT_TEMP , GPIO_PIN_TEMP ) == RESET){
         buf[0] |=0x08;
     }
     else{
         buf[0] &=0xf7;
     }
     delay_us(50);
     if (GPIO_ReadInputDataBit(GPIO_PORT_TEMP , GPIO_PIN_TEMP ) == RESET){
         buf[0] |=0x10;
     }
     else{
         buf[0] &=0xef;
     }
     delay_us(50);
     if (GPIO_ReadInputDataBit(GPIO_PORT_TEMP , GPIO_PIN_TEMP ) == RESET){
         buf[0] |=0x20;
     }
     else{
         buf[0] &=0xdf;
     }
     delay_us(50);
     if (GPIO_ReadInputDataBit(GPIO_PORT_TEMP , GPIO_PIN_TEMP ) == RESET){
         buf[0] |=0x40;
     }
     else{
         buf[0] &=0xbf;
     }
     delay_us(50);
     if (GPIO_ReadInputDataBit(GPIO_PORT_TEMP , GPIO_PIN_TEMP ) == RESET){
         buf[0] |=0x80;
     }
     else{
         buf[0] &=0x7f;
     }
     delay_us(50);
 ?
     return (float)temp+((float)buf[0]/16.0);   // 將溫度整數位和小數位轉換為十進制
 }
 ?
 int main(void){
 ?
     char temp_buf[20];  // 接收溫度值的臨時緩沖區(qū)
 ?
     USART_InitTypeDef USART_InitStruct;
 ?
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);   
 ?
     USART_InitStruct.USART_BaudRate = 115200;
     USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
     USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
     USART_InitStruct.USART_Parity = USART_Parity_No;
     USART_InitStruct.USART_StopBits = USART_StopBits_1;
     USART_InitStruct.USART_WordLength = USART_WordLength_8b;
     USART_Init(USART1,&USART_InitStruct);
 ?
     USART_Cmd(USART1,ENABLE);
 ?
     while(1){
         float temp_get=get_temp();  // 獲取當前溫度值
         sprintf(temp_buf,"temp:%0.1f
",temp_get);  // 將溫度值格式化為字符串輸出
         for(int i=0;i< strlen(temp_buf);i++){  // 逐字符發(fā)送溫度值至串口
             USART_SendByte(USART1,temp_buf[i]); 
         }
         delay_ms(1000);  // 延時1s后再次獲取溫度值
     }
 }
 ?
 void USART_SendByte( USART_TypeDef * pUSARTx, uint8_t ch ){
     while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TXE) == RESET);     
     USART_SendData(pUSARTx,ch);
 }

3.2 OLED顯示屏代碼

#include "main.h"
 #include "delay.h"
 #include "oled.h"
 ?
 void iic_init(void);
 void GPIO_I2C_Delay(void);
 void write_com(unsigned char com);
 void write_data(unsigned char data);
 ?
 int main(void){
 ?
     unsigned char x,y;
     iic_init();  // 初始化IIC接口
     OLED_Init();  // 初始化OLED顯示屏
 ?
     while(1){
         OLED_ShowString(0,0,"1234");  // 在OLED顯示屏上顯示字符串“1234”
         delay_ms(500);  // 延時500ms
         OLED_Clear();  // 清空OLED顯示屏
     }
 }
 ?
 void iic_init(void){
     GPIO_InitTypeDef GPIO_InitStruct; 
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //GPIOB使能
     RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);  //I2C1使能
 ?
     GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
     GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_OD;         //配置開漏輸出
     GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
     GPIO_Init(GPIOB, &GPIO_InitStruct); 
 ?
     I2C_InitTypeDef I2C_InitStruct; 
     I2C_DeInit(I2C1);
 ?
     I2C_InitStruct.I2C_Mode = I2C_Mode_I2C;                             // I2C 模式
     I2C_InitStruct.I2C_DutyCycle = I2C_DutyCycle_2;                     // 數傳比率 2
     I2C_InitStruct.I2C_OwnAddress1 = 0x00;                              // 地址1, 設備地址
     I2C_InitStruct.I2C_Ack = I2C_Ack_Enable;                            // 開啟I2C應答機制
     I2C_InitStruct.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; //設備地址長度為 7 位
     I2C_InitStruct.I2C_ClockSpeed = 400000;                             // 時鐘速度為400kHz
     I2C_Cmd(I2C1, ENABLE);
 ?
     I2C_Init(I2C1, &I2C_InitStruct);
 }
 ?
 void GPIO_I2C_Delay(void){
     uint32_t i = 1000;
     while(i--);
 }
 ?
 void write_com(unsigned char com){
     while(I2C_GetFlagStatus(I2C1,I2C_FLAG_BUSY));  //等待I2C總線空閑
     I2C_GenerateSTART(I2C1,ENABLE);               //發(fā)送起始信號
     while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT));
     I2C_Send7bitAddress(I2C1,0x78,I2C_Direction_Transmitter);//選擇寫入模式,發(fā)送從機器OLED的地址0x78
     while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
     I2C_SendData(I2C1,0x00);                      //發(fā)送控制字節(jié)0x00表示寫入指令
     while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED));
     I2C_SendData(I2C1,com);                       //寫入要發(fā)送的指令
     while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED));
     I2C_GenerateSTOP(I2C1,ENABLE);                //停止信號,傳輸結束
 }
 ?
 void write_data(unsigned char data){
     while(I2C_GetFlagStatus(I2C1,I2C_FLAG_BUSY));  //等待I2C總線空閑
     I2C_GenerateSTART(I2C1,ENABLE);              //發(fā)送起始信號
     while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT));
     I2C_Send7bitAddress(I2C1,0x78,I2C_Direction_Transmitter); //選擇寫入模式,發(fā)送從機器OLED的地址0x78  
     while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
     I2C_SendData(I2C1,0x40);                     //發(fā)送控制字節(jié)0x40表示寫入數據
     while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED));
     I2C_SendData(I2C1,data);                     //寫入要發(fā)送的數據
     while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED));
     I2C_GenerateSTOP(I2C1,ENABLE);               //停止信號,傳輸結束
 }

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • 微控制器
    +關注

    關注

    49

    文章

    8800

    瀏覽量

    165472
  • 傳感器
    +關注

    關注

    2577

    文章

    55407

    瀏覽量

    793467
  • STM32
    +關注

    關注

    2312

    文章

    11187

    瀏覽量

    374422
  • DS18B20
    +關注

    關注

    10

    文章

    782

    瀏覽量

    83487
  • 智能空調
    +關注

    關注

    0

    文章

    79

    瀏覽量

    6388
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    海信空調30周年:從“賣空調”到“經營空氣價值”

    剛剛閉幕的AWE 2026展會上,家電行業(yè)智能浪潮席卷。當空調品牌都在講智能,海信空調用2026世界杯定制新品給出不同答案——他們致力于讓空調
    的頭像 發(fā)表于 03-23 10:47 ?146次閱讀
    海信<b class='flag-5'>空調</b>30周年:從“賣<b class='flag-5'>空調</b>”到“經營空氣價值”

    語音空調技術方案:從“聲控”到“感知”,HomeSense? 引領空間智能新體驗

    智能家居浪潮中,空調作為調節(jié)室內環(huán)境的核心設備,其智能化水平直接影響著用戶的舒適度與體驗。傳統(tǒng)的語音控制空調,雖解放了雙手,但往往停留在“單向指令”階段,缺乏對環(huán)境與人的主動感知能力
    的頭像 發(fā)表于 03-16 11:30 ?150次閱讀

    空調控制器:以智能控制實現場景能效提升

    著運維人員。別擔心,專為解決這類痛點,安科瑞推出了 AAC100系列空調控制器 ,用遠程智能管控能力,成為公共建筑空調管理的“智慧管家”。 一控多能,給空調裝上“智慧大腦” AAC10
    的頭像 發(fā)表于 12-02 16:12 ?843次閱讀
    <b class='flag-5'>空調</b>控制器:以<b class='flag-5'>智能</b>控制實現場景能效提升

    基于MM32 MCU系列微控制器的空調外機智能控制方案

    MCU微控制器為核心的智能方案逐漸成為主流。英尚微電子推出以靈動微MM32 MCU系列為主控的空調外機參考方案,旨在為空調系統(tǒng)提供更加智能化的控制方案。
    的頭像 發(fā)表于 11-25 17:10 ?621次閱讀

    基于 LORA 智能空調溫控器的中央空調智能控制解決方案

    在商業(yè)寫字樓、大型商場、酒店、醫(yī)院等大型建筑中,中央空調系統(tǒng)是維持室內舒適環(huán)境的核心設備,但其傳統(tǒng)運行模式長期面臨能耗高、管理難、控制精度低等問題。隨著 “雙碳” 政策推進與智能化技術發(fā)展,中央空調
    的頭像 發(fā)表于 11-21 17:19 ?968次閱讀

    LORA智能空調溫控器:遠程操控分體空調,以精準批量控溫升級管理效率

    一、行業(yè)背景與需求 分體空調因安裝靈活、成本適中、適合小空間制冷制熱等特點,廣泛應用于家庭住宅、小型辦公室、連鎖便利店、公寓樓、小型商鋪等場景。隨著人們生活品質提升與智能化生活理念普及,傳統(tǒng)分體空調
    的頭像 發(fā)表于 11-21 17:18 ?854次閱讀

    空調數據難統(tǒng)計?Lora無線遠程中央空調控制器:智能聯動+精準數據,運維更高效

    逐臺巡檢排查故障。 Lora 無線遠程中央空調控制器的出現,通過 Lora 低功耗無線通信技術與物聯網管控邏輯,讓中央空調實現 遠程調控、精準控溫、智能節(jié)能,成為物聯網時代空調管理的核
    的頭像 發(fā)表于 11-19 17:19 ?889次閱讀

    上海海思與海信空調攜手推出首個支持星閃人感2.0的智能空調

    智能化浪潮席卷各行各業(yè)的今天,家電產業(yè)正迎來“功能型”向“智慧型”升級。空調作為家庭環(huán)境的核心設備,其智能感知和精準決策能力成為衡量智能化程度的重要指標。
    的頭像 發(fā)表于 09-12 17:27 ?1747次閱讀

    專用于智能空調的24G目標運動軌跡追蹤雷達模塊

    夏日炎炎,空調是必不可少的解暑圣器。隨著科技的發(fā)展,智能空調出現,空調不再僅僅是普通的制冷,還需要滿足人體在不同情況的風向、溫度需求。海凌科新款LD2452雷達模塊,是高精度多目標識別
    的頭像 發(fā)表于 09-08 17:34 ?1342次閱讀
    專用于<b class='flag-5'>智能</b><b class='flag-5'>空調</b>的24G目標運動軌跡追蹤雷達模塊

    芯??萍假x能鴻蒙智選MEIPONT智能空調 開啟人感智能新時代

    2025年8月20日,MEIPONT美邦重磅推出智能空調新品“風神之眼”,標志著MEIPONT正式進軍智能人感空調這一全新賽道?!帮L神之眼”凝聚了MEIPONT在制冷領域15年的技術積
    的頭像 發(fā)表于 08-27 09:23 ?3559次閱讀
    芯海科技賦能鴻蒙智選MEIPONT<b class='flag-5'>智能</b><b class='flag-5'>空調</b> 開啟人感<b class='flag-5'>智能</b>新時代

    云知聲攜手TCL空調煥新智能家電體驗

    空調開24度,新風打開”——剛打完籃球的小濤對著客廳遠處的TCL空調發(fā)出指令,而空調無需聯網仍精準執(zhí)行操作。這一離線狀態(tài)下的智能響應場景,正是TCL
    的頭像 發(fā)表于 08-25 13:53 ?1339次閱讀

    旋智科技家用分體空調電控設計方案

    在家用空調技術不斷迭代的今天,旋智憑借強大的芯片研發(fā)與系統(tǒng)集成能力,推出了一套完整的家用分體空調電控設計方案。這套方案從硬件到軟件,從基礎功能到智能升級,全方位提升空調的性能與用戶體驗
    的頭像 發(fā)表于 08-18 14:02 ?5468次閱讀
    旋智科技家用分體<b class='flag-5'>空調</b>電控設計方案

    迪米科技紅外測溫技術在智能空調中的創(chuàng)新應用

    迪米空調測溫模組是我司全新推出的智能溫度感知解決方案。該模組搭載先進的 32×24 多點紅外溫度傳感器陣列,能夠非接觸式、實時精準地測量目標物體表面溫度分布。
    的頭像 發(fā)表于 06-25 15:53 ?893次閱讀
    迪米科技紅外測溫技術在<b class='flag-5'>智能</b><b class='flag-5'>空調</b>中的創(chuàng)新應用

    海爾中央空調如何接入米家智能?

    教程貼 在智能化浪潮席卷現代生活的今天,人們對高效、智能、舒適及安全的居家環(huán)境愈發(fā)向往。想要將家中傳統(tǒng)非智能家電升級為智能化、人性化的生活伴侶,從而享受節(jié)能健康的智慧生活嗎?邁斯Pro
    的頭像 發(fā)表于 05-22 16:35 ?3778次閱讀
    海爾中央<b class='flag-5'>空調</b>如何接入米家<b class='flag-5'>智能</b>?

    達實智能和開立空調簽署戰(zhàn)略合作協議

    近日,達實智能和開利空調在高效暖通空調解決方案和綠色建筑行業(yè)發(fā)展等領域達成合作共識,于深圳達實智能大廈簽署了戰(zhàn)略合作協議。達實智能聯合創(chuàng)始人
    的頭像 發(fā)表于 05-12 14:33 ?995次閱讀
    涟水县| 宽甸| 厦门市| 大埔区| 高阳县| 根河市| 红桥区| 湄潭县| 广丰县| 赣榆县| 墨江| 竹溪县| 通河县| 台中市| 邵阳县| 鸡西市| 饶平县| 海伦市| 宜宾市| 灵丘县| 龙门县| 微博| 武陟县| 锡林浩特市| 宜阳县| 崇文区| 衢州市| 什邡市| 和硕县| 梨树县| 淅川县| 丽江市| 抚顺市| 惠安县| 北碚区| 清原| 临朐县| 富民县| 乌兰浩特市| 广宁县| 昂仁县|