跳轉到內容

維基少年:樹莓派/樹莓派樂高®聖誕樹LED燈

來自華夏公益教科書,開放的書籍,開放的世界

教程由 Andrew Oakley - 公共領域提供
2017年11月 www.cotswoldjam.org

LEGO® 是樂高公司集團的商標,樂高公司集團不支援、授權或認可本教程或 Cotswold Raspberry Jam。

發光二極體 (LED)

[編輯 | 編輯原始碼]

發光二極體 (LED) 有一條短腳和一條長腳。如果你摸一下邊緣,你還會發現一個扁平的邊緣。短腳和扁平邊緣始終連線到負極 (接地)。

  • ×1 紅色LED
  • ×1 藍色LED
  • ×1 黃色LED

電阻可以以任何方式連線。較低值 (較低歐姆) 電阻將允許更多電流透過,並使 LED 更亮;較高的值將允許更少的電流透過,並使 LED 更暗。我們使用的是 270 歐姆電阻,但 220–470 歐姆之間的任何值都可以使用。

  • ×3 270 歐姆 (紅紫棕) 電阻。

你需要跳線來連線 LED 到電阻,然後連線到樹莓派。

  • ×6 10釐米母對母跳線
  • ×3 20釐米母對母跳線

樂高®積木

[編輯 | 編輯原始碼]

最後,你需要兩個樂高®積木來製作聖誕樹。

連線 LED 和電阻

[編輯 | 編輯原始碼]

取兩根短 (10釐米) 母對母線,將電阻放在它們之間。

重複三次,這樣你就有了三根長線,中間有一個電阻。

接下來,將你剛剛製作的短電阻線連線到每個 LED 的負極 (短) 腳。

最後,將長 (20釐米) 母對母線連線到每個 LED 的正極 (長) 腳。

彎曲 LED 的腳,這樣你就可以將它們安裝在樂高®松樹周圍。

連線到樹莓派

[編輯 | 編輯原始碼]

將帶有電阻的線連線到任何 GND (接地,負極) 引腳。這些引腳在右側的圖中以黑色顯示。

接下來,將正極線 (沒有電阻的長線) 連線到以下引腳。GPIO 14 (引腳 8) 在樹莓派的左上角第四個引腳,當乙太網埠位於右側時。

  • 紅色LED - GPIO 14 (引腳 8)
  • 藍色LED - GPIO 15 (引腳 10)
  • 黃色LED - GPIO 18 (引腳 12)

不要擔心線的顏色。關注 LED 的顏色。GPIO 代表通用輸入輸出。這些引腳有許多用途。

在你的樹莓派桌面上,點選樹莓派選單 (右上角),然後選擇程式設計,並點選 Python 3 (IDLE)。

點選檔案選單,開啟。雙擊 python 資料夾 (你可能需要滾動到最右邊才能找到它)。雙擊 lego-xmas 資料夾。選擇 lego-xmas1.py 並點選開啟。

一個新的視窗將開啟。在新視窗中,選擇執行選單,並點選執行模組。紅色 LED 應該短暫亮起,然後關閉。讓我們看一下這個程式。

from gpiozero import LED
from time import sleep
red=LED(14)
red.on()
sleep(0.5)

這個程式在做什麼?

[編輯 | 編輯原始碼]
from gpiozero import LED
from time import sleep

計算機並不知道如何自己完成所有事情;它需要學習。這兩行程式碼教計算機有關 LED 和等待 (sleep) 的知識。儲存這些知識的地方叫做庫。我們從 gpiozero 庫匯入 LED 命令,從 time 庫匯入 sleep 命令。

red=LED(14)
red.on()

我們必須告訴計算機紅色 LED 連線到哪個 GPIO 引腳,然後我們告訴它開啟 LED。

sleep(0.5)

這告訴計算機等待 (sleep) 半秒鐘。

程式結束時,它會自動關閉 LED。此自動關閉功能是 gpiozero 庫的一部分。

依次點亮所有LED

[編輯 | 編輯原始碼]

透過點選 lego-xmas1.py 視窗,然後選擇檔案選單,關閉來關閉程式。

從主視窗開啟 lego-xmas2.py 程式,然後使用執行選單,執行模組來執行它。

這個程式依次點亮所有 LED,每個 LED 之間等待半秒鐘。

