熱門(mén)關(guān)鍵詞: 耐高溫除濕機(jī) 耐低溫除濕機(jī) 恒溫恒濕機(jī) 轉(zhuǎn)輪除濕機(jī) 家用除濕機(jī) 商用除濕機(jī) 工業(yè)除濕機(jī)
【涂鴉智能】 基于Arduino智能除濕工控器
#d=====( ̄▽?zhuān)?)b
#前排首先感謝金主,提供的這個(gè)學(xué)習(xí)的機(jī)會(huì)
#一
1、濕度過(guò)高
[涂鴉平臺(tái)MCU產(chǎn)品開(kāi)發(fā)]()
2

3

4

5
、Wifi模組是選用了涂鴉的WB3S(通用固件版),3.3V供電,串口通訊,通訊十分方便,外圍電路僅需要電源+穩(wěn)壓電容,簡(jiǎn)直不要太簡(jiǎn)單。貼一下規(guī)格書(shū)鏈接:[涂鴉Wi-Fi+BLE雙協(xié)議模組WB3S規(guī)格書(shū)]()
,電路如下圖:
開(kāi)發(fā)資料是我用過(guò)的平臺(tái)最詳細(xì)的,連PID這類(lèi)密鑰類(lèi)的都已經(jīng)寫(xiě)入了案例代碼
,僅加入自己的MCU的功能代碼即可完美調(diào)用,如下圖:
6、電平轉(zhuǎn)換:由于Arduino-UNO平臺(tái)IO是5V的電平
,和Wifi模組是3.3V(如下圖)
Arduino-UNO和Wifi通訊時(shí)候必須要經(jīng)過(guò)電平轉(zhuǎn)換
。如下圖:
#二、公模外殼及PCB二三事
1
2

按照搜索到的尺寸

3
、殼子選小了點(diǎn),不好放呀。單面估計(jì)是放不下了
4
、只好放到背面一些了,矮一些的器件放到底層去了
5
?div id="4qifd00" class="flower right">

?div id="4qifd00" class="flower right">


