- 必要な材料:
- ADC0804シングルチャネル8ビットADCモジュール:
- 回路図と説明:
- Raspberry Piのプログラミング:
- Raspberry Piを使用してLCDにフレックスセンサー値を表示する:
Raspberry Pi は、電子エンジニアや愛好家向けに設計されたARMアーキテクチャプロセッサベースのボードです。PIは、現在最も信頼されているプロジェクト開発プラットフォームの1つです。より高速なプロセッサ速度と1GBのRAMを備えたPIは、画像処理やモノのインターネットなどの多くの注目を集めるプロジェクトに使用できます。PIで実行できるクールなことはたくさんありますが、悲しい機能の1つは、ADCモジュールが組み込まれていないことです。
唯一、Raspberry Piをセンサーとインターフェースできる場合にのみ、実際のパラメーターについて知り、それと対話することができます。そこにあるセンサーのほとんどはアナログセンサーであるため、これらのセンサーをインターフェースするためにRaspberryPiで外部ADCモジュールICを使用することを学ぶ必要があります。このプロジェクトでは、FlexセンサーをRaspberry Piとインターフェイスさせ、その値をLCD画面に表示する方法を学習します。
必要な材料:
- ラズベリーパイ(任意のモデル)
- ADC0804 IC
- 16 * 2LCDディスプレイ
- フレックスセンサー
- 抵抗器とコンデンサ
- ブレッドボードまたはパフォーマンスボード。
ADC0804シングルチャネル8ビットADCモジュール:
先に進む前に、このADC0804 ICと、これをラズベリーパイで使用する方法について学びましょう。 ADC0804はシングルチャネル8ビットICです。つまり、単一のADC値を読み取り、それを8ビットのデジタルデータにマッピングできます。これらの8ビットデジタルデータはRaspberryPiで読み取ることができるため、2 ^ 8は256であるため、値は0〜255になります。以下のICのピン配列に示すように、ピンDB0〜DB7はこれらのデジタルを読み取るために使用されます。値。
ここでもう1つ重要なことは、 ADC0804は5V で動作するため、5Vロジック信号で出力を提供することです。 8ピン出力(8ビットを表す)では、すべてのピンが論理「1」を表す+ 5V出力を提供します。したがって、問題はPIロジックが+ 3.3vであるため、PIの+ 3.3VGPIOピンに+ 5Vロジックを与えることができないことです。 PIのGPIOピンに+ 5Vを与えると、ボードが損傷します。
したがって、ロジックレベルを+ 5Vから降圧するには、分圧回路を使用します。分圧回路については以前に説明しましたが、さらに明確にするために調べます。2つの抵抗を使用して、+ 5Vロジックを2 * 2.5Vロジックに分割します。したがって、除算後、RaspberryPiに+ 2.5vロジックを与えます。したがって、ロジック「1」がADC0804によって提示される場合は常に、PIGPIOピンに+ 5Vではなく+ 2.5Vが表示されます。ADCの詳細については、ADC0804の概要をご覧ください。
以下は、パフォーマンスボード上に構築したADC0804を使用したADCモジュール の写真です。
回路図と説明:
FlexSensorをRaspberryPiとインターフェースするための完全な回路図を以下に示します。その説明は以下のとおりです。
このラズベリーパイフレックスセンサー 回路は、多くのワイヤーで少し複雑に見えるかもしれませんが、よく見ると、ほとんどのワイヤーはLCDと8ビットデータピンからラズベリーパイに直接接続されています。次の表は、接続の確立と検証に役立ちます。
ピン名 |
ラズベリーピン番号 |
Raspberry PiGPIO名 |
LCD対 |
ピン4 |
接地 |
LCD Vdd |
ピン6 |
Vcc(+ 5V) |
LCDVee |
ピン4 |
接地 |
LCD Rs |
ピン38 |
GPIO 20 |
LCD RW |
ピン39 |
接地 |
LCD E |
ピン40 |
GPIO 21 |
LCD D4 |
ピン3 |
GPIO 2 |
LCD D5 |
ピン5 |
GPIO 3 |
LCD D6 |
ピン7 |
GPIO 4 |
LCD D7 |
ピン11 |
GPIO 17 |
ADC0804 Vcc |
ピン2 |
Vcc(+ 5V) |
ADC0804 B0 |
ピン19(5.1K経由) |
GPIO 10 |
ADC0804 B1 |
ピン21(5.1K経由) |
GPIO 9 |
ADC0804 B2 |
ピン23(5.1K経由) |
GPIO 11 |
ADC0804 B3 |
ピン29(5.1K経由) |
GPIO 5 |
ADC0804 B4 |
ピン31(5.1K経由) |
GPIO 6 |
ADC0804 B5 |
ピン33(5.1K経由) |
GPIO 13 |
ADC0804 B6 |
ピン35(5.1K経由) |
GPIO 19 |
ADC0804 B7 |
ピン37(5.1K経由) |
GPIO 26 |
ADC0804 WR / INTR |
ピン15 |
GPIO 22 |
次の図を使用して、ラズベリーのピン番号を確認できます。
すべてのADCモジュールと同様に、ADC0804 ICも動作するためにクロック信号を必要とします。幸い、このICには内部クロックソースがあるため、回路に示すように、RC回路をCLK入力ピンとCLKRピンに追加するだけです。10Kと105pfの値を使用しましたが、1uf、0.1uf、0.01ufなどの任意の値を使用することもできます。
次に、Flexセンサーを接続するために、 100K抵抗を使用した分圧回路を使用しました。フレックスセンサーが曲がると、その両端の抵抗が変化し、抵抗の両端の電位降下も変化します。この低下はADC0804ICによって測定され、それに応じて8ビットデータが生成されます。
フレックスセンサーに関連する他のプロジェクトを確認してください:
- AVRマイクロコントローラーとインターフェースするフレックスセンサー
- Flexセンサーを使用したArduinoベースのAngryBirdゲームコントローラー
- フレックスセンサーによるサーボモーター制御
- Arduinoを使用して指をタップしてトーンを生成する
Raspberry Piのプログラミング:
接続が完了したら、Raspberry Piを使用してこれらの8ビットのステータスを読み取り、それらを使用できるように10進数に変換する必要があります。同じことを行い、結果の値をLCD画面に表示するためのプログラムは、このページの最後にあります。さらに、コードは以下の小さなジャンクに説明されています。
LCDをPiとインターフェースするためのLCDライブラリが必要です。このために、shubhamによって開発されたライブラリを使用します。これは、16 * 2LCDディスプレイを4線式モードのPiとインターフェースするのに役立ちます。また、時間とPiGPIOピンを利用するためのライブラリも必要です。
注 :lcd.pyはここからダウンロードし、このプログラムが保存されているのと同じディレクトリに配置する必要があります。そうして初めて、コードがコンパイルされます。
import lcd#shubham @ electro-passion.comによるLCDライブラリのインポートimporttime#インポート時間import RPi.GPIO as GPIO#GPIOはGPIOとしてのみ参照されます
LCDのピン定義は以下に示すように、変数に割り当てられます。これらの番号はGPIOピン番号であり、実際のピン番号ではないことに注意してください。上記の表を使用して、GPIO番号とピン番号を比較できます。配列バイナリにはすべてのデータピン番号が含まれ、配列ビットにはすべてのGPIOピンの結果の値が格納されます。
#LCDピン定義D4 = 2 D5 = 3 D6 = 4 D7 = 17 RS = 20 EN = 21バイナリ=(10,9,11,5,6,13,19,26)#ピン番号の配列はDB0に接続します- DB7ビット=#8ビットデータの結果値
ここで、入力ピンと出力ピンを定義する必要があります。7つのデータピンが入力ピンになり、トリガーピン(RSTおよびINTR)が出力ピンになります。データシートに従って特定の時間に出力ピンをHighにトリガーした場合にのみ、入力ピンから8ビットのデータ値を読み取ることができます。バイナリ配列でバイナリピンを宣言したので、以下に示すように、宣言に for ループを使用できます。
バイナリのバイナリの場合:GPIO.setup(binary、GPIO.IN)#すべてのバイナリピンは入力ピンです#トリガーピンGPIO.setup(22、GPIO.OUT)#WRおよびINTRピンは出力されます
これで、LCDライブラリコマンドを使用して、LCDモジュールを初期化し、以下に示すような小さなイントロメッセージを表示できます。
mylcd = lcd.lcd()mylcd.begin(D4、D5、D6、D7、RS、EN)#Intro Message mylcd.Print( "Flex Sensor with")mylcd.setCursor(2,1)mylcd.Print( "Raspberry Pi ")time.sleep(2)mylcd.clear()
無限の while ループ内で、バイナリ値の読み取りを開始し、それらを10進数に変換して、LCDで結果を更新します。ADC値を読み取る前に前述したように、ADC変換をアクティブにするには、トリガーピンを特定の時間ハイにする必要があります。これは、次の行を使用して実行されます。
GPIO.output(22、1)#Turn ON Trigger time.sleep(0.1)GPIO.output(22、0)#Turn OFF Trigger
ここで、8データピンを読み取り、ビット配列の結果を更新する必要があります。これを行うには、 for ループを使用して、各入力ピンをTrueとFalseと比較 し ます。trueの場合、それぞれのビット配列は1として作成され、それ以外の場合は0として作成されます。これにより、すべての8ビットデータが読み取られた値のそれぞれ0および1になります。
#入力ピンを読み取り、range(8)のiのビット配列の結果を更新します:if(GPIO.input(binarys)== True):bits = 1 if(GPIO.input(binarys)== False):bits = 0
ビット配列を更新したら、この配列を10進値に変換する必要があります。これは、2進化10進数への変換に他なりません。8ビットのバイナリデータの場合、2 ^ 8は256です。したがって、0から255までの10進データを取得します。Pythonでは、演算子「**」を使用して任意の値の累乗を求めます。 ビット はMSBで始まるので、2 ^(7桁)で乗算します。このようにして、すべてのバイナリ値を10進データに変換し、それをLCDに表示できます。
#range(8)のiのビット配列を使用して10進値を計算します:decimal = decimal +(bits *(2 **(7-i)))
10進値がわかれば、電圧値を簡単に計算できます。19.63を掛けるだけです。8ビット5VADCの場合、各ビットは19.3ミリボルトに類似しているためです。結果として得られる電圧値は、ADC0804ICのピンVin +とVin-の間に現れた電圧の値です。
#電圧値の計算電圧= 10進数* 19.63 * 0.001#1単位は19.3mV
電圧の値を使用して、フレックスセンサーがどのように曲げられたか、どの方向に曲げられたかを判断できます。以下の行では、読み取り電圧値を所定の電圧値と比較して、LCD画面上のFlexセンサーの位置を示しています。
#センサーの電圧と表示ステータスを比較mylcd.setCursor(1,1)if(Voltage> 3.8):mylcd.Print( "Bent Forward")elif(Voltage <3.5):mylcd.Print( "Bent Backward")else: mylcd.Print( "Stable")
同様に、電圧値を使用して、RaspberryPiに実行させたいタスクを実行できます。
Raspberry Piを使用してLCDにフレックスセンサー値を表示する:
プロジェクトの作業は非常に簡単です。ただし、lcd.pyヘッダーファイルをダウンロードして、現在のプログラムが存在するのと同じディレクトリに配置していることを確認してください。次に、ブレッドボードまたはパフォーマンスボードを使用して回路図に接続が表示されるようにし、Piで以下のプログラムを実行すると、動作するはずです。設定は次のようになります。
示されているように、LCDには10進値、電圧値、センサー位置が表示されます。センサーを前後に曲げるだけで、電圧と小数値が変化するのを確認できます。ステータステキストも表示されます。任意のセンサーを接続して、センサーの両端の電圧が変化することに気付くことができます。
チュートリアルの完全な動作は、以下のビデオで見つけることができます。あなたがプロジェクトを理解し、似たようなものを作るのを楽しんだことを願っています。ご不明な点がございましたら、コメント欄またはフォーラムにご記入ください。できる限りお答えいたします。