家族と一緒に!電子工作でイルミネーションの中身を知ろう
街中でキラキラ光るイルミネーション.
実はその中では,たくさんの LED が 1つずつ順番に,あるいは 複雑なパターンで 光るように細かく制御されています.
今回のワークショップでは,その “イルミネーションの中身” をのぞき見してみましょう.
LED をたくさん光らせるためには,工夫が必要な場合があります.
そこで活躍するのが シフトレジスタ(74HC595) という電子部品です.
これを使うことで,8個のLED を個別に制御できるようになります.
このシフトレジスタを使って「LED が流れるように光るイルミネーション」を自分の手で作りながら,身近なライト製品がどのように動いているのかを楽しく学んでいきます.
対象
小学校3∼6年生
小学生のお子様をお持ちの保護者様
中学校で「科学部」や「情報系の部活」をお持ちの先生方
完成品
道具・材料
材料
| 品名 | 数量 | 購入先 |
|---|---|---|
| 5mm 赤色LED | 6個 | 赤色LED - 秋月 |
| 5mm 緑色LED | 6個 | 黄緑色LED - 秋月 |
| 5mm 電球色LED | 4個 | 電球色LED - 秋月 |
| 抵抗器(330Ω) | 16個 | 抵抗器 - 秋月 |
| コンデンサ | 1個 | コンデンサ 100μF |
| シフトレジスタ(74HC595) | 1個 | 74HC595 - 秋月 |
| ブレッドボード | 1個 | ブレッドボード - 秋月 |
| ジャンパワイヤ | 1セット | ジャンパワイヤ - 秋月 |
| Arduino Uno | 1個 | Arduino Uno(互換機) - Amazon |
| 電源 | 1個 | ACアダプタ 5V2A - 秋月 |
| DCジャック | 1個 | DCジャック - 秋月 |
回路図・配線図
プログラム例
#define PIN_SER 8;
#define PIN_LATCH 9;
#define PIN_CLK 10;
byte pattern_arr[] = {
// ---- 左 → 右 ----
B00000001,
B00000010,
B00000100,
B00001000,
B00010000,
B00100000,
B01000000,
B10000000,
// ---- 右 → 左 ----
B01000000,
B00100000,
B00010000,
B00001000,
B00000100,
B00000010
};
void setup() {
pinMode( PIN_SER, OUTPUT );
pinMode( PIN_LATCH, OUTPUT );
pinMode( PIN_CLK, OUTPUT );
}
void loop() {
for ( int i=0; i<sizeof(pattern_arr); i++ ) {
digitalWrite( PIN_LATCH, LOW );
shiftOut( PIN_SER, PIN_CLK, LSBFIRST, pattern_arr[i] );
digitalWrite( PIN_LATCH, HIGH );
delay(100);
}
}
そのままコピペすれば動きます.
ArduinoIDEのインストールからプログラムを動かすまでの流れは「Arduino 初心者」や「Arduino 始め方」などで検索してください.(参考: Arduino基礎入門!電子工作初心者のためのまとめ(前編) )
以降は解説になります.
arduino の基本構文は リファレンス を参照してください.
解説が必要な forの中身 のみ解説します.
forの中身
for ( int i=0; i<sizeof(pattern_arr); i++ ) {
・・・
}
sizeof(pattern_arr) とは pattern_arr という配列が 何byte であるかを出力します.
今回であれば,sizeof(pattern_arr) = 14 です.
応用先(LED個別制御が使われている製品・技術)
Arduino と 74HC595 を使って行った LEDを1つずつ制御する技術は,実は多くの製品や設備で使われています.今回の工作で体験した「LEDを順番に光らせる」「任意パターンで光らせる」といった考え方は,そのまま実際の製品技術につながっています.
以下に,代表的な応用例を紹介します.
① 電光掲示板(LEDディスプレイ)
駅やバス停,商業施設にある 電光掲示板は,
LED を 1 つずつ制御し,
・文字
・絵
・動くアニメーション
を表示しています.
仕組みとしては 74HC595 のような シフトレジスタや大規模には LEDマトリクスドライバを多数連結して実現しています.
② デジタル時計・家電の数字表示(7セグメント表示)
電子レンジ・炊飯器・時計などにある 数字表示は,7個の LED を組み合わせた「7セグメント」という方式で,各LEDを ON/OFF して数字を作っています.
今回の LED 制御の応用そのものです.
③ RGBイルミネーション(ゲーミングデバイス・クリスマスライト)
PCのゲーミングキーボードやマウス,イルミネーションライトに使われている 流れる光(レインボー効果) は,LED を高速で制御して作っています.
特に個別に色も制御できる「アドレッサブルLED(WS2812B など)」は内部でシフトレジスタのような制御を行っています.
④ 車のテールランプ・ウインカー
近年の車にある 流れるウインカー(シーケンシャルウインカー) は,
まさに今回のサンプルプログラムと同じ発想で,
左から右へ光る
明るさを変える
時間差で点灯させる
といった制御を行っています.
⑤ ロボットのステータスランプ
工場のロボットや家庭用ロボットの LED も,状態に応じて個別に制御されています.
・エラーモード → 点滅
・待機 → ゆっくり明滅
・動作中 → 流れるLED
など,複雑な点灯方式は LED 制御の応用です.
⑥ パチンコ・アミューズメント機器(演出ライト)
アミューズメント機器の派手なライト演出も,数百〜数千個の LED を制御して作られています.
高速なシフトレジスタ制御や PWM 制御を組み合わせてダイナミックな動きを実現しています.
⑦ フルカラーLEDディスプレイ(大型ビジョン)
街の大型ビジョン,ライブ会場の LED パネル等は,縦 × 横 の LED を個別に毎秒数十〜数百回更新し,映像として見せるという仕組みで動いています.
技術的には今回扱った「1個のLEDをON/OFFする制御」を膨大な数へ拡張したものです.
まとめ
今回の LED 工作で触れた
・LEDを個別に制御する
・パターンを作って順番に光らせる
・配列で制御を管理する
・シフトレジスタで LED 数を増やす
といった技術は,
実際の 電光掲示板・家電・イルミネーション・自動車・ロボット など
さまざまな製品で応用されています.
LEDの技術に限らず,自分の身の回りのモノには様々な技術が使われています.それらを調べて,中身を知り,簡単なもので再現する.理解する楽しみを感じていただければ幸いです.