本系列文已改編成書「Arduino 自造趣:結合 JavaScript x Vue x Phaser 輕鬆打造個人遊戲機」,本書改用 Vue3 與 TypeScript 全面重構且加上更詳細的說明,
在此感謝 iT 邦幫忙、博碩文化與編輯小 p 的協助,歡迎大家前往購書,鱈魚在此感謝大家 (。・∀・)。
若想 DIY 卻不知道零件去哪裡買的讀者,可以參考此連結 。( •̀ ω •́ )✧
數位 I/O 視窗當然是要有數位訊號相關功能啦。
在 Supported Modes 中,可以看到所有支援功能:
DIGITAL_INPUT (0x00)
DIGITAL_OUTPUT (0x01)
ANALOG_INPUT (0x02)
PWM (0x03)
SERVO (0x04)
SHIFT (0x05)
I2C (0x06)
ONEWIRE (0x07)
STEPPER (0x08)
ENCODER (0x09)
SERIAL (0x0A)
INPUT_PULLUP (0x0B)
SPI (0x0C)
SONAR (0x0D)
TONE (0x0E)
DHT (0x0F)
其中與數位 I/O 相關功能為:
DIGITAL_INPUT (0x00)
DIGITAL_OUTPUT (0x01)
INPUT_PULLUP (0x0B)
以下依序介紹功能。
Uno 的每一隻腳位都可以作為數位輸入使用,也就是每一隻腳位都可以接收 0 至 5V 的電壓。
和輸入相反,Uno 的每一隻腳位也可以作為數位輸出使用,也就是可以輸出 0 至 5V 的電壓。
基本上和數位輸入相同,都是輸入數位訊號,差別在 Uno 會在內部啟用上拉電阻,
甚麼是上拉電阻?我們可以先來談討以下問題。
電子助教:「一定是 0 吧」
鱈魚:「答案是『不一定』。」
電子助教:「怎麼那麼多不一定 (´・ω・`) ... 」
鱈魚:「就像人生一樣嘛」
電子助教:「... 」
當 Uno 腳位為數位輸入時會進入高阻抗狀態,此時如果輸入腳位斷路,沒有任何電壓接入,就會處於「浮接(Floating)」狀態。
這個時候腳位非常容易受到外部磁場干擾,變成像天線一般的存在,為了避免這種情況,就需要「上拉電阻」登場了。
上拉電阻會在開關斷開後,將電壓固定至指定電壓(Uno 為 5V),而下拉電阻則是固定至 GND(0V)。
想閱讀更詳細說明的朋友可以參考以下連結:
浮接 Floating 是甚麼? 電路的不確定因素
終於要來實際接電路了!
首先需要準備以下設備與零件:
三用電表 * 1
麵包板 * 1
按鈕 * 1
推薦使用這種兩隻腳的按鈕。
LED * 1
全名「發光二極體(light-emitting diode)」,功能與燈泡相同,通電就會發亮。
準備甚麼顏色都可以。
電阻 220 歐姆 * 1
用來分配電路中的電壓、電流。
開始連接電路前必須先確認每一個硬體都能正常運作,讓除錯更有效率,如同單元測試的概念一般。
利用三用電表確認按鈕是否能夠正常通導。
如果電表都沒有發出嗶嗶聲,那就換一個按鈕試試看。
利用三用電表確認 LED 是否能夠正常發光。
LED 沒有亮的話,可以試試看:
利用三用電表確認電阻選用是否正確且功能正常。
如果數值都一直顯示 1,可以試試看:
電子助教:「為甚麼量出來和 220 差有點多?」
鱈魚:「因為是便宜貨嘛 ╮(′~‵〞)╭」
電子助教:(憐憫的眼神 (´● ω ●`))
鱈魚:「亮個 LED 用不著精密電阻啦 ⎝(・ω´・⎝),才不是因為我買不起好嘛!」
電阻依其品質有其允許誤差範圍,具體判讀方式可以參考連結:電阻色碼
以下為參考接線方式,可以不用完全相同,只要效果相同即可。
使用 Uno 板子上的 5V 為 +、GND 為 -。
我們希望訊號平常狀態為「低電位(0)」,按下狀態為「高電位(1)」,所以這裡採用下拉電阻。
因為 Uno 啟動內部上拉,所以不需要任何上下拉電阻。
長腳一定要接在與 Pin 連接的位置,因為我們要由 Uno 輸出高電壓推動 LED 燈,所以 Pin 需要連接 LED 的正極。
如果流經 LED 的電流過大,會導致 LED 過熱燒毀,所以需要電阻進行「限流」,不要讓電流過大。
換個比喻,電阻就像是河流中的石頭,可以減緩水流(減少電流),保護水車(LED)不會被衝壞(燒壞)。
其實驅動元件最好的方式應為「透過額外的電晶體(BJT 或 MOSDET 等等)驅動,Uno 只負責提供控制訊號」。
根據官方資料 Uno 所有 I/O 腳位輸出總電流不能超過 200mA,若超過容易造成 Uno 損壞,但為了簡單呈現效果且只有 1 個 LED 也不會超載,所以在此使用腳位驅動。