# "Assistant-of-Smart-Aquarium" Cloud Programming Final Project app part ###### tags: `Android` [Project on Github](https://github.com/doodoomilk/Assistant-of-Smart-Aquarium) **Project name: 智慧水族助手** 這個Final project其實是`Raspberry`、`Arduino`、`AWS cloud`、`Android app`的結合 但我主要負責Android app及AWS cloud的結合 ## Project Introduction ### Purpose and motivation 在快節奏的現代社會,對於希望養些小動物陪伴的人來說,各種色彩斑斕又相對好照顧的魚兒是個不錯的選擇,然而,正因為魚兒不像貓狗等寵物能明確表示出自己的不適,許多養魚者在疏忽之下並沒有替寵物魚維持好適宜生存的環境,往往導致魚群的生病和死亡。 事實上,魚群對於水溫、水質(濁度、硬度與酸鹼值)、水位等等條件是相當敏感的,過高與過低的溫度、混濁的水質、不恰當的酸鹼值和水質硬度都會對魚群的健康造成威脅,因此,水族箱的環境維護必須考慮上述諸多因素,這對於生活繁忙的養魚人士來說確實十分不便。 為了解決上訴困擾,我們希望利用感測器及相關技術來打造一個多功能的智慧水族箱 ,由水族箱來為養魚人士偵測寵物魚的生存環境,並在水質條件惡化時及時向養魚者提出預警。通過智慧水族箱,我們能解放飼主的時間和心力,幫助他們更有效率的達成養魚的環境維護,同時也為寵物魚們提供更優良的生存環境,減少魚群生病和死亡的風險。 ### 設備及技術介紹  #### Arduino Uno Rev3 此很常見,不多作介紹 #### Raspberry pi 3 此很常見,不多作介紹 #### Raspberry Pi Camera  規格: * Image Sensor: Sony IMX219 image sensor in a fxed-focus module with integral IR filter * Resolution: 800 萬像素 * Still picture resolution: 3280 × 2464 * Max image transfer rate: 1080p30: 720p60; 640x480p90 * Interface: 15 Pin MIPI Camera Serial Interface (CSI-2) * Lens size: 1/4” * Dimensions: 23 x 25 x 9mm #### Water Sensor 水位感測器  規格: * 產品名稱:水位傳感器 * 工作電壓:DC3-5V * 工作電流:小於20mA * 傳感器類型:模擬 * 檢測面積:40mm x 16mm * 制作工藝:FR4噴錫 * 工作溫度:10℃-30℃ * 工作濕度:10%-90%無凝結 * 產品重量:3.5g * 產品尺寸:62mm x 20mm x 8mm Arduino 配線說明: * Vcc – Arduino 5V * GND – Arduino GND * S – Arduino Analog pin 0 #### Gravity: Analog Turbidity Sensor For Arduino  ==注意:感測器探頭頂端不防水,請勿浸沒使用== (壞掉過QQ 切身之痛) 規格: - 工作電壓:5VDC - 工作電流:40mA (MAX) - 回應時間:<500ms - 絕緣電阻:100MΩ (Min) - 模擬量輸出:0-4.5V - 數位量輸出:高/低電平信號(可以通過調節電位器選擇對應閾值) - 操作溫度:-30℃~80℃ - 存儲溫度:-10℃~80℃ - 重量:30g - 轉接板尺寸:38mm*28mm*10mm #### 1米防水探針型熱電偶 溫度 感測器  該溫度感應器包括一個金屬探測器和 100 公分的電纜, 具有較寬的溫度測量範圍 (-55 ° C 到 125 ° C ),適合沉浸式溫度檢測。 ### AWS Services  勘誤:黃色虛線匡是mobile hub ### Service Provided 1. 會員註冊: 用戶可通過手機APP註冊會員,完成認證程序後,便會自動訂閱預警功能。 2. 資料蒐集: 各個sensors data會被傳到AWS dynamoDB,user可以透過手機app檢視historical data 3. 超標警示: 當各個sensors 接收到超標的數值時,AWS SNS會向"訂閱會員"發送e-mail警告和手機APP推播警告 4. 故障警示: 當魚群的維生器材(ex: 打氣機)發生故障時,AWS SNS會向"訂閱會員"發送e- mail警告和手機APP推播警告 5. 偵測預警: 透過Machine Learning的技術來預測魚缸未來的狀態,若預期之後環境可能會不利於寵物生長,便會透過App 手機推播以及E-mail去提醒使用者,該注意魚缸目前的狀況。 我們採用Xgboost Model,其優點除了精準度高之外,training的速度也相當快速。訓練方式則採用定時收集各個sensor的資料,並於每日固定時間利用當日所蒐集到的資料,持續訓練model,使其預測更加準確。 6. 用戶回應: 使用者接到各種警訊之後,只需透過手機就可以對sensor進行操作。因此,就算使用者出門在外,也能讓寵物維持在優良的環境中生活。 7. 即時影像: 提供攝影機的服務讓使用者隨時隨地都能清楚的看到自己心愛的寵物目前的狀況 未來希望能透過object detection去紀錄更多寵物的相關資訊(例如: 活動度),以達到更好的照顧。 ## APP Introduction ### GUI #### 登入畫面 & 註冊畫面 在這邊進行登入、身份認證、註冊新身份  #### 主畫面 在這邊選擇要進行何種服務  #### 查看sensor資料  #### 查看即時影像  ### 功能介紹 #### 註冊  1. APP會透過Cognito來進行身份管理 2. 當接收到新身份時,Cognito會還通知到Lambda function 3. Lambda 便會觸發SNS service 4. SNS會送出驗證身份的email到註冊信箱 5. 使用者要到註冊信箱收認證信,確認身份 相關程式碼: - AuthenticatorActivity.java #### 搜集資料&查看  1. 水位、溫度、水質sensor都會感測環境資訊、感測到之後傳到Arduino 2. 之後arduino會再傳至Raspberry pi做後續的資料傳遞 3. Rapberry pi可以用MQTT傳資料至IoT Core 4. 再由IoT Core將資料存到DynamoDB(database) 5. 由app使用者觸發到DB取資料 相關程式碼: - HackLevelDO.java - HackTempDO.java - HackTurbidDO.java - level.java - temperature.java - turbid.java - MyAdapter.java - MainActivity.java #### Sensor超標警示  1. 水位、溫度、水質sensor都會感測環境資訊、感測到之後傳到Arduino 2. 之後arduino會再傳至Raspberry pi做後續的資料傳遞 3. Rapberry pi可以用MQTT傳資料至IoT Core 4. 再由IoT Core將資料存到DynamoDB(database) 5. 由DynamoDB將資料傳到Lambda 6. Lambda function若是發現資料超標的話,便會觸發SNS 7. SNS會送出警示到使用者email 8. ~10. APP的推播通知是由Firebase實作,因此會使用到Pinpoint service來傳送警告訊息 相關程式碼: - MyInstanceIDService.java #### Data Training  1. ~4.都跟"Sensor超標警示一樣" 5. 用cloudwatch設定,特定時間進行training,時間到會觸發Lambda 6. Lambda會到DB取資料出來 7. 因為SageMaker是透過S3取資料,因此要先丟到S3 8. SageMaker從S3取資料進行training,並將結果回傳 相關程式碼: 此段與app無關,故無。 #### Sensor偵測預警  1. ~4.都跟"Sensor超標警示一樣" (這張圖有些微畫錯,4.應該接到DB) 5. 將上一階段training的結果傳到Lambda 6. 若training結果發現,"即將"(不久後)環境可能發生問題,便會觸發SNS 7. SNS會送出警示到使用者email 8. ~9. APP的推播通知是由Firebase實作,因此會使用到Pinpoint service來傳送警告訊息 相關程式碼: - MyInstanceIDService.java #### 設備故障警示  1. 當設備故障時,狀態會傳到Arduino 2. 之後arduino會再傳至Raspberry pi做後續的資料傳遞 3. Rapberry pi可以用MQTT傳資料至IoT Core 4. 故障資訊不必存到DB,所以直接觸發Lambda 5. Lambda會觸發SNS 6. SNS會送出警示到使用者email 7. ~8. APP的推播通知是由Firebase實作,因此會使用到Pinpoint service來傳送警告訊息 相關程式碼: - MyInstanceIDService.java #### User Control  1. 由APP觸發,APP需要綁API gateway 2. 會由API gateway觸發Lambda 3. Lambda會連接至IoT Core,畢竟是由iot core管理全部的iot devices 4. ~6. 將user control message傳達到device那邊做開關控制 相關程式碼: - MyAdapter.java - menu.java - MainActivity.java #### Camera  1. 由rapberry camera進行影像拍攝,並傳到pi上面 2. 由pi傳到Kinesis做影像處理,處理成即時串流 3. 從APP端開啟相關的串流web進行即時串流播放 相關程式碼: - MyAdapter.java - MainActivity.java - menu.java - set.java
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up