RaspberryPi

フォトリフレクタのラズパイ(Raspberry Pi)での使用方法。Pythonサンプルコードも紹介。

フォトリフレクタとは、赤外線を物体に照射し、物体から反射してきた光をフォトトランジスタで受光することで出力電流が変化するセンサです。

物体検出や、ライントレースカーのライン検出、回転数検出などに利用することができます。

本記事では、フォトリフレクタをラズパイ(Raspberry Pi)で使用する方法について、詳しく紹介しています。

本記事では、下記の内容を紹介しています。

この記事で分かること

本記事では、下記の内容を紹介しています。

  • 必要な部品
  • フォトリフレクタに接続する抵抗値の計算方法
  • フォトリフレクタとラズパイの配線
  • フォトリフレクタ出力を検出するPythonコード

スポンサーリンク

使用した部品

今回使用した部品を紹介します。

フォトリフレクタ(RPR-220)

amazonだと割高なので、秋月電子通商などの電子部品屋で買うのが良いと思います。

ブレッドボード

ラズピコ(Raspberry pi pico)を使用する際に、必要になります。

ジャンパワイヤ

オス-オス、オス-メス、メス-メスがセットになったジャンパワイヤです。

抵抗

amazon's choiceになっている商品です。

抵抗のばらつきが大きいので、実験用レベルです。中国製なので、コスパ重視ですね。

スポンサーリンク

フォトリフレクタに接続する抵抗値計算

「LED」、「フォトトランジスタ」それぞれに接続する抵抗値の算出方法を紹介します。

フォトリフレクタ(RPR-220)のデータシート

抵抗値の計算にフォトリフレクタのデータシートが必要になるので、

今回使用したフォトリフレクタ(RPR-220)のデータシートを抜粋して載せます。

フォトリフレクタ(RPR-220)のデータシートの抜粋
フォトリフレクタ(RPR-220)のデータシートの抜粋

データシートはこちらからダウンロードできます。

フォトトランジスタの回路図

フォトトランジスタ、電源、求めたい抵抗を回路図にすると、このようになります。

フォトリフレクタとラズパイの回路図
フォトリフレクタとラズパイの回路図

この回路図と、ラズパイのGPIO端子の電流制約から、抵抗の値を算出します。

ラズパイのGPIO端子の電流制約は以下のとおりです。

ポイント

ラズパイのGPIO端子の電流制約

  • GPIO1端子あたりの最大電流は16mA
  • 複数のGPIO端子を使用する場合、同時に流せる電流の合計は50mA

抵抗Aの値を算出

データシートより、LEDのVFは1.34Vであるため、抵抗Aには3.3 - 1.34 = 1.96Vの電圧がかかることになります。

また、ラズパイの電流制約はGPIO1端子あたり16mAでしたが、あくまでも最大値なので、余裕をもって10mA以下になるようにします。

オームの法則より、

R = V / I = 1.96[V] / 0.01[A] = 196[Ω]

196Ω以上の抵抗であれば、10mA以下の電流値となることが分かります。

手持ちの抵抗値の中でちょうどよい抵抗を確認してみると、

330Ωの抵抗があったので、この抵抗を使用することにしました

ちなみに、330Ωの抵抗を使用すると、オームの法則から6mAの電流が流れることが分かります。

抵抗Bの値を算出

抵抗Bの値の算出には、ラズパイ(Raspberry Pi)のGPIO端子のLow/Highの閾値電圧を考慮する必要があります。

ポイント

ラズパイのGPIO端子のLow/Highの閾値電圧

  • High : 1.3V以上
  • Low : 0.8V以下

このGPIO端子のLow/Highの閾値電圧より、2つの式を立式できます。

Ic:コレクタ電流、Iceo:暗電流、R:抵抗値とすると、

1.3[V] < Ic min × R   ・・・式1

0.8[V] > Iceo max × R  ・・・式2

式1は、コレクタ電流Icが最小の場合でも、電流が流れさえすれば、ラズパイがHighとして認識する条件です。

式2は、暗電流が最大になっても、ラズパイはLowとして認識するという条件です。

これら2式より、抵抗Rを算出していきます。

まず、コレクタ電流の最小値 Ic min ですが、データシートでは0.08mAとなっています。

ただし、 IF=10mAの条件での数値になっているので、今回の条件に合わせてIc minを求め直す必要があります。

今回の回路は、前述のとおりIF=6mA となるため、Ic minは下記となります。

Ic min = 0.08[mA] × (6[mA] / 10[mA]) = 0.048mA

暗電流の最大値 Iceo max はデータシートの値をそのまま利用でき、

Iceo max  = 0.5μA です。

以上の条件より、Rを求めると、下記のようになります。

27[kΩ] < R < 1.6 [MΩ]

手元に47kΩの抵抗があったので、フォトトランジスタに接続する抵抗は、47kΩにしました

抵抗値算出にあたり、こちらのサイトを参考にさせて頂きました。

スポンサーリンク

フォトリフレクタとラズパイの配線図

次に、フォトリフレクタとラズパイの配線図を紹介します。

ラズパイのピン配置

ラズパイのピン配置を載せておきます。

ラズパイ ピン配置

ラズパイ ピン配置

フォトリフレクタとラズパイの配線図

フォトリフレクタとラズパイの配線図です。

「Fritzing」のパーツにフォトリフレクタが無かったため、LED2つで代用しています。

白いLEDは「LED」、灰色のLEDは「フォトトランジスタ」のつもりです。

フォトトランジスタの出力を、GPIO17(11ピン)に入力しています。

ラズパイとフォトリフレクタの配線図
ラズパイとフォトリフレクタの配線図

配線したブレッドボードの様子はこんな感じです。

フォトリフレクタとラズパイを配線
ブレッドボード上の配線の様子

スポンサーリンク

フォトリフレクタ出力を検出するPythonコード

1秒ごとに、フォトリフレクタ出力をGPIO端子で読み取ります。

「ctrl」+「C」の同時押して停止します。

--- photoreflecter_test.py ---

### photoreflecter_test.py ###

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM) #GPIO番号で指定
#GPIO.setmode(GPIO.BOARD) #Pin番号で指定

gpio_sensor = 17 #GPIO番号で指定
GPIO.setup(gpio_sensor,GPIO.IN) #inモードでGPIOを設定

time_start = time.time()

try :
    while True :

        ### ------------------- get_time ----------------- ###
        time_end = time.time()
        time_elapsed = time_end - time_start

        ### ------------------- GPIO input ----------------- ###
        input_sensor = GPIO.input(gpio_sensor)

        print('Time : {:.1f}s, GPIO_input : {}'.format(time_elapsed, input_sensor))
        print("")

        time.sleep(1)
except KeyboardInterrupt:
    print("\nCtrl+C")
    GPIO.cleanup(gpio_sensor)

※このコードでラズパイ上は動作していますが、サイト移植時にインデントを手打ちしています。

もしエラーが出た場合は、インデント部分を確認いただければと思います。

フォトリフレクタ出力をラズパイのGPIO入力で検出できている様子

参考までに、先ほどのサンプルコードで動作している動画を紹介します。

スポンサーリンク

まとめ

フォトリフレクタをラズパイ(Raspberry Pi)で使用する方法について、紹介しました。

フォトリフレクタは、様々な工作に応用できる電子部品です。

是非、本記事を参考に、使ってみてください。

本記事を最後までお読みいただき、ありがとうございました。

スポンサーリンク

-RaspberryPi
-