複数LEDをパッケージ化した部品を使う:Halloween Pumpkin Programmable Kit
LEDを点滅させる最も基本的な方法は、LEDとジャンパーワイヤをブレッドボードに差し込んで、ラズパイとつなげて・・・という風に自分で回路を作るやり方です(ワークショップでやった作業そのものです)。実はこれに加えて、もう少し手軽な方法もあります。複数のLEDをひとつにまとめてラズパイに簡単に接続できる部品がたくさん売られているので、それを使うやり方です。回路を作る手間、抵抗を使う手間が省けることが多いです。
ここでは、The PiHut社のHalloween Pumpkin Programmable Kit(PiShop.us、PiShop.ca)を使ってみます。これは、パンプキンの形をしたボードの上に12個のLEDが並んでいる部品です。この部品では各LEDの色は固定です。
halloween-connector.jpg
接続方法
この部品(ツリー)の下の部分には合計40個の穴があいています。これをラズパイのGPIOのピン40本に差し込みます。
この部品をラズパイに差し込むときには、差し込む向きが重要です。以下の写真のように差し込んでください。
この部品をラズパイに差し込むと、12個のLEDそれぞれが特定のGPIO番号に割り当てられます。そして、そのGPIOに電流を流すと対応するLEDが点灯します。なお、この部品をGPIOとつなぐ時に抵抗(LED保護抵抗)を使う必要はありません。この商品には抵抗があらかじめ組み込まれています。
以下に、どのLEDがどのGPIOピンに接続されているか、そしてそれが何色かをまとめます。一番最初の写真(LEDが点灯している写真)と見比べてください。
- パンプキンの目
左目 | 右目 | |
---|---|---|
色 | 緑 | 緑 |
GPIO番号 | 12 | 6 |
- パンプキン左側のLED
一番下 | 下から2番目 | 真ん中 | 上から2番目 | 一番上 | |
---|---|---|---|---|---|
色 | 赤 | 赤 | 赤 | 赤 | 赤 |
GPIO番号 | 18 | 17 | 16 | 13 | 24 |
- パンプキン右側のLED
一番下 | 下から2番目 | 真ん中 | 上から2番目 | 一番上 | |
---|---|---|---|---|---|
色 | 赤 | 赤 | 赤 | 赤 | 赤 |
GPIO番号 | 19 | 20 | 21 | 22 | 23 |
プログラミング
上記の表を見ながら、自分が点灯させたいLEDのGPIO番号を確認し、そのピンに電流を流せば点灯します。電流を止めれば消えます。電流の流し方、止め方は、ワークショップでやった方法と全く同じ要領です。
まずは、all-on.pyを使ってすべてのLEDを点灯させます。このプログラムでは、個々のLEDを変数として表して、それぞれに対応するGPIO番号を格納しています。leftBottomは左側一番下、leftMidBottomは左側の下から2番目、leftMiddleは左側真ん中、leftMidTopは左側の上から2番目、leftTopは左側の一番上のLEDです。
leftBottom, leftMidBottom, leftMiddle, leftMidTop, leftTop = (18, 17, 16, 13, 24)
このように、leftBottomに18、leftMidBottomに17、leftMiddleに16、 leftMidTopに13、leftTopに24を入れています。このような書き方をすると、複数の変数に複数の値を格納するのが一行でできます。以下のようにしても同じことはできますが、プログラムが短くなって読みやすくなる利点があります。
leftBottom = 18
leftMidBottom = 17
leftMiddle = 16
leftMidTop = 13
leftTop = 24
次に、左側にある5つのLEDのGPIO番号を並べてリストにして、そのリストをleftという変数に入れています。
left =[leftBottom, leftMidBottom, leftMiddle, leftMidTop, leftTop]
同様に、右側の(5つの)LEDのGPIO番号をリストにしてrightという変数に入れ、目の部分の(2つの)LEDのGPIO番号をリストにしてeyesという変数に入れています。そして、すべてのLEDのGPIO番号をallという変数に入れています。
all = left + right + eyes
left + right + eyes
の部分はリストの足し算で、これはリストの要素をまとめて1つのリスト(all)に入れることを意味します。
ここまでの準備をもとに、以下の3行でLEDを点滅させます。
GPIO.output(all, GPIO.HIGH)
time.sleep(3)
GPIO.output(all, GPIO.LOW)
すべてのLEDを点灯させ、プログラムの実行を3秒止めて、その後LEDを消灯させています。結果として、すべてのLEDが3秒間点灯します。
for led in all:
GPIO.output(led, GPIO.HIGH)
time.sleep(1)
GPIO.output(led, GPIO.LOW)
次のプログラムがone-by-one.pyです。LEDをひとつづつ点灯させては消灯させる、というのを繰り返します。これは以下のようにループを動かすことで実現しています。
interval = 1
for led in all:
GPIO.output(led, GPIO.HIGH)
time.sleep(interval)
GPIO.output(led, GPIO.LOW)