之前作了 Servo 版本的轉速表,順手就再調整一下程式,改作七段顯示器的版本
市面這個 TM1637 價格很便宜,雖然只是 4Bit ,讓你覺得只能顯示 0~9999
實際上其實是夠了,我在作的過程,覺得字幕超過2個字,就容易覺得眼花
而且十位與個位數一直跳動,會覺得不太舒服,如果要作七段,其實 3 bit 應該就夠了
「萬千百」
羽山作的這個是 「萬千百十」
由於「十」在那跳相當不順眼,我就把 轉速取100餘數,以下的轉速都減去餘數
4 Bit Digit Display 是 TM1637,只有4支接角,實際佔用 Arduino 只需2個 I/O Port
VCC、GND、DIO、CLK
製作七段顯示器版本的過程大概需要注意幾件事:
1、讀到的轉速最好要濾波,比如連續儲存在一個陣列中,每次取用前先排序、取中間的,頭尾差太多的略過
2、由於眼間視覺暫留,顯示到 TM1637 必需作好延遲,每次要顯示先判斷主程式是否走已走一小段時間,如 550ms 以上,才能更新數值,不然眼睛會跟不上數字的跳動,最後都覺得像 8 全亮。
3、TM1637 模組驅動還滿多人開發,我使用 Grove TM1637,他的範例容易理解開發。
接線圖
https://59-126-75-42.hinet-ip.hinet.net/photo/small.php?w_size=1280&compassion=95&file_name=users/shadow/1593969001_1.png&noshow=1
實際運作的狀況
GIT 位置:
https://github.com/shadowjohn/4_Digit_Tachometer
以下是所需要的材料:
- Nodemcu V2 x 1 ( 我個人比較喜歡 V2,因為板子 比 V3 小一些些 )
- 4 Digit Display TM1637
- PC817 x 1 光偶合器
- 12V 轉 5V ( 羽山是用 YwRobot 545043 ),強烈建議用其他的 Buck,體積較小,輸出電流大
- 小麵包板 x 2
- 電阻 220Ω 1/2w
- 電阻 680Ω 1/2w
- 電阻 4.7KΩ 1/2w
- LED 高亮度發光二極體 紅色 x 1
- Micro USB 傳輸線 x 1
當 Grove TM1637 的套件裝好後,可以試跑看看他附的範例
從範例中發現要把數值顯示在 LED 上滿容易的
只是試好久才知道原來 -1 可以讓數值熄滅
數值能熄減才不會越顯示越多,總算可以單獨出現一個 0
練習這篇主要可以學到幾件事:
- 如何將一個長整數,如 RPM 0 顯示到 七段上 我是先轉成字串,然後 LPAD 補齊左邊為 XXX0
然後從左至右就是 str[0] str[1] str[2] str[3] 一個一個顯示,如果值是 'X' 就用 -1 取代
- 讀取轉數時,增加判斷超時的問題,低於 50 rpm ,超時讀不到 pulse 代表熄火
- 字串轉數字,數字轉字串的方法
- 濾除誤判的轉速,利用一個陣列連續收集轉速資料,每次取值時,重新排序這個陣列,取中間平均值,通常數值會比較穩定,不會瞬跳的太嚴重
- 引擎轉速判斷參考:
參考:http://stm32-learning.blogspot.com/2014/05/arduino.html
轉速 100 轉 = 每分鐘 100 轉,每秒 1.67 轉,1轉多少秒呢,一轉 = 0.598802 秒 = 598.802 ms = 598802us
轉速 200 轉 = 每分鐘 200 轉,每秒 3.3 轉,1轉多少秒呢,一轉 = 0.300003 秒 = 300.003 ms = 300003us
轉速 600 轉 = 每分鐘 600 轉,每秒 10 轉,1轉多少秒呢,一轉 = 0.1 秒 = 100.000 ms = 100000us
轉速 1500 轉 = 每分鐘 1500 轉,每秒 25 轉,1轉多少秒呢,一轉 = 0.04 秒 = 40.000 ms = 40000us
轉速 6000 轉 = 每分鐘 6000 轉,每秒 60 轉,1轉多少秒呢,一轉 = 0.01666... 秒 = 16.667 ms = 16667us
轉速 14000 轉 = 每分鐘 14000 轉,每秒 233.3 轉,1轉多少秒呢,一轉 = 0.0042863. 秒 = 4.286 ms = 4286us
轉速 16000 轉 = 每分鐘 16000 轉,每秒 266.6 轉,1轉多少秒呢,一轉 = 0.0037500. 秒 = 3.750 ms = 3750us
其他參考資料:
- 抓取引擎訊號的二種解法:
https://kokoraskostas.blogspot.com/2013/12/arduino-inductive-spark-plug-sensor.html 為了解決 12000rpm 以上的轉速抓取,作了一些語法的改良
- PC817 (光偶合器,如:TLP 621、TLP 421) 的使用方法:
機器人零件指南 / Ohmsha編著; 沈鄉吟譯
http://wyj-learning.blogspot.com/2017/10/arduino-04pc817.html
小老婆機車資訊網,尋找 killPeople 大大分享的 8051 轉速表的文章
- 呼吸燈:
http://web.htjh.tp.edu.tw/B4/106iot/NodeMCU%E4%BD%BF%E7%94%A8%E4%BB%8B%E7%B4%B9.pdf
- Gensou 的 呼吸燈影片教學
https://www.youtube.com/watch?v=27GkMk8ct0s
- stm32-learning [Arduino]霍爾轉速表
http://stm32-learning.blogspot.com/2014/05/arduino.html
- Arduino 陣列排序
https://github.com/emilv/ArduinoSort
- TM1637 套件 Grove 4Digital Display
https://github.com/Seeed-Studio/Grove_4Digital_Display/