1つのGPIOピンでアナログセンサーを読み取る
他のいくつかのデバイスとは異なり、RaspberryPiにはアナログ入力がありません。 17本のGPIOピンはすべてデジタルです。高レベルと低レベルを出力したり、高レベルと低レベルを読み取ったりすることができます。これは、Piにデジタル入力を提供するセンサーには最適ですが、そうでないセンサーを使用する場合はそれほど優れていません。
LDR(光依存抵抗器)やサーミスタ(温度センサー)などの可変抵抗器として機能するセンサーの場合、簡単な解決策があります。これにより、単一のGPIOピンを使用して複数のレベルを測定できます。光センサーの場合、これによりさまざまな光レベルを測定できます。
これは、電子機器の紹介としてよく使用される基本的な「RC」充電回路(Wikipediaの記事)を使用しています。この回路では、コンデンサと直列に抵抗を配置します。これらのコンポーネントに電圧が印加されると、コンデンサの両端の電圧が上昇します。電圧が最大値の63%に達するまでにかかる時間は、抵抗に静電容量を掛けたものに等しくなります。光依存抵抗を使用する場合、この時間は光レベルに比例します。この時間は時定数と呼ばれます:
t =RC ここで、tは時間、Rは抵抗(オーム)、Cは静電容量(ファラッド)です。
したがって、トリックは、回路内のポイントがGPIOピンで「ハイ」として登録するのに十分な大きさの電圧に到達するまでにかかる時間を計ることです。この電圧は約2ボルトで、私の好みでは3.3Vの63%に十分近い値です。したがって、回路がGPIO入力をLowからHighに変更するのにかかる時間は、「t」に等しくなります。
10KΩの抵抗と1uFのコンデンサを使用すると、tは10ミリ秒になります。暗闇の中で、LDRの抵抗は1Mohmで、1秒の時間がかかる場合があります。オンライン時定数計算機を使用して他の値を計算できます。
3.3VとGPIOピンの間に常にある程度の抵抗があることを保証するために、LDRと直列に2.2KΩの抵抗を挿入しました。
理論
イベントのシーケンスは次のとおりです:
- GPIOピンを出力として設定し、Lowに設定します。これにより、コンデンサ内の電荷が放電され、コンデンサの両側が0Vになります。
- GPIOピンを入力として設定します。これにより、抵抗を介してコンデンサを介してグランドに電流が流れ始めます。コンデンサ両端の電圧が上昇し始めます。かかる時間は、LDRの抵抗に比例します。
- GPIOピンを監視し、その値を読み取ります。待機中にカウンターをインクリメントします。
- ある時点で、コンデンサの電圧が十分に上昇し、GPIOピン(約2v)によってHighと見なされます。かかる時間は、LDRから見た光のレベルに比例します。
- GPIOピンを出力として設定し、必要に応じてプロセスを繰り返します。
詳細:1つのGPIOピンでアナログセンサーを読み取る
製造プロセス
- 安価なセンサーによる家庭の温度の流れのマッピング
- RPiを備えたライントラッキングセンサー
- 実際のセンサーで効果を制御する
- 1つのGPIOピンでアナログセンサーを読み取る
- RaspberryPiにアナログ入力のないアナログセンサー
- Java ME 8 + Raspberry Pi +センサー=IoT World(パート1)
- RaspberryPiとZabbixスーパーバイザーで読み取るアナログセンサー
- デジタルインターフェースを備えたシンプルなアナログ近接センサー(Raspberry Pi用)[最終更新日:2014年2月7日]
- PIRモーションセンサーを備えたRaspberryPi GPIO:最高のチュートリアル
- MCP3008を使用したRaspberryPiのアナログセンサー
- HC-SR501PIRモーションセンサーとRaspberryPiのインターフェース