デジタルインターフェースを備えたシンプルなアナログ近接センサー(Raspberry Pi用)[最終更新日:2014年2月7日]
RaspberryPiにはBroadcomBCM2835チップが搭載されており、26個のGPIO(汎用入力/出力)ピンを制御します。ピンの制御に使用できるCライブラリまたはRPi.GPIOpythonパッケージがオンラインで入手できます。 RPi.GPIOパッケージは、デフォルトで、DebianLinuxシステムのRPiバージョンであるRaspbianなどのほとんどのRaspberryPiシステムに含まれています。
arduinoと比較したRPiの欠点の1つは、アナログピンがないことです。すべてのGPIOピンは純粋にデジタルです。たとえば、ピンAが出力ピンの場合、0または1で表されるLOW(0V)またはHIGH(3.3V)のみを出力できます。ピンAが入力ピンの場合、ピンAに印加される0.8V未満の電圧に対して、LOWまたは0として取得します。 1.3Vを超える電圧(実際には驚くほど低い!)の場合、HIGHまたは1と見なされます[参照:RPi GPIO]。
ただし、現実の世界では、純粋に0または1が発生することはめったにありません。私たちは常に、その範囲で継続的な価値を持つことができる情報を取得します。たとえば、温度は10Cまたは50F、または100Cまたは212Fにすることができます。これらの数値には、単に「コールド」または「ホット」よりも多くの情報が含まれています。距離は2cmまたは10mで、「近い」または「遠い」だけを知るだけでは不十分です。
この欠点を克服するためのいくつかの方法があります。 RPiはSPIまたはI2Cインターフェースをサポートしているため、外部アナログ-デジタルコンバーター(ADC)を使用し、SPIまたはI2Cインターフェースを使用して、MCP3008、TLC549、MCP23017などのADCを介して準アナログ信号を取得できます。これらのチップ通常、数ドルかかります。ただし、市販のセンサーを追加すると、部品全体のコストが20ドルから30ドルを超える可能性があり、システムをコンパクトにすることは困難です。ロボットプロジェクトの場合、通常は複数のセンサーが必要であり、コストが簡単に加算される可能性があります。
実際、多くの場合、これらの外部デバイスの使用を回避しても、アナログを取得することは実際には可能です。 デジタルを介した信号 ピン!
重要なのは、アナログ信号を持続時間に変換することです。時間は常にアナログだからです!
いくつかの赤外線LED、1つのフォトトランジスタ、1つの2N3904 NPNトランジスタ、100nFセラミックコンデンサ、およびいくつかの低電力抵抗を使用して、単純な赤外線近接センサーを構築します。そして、私はいくつかのアナログ読書を得ることができます。
すべての要素は、電子市場で最も安価なものの1つです。
どのLED、フォトトランジスタ、またはNPNトランジスタが使用されているかは実際には問題ではありません。それらはほとんど同じです。
少し重要かもしれない唯一のものは100nF(0.1uF)のコンデンサです。私はロープロファイルのセラミックを使用しましたが、これはおそらく最良の選択ではありません。ここでは、クラス1のセラミックまたはフィルムコンデンサがより適しています。
+ 5VおよびGNDワイヤを外部5V電源に接続し、GNDワイヤもRaspberry PiGPIOピンのアースに接続します。 GPIOピンを1つ選択します。たとえば、ピンAをトリガーとして選択し、トリガーワイヤーに接続します。信号の入出力として別のGPIOピン(ピンBなど)を選択し、OUTワイヤに接続します。
物体の距離を測定するために、トリガー信号を送信して赤外線LEDをアクティブにします。これらのLEDによって放出された光は、センサーの前にある物体によって反射されます。真ん中のフォトトランジスターは反射光を集めて比例電流を発生させます。この電流は、コンデンサ両端の電圧を積分するために使用されます(I =CdV / dt)。コンデンサの電圧が特定のしきい値に達するまでの時間を監視することで、フォトトランジスタによって生成された電流の量、または同等に、反射された光の量を把握できます。どうやら、オブジェクトが近いほど、反射光は多くなります。センサーのタイミングを注意深く調整することで、距離をかなり正確に測定できるはずです。
これが操作の詳細なシーケンシャルです。コンデンサをゼロにする
まず、ピンBを出力ピンに設定し、ゼロに設定します。
GPIO.setup(PIN_B、GPIO.OUT)
GPIO.output(PIN_B、0)
time.sleep(0.01)
これにより、コンデンサの残留電圧が放電されます。コンデンサを放電するためのRC時間はt =RC =500ohm * 100nF =50 us =0.00005秒であることに注意してください。ピンBで200RC時間ゼロボルトを維持することにより、コンデンサが完全に放電されていることを確認します(残留電圧は元の残留電圧のe-200 =10-87倍である必要があります)。ピンBを入力として設定
ここで、ピンBを入力ピンとして使用してフォトトランジストからデータを取得します。
GPIO.setup(PIN、GPIO.IN)
3.LEDを点灯します
赤外線LEDをオンにする時が来ました。
GPIO.setup(PIN_A、GPIO.OUT)
GPIO.output(PIN_A、1)
これにより、トリガーピンの電圧が3.3Vに設定されます。 2N3904のBEノードは0.7V低下するため、R1の両端の電圧は2.6Vになります。その場合、R1を流れる電流はI =2.6V /4.3kΩ=0.6mAになります。次に、2N3904はこの電流を約150倍に増幅し、コレクタからエミッタに約100mAの電流を供給します。各LEDは短時間で約50mAを導通します。ピンBがLOWのままである期間のタイミング
ピンBがHIGHになるようにコンデンサがRPiのしきい値に達するまでにかかる時間の測定を開始します
counter =0
t1 =time.clock()* 1000
while(GPIO.input(PIN_B)==0)&(counter <1e4):
counter =counter + 1
deltat=time.clock()*1000-t1
deltatは、ピンBがLOWのままである時間です。 deltatはフォトトランジスタ電流の逆数に比例するため (または反射光の量 )、フォトトランジスタ電流は距離の逆数にほぼ比例します。 、deltatは距離にほぼ比例します 。
deltat∝1I∝1light∝distance
(counter <1e4)の用語は、フォトトランジスタの電流が極端に少ない、または同等の距離が無限であるために、コンデンサの統合に時間がかかりすぎる状況を防ぐためのものです。
詳細:デジタルインターフェースを備えたシンプルなアナログ近接センサー(Raspberry Pi用)最終更新日2014年2月7日]
製造プロセス
- 1線式DS18B20センサーとRaspberryPiを使用して温度を測定します
- Raspberry Piの1線式温度センサーDS1820(GPIO直接)
- センサーデータとRaspberryPiマイクロプロセッサーの統合
- 超音波センサー(HC-SR04)+ Raspberry Pi
- RPiを備えたライントラッキングセンサー
- 1つのGPIOピンでアナログセンサーを読み取る
- ラズベリーパイ用DIY赤外線モーションセンサーシステム
- RaspberryPiにアナログ入力のないアナログセンサー
- Raspberry Pi 1-Wireデジタル温度計センサー(DS18B20)
- JAVAのRaspberryPiデジタルホールセンサー
- ガイガーカウンター– RaspberryPiチュートリアル用の放射線センサーボード