(3)溫濕度傳感器位置要盡量靠邊
,有條件的可以加微小的風(fēng)扇。傳感器要遠(yuǎn)離內(nèi)部發(fā)熱的組件(如:電源芯片、電源模組、降壓芯片等)。本案放置在頂部邊角。
#三
、焊接成品1
、方法多種多樣,目前筆者是采用的“鐵板燒”,先涂抹錫膏,貼上去,然后用“呼呼機(jī)”加熱。2
、完成了之后,AC-DC模塊***注意:先檢查VCC(5V3.3VUSB)和GND是否為短路狀態(tài)
,再插電前一點(diǎn)要確認(rèn)好,短路切勿插電。***
#四
、軟件代碼部分1
、下載的MCU_SDK文件,打開(kāi)來(lái),放到一文件夾里。“.c”改為“.cpp”后,IDE就可以打開(kāi)了。細(xì)節(jié)可以看[涂鴉平臺(tái)提供的移植MCUSDK教程]()2、總之就是要多看文檔
,這個(gè)代碼每個(gè)人的PID、功能等都不一樣,我貼上了Arduino的主程序代碼,如果你和我的功能一樣,大家可以自行下載代碼,并修改自己的PID等地方。當(dāng)然功能不同的,只能自己看著修改了```language
#include"wifi.h"
#include"Adafruit_SHT31.h"
#include
#include
#include
SoftwareSerialmySerial(5,6);//RX,TX
#define_SS_MAX_RX_BUFF300
#definerelay10
Adafruit_SHT31sht31=Adafruit_SHT31();
inttime_cnt=0,cnt=0,init_flag=0;
intTEM,HUM,TEM_Past,HUM_Past;
uniondata
{
inta;
byteb[4];
};
dataHUMUPPR;
dataHUMLOWER;
voidsetup(){
pinMode(relay,OUTPUT);//繼電器I/O初始化
digitalWrite(relay,LOW);
pinMode(3,INPUT_PULLUP);//重置Wi-Fi按鍵初始化
pinMode(13,OUTPUT);//Wi-Fi狀態(tài)指示燈初始化
mySerial.begin(9600);//軟件串口初始化
//mySerial.println("myserialinitsuccessful!");
Serial.begin(9600);//PA3RXPA2TX
Serial.println("serialinitsuccessful!");
sht31.begin(0x44);//SHT地址0x44
wifi_protocol_init();
for(intn=0;n<4;n++)//濕度上限讀取
HUMUPPR.b[n]=EEPROM.read(n);
for(intn=0;n<4;n++)//濕度下限讀取,下限起始地址在4
HUMLOWER.b[n]=EEPROM.read(n+4);
}
voidloop(){
if(init_flag==0){
time_cnt++;
if(time_cnt%6000==0){
time_cnt=0;
cnt++;
}
wifi_stat_led(&cnt);//Wi-Fi狀態(tài)處理
}
wifi_uart_service();
myserialEvent();//串口接收處理
key_scan();//重置配網(wǎng)按鍵檢測(cè)
aotocontrol();//自動(dòng)控制
}
/***********完整代碼詳見(jiàn)附件*******************/
```
3
、設(shè)備的濕度上限下限由于是報(bào)警值,不能在程序中定義初值,否則一旦調(diào)電重啟就會(huì)丟失設(shè)置的值,我這里是方式是把設(shè)定的閾值存儲(chǔ)在單片機(jī)的ROM中(Arduino的EEPROM),這樣進(jìn)程到來(lái)時(shí)讀取一次,下發(fā)設(shè)置值時(shí)寫(xiě)入。這樣掉~(yú)~~~電也不會(huì)丟失數(shù)據(jù)了```
uniondata
{
inta;
byteb[4];
};
dataHUMUPPR;
dataHUMLOWER;
for(intn=0;n<4;n++)//濕度上限讀取EEPROM
HUMUPPR.b[n]=EEPROM.read(n);
for(intn=0;n<4;n++)//濕度下限讀取EEPROM,下限起始地址在4
HUMLOWER.b[n]=EEPROM.read(n+4);
```
```
uniondata
{
inta;
byteb[4];
};
dataHUMUPPR;
dataHUMLOWER;
/**********放置到上限值設(shè)置函數(shù)dp_download_maxhum_set_handle中*******/
HUMUPPR.a=(int)maxhum_set;
for(intn=0;n<4;n++)//寫(xiě)入濕度上限到EEPROM,上限起始地址是0
EEPROM.write(n,HUMUPPR.b[n]);
/**********放置到下限值設(shè)置函數(shù)dp_download_minihum_set_handle中*******/
HUMLOWER.a=(int)minihum_set;
for(intn=0;n<4;n++)
EEPROM.write(n+4,HUMLOWER.b[n]);//寫(xiě)入濕度下限到EEPROM,下限起始地址是4
```
#避坑指南:
#####(1)掉電丟失濕度閾值:
一定要用ROM來(lái)承接設(shè)置值
,這樣可以掉電保存;之前我寫(xiě)的程序久忘記了,一掉電就丟失之前設(shè)置好的值。#####(2)始終無(wú)法進(jìn)入配網(wǎng)模式:
SHT的底層庫(kù)有500ms延時(shí)
,在循環(huán)里調(diào)用讀取時(shí),我實(shí)測(cè)要7s才能返回給wifi模塊心跳,始終連不上網(wǎng)```language
booleanAdafruit_SHT31::readTempHum(void){
uint8_treadbuffer[6];
writeCommand(SHT31_MEAS_HIGHREP);
delay(500);/**********我把這里改成了100*************/
Wire.requestFrom(_i2caddr,(uint8_t)6);
if(Wire.available()!=6)
returnfalse;
for(uint8_ti=0;i<6;i++){
readbuffer[i]=Wire.read();
//Serial.print("0x");Serial.println(readbuffer[i],HEX);
}
```
#####(3)Wif模塊下盡量不要走線:
之前涂鴉的工程師說(shuō)wifi模塊下面最好不要走線,我的1.1版本走了
#####(4)繼電器有點(diǎn)高:
繼電器選擇的時(shí)候尺寸沒(méi)有注意,忘記算板子厚度了
#####(5)僅供學(xué)習(xí)參考:~~~~
完全復(fù)制有風(fēng)險(xiǎn),代碼
#成功的喜悅(實(shí)測(cè)演示):
本文標(biāo)簽:
咨詢熱線
133-5299-3419