Raspberry Piは学習に最適なプラットフォームですが、アナログ電子部品の使用はそのままでは不可能です。そのため、アナログジョイスティックからポテンショメータまで、あらゆる部品をデフォルトで使用できません。しかし、幸いなことに高価なチップを追加することでこの問題は解決します。MCP3008 ADC(アナログ-デジタルコンバータ)は、アナログ電子部品をRaspberry Piの40個のGPIOピンに接続するために使用され、あらゆる種類の追加コンポーネントを使用できるようになります。
アナログ-デジタル変換を活用し、楽しいライトショーを作る方法をご紹介するために、3つのポテンショメータを読み取って、それらのダイヤルでAdafruit NeoPixelの色を制御するプロジェクトを作成しました。アナログ入力を使ってRaspberry Piでカラフルなライトショーを作る方法をご紹介します。
- Raspberry Pi。どのモデルでも使用可能
- 8GB以上のマイクロSDカードにRaspberry Pi OSを搭載
- MCP3008アナログからデジタル(A/D)コンバータは、アナログ信号を読み取り、Piが理解できるように変換するために使用されます。
- Adafruit NeoPixels WS2812B LED。Adafruitの12ピクセルLEDリングを使用しました。
- はんだ付け器具。これはジャンパー線をNeoPixelにはんだ付けするためにのみ必要です。
- 400ポイントの大型ブレッドボード。回路を組み立てるのに使用
- 3x 10kポテンショメータ。これらは入力として使用されるダイヤルです。
- オス-メスジャンパーワイヤー6本
- 13本のオス-オスジャンパーワイヤー
アナログ入力でRaspberry Piライトショーを作る方法
1. MCP3008をブレッドボードに挿入し、ピンが中央の切り欠きをまたぐようにします。チップの切り欠きはブレッドボードの短い方の端を向くようにします。MCP3008の16ピンは、左下隅の1番ピンから始まり、右下隅の8番ピンまで数えます。9番ピンは右上隅にあり、最後に左上隅の16番ピンです。
2.メス-オスのジャンパー線を使って、 MCP3008をRaspberry PiのGPIOに接続します。まず、メス-オスのジャンパー線を使って、3.3VピンとGNDピンをブレッドボードの+と-のレールに接続します。次に、オス-オスのジャンパー線を使って、レールをMCP3008の電源ピンとGNDピンに接続します。
3.メス - オスのジャンパー ワイヤを使用して、 MCP3008 を Raspberry Pi に接続します。
スワイプして水平にスクロールします
配線色 | MCP3008 | ラズベリーパイ GPIO |
---|---|---|
ピンク | 10 | GPIO 08 |
紫 | 11 | GPIO 10 |
オレンジ | 12 | GPIO 09 |
緑 | 13 | GPIO 11 |
4.ポテンショメータを挿入し、オス-オスのジャンパー線を使用して MCP3008 に接続します。
Tom's Hardware の最高のニュースと詳細なレビューをあなたの受信箱に直接お届けします。
5. Adafruit NeoPixelに3本のワイヤー(PWR、GND、In)をはんだ付けします。PWRはブレッドボードの+レールに、GNDは-レールに接続します。「IN」はRaspberry PiのGPIO 18に接続します。
6. /boot/config.txt ファイルを編集します。
sudo nano /boot/config.txt
7.ファイルの最後に次の行を追加してください。これにより、GPIO が NeoPixel と通信できるようになりますが、ヘッドホンジャックからのオーディオ出力は無効になります。完了したら、Ctrl + X、Y、Enter キーを押して終了します。変更を有効にするには、Raspberry Pi を再起動してください。
hdmi_force_hotplug=1
8. NeoPixels 用の Python 3 モジュールをインストールします。
sudo pip3 install rpi_ws281x adafruit-circuitpython-neopixel
9. プログラミング メニューにあるThonny IDE を開きます。
10.次の行を追加して、コードが NeoPixels で動作し、コードを一時停止し、MCP3008 ボードを使用できるようにするモジュールをインポートします。
import board
import neopixel
from time import sleep
from gpiozero import MCP3008
11. MCP3008 によって出力された生の値を格納する3 つの変数 r、g、b を作成します。
r = MCP3008(channel=0)
g = MCP3008(channel=1)
b = MCP3008(channel=2)
12. 「pixels」というオブジェクトを作成します。これにより、PythonコードがNeoPixelを操作できるようになります。このオブジェクトには、使用中のGPIOピン(D18)と、チェーン/リング内のNeoPixelの数(16)を渡します。
pixels = neopixel.NeoPixel(board.D18, 16)
13.コードを継続的に実行するwhile True: ループを作成します。
while True:
14.ポテンショメータからの戻り値を格納する3つの変数(red、green、blue)を作成します。この値は0.0~1.0の範囲で、NeoPixelが理解できる値に変換するために255を掛けます。
red = round(r.value * 255) green= round(g.value * 255) blue = round(b.value * 255)
15.返された値を Python シェルに出力します。
print(red,green,blue)
16.リング内の16 個のピクセルをすべて更新して現在のカラー ミックスを表示する for ループを作成します。
for i in range(16): pixels[i] = (red, green, blue)
17.コードに 0.1 秒の一時停止を追加します。
sleep(0.1)
18.コードを analog-inputs.py として保存します。
19.ターミナルで sudo を使用してコードを実行します。
sudo python3 analog-inputs.py
20.ポテンショメータを回して NeoPixel の色を制御します。
完全なコードリスト
ここにこのプロジェクトで使用されたすべてのコードがあります。
import board
import neopixel
from time import sleep
from gpiozero import MCP3008 r = MCP3008(channel=0)
g = MCP3008(channel=1)
b = MCP3008(channel=2) pixels = neopixel.NeoPixel(board.D18, 16) while True: red = round(r.value * 255) green= round(g.value * 255) blue = round(b.value * 255) print(red,green,blue) for i in range(16): pixels[i] = (red, green, blue) sleep(0.1)
詳細: Raspberry Piチュートリアル
詳細:最高のRaspberry Pi HAT
詳細: Raspberry Piに最適なmicroSDカード