# 智慧充電箱 made by Chou # 介紹 此專案利用raspberry pi製作智慧充電箱,能使用line啟動以下3種功能: 1. 睡醒時充飽電 2. 番茄時鐘 3. 手機保管箱 # 需要零件 ## 硬體 * Raspberry Pi * Picamera(可調焦距的版本) * 紙箱、紙板 * 竹筷 * 吸管 * LED燈*2 * 兩路繼電器 * 2.0mm單芯線(建議使用1.6mm) * 電源線 * 卡式插座 * 快速接線端子 * 手機充電器+線 * PIR motion sensor ## 軟體 * python3 * anaconda * cuda toolkit * pytorch(torch), torchvision # 外觀 ![appearance4](https://hackmd.io/_uploads/S1xamuKuT.jpg) ![appearance1](https://hackmd.io/_uploads/SkH0X_Yua.jpg) ![appearance](https://hackmd.io/_uploads/rki0X_YdT.jpg) # 電路圖 ![Untitled Sketch 2](https://hackmd.io/_uploads/rydFMsKO6.jpg) ![circuit1](https://hackmd.io/_uploads/r1yT_FY_p.jpg) ![circuit2](https://hackmd.io/_uploads/SyJ6OYYuT.jpg) # 安裝鏡頭、感測器、LED ![appearance3](https://hackmd.io/_uploads/BylbMOFdT.jpg) # 建立圖像辨識模型 ### 建立樣本 * 本專案有電量為50-59%,60-69%,...90-99%,100%共6個區間(將6個資料夾分別命名為5X,6X,7X,8X,9X,100) * 拍攝時注意picamera的焦距問題,避免太過模糊,以人眼能夠辨識為標準。 * 每個區間拍700-1000張,大小為256乘256,減少拍攝不必要的部分。 1. 在50-59%拍攝700-1000張照片 2. 平均挑選1/10作為test資料,放入/Data/test/5X;剩下作為train資料,放入/Data/train/5X 3. 其他區間以此類推 以下為圖片範例 ![image_6X_037](https://hackmd.io/_uploads/Sy_zMNFda.jpg) ### 建立訓練環境(在自己的電腦) 1. 安裝anaconda,方便管理環境 2. 建立新環境,並在vscode選擇新建立的環境作為編譯器 3. 在cmd打nvidia-smi,查詢CUDA Version,我的是12.2 ![CUDA_version](https://hackmd.io/_uploads/rkXpV4YO6.png) 4. 在nvidia developer安裝cuda toolkit 12.1,安裝的版本要看前面的CUDA Version,CUDA Version可向下兼容 5. 安裝torch,我安裝的是2.1.1 6. 安裝torchvision,我安裝的是0.16.2 7. 執行訓練模型程式(最後一個block是實際運作的code,可以先不用做,除非你很想測試),程式內有註解要修改的位置 https://github.com/z631200/NCU_112_IOT_Project/blob/main/IOT_Build_algorithm.ipynb 8. 程式會驗證是否安裝成功,並產出模型(savemodel.pth),請將此檔案放到樹莓派 補充: CUDA用來幫助運算,pytorch用來訓練模型 ### 建立使用環境 1. 前往 https://torch.kmtea.eu/whl/stable.html 下載torch、torchvision的whl檔 2. 將下載好的檔案傳到樹莓派 3. 開啟cmd 4. 安裝numpy, 我安裝的版本是1.12.1 5. 安裝torch,我安裝的版本是1.7.1 6. 安裝torchvision,我安裝的版本是0.8.2 * 透過在此網站 https://download.pytorch.org/whl/torch_stable.html 尋找whl檔進行安裝 * 例如要安裝pytorch-2.1.1,並且在cuda 12.1、python版本=3.10(cp310)的情況下,要尋找以下的檔案 * cu121/torch-2.1.1%2Bcu121-cp310-cp310-win_amd64.whl 8. 將剛剛建立的模型放到指定的目錄,並執行訓練模型程式的最後一個block # 處理繼電器、卡式插座 繼電器有3個孔,我希望接受到訊號時才形成通路 * NO:平常屬於開路,皆收到訊號時才會與COM形成通路 * COM:共接點 * NC:平常屬於閉路,會與COM形成通路 卡式插座有分為雙孔及三孔,由於沒買到雙孔的就改用三孔,電線的正負極接地(水)線及火線(不要接到接地線) ![circuit1](https://hackmd.io/_uploads/rJ-O7dKup.jpg) ![circuit2](https://hackmd.io/_uploads/S1quX_Yua.jpg) # Flask, Linebot, ngrok 可以結合以下兩篇看,設定及程式在第一篇,如果看不懂的可以參考第二篇 * https://hackmd.io/@Xiugapurin/S1siaZwht * https://hackmd.io/@fGmzd-CTSGSBPbmj6Sr-nw/BJ06WFw0P # 主程式 https://github.com/z631200/NCU_112_IOT_Project/blob/main/IOT_Project.py # Demo https://www.youtube.com/playlist?list=PLrLN-PtPlLcVdtT51QVq1-TrgFMoVXlc1 # reference * 電腦安裝torch/torchvision: https://blog.csdn.net/qq_45956730/article/details/126600028?fbclid=IwAR3QKKVQ6WMgEjsfjLr4a8obty7NRKgCdXxNQnTW0EixjPNk5n_ykfIqofs * 樹莓派安裝torch/torchvision: https://blog.csdn.net/jiugeshao/article/details/124894455 * linebot on 樹莓派: https://hackmd.io/@fGmzd-CTSGSBPbmj6Sr-nw/BJ06WFw0P, https://hackmd.io/@Xiugapurin/S1siaZwht * 繼電器控制: https://piepie.com.tw/19657/smart-relay-kit * 上傳圖片至imgur: https://ithelp.ithome.com.tw/articles/10241006?sc=rss.iron