中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. "); //-->

        博客專欄

        EEPW首頁 > 博客 > 【真香現(xiàn)場】為老婆 DIY 一款集多功能于一身的環(huán)境檢測儀,守護家人健康全靠它!【內(nèi)附原理圖+源代碼】

        【真香現(xiàn)場】為老婆 DIY 一款集多功能于一身的環(huán)境檢測儀,守護家人健康全靠它!【內(nèi)附原理圖+源代碼】

        發(fā)布人:智能物聯(lián)研習社 時間:2021-04-24 來源:工程師 發(fā)布文章


        近日,剛入住新房,老婆說:“家里有沒有甲醛超標呀!? 總感覺聞著一股味兒~"

        我頓時心里一緊,感覺被無形的、摸不著的危害威脅著生命。

        心想:“不行、不行,一定要買個環(huán)境檢測儀,來檢測一下!”

        家中老小的健康安全,促使我打開了X寶,準備入手個環(huán)境檢測儀。

        但......(急剎車!)

        定睛一看,環(huán)境監(jiān)測儀怎么那么貴,并不是說"剁手”就能“剁手”的(緊緊裹住自己小錢袋)!

        而且,市面上大多數(shù)的環(huán)境監(jiān)測儀并沒有擁有多功能的性能,難道要買好幾個不同功能點的儀器嗎?

        NO!  既燒錢,又麻煩 !

        靈機一動,不如自制一個環(huán)境檢測儀,實時檢測空氣健康安全,在家,在公司,隨時拿出來測一測,節(jié)能環(huán)保,健康安全!

        有了想法,必須付諸實踐~畢竟不是光說說的!

        先來張定妝照~


        new


        戳以下鏈接,回復“環(huán)境檢測儀2”,即可獲取50元模組券以及詳細開發(fā)者資料,手慢無?。?/span>

         https://www.wjx.cn/vj/wFXuAGU.aspx  


        開啟動我的DIY之路~

        先給大家介紹幾款簡單的傳感器,如果大家有別的傳感器,也可以采用!

        一、甲醛檢測


        ZE08-CH2O型電化學甲醛模組,是一個通用型、小型化模組,利用電化學原理對空氣中存在的CH2O進行探測,具有良好的選擇性,穩(wěn)定性。內(nèi)置溫度傳感器,可進行溫度補償;同時具有數(shù)字輸出與模擬電壓輸出,方便使用。

        具體電氣參數(shù)如圖:

        注 釋 : 氣 體 濃 度 值 (PPB)=( 氣 體 濃 度 高 位 *256+ 氣 體 濃 度 低 位 ). 當 轉 換 為 PPM 時 : PPM= PPB/1000.
        1PPM×1.25 = 1.25mg/m3.

        其中Byte8校驗值=(取反(Byte1+Byte2+……+Byte7))+ 1

        二、PM2.5檢測


        PM2.5檢測采用ZPH02 空污粉塵傳感器。它整合了紅外PM2.5檢測原理和較為成熟的VOC檢測技術,能夠實現(xiàn)對同一環(huán)境中PM2.5和VOC的同時檢測。

        該傳感器中PM2.5檢測采用粒子計數(shù)原理,可靈敏檢測直徑1μm以上灰塵顆粒物,VOC傳感器對有機揮發(fā)氣體具有極高的靈敏度。

        PM2.5+

        PM2.5-

        具體電氣參數(shù)如圖:


        備注:
        對PM2.5 的計算:
        舉例:傳感器發(fā)出一幀正常數(shù)據(jù)中,第 3位 0X12,第 4位 0X13。則表示:傳感器輸出的占空比為18.19%。
        串口模式下低脈沖率輸出范圍 0.5%-50%。


        對 VOC氣體檢測:
        每一幀數(shù)據(jù)中第 7位表示 VOC輸出,直接輸出 0x01-0x04四個等級,依次對應“優(yōu)、良、中、差”,無傳感器
        或故障時顯示 0x00;

        其中Byte8校驗值=(取反(Byte1+Byte2+……+Byte7))+ 1

        三、煙霧檢測


        煙霧檢測采用MQ-2煙霧傳感器,該傳感器可用于家庭和工廠的氣體泄漏監(jiān)測裝置,

        適宜于液化氣、苯、烷、酒精、氫氣、煙霧等的探測。

        MQ2--

        傳感器靈敏度曲線如圖


        MQ2_S

        為了減少開發(fā)周期,本次采購了MQ-2煙霧傳感器模組

        MQ2

        該模塊原理圖如下


        MQ系列氣體傳感器模塊電路圖


        如圖可知,可以通過檢測AO端的電平電壓,來判斷煙霧大小(電壓越高,煙霧濃度越高)。

        四、燃氣檢測

        燃氣檢測采用MQ-4氣體傳感器,該傳感器對甲烷,天燃氣有很高的靈敏度,廣泛適用于家庭用氣體泄漏報警器、工業(yè)用可燃氣體報警器以及便攜式氣體檢測器。電氣特性如下


        傳感器靈敏度曲線如圖

        MQ4靈敏度

        為了減少開發(fā)周期,本次采購了MQ-4氣體傳感器模組。該模組的原理圖和MQ-2煙霧傳感器模組相同,可以通過檢測AO端的電平電壓,來判斷燃氣濃度(電壓越高,燃氣濃度越高)。

        五、火焰檢測


        火焰檢測采用紅外接收管,該管可以用來探測火源或其它一些波長在700納米~1000納米范圍內(nèi)的熱源。當無紅外光照時,有很小的飽和和反向漏電流(暗電流),此時光敏管不導通。當有紅外光照時,飽和反向漏電流馬上增加,形成光電流,在一定的范圍,它隨入射光強度的增大而增大。

        為了減少開發(fā)周期,本次采購了市面上常見的火焰?zhèn)鞲衅髂=M
        火焰?zhèn)鞲衅? src=

        原理圖如下

        火焰原理圖

        可以通過檢測AO端的電平電壓,來判斷火勢的強弱(電壓越低,火勢越強)。


        1、環(huán)境安全衛(wèi)士電路設計

        到此步,大家肯定都已經(jīng)選擇好心儀的環(huán)境傳感器,接著就帶大家基于這些傳感器,設計一款環(huán)境安全衛(wèi)士電路~

        主控單元選擇WB3S 模組,這是一款由涂鴉智能開發(fā)的低功耗嵌入式Wi-Fi+BLE 雙協(xié)議模組。它由一個高集成度的無線射頻芯片BK7231T和少量外圍器件構成,內(nèi)置了Wi-Fi網(wǎng)絡協(xié)議棧和豐富的庫函數(shù)。由于ADC口資源不足,我們還需對其進行適當修改,拓展ADC接口,具體措施是在電路中增加一款四通道模擬多路復用/解復用器芯片——RS2255。這是一款是數(shù)字控制的模擬開關,它的導通電阻只有24歐姆,漏電流只有1nA。

        另外,本方案使用了較多傳感器,為了減少走線,使整體更加簡潔美觀,主控板需要引出各種傳感器接口,而且各個模塊與主控板的通信接口電平存在不匹配的現(xiàn)象,模塊供電電壓也存在差異。

        為了解決上述問題,具體原理圖設計如下


        SCHV3

        PCB如下

        PCBV2

        原理圖與PCB查看:

        下載地址

        • 原理圖

        • PCB


        戳以下鏈接,回復“環(huán)境檢測儀2”,即可獲取50元模組券以及詳細開發(fā)者資料,手慢無??!

         https://www.wjx.cn/vj/wFXuAGU.aspx  



        • 2、環(huán)境安全衛(wèi)士實物搭建

        這一步結束,大家肯定也都完成了環(huán)境安全衛(wèi)士電路設計,接下來就要把PCB文件發(fā)給PCB廠家進行打樣。

        這個過程,很培養(yǎng)大家的動手能力,看著枯燥卻又會帶著歡樂,當然也要注意安全,別被烙鐵燙著。
        電容電阻三極管焊好之后,接下來就比簡單啦。只需要根據(jù)結構空間要求,將各個傳感器模塊安插在對應的位置上,并完成焊接固定。
        為了使走線更加精簡,可直接將甲醛傳感器的VCC,GND,TXD焊到P5的VCC,GND,RXD,其他傳感器同理。

        全部焊好之后,效果如圖:

        front1

        back1

        怎么樣,是不是有點小開心~
        但是可能也有同學覺得太丑,光禿禿的,都是電路。


        別急!為了增加產(chǎn)品的可使用性,我選擇了一款帶臺燈的插座,對其進行改造,將環(huán)境安全衛(wèi)士固定在臺燈支架上,這樣在檢測房間空氣質量的同時,還可以檢測插座上的設備是否出現(xiàn)火災等危險情況,尤其是可以對手機等這類鋰電池設備充電引發(fā)的安全問題惡化之前進行提前通知,防止災難的進一步發(fā)生。


        臺燈

        當然,用戶也可以根據(jù)自身需求,將本環(huán)境安全衛(wèi)士和其他設備進行關聯(lián)。

        臺燈內(nèi)可增加一路繼電器控制,當異常發(fā)生時,自動斷開220V市電,降低損失。


        image.png

        以上相關準備工作完成后,接下來就可以開始正式的產(chǎn)品搭建工作。


        1.將臺燈的燈罩拆開,可以看到里面的LED燈板和兩根正負電源線,用電烙鐵等工具將LED燈板拆除

        step1

        2.將臺燈底座的四個海綿墊拆除,卸下螺絲,可以拆除底座

        step1.5

        3.將主控板固定在燈罩區(qū)域適當位置,將兩根正負電源線分別焊到主控板上的P6端,這樣當按下插座上的“臺燈”按鈕時,插座就可以給主控板提供5V電壓,注意區(qū)分正負極。

        4.修改臺燈電路,在火線電路中串入一個繼電器,并引出繼電器控制線

        step4

        5.將上一步引出的控制線焊于主控板P2的Sig處,并安裝燈罩,底座。

        all

        當然,我們也可以激發(fā)自己創(chuàng)意,給它穿上不同外衣

        all2

        這樣,整機搭建基本完成。

        另外,也可以根據(jù)自己的創(chuàng)意,設計出其他外觀,比如:

        new

        外形結構文件下載鏈接


        在這里插入圖片描述

        上罩殼

        在這里插入圖片描述

        下罩殼


        下面,講一講關于固件開發(fā) part~


        3、環(huán)境安全衛(wèi)士固件開發(fā)


        開發(fā)環(huán)境是在Linux下進行開發(fā)的,環(huán)境搭建和SDK的拉取可以在涂鴉 github 上的倉庫 上進行學習。

        該代碼是基于1.0.2版本的 SDK 進行開發(fā)的,第一次接觸soc開發(fā)的同學,可以在 涂鴉github上的倉庫 上拉取代碼進行學習和開發(fā)。該代碼中的 apps/template-demo 比較簡單,可在該代碼的基礎上進行學習或開發(fā)。

        本 demo可在github上下載源代碼 ,下載完成源代碼后,將代碼放入SDK里面的APPS文件夾下。進行編譯下載就可以了。編譯后的產(chǎn)物中會出現(xiàn)QIO,UA,UG文件其中QIO是生產(chǎn)固件,UA是用戶去固件,UG是升級固件。
        在這里插入圖片描述

        本 demo主要是通過3種方式進行獲取傳感器信息的,分別是串口,adc,檢測引腳高低電平。下面將以這三種方式進行簡單的介紹。

        1.串口類傳感器:甲醛,pm2.5

        • 甲醛傳感器相關資料

        • PM2.5傳感器資料

        通過閱讀甲醛傳感器的資料我們可以發(fā)現(xiàn),傳感器數(shù)據(jù)上傳格式和計算方法如下:

         /***********************************************************
         *   Function:  get_ch2o_sensor_value
         *   Input:     none
         *   Output:    none
         *   Return:    none
         *   Notice:    得到并上傳甲醛的數(shù)據(jù)
         ***********************************************************/
        static VOID get_ch2o_sensor_value(VOID)
        {
            UINT_T  buff_ret, find_head_index = 0;
            //甲醛數(shù)據(jù)高位,低位
            UCHAR_T ch2o_data_high, ch2o_data_low;
            //校驗和
            UCHAR_T check_sums = 0x00;    
            //串口數(shù)據(jù)緩存區(qū)
            UCHAR_T ch2o_receive_buffer[CH2O_BUFFER_SIZE];
            //指向甲醛數(shù)據(jù)頭部
            UCHAR_T *p_ch2o_value = NULL;
        
            memset(ch2o_receive_buffer, 0, sizeof(ch2o_receive_buffer));
        
            //讀取串口數(shù)據(jù)
            bk_uart_recv(CH2O_SENSOR_UART, ch2o_receive_buffer, CH2O_BUFFER_SIZE, 0xFFFF);
        
            // for (find_head_index = 0; find_head_index<CH2O_BUFFER_SIZE; find_head_index++) {
            //     PR_NOTICE("ch2o_receive_buffer[%d] = %02x", find_head_index, ch2o_receive_buffer[find_head_index]);
            // }
        
            //尋找 ch2o 傳感器發(fā)送過來的頭部
            for (find_head_index = 0; find_head_index<CH2O_BUFFER_SIZE; find_head_index++) {
                if (ch2o_receive_buffer[find_head_index] == 0xff && \
                    ch2o_receive_buffer[find_head_index+1] == 0x17 && \
                    ch2o_receive_buffer[find_head_index+2] == 0x04){
                    //PR_NOTICE("find head is %d", find_head_index);
                    break;
                }
            }
        
            //本次采集數(shù)據(jù)不完整
            if (find_head_index > 11) { 
                PR_ERR("ch2o get uart data no complete!");
                return;
            }
        
            //將指針指向 ch2o 數(shù)據(jù)中的頭部
            p_ch2o_value = ch2o_receive_buffer + find_head_index;
        
            //檢驗和,確認讀取的數(shù)據(jù)的準確性
            check_sums = ch2o_check_sum(p_ch2o_value, 9);
            if (check_sums != *(p_ch2o_value + 8)) {
                PR_ERR("ch2o check_sums error");
                return;
            }
            
            ch2o_data_high = *(p_ch2o_value+4);
            ch2o_data_low = *(p_ch2o_value+5);
        
            gs_air_box.ch2o_value = ch2o_data_high * 256 + ch2o_data_low;
        
            //PR_NOTICE("ch2o value is : %d .", gs_air_box.ch2o_value);
        
            //上傳 ch2o 數(shù)據(jù)到涂鴉云
            updata_dp_single(gs_air_box.dp_ch2o_value, PROP_VALUE, gs_air_box.ch2o_value);
        
            return;
        }

        校驗和的計算方式為:

         /***********************************************************
         *   Function:  ch2o_check_sum
         *   Input:     none
         *   Output:    none
         *   Return:    none
         *   Notice:    甲醛數(shù)據(jù)校驗和
         ***********************************************************/
        static UCHAR_T ch2o_check_sum(UCHAR_T *data, UCHAR_T len)
        {
            UCHAR_T i, tempq = 0;
            data += 1; //指向data[1]
        
            for(i=0; i<(len-2); i++)
            {
                tempq += *data;
                data++;
            }
        
            tempq = (~tempq) + 1;
        
            return (tempq);
        }


        PM2.5的獲取方法和甲醛的很相似,這里不再過多介紹。

        2.ADC類傳感器:燃氣傳感器,煙霧傳感器

        相關資料
        由于在WB3S上只要一個ADC,所以我們這里用RS2255 芯片進行復用,引腳選擇如下:


        ADC初始化:

        /* ADC */
        #define ADC_DATA_LEN    4
        static  tuya_adc_dev_t  tuya_adc;
        
        static VOID adc_init(VOID)
        {
            tuya_adc.priv.pData = Malloc(ADC_DATA_LEN * sizeof(USHORT_T)); //這里一直使用tuya_adc,所有后面就沒有釋放該空間
            memset(tuya_adc.priv.pData, 0, ADC_DATA_LEN*sizeof(USHORT_T));
            tuya_adc.priv.data_buff_size = ADC_DATA_LEN; //設置數(shù)據(jù)緩存?zhèn)€數(shù)
        }


        ADC采集:

         /***********************************************************
         *   Function:  get_adc_value
         *   Input:     none
         *   Output:    adc_value : 采集到的 adc 值
         *   Return:    none
         *   Notice:    得到 adc 采集的電壓值
         ***********************************************************/
        VOID get_adc_value(OUT USHORT_T* adc_value) 
        {
            INT_T ret;
        
            if (adc_value == NULL) {
                PR_ERR("pm25_adc_value is NULL");
                return;
            }
            memset(tuya_adc.priv.pData, 0, ADC_DATA_LEN*sizeof(USHORT_T));
            ret = tuya_hal_adc_init(&tuya_adc);
            if (ret != OPRT_OK) {
                PR_ERR("ADC init error : %d ", ret);
                return;
            }
        
            ret = ret = tuya_hal_adc_value_get(ADC_DATA_LEN, adc_value); 
            if (ret != OPRT_OK) {
                PR_ERR("ADC get value error : %d ", ret);
            }
        
            tuya_hal_adc_finalize(&tuya_adc);
            return;
        }

        煙霧傳感器,數(shù)據(jù)獲?。?/p>

        /* 煙霧傳感器 */
        #define SMOKE_ALARM_LIM 1.0
        
        /***********************************************************
         *   Function:  get_smoke_sensor_value
         *   Input:     none
         *   Output:    none
         *   Return:    none
         *   Notice:    得到并上傳煙霧的數(shù)據(jù),A1
         ***********************************************************/
        static VOID get_smoke_sensor_value(VOID)
        {
            USHORT_T    smoke_adc_value;
            FLOAT_T     smoke_volt; 
        
            //復用 adc 到 A1 
            tuya_gpio_write(RS2255_A, FALSE);
            tuya_gpio_write(RS2255_B, TRUE);
        
            tuya_hal_system_sleep(500);
        
            //得到煙霧傳感器 ad 值
            get_adc_value(&smoke_adc_value);
            //PR_NOTICE("smoke_adc_value : %d ", smoke_adc_value);
        
            //計算實際電壓值
            smoke_volt = (smoke_adc_value / 4095.0) * 2.4 * 2;
            //PR_NOTICE("smoke_volt : %lf ", smoke_volt);
        
            //判斷是否到報警門限值
            if (smoke_volt >= SMOKE_ALARM_LIM) {
                gs_air_box.smoke_state = ALARM;
            } else {
                gs_air_box.smoke_state = NORMAL;
            }
        
            //上傳數(shù)據(jù)
            updata_dp_single(gs_air_box.dp_smoke_state, PROP_ENUM, gs_air_box.smoke_state);
        
            //PR_NOTICE("get smoke value, updata...");
            return;
        }

        燃氣傳感器和煙霧相似,這里就不再過多介紹。

        3.檢測引腳高低電平獲取狀態(tài):火焰?zhèn)鞲衅?/p>

        火焰?zhèn)鞲衅鳎瑱z測到火焰后斷開220v電源,重啟后220v通電,防止發(fā)生意外情況。

         /***********************************************************
         *   Function:  get_smoke_sensor_value
         *   Input:     none
         *   Output:    none
         *   Return:    none
         *   Notice:    得到并上傳火焰的數(shù)據(jù)
         ***********************************************************/
        static VOID get_flame_sensor_value(VOID)
        {
            if (FALSE == tuya_gpio_read(FLAME_SENSOR_PIN)) {
                gs_air_box.flame_state = ALARM;
                /* 檢測到火焰,拉低220V控制引腳,斷電 */
                tuya_gpio_write(POWER_OFF_220V_PIN, FALSE);
            } else {
                gs_air_box.flame_state = NORMAL;
            }
        
            updata_dp_single(gs_air_box.dp_flame_state, PROP_ENUM, gs_air_box.flame_state);
        
            return;
        }


        4.設備初始化:

        啟動時,先對環(huán)境安全衛(wèi)士相關的外設和引腳進行初始化設置,創(chuàng)建信號量,傳感器預熱,預熱完成后釋放信號量,開始采集。


         /***********************************************************
         *   Function:  air_box_device_init
         *   Input:     none
         *   Output:    none
         *   Return:    none
         *   Notice:    環(huán)境安全衛(wèi)士設備初始化
         ***********************************************************/
        VOID air_box_device_init(VOID)
        {
            INT_T opRet = OPRT_OK;
        
            /* 火焰?zhèn)鞲衅飨嚓P外設初始化 */
            tuya_gpio_inout_set(FLAME_SENSOR_PIN, TRUE);
            tuya_gpio_inout_set(POWER_OFF_220V_PIN, FALSE);
            /* 啟動時,拉高220V控制引腳,通電 */
            tuya_gpio_write(POWER_OFF_220V_PIN, TRUE);
        
            /* ADC 復用,相關引腳初始化 */ 
            tuya_gpio_inout_set(RS2255_A, FALSE);
            tuya_gpio_inout_set(RS2255_B, FALSE);
            adc_init();
        
            /* 甲醛傳感器使用 uart2 接收數(shù)據(jù),在函數(shù) app_init() 里面已經(jīng)修改完成波特率 */
            
            /* pm2.5 傳感器 串口 初始化 */
            ty_uart_init(PM25_SENSOR_UART, TYU_RATE_9600, TYWL_8B, TYP_NONE, TYS_STOPBIT1, (PM25_BUFFER_SIZE * SIZEOF(UCHAR_T)), TRUE);
        
            /* 創(chuàng)建信號量 */
            opRet = tuya_hal_semaphore_create_init(&preheat_semaphore, 0, 1);
            if (opRet != OPRT_OK) {
                PR_ERR("creat preheat semaphore error : %d", opRet);
            }
        
            /* 預熱 60s 后釋放信號量,開始采集傳感器數(shù)據(jù) */
            opSocSWTimerStart(preheat_timer, SENSOR_PREHEAT_TIME, preheat_semaphore_post_task); 
        
            tuya_hal_thread_create(NULL, "acquire sensor data", 512*4, TRD_PRIO_2, acquire_data_task, NULL);
        }

        預熱完成釋放信號量:

        VOID preheat_semaphore_post_task(VOID)
        {
            //預熱完成,釋放信號量
            tuya_hal_semaphore_post(preheat_semaphore);
            //關閉預熱軟件定時器
            opSocSWTimerStop(preheat_timer);
        
            //預熱完成,上傳預熱完成數(shù)據(jù)到涂鴉云
            gs_air_box.preheat_state = false;
            updata_dp_single(gs_air_box.dp_preheat, PROP_BOOL, gs_air_box.preheat_state);
        }

        傳感器采集數(shù)據(jù)任務輪詢函數(shù):

         /***********************************************************
         *   Function:  acquire_data_task
         *   Input:     none
         *   Output:    none
         *   Return:    none
         *   Notice:    獲取傳感器數(shù)據(jù)任務
         ***********************************************************/
        VOID acquire_data_task(VOID)
        {
            //等待預熱完成
            tuya_hal_semaphore_wait(preheat_semaphore);
        
            while (1) {
                get_ch2o_sensor_value();
                get_flame_sensor_value();
                get_gas_sensor_value();
                get_pm25_sensor_value();
                get_smoke_sensor_value();
                tuya_hal_system_sleep(500);
            }
        }

        整機演示1.實時顯示當前空氣狀況

        燒錄授權 完成后,設備就可以正常配網(wǎng)了。連接WiFi,打開藍牙,按照配網(wǎng)流程成功配網(wǎng)后,即可使用app控制設備。已經(jīng)配網(wǎng)成功的設備,可長按按鍵再次進入配網(wǎng)模式。

        環(huán)境安全衛(wèi)士APP顯示界面:


        app

        2.報警

        當煙霧,燃氣或者火焰三者中有一種的濃度大于設定值,則app會顯示報警狀態(tài),并且斷開220V電壓。


        img

        至此,我們已經(jīng)成功完成多功能環(huán)境安全衛(wèi)士的開發(fā)~搓搓手,原來DIY一款如此高級的環(huán)境檢測儀也是如此簡單~



        戳以下鏈接,回復“環(huán)境檢測儀2”,即可獲取50元模組券以及詳細開發(fā)者資料,

        手慢無??!

         https://www.wjx.cn/vj/wFXuAGU.aspx  

        心動不如行動~ 老鐵們!在家、在公司也能讓室內(nèi)環(huán)境變得更健康、安全!有趣又省錢的難道不香嗎?



        *博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權請聯(lián)系工作人員刪除。




        相關推薦

        技術專區(qū)

        關閉