---
# System prepended metadata

title: 智慧充電箱

---

# 智慧充電箱
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


