Raspberry Piチュートリアルシリーズでは、RaspberryPiとインターフェイスするすべての基本コンポーネントについてほぼ説明しました。Raspberry Piを使用したことがあるかどうかに関係なく、誰でもこのシリーズから簡単に学ぶことができるように、すべてのチュートリアルを簡単かつ詳細に説明しました。そして、すべてのチュートリアルを完了すると、RaspberryPiを使用していくつかの高レベルプロジェクトを構築できるようになります。
したがって、ここでは、前のチュートリアルに基づいて最初のアプリケーションを設計しています。最初の基本的なアプリケーションは、 RaspberryPiによる読書室の温度です。そして、あなたはコンピュータ上で測定値を監視することができます。
前のチュートリアルで説明したように、RaspberryPiの内部にはADCチャネルはありません。したがって、アナログセンサーをインターフェースする場合は、ADC変換ユニットが必要です。また、チュートリアルの1つで、ADC0804チップをRaspberry Piに接続して、アナログ値を読み取りました。したがって、この室温温度計を構築する前に、それを通過してください。
ADC0804とRaspberryPi:
ADC0804は、アナログ信号を8ビットのデジタルデータに変換するように設計されたチップです。このチップは、ADCの人気シリーズの1つです。これは8ビットの変換単位であるため、値または0〜255の値があります。このチップの分解能は、選択した基準電圧に基づいて変化します。これについては後で詳しく説明します。以下はADC0804の ピン配置です:
ここでもう1つ重要なことは、 ADC0804は5V で動作するため、5Vロジック信号で出力を提供することです。8ピン出力(8ビットを表す)では、すべてのピンが論理「1」を表す+ 5V出力を提供します。したがって、問題はPIロジックが+ 3.3vであるため、PIの+ 3.3VGPIOピンに+ 5Vロジックを与えることができないことです。PIのGPIOピンに+ 5Vを与えると、ボードが損傷します。
したがって、ロジックレベルを+ 5Vから降圧するには、分圧回路を使用します。分圧回路については以前に説明しましたが、さらに明確にするために調べます。2つの抵抗を使用して、+ 5Vロジックを2 * 2.5Vロジックに分割します。したがって、除算後、PIに+ 2.5vロジックを与えます。したがって、ロジック「1」がADC0804によって提示される場合は常に、PIGPIOピンに+ 5Vではなく+ 2.5Vが表示されます。
LM35温度センサー:
部屋の温度を読み取るには、センサーが必要です。ここでは、LM35温度センサーを使用します。温度は通常、「摂氏」または「華氏」で測定されます。「LM35」センサーは摂氏で出力を提供します。
図に示すように、LM35は3ピントランジスタのようなデバイスです。ピンには、、
PIN1 = Vcc-電源(+ 5Vに接続)
PIN2 =信号または出力(ADCチップに接続)
PIN3 =アース(アースに接続)
このセンサーは、温度に基づいて出力に可変電圧を提供します。温度が+ 1℃上昇するごとに、出力ピンの電圧が+ 10mV高くなります。したがって、温度が0°Cの場合、センサーの出力は0Vになり、温度が10°Cの場合、センサーの出力は+ 100mVになり、温度が25°Cの場合、センサーの出力は+ 250mVになります。
必要なコンポーネント:
ここでは 、Raspbian JessieOSでRaspberryPi2モデルB を使用しています。ハードウェアとソフトウェアの基本的な要件はすべて前に説明しましたが、必要なものを除いて、RaspberryPiの概要で調べることができます。
- 接続ピン
- 1KΩ抵抗(17個)
- 10Kポット
- 0.1µFコンデンサ
- 100µFコンデンサ
- 1000µFコンデンサ
- ADC0804 IC
- LM35温度センサー
- ブレッドボード
回路と動作の説明:
ラズベリーをADC0804およびLM35に接続するために行われる接続を以下の回路図に示します。
LM35出力には多くの電圧変動があります。そのため、図に示すように、100uFのコンデンサを使用して出力を平滑化します。
ADCには常に多くのノイズがあり、このノイズはパフォーマンスに大きな影響を与える可能性があるため、ノイズフィルタリングには0.1uFのコンデンサを使用します 。これがないと、出力に多くの変動が生じます。
チップはRC(抵抗-コンデンサ)発振器クロックで動作します。回路図に示すように、C2とR20はクロックを形成します。ここで覚えておくべき重要なことは、ADC変換率を上げるためにコンデンサC2を低い値に変更できることです。ただし、速度が上がると精度が低下します。したがって、アプリケーションでより高い精度が必要な場合は、より高い値のコンデンサを選択し、より高速の場合は、より低い値のコンデンサを選択します。
前に述べたように、LM35は摂氏ごとに+ 10mVを提供します。LM35で測定できる最高温度は摂氏150度です。したがって、LM35出力端子で最大1.5Vになります。ただし、ADC0804のデフォルトのリファレンス電圧は+ 5Vです。したがって、その基準値を使用すると、デジタル出力範囲の最大(5 / 1.5)34%を使用するため、出力の解像度は低くなります。
幸い、ADC0804には、上のピン図に示すように、調整可能なVrefピン(PIN9)があります。したがって、チップのVrefを+ 2Vに設定します。Vref + 2Vを設定するには、PIN9に+ 1V(VREF / 2)の電圧を供給する必要があります。ここでは、10Kポットを使用してPIN9の電圧を+ 1Vに調整しています。正確な電圧を取得するには、電圧計を使用してください。
以前、LM35温度センサーを使用してArduinoとAVRマイクロコントローラーで室温を読み取りました。Arduinoを使用した湿度と温度の測定も確認してください
プログラミングの説明:
回路図に従ってすべてが接続されたら、PIをオンにしてPYHTONでプログラムを作成できます。
PYHTONプログラムで使用するいくつかのコマンドについて説明します。
ライブラリからGPIOファイルをインポートします。以下の関数を使用すると、PIのGPIOピンをプログラムできます。また、「GPIO」の名前を「IO」に変更しているため、プログラムでGPIOピンを参照する場合は常に、「IO」という単語を使用します。
RPi.GPIOをIOとしてインポートします
時々、私たちが使おうとしているGPIOピンが他の機能をしているかもしれません。その場合、プログラムの実行中に警告が表示されます。以下のコマンドは、PIに警告を無視して、プログラムを続行するように指示します。
IO.setwarnings(False)
PIのGPIOピンは、ボード上のピン番号または機能番号のいずれかで参照できます。ボード上の「PIN29」のように「GPIO5」です。したがって、ここでは、ピンを「29」または「5」で表すことにします。
IO.setmode(IO.BCM)
入力ピンとして8ピンを設定しています。これらのピンで8ビットのADCデータを検出します。
IO.setup(4、IO.IN)IO.setup(17、IO.IN)IO.setup(27、IO.IN)IO.setup(22、IO.IN)IO.setup(5、IO.IN) IO.setup(6、IO.IN)IO.setup(13、IO.IN)IO.setup(19、IO.IN)
中括弧内の条件が真の場合、ループ内のステートメントは1回実行されます。したがって、GPIOピン19がハイになると、IFループ内のステートメントが1回実行されます。GPIOピン19がハイにならない場合、IFループ内のステートメントは実行されません。
if(IO.input(19)== True):
以下のコマンドは永久ループとして使用され、このコマンドを使用すると、このループ内のステートメントが継続的に実行されます。
一方1:
コードの詳細については、以下のコードセクションを参照してください。
プログラムを書いた後、それを実行する時が来ました。プログラムを実行する前に、回路で何が起こっているかを要約として説明しましょう。最初のLM35センサーは室温を検出し、その出力にアナログ電圧を提供します。この可変電圧は、温度を+ 10mV /ºCで直線的に表します。この信号はADC0804チップに供給され、このチップはアナログ値をデジタル値に変換します。10mvあたり255/200 = 1.275カウント、または1度の場合は1.275カウントです。このカウントは、PIGPIOによって取り込まれます。プログラムはカウントを温度値に変換し、画面に表示します。PIによって読み取られる典型的な温度を以下に示します。
したがって、このRaspberryPi温度モニターです。