嵌入式期末大作業——家用智能晾衣桿
目錄
- 嵌入式期末大作業——家用智能晾衣桿
- 前言
- 一、專案介紹
- 1.專案背景
- 2.專案構思
- 二、系統設計
- 1.系統概述
- 2.設計思路
- 3.設計草圖
- 三、硬體設計
- 1.硬體模塊介紹
- 2.硬體系統的Fritzing模型圖
- 四、軟體設計
- 1.晾衣桿自動感應
- 2.晾衣桿手動切換
- 3. 天氣預報
- 五、使用說明
- 1.實物圖展示
- 2.操作流程
- 六、系統總結
前言
昨天早上我的物聯網大作業也成功驗收了,所以從昨天開始,我大學四年與之相關的課程到此結束,
從數字邏輯到嵌入式再到物聯網,每段歷程都應該記錄一下吧=_=
所以今天騰空把上學期的期末大作業給做一個記錄
老樣子,實驗報告和代碼等放文末自取吧
廢話不多說,正文開始!
一、專案介紹
1.專案背景
??隨著我國社會經濟水平的發展,當前人們的生活逐漸追求個性化、自動化,對家用器件要求的檔次越來越高,生活家居人性化、智能化的要求使控制技術在智能家居電子產品中得到了廣泛應用,它不僅優化了人們的生活方式和居住環境,而且方便人們有效地安排時間和節約各種能源,伴隨著高智能家居的快速發展,晾衣工具的智能化發展明顯落后于其他家用器具智能化發展,現在已經引起社會的較大關注,
??當下固定且單一的晾衣桿,無法對天氣和其他外界因素做出反應,對于現在城市中的大多數人來說,每天的作業壓力巨大,白天的時間幾乎都不在家,當天氣變化時不能及時把衣服識訓和曬出,對城市生活造成較大不便,
??設計背景:

2.專案構思
??設計開發一種能夠自動感應天氣變化和手動控制晾衣桿的智能晾衣桿,晾衣桿可以選擇自動模式和手動模式:
??自動模式下,晾衣桿可以感應天氣的變化來進行晾衣,雨天時,自動識訓,晴天時,自動曬出;
??手動模式下,停止晾衣桿自動檢測,人們可以通過按鈕來控制衣桿,
二、系統設計
1.系統概述
??本專案旨在基于Arduino和樹莓派,模擬開發一個簡易的家用智能晾衣桿,在家用智能晾衣桿中,用戶可以根據自身的需要,切換手動和自動兩個模式,首先是自動模式下,在自動模式中,用戶無需對晾衣桿進行操作,晾衣桿可以根據對當前光照的強度進行檢測,來判斷外邊是否天氣晴朗,同時,晾衣桿將檢測外界的濕度,來檢測外界是否下雨,
??總結四大狀況如下:
??1.當外界光照亮,且沒有下雨時,晾衣桿將會自動曬出;
??2.當外界光照亮,但是下雨了,晾衣桿將會自動識訓;
??3.當外界光照暗,但是沒下雨時,晾衣桿將會識訓;
??4.當外界光照暗,同時下雨了,晾衣桿將會識訓;
??在手動模式下,晾衣桿不再自動感應外界狀況,用戶可以通過按鈕來使晾衣桿曬出和識訓,
??同時,在個人小屋中,增設了天氣預報功能,顯示屏將會把最近的天氣實時顯示出來,來方便用戶進行判斷,
??綜上,本系統的主要功能是:
??1.晾衣桿自動感應天氣
??2.晾衣桿手動控制
??3.天氣預報
2.設計思路
(1)家用智能晾衣桿軟硬體設計:


(2)家用智能晾衣桿流程圖:

3.設計草圖
??房屋模型屋頂設計圖

??房屋模型大體設計圖

??衣物設計圖

三、硬體設計
1.硬體模塊介紹
(1)SSD1306 OLED 顯示模塊:

埠連接:

功能:用于顯示天氣狀況和風力大小,
(2)光敏傳感器模塊:

埠連接:

功能:用于檢測房屋外光線強度,來決定晾衣桿的識訓和曬出,
(3)雨滴傳感器模塊:

埠連接:

功能:用于檢測房屋外是否下雨,來決定晾衣桿的識訓和曬出,
(4)按鈕:

連接:通過檢測輸出引腳的電壓來檢測線路連接和斷開,
功能:用于切換晾衣桿的作業模式和控制晾衣桿的曬出和識訓,
(5)舵機:

埠連接:

功能:用于控制晾衣桿的轉動,
2.硬體系統的Fritzing模型圖

四、軟體設計
??軟體設計對應系統主要的3個功能進行設計,分別是:晾衣桿自動感應,晾衣桿手動切換和天氣預報,
1.晾衣桿自動感應
利用光敏傳感器和雨滴傳感器來檢測外界光照和濕度,當外界光照亮度達標,并且沒有下雨時,程式會控制舵機旋轉,從而使晾衣桿曬出,

