複数LEDをパッケージ化した部品を使う:Christmas Tree Programmable Kit
LEDを点滅させる最も基本的な方法は、LEDとジャンパーワイヤをブレッドボードに差し込んで、ラズパイとつなげて・・・という風に自分で回路を作るやり方です(ワークショップでやった作業そのものです)。実はこれに加えて、もう少し手軽な方法もあります。複数のLEDをひとつにまとめてラズパイに簡単に接続できる部品がたくさん売られているので、それを使うやり方です。回路を作る手間、抵抗を使う手間が省けることが多いです。
ここでは、The Pi Hut社(旧ModMyPi社)のChristmas Tree Programmable Kitを使ってみます。これは小さなクリスマス・ツリーで、赤、緑、白のLED(合計11個)をひとつにまとめた部品です(以下写真参照。ラズパイはケースに入っています)。アメリカ国内では、PiShop.usで注文できます(AmazonやAdafruitで売りに出ているのは見たことがありません。見かけた方がおられたら教えてください)。
接続方法
この部品(ツリー)の下の部分には合計40個の穴があいています。これをラズパイのGPIOのピン40本に差し込みます。差し込む向きが重要です。以下の写真のように差し込んでください。
この部品をラズパイに差し込むと、11個のLEDそれぞれが特定のGPIO番号に割り当てられます。そして、そのGPIOに電流を流すと対応するLEDが点灯します。なお、この部品をGPIOとつなぐ時に抵抗(LED保護抵抗)を使う必要はありません。この商品には抵抗があらかじめ組み込まれています。
以下に、どのLEDがどのGPIOピンに接続されているか、そしてそれが何色かをまとめます。一番最初の写真(LEDが点灯している写真)と見比べてください。
- ツリーの頂上部分
星の部分のLED | |
---|---|
色 | 白 |
GPIO番号 | 12 |
- ツリーの頂上の下の1列目(LED2個)
左側のLED | 右側のLED | |
---|---|---|
色 | 赤 | 緑 |
GPIO番号 | 23 | 24 |
- 2列目(LED4個)
一番左のLED | 左から2番目のLED | 左から3番目のLED | 一番右のLED | |
---|---|---|---|---|
色 | 赤 | 緑 | 赤 | 緑 |
GPIO番号 | 19 | 20 | 21 | 22 |
- 3列目(LED4個)
一番左のLED | 左から2番目のLED | 左から3番目のLED | 一番右のLED | |
---|---|---|---|---|
色 | 緑 | 赤 | 緑 | 赤 |
GPIO番号 | 11 | 16 | 17 | 18 |
プログラミング
上記の表を見ながら、自分が点灯させたいLEDのGPIO番号を確認し、そのピンに電流を流せば点灯します。電流を止めれば消えます。電流の流し方、止め方は、ワークショップでやった方法と全く同じ要領です。
まずはstar-on-off.pyを使って、LEDをひとつ点滅させます。このプログラムは、GPIOの12番を使ってツリーの頂上部分(星の部分)にあるLEDをONにし、3秒後にOFFにします。
これ以降の作業をやるには、その前にまず「複数のLEDを点滅させる(複数のGPIOピンを使う)」を済ませておくのをお勧めします。
まずは、ツリーの頂上のLEDを複数回点滅させます(star-on-off-repeated.py)。forループを使って5回点滅させています。次に、forループを無限ループに置きかえて、このLEDをずっと(無限回)点滅させます(star-on-off-infinite-loop.py)。点滅を止める(プログラムの実行を止める)にはThonnyの中で「Control-C」してください。forループ、無限ループ、Control-Cについては「複数のLEDを点滅させる(複数のGPIOピンを使う)」参照。
次に、11個すべてのLEDを点滅させます(all-on-off.py)。このプログラムでは、個々のLEDを変数として表して、それぞれに対応するGPIO番号を格納しています。bottomLeftは一番下の列の左のLED、そのとなりがbottomMidLeft、一番右がbottomRightです。
bottomLeft, bottomMidLeft, bottomMidRight, bottomRight = (11, 16, 17, 18)
このように、bottomLeftに11、bottomMidLeftに16、bottomRightに17を格納しています。このような書き方をすると、複数の変数に複数の値を格納するのが一行でできます。以下のようにしても同じことはできますが、プログラムが短くなって読みやすくなる利点があります。
bottomLeft = 11
bottomMidLeft = 16
bottomMidRight = 17
bottomRight = 18
次に、一番下の列にある4つのLEDのGPIO番号を左から順番に並べてリストにして、そのリストをbottomLedsという変数に格納しています。
bottomLeds = [bottomLeft, bottomMidLeft, bottomMidRight, bottomRight]
同様に、真ん中の列の(4つの)LEDのGPIO番号をリストにしてmiddleLedsという変数に格納し、一番上の列の(2つの)LEDのGPIO番号をリストにしてtopLedsという変数に格納しています。そして、全てのLEDのGPIO番号をallLedsという変数に格納しています。
以下、残りのプログラムの説明です。順次試してみて、自分なりの改良をしてみてください。
プログラム名 | プログラムがやること |
---|---|
on-sequence.py | LEDをひとつづつ順番に点灯して行って、最後にすべてのLEDを点灯させる |
on-off-sequence.py | LEDの点灯、消灯をひとつづつ順番にくり返す |
alternate-green-red.py | 緑と赤のLEDを交互に点滅させる |
random1.py | 緑のLEDの中からひとつランダムに選び、赤のLEDの中からひとつランダムに選び、選ばれたLEDを点灯させる。ランダムに選ぶ方法については「複数のLEDを点滅させる(複数のGPIOピンを使う)」参照。 |
random2.py | 上・中・下の各列からひとつLEDをランダムに選んで、選んばれたLEDを点灯させる。 |
random3.py | 上・中・下の各列からひとつLEDをランダムに選んで、選んばれたLEDを点灯させる。これを5回くり返したら、すべてのLEDを点灯させる。 |