扯遠了回到標題, 為什麼要搞電錶, 而且是無線電錶?
其實是最近的電費實在是太貴, 冷氣沒有開整天, 兩個月就跑了一千度, 為了瞭解用電狀況, 初期我將 米家智能插座 插在懷疑用電量高的 洗衣機、飲水機上.
後來我覺得有些電器就是該開, 省不了的話, 單獨看一個電器的用電量是沒有幫助的. 應該要從總量來看, 人不在家的時候不必要的電器是不是吃了太多的電量? 如此就必須監控電錶的變化.
不斷的記錄電錶的變化也是個辦法, 但這實在是太原始了吧! 如果等 智慧電錶 也是個辦法, 不過是要等多久?
這時候只好發揮科技宅的科技能力, 自動電錶度數辨識系統!
很幸運的是已經有前人開發了類似的程式碼:
analog-gauge-reader
當然不能直接套用, 但是整個系統概念開發都是從這個sample延伸的.
整個硬體拆成以下部分
- 平台
- 影像擷取
- 數據傳輸
而續航力至少一天的原因是, 電錶在地下室沒有插座可以供電
, 就算有鐵定也是公用電, 隨便使用是會被別人白眼的.
所以每天出門前去更換電池是還可行的(雖然還是有點麻煩), 運算力要足夠, 可以擷取影像, 又不會太耗電, 看來Raspberry Pi Zero W是最適合的了!
, 就算有鐵定也是公用電, 隨便使用是會被別人白眼的.
所以每天出門前去更換電池是還可行的(雖然還是有點麻煩), 運算力要足夠, 可以擷取影像, 又不會太耗電, 看來Raspberry Pi Zero W是最適合的了!
搭配行動電源10000mAh/額定6200mAh/5V, 耗電量100mAh 理論上應該可以供電 62h, 大約是兩天半.
影像擷取
Raspberry Pi Zero搭配Pi Zero專用的迷你相機, 整個體積相當的小.
很可惜迷你相機的視角不夠廣, 而且對焦距離不夠近, 所以只能拍攝到兩格的度數, 且相當模糊.
數據的部分, 毫無懸念就是Lora了, 家裡的智慧瓦斯電錶也是Lora抄錶. 之前買過的Lora模組, 測試可以從B3傳輸到12F, 完全沒有問題
而整個系統大概分為以下幾個部分:
- 電錶影像擷取
- 度數辨識
- 度數傳送
電錶影像截取
影像擷取前人樹都種得很好了, 利用picamera就可以在Python很簡單的控制camera:
但是有一個坑要注意, 要是picamera拍下來不想存成檔案, 再用opencv函式讀回來這樣沒效率的事情, 就要用BytesIO的stream去接picamera的影像, 然後再轉到numpy, 再轉到opencv (opencv只吃numpy).
from io import BytesIO
from picamera import PiCamera
import cv2
import numpy as np
import time
# Create the in-memory stream
stream = BytesIO()
camera = PiCamera()
camera.start_preview()
camera.capture(stream, format='png')
# "Rewind" the stream to the beginning so we can read its content
stream.seek(0)
file_bytes = np.asarray(bytearray(stream.read()), dtype=np.uint8)
img = cv2.imdecode(file_bytes, cv2.IMREAD_COLOR)
format = time.strftime("%Y-%m-%d_%H:%M:%S", time.localtime())
filename = format + '.png'cv2.imwrite(filename, img)
此外, 還要安裝picamera[array] (非常重要!)
pip install "picamera[array]"
度數辨識
度數辨識的部分是本文重點, 但是我打算留到下篇文章再好好介紹:P