注釈
こんにちは、SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Communityへようこそ!Facebook上で、仲間と一緒にRaspberry Pi、Arduino、ESP32をさらに深く探求しましょう。
なぜ参加するのか?
専門的なサポート:購入後の問題や技術的な課題をコミュニティやチームの助けを借りて解決。
学びと共有:スキルを向上させるためのヒントやチュートリアルを交換。
限定プレビュー:新製品発表や予告編に早期アクセス。
特別割引:最新製品の特別割引を楽しむ。
フェスティブプロモーションとプレゼント:プレゼントやホリデープロモーションに参加。
👉 私たちと一緒に探索と創造を始める準備はできましたか?[ここ]をクリックして、今すぐ参加しましょう!
レッスン09: ジョイスティックモジュール
注釈
Raspberry Piにはアナログ入力機能がないため、アナログ信号を処理するには PCF8591 ADC DACコンバータモジュール のようなモジュールが必要です。
このレッスンでは、PCF8591 ADCを使用してジョイスティックモジュールとインターフェースする方法を学びます。ジョイスティックのアナログ出力からX軸とY軸の位置を読み取り、ボタンの押下を検出できるようになります。このセットアップにより、Raspberry Piでアナログ入力とデジタル入力の両方を処理する方法が示されます。
必要なコンポーネント
このプロジェクトでは、以下のコンポーネントが必要です。
一式揃ったキットを購入すると便利です。リンクはこちら:
Name |
ITEMS IN THIS KIT |
LINK |
---|---|---|
Universal Maker Sensor Kit |
94 |
以下のリンクから個別に購入することもできます。
Component Introduction |
Purchase Link |
---|---|
Raspberry Pi 5 |
- |
配線
注釈
このプロジェクトでは、PCF8591モジュールのAIN0ピンを使用しています。このピンは、ジャンパキャップを通してモジュールのポテンショメータに接続されています。 データ干渉を防ぐため、ジャンパキャップをモジュールから外してください。 詳細については、PCF8591モジュールの schematic を参照してください。
コード
import PCF8591 as ADC # Import ADC module for analog input
import time # Import time module for creating delay
from gpiozero import Button # Import Button for button input
ADC.setup(0x48) # Set up PCF8591 module at I2C address 0x48
button = Button(17) # Initialize button connected to GPIO 17
try:
while True: # Loop continuously
print("x:", ADC.read(0)) # Read analog value from channel AIN0
print("y:", ADC.read(1)) # Read analog value from channel AIN1
print("sw:", button.is_active) # Check if button is pressed
time.sleep(0.2) # Wait for 0.2 seconds before next loop
except KeyboardInterrupt:
print("Exit") # End program on keyboard interrupt
コード解析
ライブラリのインポート:
スクリプトは、プロジェクトに必要なライブラリをインポートすることから始まります。
import PCF8591 as ADC # Import ADC module for analog input import time # Import time module for creating delay from gpiozero import Button # Import Button for button input
PCF8591モジュールのセットアップ:
PCF8591モジュールはI2Cアドレス0x48に設定されており、Raspberry Piと通信できるようにします。
ADC.setup(0x48) # Set up PCF8591 module at I2C address 0x48
ボタンの初期化:
ボタンはRaspberry PiのGPIOピン17に接続され、初期化されます。
button = Button(17) # Initialize button connected to GPIO 17
メインループ:
スクリプトの主な部分は無限ループで、PCF8591の2つのチャネル(AIN0とAIN1)からアナログ値を継続的に読み取り、ボタンが押されているかどうかを確認します。
AIN0
とAIN1
はジョイスティックのX軸とY軸のアナログピンです。try: while True: # Loop continuously print("x:", ADC.read(0)) # Read analog value from channel AIN0 print("y:", ADC.read(1)) # Read analog value from channel AIN1 print("sw:", button.is_active) # Check if button is pressed time.sleep(0.2) # Wait for 0.2 seconds before next loop
割り込み処理:
スクリプトはキーボード割り込み(CTRL+C)を使用して正常に終了できます。これは、Pythonで無限ループを停止する一般的な方法です。
except KeyboardInterrupt: print("Exit") # End program on keyboard interrupt