[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

紅外線發射管也稱紅外線發射二極管,它是將電能轉換成38kHz紅外光,請注意電源正負極接反立即燒毀

紅外線遙控器

  • 很可惜現在還沒找到 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)

執行實驗說明

  • VCC : 3V
  • GND : GND
  • INA : Pin 0
  • INB : Pin 1

參考程式碼

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
    • 本功能未確認,因為聲音的感測器很怪,還沒時間研究




留言