透過按住 CTRL 鍵並按下 C 來停止程式。

這個程式在做什麼?

[編輯 | 編輯原始碼]

注意我們如何定義紅色、藍色和黃色 LED 的引腳號,以及我們如何按順序開啟和關閉它們。

from gpiozero import LED
from time import sleep

red=LED(14)
blue=LED(15)
yellow=LED(18)

while True:
  blue.off()
  yellow.off()
  red.on()
  sleep(0.5)

  red.off()
  blue.on()
  sleep(0.5)

  blue.off()
  yellow.on()
  sleep(0.5)

while 命令重複一個部分。我們說 while True 表示“永遠”。

注意 while 命令下面的命令如何從左邊縮排幾個空格。這叫做塊。縮排讓計算機知道哪些命令應該作為 while 迴圈的一部分重複執行。

還要注意 while True: 如何以冒號 : 結尾。

冒號讓計算機知道它應該接下來期待一個程式碼塊。

嘗試改變順序。交換一些on()off()命令。

改變睡眠時長,使其更長或更短。嘗試為不同的LED新增額外的on()off()sleep命令。

建立你自己的驚人的聖誕節燈光序列!

高階附加功能

[編輯 | 編輯原始碼]

程式lego-xmas3.py展示瞭如何使用pulse命令。注意lego-xmas3.py如何使用PWMLED庫,而不是僅僅使用簡單的LED庫。

from gpiozero import PWMLED

pulse命令更難使用,因為你必須根據你的sleep時間,精確控制不同顏色LED的脈衝。

 red.pulse(0.3,0.3,4,True)
 blue.pulse(0.4,0.4,3,True)
 yellow.pulse(0.6,0.6,2,True)
 sleep(2.4)

程式包含一些註釋,解釋了脈衝命令的工作原理。

教師準備

[編輯 | 編輯原始碼]

http://www.cotswoldjam.org/downloads/2017-11下載

要將lego-xmas*.py程式檔案新增到Raspbian,請進入終端

cd
mkdir -p python
cd python
curl "http://www.cotswoldjam.org/downloads/2017-11/lego-xmas.zip" -O
unzip lego-xmas.zip
exit

請注意,-O是大寫字母O,而不是零。更多教程請訪問http://www.cotswoldjam.org/tutorials

Cjam-lego-xmas.pdf

[編輯 | 編輯原始碼]

本教程的原始PDF檔案在維基共享資源:Cjam-lego-xmas.pdf

lego-xmas1.py

[編輯 | 編輯原始碼]
from gpiozero import LED
from time import sleep

red=LED(14)
red.on()
sleep(0.5)

lego-xmas2.py

[編輯 | 編輯原始碼]
from gpiozero import LED
from time import sleep

red=LED(14)
blue=LED(15)
yellow=LED(18)

while True:
  blue.off()
  yellow.off()
  red.on()
  sleep(0.5)

  red.off()
  blue.on()
  sleep(0.5)

  blue.off()
  yellow.on()
  sleep(0.5)

lego-xmas3.py

[編輯 | 編輯原始碼]
from gpiozero import PWMLED
from time import sleep

red=PWMLED(14)
blue=PWMLED(15)
yellow=PWMLED(18)

while True:
  red.pulse(0.3,0.3,4,True)
  blue.pulse(0.4,0.4,3,True)
  yellow.pulse(0.6,0.6,2,True)
  sleep(2.4)

# PWMLEDs have a pulse command. The parameters are:
# 1 Fade in time, in seconds
# 2 Fade out time, in seconds
# 3 Number of times to pulse
# 4 Background - True to continue to the next command without waiting
#                False to wait until finished
#
# For example:
# red.pulse(0.3,0.3,4,True)
# * Fade in for 0.3 seconds
# * Fade out for 0.3 seconds
# * Repeat 4 times
# * Continue with the next command without waiting
# 4x0.3=1.2 seconds to fade in
# 4x0.3=1.2 seconds to fade out
# 1.2+1.2=2.4 seconds total
#
# Find out more about PWMLED commands
# http://gpiozero.readthedocs.io/en/stable/api_output.html#pwmled
#
# Learn about PWM Pulse Width Modulation
# https://learn.sparkfun.com/tutorials/pulse-width-modulation
華夏公益教科書