2021/09/10
ラズパイのLチカを応用して、カプセルトイの信号機を制御してみました。
利用したカプセルトイ
ミニチュア灯器コレクション、「歩行者用信号灯器 赤信号点灯」バージョンです。
裏にスイッチがあり、赤のみ点灯する仕組みでした。説明書を見ると、「電池は使いきりで交換できません。電池がなくなった場合、普通のマスコットとしてご使用ください。」と記載がありました。確かに電池交換はできなさそうな構造。
信号機の加工
ラズパイのLチカで動作するように加工します。赤しか点灯しないので、緑のLEDを追加します。電池で動作しているのを、ラズパイのGPIOピンから給電して点灯するよう改造します。
カバーを取り外しばらします。中はボタン電池と抵抗、赤色LEDが入ってました。
緑部分をカッターとやすりを使いくりぬきました。型抜きガムみたですね。
赤色LED部分を外します。抵抗は200Ωの物がついてました。GPIOの出力電圧は3.3V。赤色LEDのVfが1.8Vだとすると、(3.3-1.8)÷200Ω=0.0075A(7.5mA)。この200Ωの抵抗はそのまま使うことにしました。
続いて緑色LEDの加工。電流制限抵抗はパーツケースにあった20Ωを使います。
利用したLEDはこちら。3mm砲弾型です。
電池部分に、緑のLEDを配置、電源供給用の3Pコネクタにはんだ付けしました。左からGND(赤緑共通)、赤用、緑用です。
裏側。スイッチ部分の穴を大きくして、3Pコネクタをはめ込みました。
動作確認
電池で点灯試験。緑の色合いがいい感じ。
ラズパイ動作環境
利用したハードウェアとインストールしたOSは以下の通りです。
ハードウェア | Raspberry Pi Zero W |
---|---|
OS | Raspbian Stretch with desktop:November 2018 |
sshでログインできる環境と、GPIOピンを接続するコネクタの準備を予めしておきます。
セットアップの参考
物理結線
利用するピンは、39番、37番、35番の3つです。
下記図のように、39番(GND)を信号機のGNDへ、37番(GPIO26 )を信号機の赤へ、35番(GPIO19)を信号機の緑へそれぞれ接続します。
ジャンパワイヤーで接続したところです。
シェルで動かす
ラズパイにSSHでログインします。
ログイン後、GPIOピンの状態を確認します。
gpio readall
利用するGPIO19とGPIO26の状態が、「IN」の状態になっているのが確認できます。
GPIOとして利用する設定、及びLED側へ出力する設定「OUT」にする設定をします。
echo 19 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio19/direction
echo 26 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio26/direction
点灯させてみます。
//赤を点灯
echo 1 > /sys/class/gpio/gpio26/value
//緑を点灯
echo 1 > /sys/class/gpio/gpio19/value
実際の歩行者用信号灯器を参考に、点滅パターンを考えてみました。下記パターンを無限ループさせます。
while :
do
echo 1 > /sys/class/gpio/gpio19/value
echo 0 > /sys/class/gpio/gpio26/value
sleep 10
echo 0 > /sys/class/gpio/gpio19/value
sleep 0.3
echo 1 > /sys/class/gpio/gpio19/value
sleep 0.3
echo 0 > /sys/class/gpio/gpio19/value
sleep 0.3
echo 1 > /sys/class/gpio/gpio19/value
sleep 0.3
echo 0 > /sys/class/gpio/gpio19/value
sleep 0.3
echo 1 > /sys/class/gpio/gpio19/value
sleep 0.3
echo 0 > /sys/class/gpio/gpio19/value
sleep 0.3
echo 1 > /sys/class/gpio/gpio19/value
sleep 0.3
echo 0 > /sys/class/gpio/gpio19/value
sleep 0.3
echo 1 > /sys/class/gpio/gpio19/value
sleep 0.3
echo 0 > /sys/class/gpio/gpio19/value
sleep 0.3
echo 1 > /sys/class/gpio/gpio26/value
sleep 10
done
パターン通り点滅しました。止める時は「Ctrl」⁺「C」です。
起動時に動作するように設定
ラズパイ起動時に、信号機が動作するようにしてみます。
ホームディレクトリ(/home/pi)にファイル「signal_on.sh」を作成します。
sudo nano signal_on.sh
「Ctrl」⁺「O」で保存、Enterで確定です。
#!/bin/sh
echo 19 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio19/direction
echo 26 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio26/direction
while :
do
echo 1 > /sys/class/gpio/gpio19/value
echo 0 > /sys/class/gpio/gpio26/value
sleep 10
echo 0 > /sys/class/gpio/gpio19/value
sleep 0.3
echo 1 > /sys/class/gpio/gpio19/value
sleep 0.3
echo 0 > /sys/class/gpio/gpio19/value
sleep 0.3
echo 1 > /sys/class/gpio/gpio19/value
sleep 0.3
echo 0 > /sys/class/gpio/gpio19/value
sleep 0.3
echo 1 > /sys/class/gpio/gpio19/value
sleep 0.3
echo 0 > /sys/class/gpio/gpio19/value
sleep 0.3
echo 1 > /sys/class/gpio/gpio19/value
sleep 0.3
echo 0 > /sys/class/gpio/gpio19/value
sleep 0.3
echo 1 > /sys/class/gpio/gpio19/value
sleep 0.3
echo 0 > /sys/class/gpio/gpio19/value
sleep 0.3
echo 1 > /sys/class/gpio/gpio26/value
sleep 10
done
このままでは実行できないので、実行権限(755)を追加します。
sudo chmod 755 signal_on.sh
起動時に「signal_on.sh」が起動するように、/etc/rc.localに下記のように書き込みます。
sudo nano /etc/rc.local
exit 0の前に追記します。
sh /home/pi/signal_on.sh
exit 0
ラズパイを再起動すると、パターン通り点滅します。
割り箸で作った支柱。それらしくなった。
次回、iPadにて遠隔オンオフを試してみます。