Raspberry Piとws2812対応RGB LEDテープの習作

The MagPi マガジン115号にあったLEDテープを音声認識で動作させるプロジェクトを試してみました。これは2年ほど前の88号で取り上げられたもので、115号では更に音声認識でオンオフする仕組みと、Raspberry Pi 4で紹介されています。

たまたま手持ちのLEDテープがあり、その他必要なブレッドボードやワイヤー類もありました。

ただ、音声認識が上手く行きませんでした。

仕方ないので、Pythonコードを修正して、タクトスイッチでオンオフすることにしました。ただのスイッチになってしまった。

LEDテープ以外にも細かなパーツは必要ですが、比較的に簡単な部類の電子工作です。Pythonのプログラムもそこまで難しくありませんでした。

The MagPi マガジン115号71ページに「Christmas lights」とあり、詳細はリンク先となっています。

この記事の主な流れ

必要な物

今回は紹介しているマガジン115号の通り、Raspberry Pi 4で試しました。他のモデルでも良いと思います。

サーキット(回路)を作る関係で、ブレッドボードを始め、電子工作できる部材がないと厳しいです。

特に5Vの電圧でLEDへ単独で送る外部電源が必要となっています。単三電池4本のケースにプラスマイナスのコードが出ているユニットが手元にありました。

電池ボックスの電源

Raspberry Pi のGPIO端子にある5Vを使うより安定するということだと思います。

LEDテープもws281xに対応したneopixelが必要です。手持ちに1m144個の物しかありませんでした。144では多すぎると書いてありました。

一応チラつくけど144個も点灯できましたよ。プログラム内で30個しか光らせないこともできるので、別に30個の製品ではなくても5V対応ならOKです。ただ、LEDテープの長さは1mの物が良いでしょう。5V電圧で光る物が必要です。

細かい点では、ジャンパーワイヤーが数本必要なのと、抵抗(220Ω)が1つ要ります。

ジャンパワイヤー

私は電子工作用がまとめて入っているツールから使いました。(OSOYOO Raspberry Pi 学ぶ電子工作キット)

まとめるとこうなります。

  • Raspberry Pi 4B(他のモデルでも可)
  • LEDテープ(NeoPixel/WS2812/SK6812 互換)1m30/60/144LED等
  • ブレッドボード
  • ジャンパーワイヤー(オス-メス3本、オス-オス2本)
  • タクトスイッチ×1
  • 220Ω抵抗×1
  • 5V電源(使ったのは単三電池4本ケース)
  • USBマイク(音声認識するなら)

音声認識しないなら、マイクも要りませんし、スイッチを使わないならタクトスイッチも抵抗も要りません。電気系は詳しくありませんので、直接繋ぐのはどうだろう? ブレッドボートに外部電源は確かに安定しています。

LEDテープはWS2812、144連、5Vのラインナップは豊富に選べます。

回路図

タクトスイッチ含め、ブレッドボードへ配線した図です。

実際はこんな感じ。

smartlights.pyの変更

参考までに修正したPythonコードを晒しておきます。元々あった音声認識に関する記述を削除して、スイッチのオンオフでLEDがオンオフするように修正しただけです。

LEDカウントは60個にしてあります。144個のテープでも60個だけ光ります。

具体的に言うと、valueに入れていたGoogle Speech Recognitionをやめて、単にFlag判定でオンオフするように変更しました。

オフならLEDを消して、flagはオンに変更するシンプルな物です。

オフにするのは元からある記述の通りで、flag判定を反対にします。(0→1)
オンにするのも元の記述通り、merrychristmas()を実行した後、やはりflag判定を逆にします。

def merrychristmas()で定義されているLEDの光り方を、好みに記述を変えて楽しめます。
もしくは、同じようにdefで定義してあげて、複数の光り方を指定しても良いでしょう。

プログラム自体はキーボードの割り込み(Ctrl + C)で終了します。それまでずっとスイッチの入力を待つだけです。

本来は、スイッチを押して喋ると(「lights on」)認識してオンオフができるというものでした。どうも音声認識が機能しない。USBマイクでテストのコードではOKなんですけどね。

——もしかしてGPIOのピンを変えたらいいのか??

rpi-led-strip-title

必要なソフトウェアやライブラリのインストール

音声認識は以下のライブラリやpyaudioなどを順番にインストールします。

sudo apt update
sudo pip3 install SpeechRecognition

sudo pip3 install pyaudio && sudo apt install flac

sudo apt-get install portaudio19-dev python-all-dev python3-all-dev && sudo pip3 install pyaudio

python3 -m speech_recognition

最後の箇所でUSBマイクを繋いであれば、録音のテストができます。入力の音量が30くらいか無かったので、なかなか取得されませんでした。これを80などに上げるのに、alsamixerを使うと簡単です。(コマンドでalsamixer

その後、以下のLEDであるneopixelを制御するツールをインストールして終わりです。音声認識を使わないなら、以下だけでOKです。

sudo pip3 install rpi_ws281x adafruit-circuitpython-neopixel

サンプルプログラムはgitでクローンして、中にあるneopixel_rpi_simpletest.pyでLEDの点灯テストができます。

git clone https://github.com/adafruit/Adafruit_CircuitPython_NeoPixel

元になったプログラムは、MagPiマガジンにあったsmartlights.pyを使います。このファイルを修正しました。

git clone https://github.com/themagpimag/magpi-issue88

Pythonプログラムの自動実行

再起動後に、Pythonを実行させて、常に待機するよう/etc/profileに登録します。これでRaspberry Piの電源を入れるだけでボタン操作待ちとなります。(最初は点灯)

sudo nano /etc/profile
sudo python3 /home/pi/smartlights.py &&

自動実行は5種類くらい方法があります。ケースバイケースなのですが、今回は自前のプログラムである.pyを起動するだけなので、これでOKです。

音声認識の部分

プログラムコードの変更は、動作確認しただけです。間違っていたらスミマセン。

どうも音声認識はマイクではなく、alsaのエラーもあって上手く出来ませんでした。マイク入力に関してはちょっと調べ方が足りないかも知れません。

MagPiマガジンと同じようにできるとは思います。このあと出来たようであれば、また追記しておきます。

比較的に安価な部品で出来る割に、1mもあればクリスマスツリーだけでなく、アイディアによってはそれなりに映えるかと思います。

シェアする
  • URLをコピーしました!

この記事のコメント(承認後に公開)

コメントする

コメントは日本語で入力してください。名前は表示されます。メールアドレスは表示されません。

CAPTCHA

この記事の主な流れ