Lチカの応用として、信号機の動きを再現してみました。
#準備するもの
- Raspberry Pi 4 Model B
- ブレッドボード(1台)
- ジャンパー線 オスーオス(3本)
- ジャンパー線 オスーメス(6本)
- 330Ω の抵抗(3つ)
- LED(3個)
- 光拡散キャップ(任意)
- タクトスイッチ(1個)
- 信号機もどきのフレーム
記事の最後の部分にあります。ご活用ください。
#1. 歩行者用信号機 をLチカさせる
横断歩道に付いている信号機を再現します。
" RGB LED "を使ってやってみます。
###配線
- ジャンパー線のオスーメスケーブルを”GPIO”の 11番ピン (左の上から6番目)につなげる。
- ブレッドボードに反対側を差し込む。
- 抵抗の片足をジャンパー線と同じ横列に差し込む。
- " RGB LED "(光拡散キャップを着けてから)の赤アノード側を、抵抗の反対の足と同じ横列に差し込む。
< RGB LEDって? >
カラーを表現できる4本足のLEDです。
赤、緑、青を基本に、スイッチを使って紫、黄、水色も出せます。
今回は、" RGB LED "を主に使用しています。
足の長さで役割が変わるので注意してください。
5.ジャンパー線のオスーオスケーブルをRGB LEDのカソードと同じ横列に差し込む。反対側はマイナスレーンに差し込む。
6. 1~5の工程をもう1セット分作る。
なおこのとき、ジャンパー線のオスーメスケーブルを”GPIO”の 13番ピン (左の上から6番目)につなげる。
また、RGB LEDの青アノード側を、抵抗と同じ横列に差し込みます。
7. ジャンパー線のオスーメスケーブルをマイナスレーンに差し込み、反対側は、”GPIO”の 39番ピン (左の下から1番目)につなげる。
8. "信号機もどきのフレーム"の中から"1.歩行者用信号機"を切り、LEDにはめる。
###プログラム
$ sudo nano walk_shingo.py
その中に、以下を記入
import RPi.GPIO as GPIO
import time, sys
GPIO.setmode(GPIO.BCM)
PORT_L = 27 #赤色
PORT_R = 17 #青色
GPIO.setup(PORT_L, GPIO.OUT)
GPIO.setup(PORT_R, GPIO.OUT)
try:
while True:
GPIO.output(PORT_L, GPIO.LOW) #青信号
GPIO.output(PORT_R, GPIO.HIGH)
time.sleep(5)
for i in range(10): #青信号点滅
GPIO.output(PORT_R, GPIO.HIGH)
time.sleep(0.2)
GPIO.output(PORT_R, GPIO.LOW)
time.sleep(0.2)
GPIO.output(PORT_L, GPIO.HIGH) #赤信号
GPIO.output(PORT_R, GPIO.LOW)
time.sleep(5)
except KeyboardInterrupt:
GPIO.cleanup()
sys.exit()
" control " + " X "を押下後、" y "を押してEnterで保存します。
$ python walk_shingo.py
で信号機を作動させます。
終了したい時は、" control " + " C "を押します。
このプログラムでは、青信号5秒 → 青信号点滅0.2秒間隔×10回 → 赤信号5秒を繰り返します。" time.sleep( ) "から、自由にカスタマイズしてください。
#2.押ボタン式の歩行者用信号機 をLチカさせる
ここでは、タクトスイッチを押ボタンに見立てて、押ボタン式の歩行者用信号機を再現してみます。
###配線
上記1の配線にタクトスイッチとジャンパー線をプラスします。
- 1番ピン (左の上の1番目)に、ジャンパー線のオスーメスケーブルを差し込む。反対側をブレッドボードに差し込む。
- タクトスイッチのブレッドボードの真ん中にある溝を挟むようにして差し込む。このとき、足の1本が1番ピンにつながっているジャンパー線と同じ横列に来るようにします。
- 7番ピン (左の上の1番目)に、ジャンパー線のオスーメスケーブルを差し込む。反対側はタクトスイッチのもう片足と同横列に差し込む。
- "信号機もどきのフレーム"の中から"2.歩行者用信号機(押ボタン式)"を切り、LEDにはめる。
###プログラム
$ sudo nano push_shingo.py
その中に、以下を記入
import RPi.GPIO as GPIO
import time, sys
GPIO.setmode(GPIO.BCM)
SWITCH = 4 #タクトスイッチ
PORT_L = 27 #赤色
PORT_R = 17 #青色
GPIO.setup(PORT_L, GPIO.OUT)
GPIO.setup(PORT_R, GPIO.OUT)
GPIO.setup(SWITCH, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
try:
while True:
if (GPIO.input(SWITCH) == GPIO.LOW): #赤信号
GPIO.output(PORT_L, GPIO.LOW)
GPIO.output(PORT_R, GPIO.HIGH)
if (GPIO.input(SWITCH) == GPIO.HIGH): #青信号
GPIO.output(PORT_L, GPIO.LOW)
GPIO.output(PORT_R, GPIO.HIGH)
time.sleep(1)
GPIO.output(PORT_L, GPIO.HIGH)
GPIO.output(PORT_R, GPIO.LOW)
time.sleep(5)
for i in range(10): #青信号点滅
GPIO.output(PORT_L, GPIO.HIGH)
time.sleep(0.2)
GPIO.output(PORT_L, GPIO.LOW)
time.sleep(0.2)
except KeyboardInterrupt:
GPIO.cleanup()
sys.exit()
保存をして…
$ python push_shingo.py
で実行!
基本は赤信号で、スイッチがonになると、青信号5秒 → 青信号点滅0.2秒間隔×10回になります。
また、スイッチを押してから1秒後に信号を変えることで、実機に近い形にしています。
#3.車両用信号機 をLチカさせる
次に、車道についている信号機を再現します。
今回は赤と青色を" RGB LED "で、黄色は市販の黄色LEDを使用しています。
白色LEDにマーカーで色を塗ったりするなどしても良いと思います。
###配線
上記2の配線から、タクトスイッチをはずします。
そこに、もう1セットLEDなどを追加します。
(0. 黄色LEDを使用する場合…
" PORT_R "の方の" RGB LED "を黄色LEDに差し替える。
このとき、LEDの両足の横に1マス分空けておく。)
- 15番ピン (左の上の8番目)に、ジャンパー線のオスーメスケーブルを差し込む。反対側は抵抗と同横列に差し込む。
- 抵抗は、" RGB LED "の青アノードと同横列に差し込みます。
- ジャンパー線のオスーオスケーブルをカソードと同じ横列から、マイナスレーンへ接続する。
- "信号機もどきのフレーム"の中から"3.車両用信号機"を切り、LEDにはめる。
###プログラム
$ sudo nano car_shingo.py
その中に、以下を記入
import RPi.GPIO as GPIO
import time, sys
GPIO.setmode(GPIO.BCM)
PORT_L = 17 #赤色
PORT_C = 27 #黄色
PORT_R = 22 #青色
GPIO.setup(PORT_L, GPIO.OUT)
GPIO.setup(PORT_C, GPIO.OUT)
GPIO.setup(PORT_R, GPIO.OUT)
try:
while True:
GPIO.output(PORT_L, GPIO.LOW) #青信号
GPIO.output(PORT_C, GPIO.LOW)
GPIO.output(PORT_R, GPIO.HIGH)
time.sleep(4)
GPIO.output(PORT_L, GPIO.LOW) #黄信号
GPIO.output(PORT_C, GPIO.HIGH)
GPIO.output(PORT_R, GPIO.LOW)
time.sleep(0.5)
GPIO.output(PORT_L, GPIO.HIGH) #赤信号
GPIO.output(PORT_C, GPIO.LOW)
GPIO.output(PORT_R, GPIO.LOW)
time.sleep(4)
except KeyboardInterrupt:
GPIO.cleanup()
sys.exit()
保存して、下のコマンドで光らせてみます。
$ python car_shingo.py
このプログラムでは、青信号4秒 → 黄信号0.5秒 → 赤信号4秒を繰り返しています。
#もっと応用!
信号機の中には、センサーで車を感知して、動いているものもあります。
ラズパイにセンサーを取り付けて、やってみるのもいいかもしれません。
また、もう少し小さいLEDを使って、ジオラマや鉄道模型の世界の中に組み込んでみると、よりリアルに楽しめそうです。
#信号機もどきのフレーム
信号機っぽく見せるためのフレームです。
A4でページに合わせて印刷をするとちょうど良いサイズになります。
これを使ってよりリアルに楽しんでください。