[Micro Bit 系列] 實際玩玩一些 IO 裝置吧
在之前的幾篇文章中,主要紀錄了與外部 IO 裝置無關的介紹,今天是時候要深入玩玩一些與外部 IO 裝置相關的應用了,你問我什麼是 IO ? IO 就是 Input/Output 的縮寫,也就是跟機器外部交流資訊的東西,就像是跟外界打招呼和傾聽外界的回應一樣。
以下是幾個我將要紀錄的 IO 應用
- LED
- 紅外線控制LED燈
- 風扇模組 L9110
- 人體紅外線感應模組 HC-SR501
- 聲音模組 Keyestudio KS0035
好啦,在開始實際操作之前,得先來個腦補一下 IO 的接角的連接方式,也就是 Microbit 的腳位說明。以下內容是摘錄自【認識microbit接腳】和【Input/Output Pins】這兩個網站哦,因為我怕我自己會忘記,所以特地記錄下來。
Microbit 腳位介紹
- micro:bit 板子上有25個大大小小的接點,中文翻作腳位或是針腳。
- 其中有五個大腳位,上面有個大孔:文字標示0、1、2、3V、GND。
- 另外是20個小腳位可以用擴展板來運用他們。
- The pins are your board’s way to communicate with external devices connected to it. There are 19 pins for your disposal, numbered 0-16 and 19-20. Pins 17 and 18 are not available.
micro:bit 的腳位:P3、P4、P6、P7、P9、P10 是與板子上的 LED 燈陣列共用,所以平常沒事最好別用它們。P5 與 P11 分別和按鈕 A/B 共用,P19 與 P20 是 I2C 腳位。所以正常下能直接使用的腳位就是 P0-P2、P8、P12–16。(若要使用 SPI,就會用到 P13–15。) micro:bit 腳位的輸出電壓為 3.3V,最大輸出電流 5 mA(因此就算不用電阻,直接接 LED 也絕不會燒壞)。3V 腳位可輸出的電流至多 90 mA,這對一般外接元件而言夠用了,但要拿來驅動馬達之類的裝置就會比較困難。
- 大腳位 : 我們可以用鱷魚夾或是電線直接連接這五個大腳位。
- 注意千萬不要直接把3V與GND直接連線,會燒壞micro:bit的。
- 前三個大腳位稱為GPIO是最常被使用的腳位
- 簡單說:0、1、2可以當作類比或數位訊號的輸入,也可以當作輸出,是萬用的腳位。
- 要控制它的角度的micro:bit來說,連接控制用的腳位需要有PWM能力,也就是以數位信號模擬類比信號的技術。micro:bit只有pin3, pin4, 以及pin10這三支接腳具備此能力。
- 引腳8:專用GPIO,用於發送和感應數字信號。
- 引腳12:保留此GPIO引腳以提供對可訪問性的支持。
- 引腳13:GPIO,通常用於3線串行外設接口(SPI)總線的串行時鐘(SCK)信號。
- 引腳14:GPIO,通常用於SPI總線的主機輸入從機輸出(MISO)信號。
- 引腳15:GPIO,通常用於SPI總線的主輸出從輸入(MOSI)信號。
- 引腳16:專用GPIO(通常也用於SPI'片選'功能)。
LED 應用
本篇有一些應用使用 MicroPython 來進行實驗,你可以到這邊下載 MuEditor,操作方式可以參考 Mu Editor 用戶手冊。
LED 簡單範例
一個簡單的範例,數字 0~9 循環並顯示在 LED 面板上,另外當數字為奇數時發送紅外線訊號。
from microbit import *
count = 0
while True:
# 顯示數字
display.show(count)
count += 1
if count > 9:
count = 0
# Pin 0 接紅外線發送器正極(Output)
# GND 接紅外線負級
if count % 2 == 1:
# 高電位
pin0.write_digital(1)
else:
# 低電位
pin0.write_digital(0)
sleep(200)
print(count)
LED 並聯接法
一般來說,大多數LED照明都採用串並聯組合,不然串聯的電壓會不夠。
- 紅燈腳位
- [+] : Microbit GPIO 輸出
- [-] : Microbit GND
- 綠燈腳位(1)
- [+] : 紅燈 [+] 另外拉一條線串過來
- [-] : Microbit GND
- 綠燈腳位(2)
- 直接跟紅燈插在同一個麵包板區域
控制 LED 燈
有四顆 LED 燈,其中一顆為七彩迷紅燈,要讓程式控制非 LED 燈的時候可以定期閃爍
- 藍 : pin0
- 綠 : pin1
- 紅 : pin2
- 七彩 : pin8 (請注意 pin5 保留給 ButtonA,上次不小心插錯導致無反應)
- GND : 所有 LED 的 - 都接到 GND
參考程式碼
from microbit import *
# 設定 LED 燈開
pin0.write_digital(1) # 藍
pin1.write_digital(1) # 綠
pin2.write_digital(1) # 紅
pin8.write_digital(1) # 七彩
count = 0
while True:
value = count % 2
display.show(value)
if value == 0:
# 控制燈亮度(按)
pin0.write_analog(200)
pin1.write_analog(200)
pin2.write_analog(200)
else:
# 控制燈亮度(亮)
pin0.write_analog(1023)
pin1.write_analog(1023)
pin2.write_analog(1023)
count += 1
if count > 9:
count = 0
sleep(1000)
紅外線控制 LED 燈
紅外線感測接收器 HX1838B
紅外線遙控器
- 很可惜現在還沒找到 MicroPython 的實作方式,暫時先使用 MakeCode 來完成,但須注意遙控長的樣子跟程式對應的不太一致,請自行比照位置(不要看上面的數字)。
- 請先安裝擴充套件,開啟 MakeCode 的擴展功能,搜尋「ir」,從搜尋結果中選擇「makerbit-ir-receiver」項目,點選加入紅外線接收積木。
執行實驗說明
按第一顆遙控器顯示藍燈,第二顆遙控器顯示綠燈
- 接收器腳位
- 「-」 : GND
- 中間 : 3.3V
- 「S」: Pin 0
- LED 燈腳位
- 藍燈 : Pin 1
- 綠燈 : Pin 2
- GND : 所有 LED - 接 GND
參考程式碼
風扇模組 L9110
- L9110驅動,可控制正反轉,產品尺寸:502615mm(不含螺旋槳)
- 螺旋槳直徑:75mm
- 工作電壓:5V(但我用的是 Microbit,改接 3V)
執行實驗說明
參考程式碼
from microbit import *
# 相同方向停止
pin0.write_digital(0)
pin1.write_digital(0)
# 左轉風往前
# pin0.write_digital(0)
# pin1.write_digital(1)
# 右轉風往後
# pin0.write_digital(1)
# pin1.write_digital(0)
人體紅外線感應模組 HC-SR501
- 工作電壓:默認工作電壓DC 4.5~20V (但我用的是 Microbit,改接 3V)
執行實驗說明
人體感應器感應到人的時候亮紅燈,沒有人則時顯示綠燈
- 紅外線腳位
- 左邊 : VCC 接 3V
- 中間 : Pin 0
- 右邊 : GND
- 紅燈腳位 : Pin 1
- 綠燈腳位 : Pin 2
參考程式碼
from microbit import *
while True:
if pin0.read_digital():
# 感應到有人
pin1.write_digital(1)
pin2.write_digital(0)
display.show(Image.DIAMOND_SMALL)
else:
# 無人
pin1.write_digital(0)
pin2.write_digital(1)
display.clear()
sleep(100)
聲音模組 Keyestudio KS0035
- 電源電壓:3.3V至5V
- 端口:類比
- 尺寸:30 * 20mm
執行實驗說明
當檢測到聲音時,燈會亮,否則LED會熄滅,外部聲音越大,類比值越大。
- 聲音模組腳位
- VCC : 接 3V
- 訊號線 : Pin 0
- GND : GND
- 紅燈腳位 : Pin 1
- 本功能未確認,因為聲音的感測器很怪,還沒時間研究
留言
張貼留言
您好,我是 Lawrence,這裡是我的開發筆記的網誌,如果你對我的文章有任何疑問或者有錯誤的話,歡迎留言讓我知道。