注釈
こんにちは、SunFounder Raspberry Pi & Arduino & ESP32 Enthusiast Community on Facebookへようこそ!他の愛好家と一緒に、Raspberry Pi、Arduino、ESP32の世界により深く入り込みましょう。
参加する理由
専門家サポート: 購入後の問題や技術的な課題を、コミュニティと私たちのチームの助けを借りて解決します。
学習と共有: ヒントやチュートリアルを交換して、スキルを向上させましょう。
限定プレビュー: 新製品の発表や先行プレビューに早期アクセスできます。
特別割引: 最新製品を特別割引でお楽しみいただけます。
季節限定キャンペーンとプレゼント: プレゼント企画やホリデーキャンペーンに参加しましょう。
👉 一緒に発見し、創造する準備はできましたか? [こちら] をクリックして、今すぐ参加しましょう!
2.8 ポテンショメータ
はじめに
ADC(Analog-to-Digital Converter:アナログ-デジタル変換器)は、アナログ信号をデジタル信号へ変換するための重要な機能です。この実験では、Fusion HAT+ を使用してポテンショメータによる電圧の変化を読み取り、ADCによってデジタル値へ変換します。ポテンショメータは電圧という物理量を調整することができ、その値をADCがデジタル化します。また、この実験ではポテンショメータを使ってLEDの明るさを制御する方法も紹介します。
必要なもの
このプロジェクトに必要なコンポーネントは以下のとおりです。
COMPONENT INTRODUCTION |
PURCHASE LINK |
|---|---|
- |
|
Raspberry Pi |
- |
回路図
以下はこのプロジェクトの回路図です。
配線図
以下の図を参考にして回路を組み立ててください。
サンプルの実行
このチュートリアルで使用するすべてのサンプルコードは ai-lab-kit ディレクトリに含まれています。
以下の手順に従ってサンプルを実行してください。
cd ~/ai-lab-kit/python/
sudo python3 2.8_Potentiometer.py
このPythonスクリプトは、Fusion HAT+ を使用してアナログ入力を読み取り、PWM LEDの明るさを制御します。実行すると、次のように動作します。
Fusion HAT+ がアナログ信号を継続的に読み取り、0〜4095のデジタル値に変換します。
この値は0〜100の範囲にマッピングされ、LEDの明るさ(%)を表します。
PWM LEDの明るさは、この変換された値に応じて動的に調整されます。
ADCの生の値と電圧がリアルタイムでコンソールに表示されます。
Ctrl+Cを押すとプログラムが終了し、LEDは消灯します。
コード
以下はこの実験で使用するPythonコードです。
#!/usr/bin/env python3
from fusion_hat.adc import ADC
from fusion_hat.pwm import PWM
import time
# Set up the potentiometer
pot = ADC(0)
# Initialize a PWM LED
led = PWM(0)
def MAP(x, in_min, in_max, out_min, out_max):
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min
try:
while True:
# Get the current reading from the ADC port
result = pot.read()
voltage = pot.read_voltage()
print('result = %d voltage = %.2f' %(result,voltage))
# Map the ADC value to a range suitable for setting LED brightness
value = MAP(result, 0, 4095, 0, 100)
# Set the LED brightness
led.pulse_width_percent(value)
# Wait for 1 seconds before reading again
time.sleep(0.2)
# Graceful exit when 'Ctrl+C' is pressed
except KeyboardInterrupt:
led.pulse_width_percent(0) # Turn off the LED
コードの解説
インポート:
from fusion_hat.adc import ADC from fusion_hat.pwm import PWM import time
このスクリプトでは、
fusion_hatライブラリを使用してPWM LED制御およびアナログ-デジタル変換を行い、timeモジュールを遅延処理のために使用します。初期化:
# Set up the potentiometer pot = ADC(0) # Initialize a PWM LED led = PWM(0)
スクリプトでは、
A0ピンに接続されたADCと、P0ピンに接続されたPWM LEDを初期化します。MAP関数:
def MAP(x, in_min, in_max, out_min, out_max): return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min
MAP関数は、ある範囲の値を別の範囲へ変換するための関数です。ADCの読み取り値をLEDの明るさに変換するために使用されます。メインループ:
try: while True: # Get the current reading from the ADC port result = pot.read() voltage = pot.read_voltage() print('result = %d voltage = %.2f' %(result,voltage)) # Map the ADC value to a range suitable for setting LED brightness value = MAP(result, 0, 4095, 0, 100) # Set the LED brightness led.pulse_width_percent(value) # Wait for 1 seconds before reading again time.sleep(0.2) # Graceful exit when 'Ctrl+C' is pressed except KeyboardInterrupt: led.pulse_width_percent(0) # Turn off the LED
ADCの値を継続的に読み取ります。
ADC値(0〜4095)をLEDの明るさ(0〜100)へ変換します。
LEDの明るさを調整し、0.2秒待機してから再度読み取ります。
トラブルシューティング
LEDが反応しない
原因: 配線ミスまたはGPIO設定の誤り。
対処方法: LEDが適切な抵抗を介してPWM0に接続されていることを確認してください。
ADC値が常に0になる
原因: センサーの配線が正しくない。
対処方法: センサーの接続を確認し、入力センサーが正常に動作しているか確認してください。
マッピングの問題
原因:
MAP()関数のパラメータ設定が誤っている。対処方法: 入力範囲(
in_min,in_max)がADC範囲(0〜4095)に一致していること、出力範囲(out_min,out_max)がLEDの明るさ制御(0〜100)に適していることを確認してください。
拡張アイデア
しきい値ベースの動作: ADC値のしきい値に基づいてLEDをオン/オフする機能を追加できます。
if result > 2048: led.on() else: led.off()
まとめ
この実験では、Fusion HAT+ とポテンショメータを使用してLEDの明るさを制御する方法を学びました。アナログ-デジタル変換とPWM制御の基本を理解することで、より複雑なインタラクティブシステムの開発へ応用することができます。