代碼實作:
設定變數L表示檢測亮度,變數R表示檢測雨滴,當外界亮度超過160且雨滴值為0時,模擬了晴天下天黑的情況,晾衣桿自動收衣服;
pinMode(A0,INPUT);
pinMode(pinBtn,INPUT);
pinMode(A1,INPUT);
pinMode(pinBtn2,INPUT);
int L = analogRead(A0); //L表示亮度
int rainfall = analogRead(A1); //降水量
L和rainfall接收亮度和降水量資訊,
#include <Servo.h>
Servo yj;
Servo是一個舵機驅動庫,可以創建一個舵機物件,
yj.attach(7); //舵機7號引腳
attach(pin)方法可以系結舵機和引腳,
if(L>160 || rainfall <= 40){
yj.write(15); //天黑收衣服(舵機轉到0度)
}
else{
yj.write(105); //天亮曬衣服(舵機轉到90度)
}
判斷亮度和降水量后,write(tangle)方法可以將舵機旋轉到需要的角度,
2.晾衣桿手動切換
利用按鈕來實作退出和進入回圈,從而實作自動和手動的切換,

代碼實作:
tsLastReport變數實作每一秒中對心率和血氧進行一次采樣,使用到了MAX30100Lib庫中PulseOximeter類實體物件的getHeartRate和getSpo2方法分別獲取心率和血氧資料,
if(digitalRead(pinBtn)==HIGH){
yj.write(15); //強制識訓
delay(1000);
while(1){
if(digitalRead(pinBtn2)==HIGH){ //再次按下脫離強制識訓
break;
}
}
當強制識訓按鈕按下后,自動識訓,并進入回圈,
取消識訓按鈕后,根據環境自動調節舵機,
3. 天氣預報

Python:
??requests:

此處的respsonse=requests.get(url)方法,可以從url的目標網址得到一個回應,用result=response.json()的方法可以將json格式的資料轉換成字典,最后用daily提取出需要的資訊,url的介面可以參看心知天氣的API,
??serial:

serial是python的串口通訊庫,
其中ser = serial.Serial(‘/dev/ttyACM0’,9600)查看樹莓派介面得知串口為‘/dev/ttyACM0’,并設定傳輸速率為9600,ser.write(string),該方法可以向串口傳遞字串資料,但接收時是單位元組的,需要在arduino回圈相加,
??Arduino:

<Adafruit_SSD1306.h>:
該庫依賴于<SPI.h><Wire.h><Adafruit_GFX.h>,將他們匯入后,設定螢屏的主從關系,片選信號和資料,時鐘信號等引腳后,就設定好螢屏的驅動,

初始化螢屏

使用全域變數weather陣列提取出字串里的天氣資訊資料格式為
[a:b :c:d:e:f:],其中a、b和d、e為今天和明天的日夜間天氣,c、f為風速等級,
天氣對應的介面對應心知天氣的天氣圖,可以下載后:調整尺寸->調整透明度->用畫圖工具保存為單色位圖->提取出點陣資訊(如我用的zimoV2.2軟體),將點陣資訊,存到陣列里,根據weather的資訊,呼叫display.drawBitmap()方法就能列印出對應的天氣了,

display.clearDisplay()清楚螢屏快取的資訊;
display.setTextSize(uint8_t s)設定字體大小s;
display.setTextColor(WHITE)設定字體顏色;
display.setCursor(uint8_t x,uint8_t y),設定游標位置,以左上角為(0,0);
display.println(String str),列印字串str;
drawBitmap(int16_t x, int16_t y, const uint8_t bitmap[], int16_t w, int16_t h, uint16_t color),在(x,y)處作圖,bitmap為static const unsigned char PROGMEM陣列的格式;
display.display()方法會把內容推到顯示屏上,
五、使用說明
1.實物圖展示
(1)模型正面圖

(2)模型背面圖

(3)模型內部圖

2.操作流程
(1)天氣預報
??如圖所示,天氣預報資訊將會顯示在OLED屏上,當樹莓派啟動時,將會顯示開機界面,

此時樹莓派開始請求天氣資料,顯示屏顯示“Please Wait”

當樹莓派成功請求到資料后,將傳給Arduino,并實時顯示和更新資料,顯示的資料包括今天和明天中,日間和夜間的天氣狀況,


(2)自動感應
??在自動感應功能下,晾衣桿將會根據天氣來決定曬出和識訓,
??當外界光線狀況好,且沒有下雨時,晾衣桿將曬出:

當外界光線狀況差,晾衣桿將識訓:

當外界光線狀況好,但是降雨量達到標準后,晾衣桿將識訓:

當外界光線好,同時降雨量沒有達到標準時,晾衣桿暫時不識訓:

(3)手動切換
??當點擊切換按鈕后,程式將進入到手動控制模式中,同時將晾衣桿識訓,此時晾衣桿將不再檢測天氣狀況:

當點擊退出按鈕后,程式將回傳自動感應模式中,此時晾衣桿將繼續檢測天氣狀況,
六、系統總結
系統優點:
??完全實作了晾衣桿自動和手動兩種模式的運行,實作了晾衣桿智能化,并且代碼上優化了不同模塊之間的銜接,使得模型回應速度快,準確度高,
系統缺點:
??系對天氣的檢測量種類少,在對天氣感應的靈敏度和準確度上有待提高,在arduino上獲得的天氣資料和舵機的轉動不能統一,即不能有效利用系統內的資訊,
改進想法:
??加入更多的器件來提高模型對天氣的預計準確度,并且設計吹干和伸縮的功能,來提高用戶體驗感,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/401459.html
標籤:其他
上一篇:5款國產ARM芯片替代ST
