ラズベリーパイ(Raspberry Pi Zero WH)でのフォトリフレクタ(フォトセンサ)の使い方

Raspberry Pi Zero WHとフォトリフレクタを使い、白と黒の反射の違いを検知して7セグメントLEDに数値を表示する様子を説明したアイキャッチ

フォトリフレクタ(反射型フォトセンサ)の RPR-220 を、ラズベリーパイ(Raspberry Pi Zero WH)で使う方法を紹介します。

フォトリフレクタは、赤外線を出して、対象物から反射して戻ってきた光を受け取るセンサーです。

近くに白っぽいものがあると反射しやすく、黒っぽいものは反射しにくくなります。

その反射の違いを使って、物が近くにあるか、明るく反射しているか、黒いラインか白い面か、といったことを調べることができます。

ラズベリーパイの本やネットを見ても、フォトリフレクタをRaspberry Pi Zero WHでどうつなぐのか、初心者向けにまとまった情報が意外と見つかりにくくて、かなり調べながら進めました。

この記事では、フォトリフレクタのしくみ、抵抗の考え方、配線、動作確認、7セグメントLEDへの表示まで、できるだけ順番に整理していきます。

うさたん

フォトリフレクタってなぁに?

まある

近くにあるものが、白いとか、黒いとか分かるセンサーだよ

目次

今回の制作内容

今回は、フォトリフレクタ RPR-220 をRaspberry Pi Zero WHにつないで、反射の違いを確認します。

Raspberry Pi Zero WHにRPR-220フォトリフレクタをつなぎ、白い紙・アルミホイル・赤いテープの反射を確認して、ADコンバータで読み取り7セグメントLEDに数値表示する流れを説明した図

大まかな流れは、次の通りです。

  1. フォトリフレクタのしくみを確認する
  2. LED側とフォトトランジスタ側の抵抗を考える
  3. Raspberry Pi Zero WHとブレッドボードに配線する
  4. カメラごしに赤外線LEDの点灯を確認する
  5. 白い紙、アルミホイル、赤いテープで反応を見る
  6. ADコンバータを使って値を読み取る
  7. 7セグメントLEDに数値を表示する

まずは確認用LEDで「反応しているか」を見て、次に7セグメントLEDで「どれくらい反応しているか」を見えるようにします。

赤いキラキラのテープが一番よく反応したので、最後の動作確認ではそのテープを使っています。

準備するもの

今回使うものは、次の通りです。

  • Raspberry Pi Zero WH
  • microSDカード
  • microUSB電源ケーブル
  • パソコン
  • ブレッドボード
  • ジャンパーワイヤー
  • 抵抗
  • LED
  • フォトリフレクタ(RPR-220)
  • 7セグメントLED
  • ADコンバータ(MCP3002)
  • 8ビットシフトレジスタ(74HC595)

準備するもの全体は、こちらの記事にもまとめています。

Raspberry Pi Zero WH

Raspberry pi zero WH は、初期設定と環境設定が済んだものを使います。

Raspberry Pi Zero WH本体の写真

microSDカード

Raspberry PiのOSやプログラムを保存するために、microSDカード を使います。

Team製32GB microSDHCカードの写真

8〜32GB程度のものを目安に使っています。

microUSB電源ケーブル

Raspberry Pi Zero WHの電源用に、microUSB電源ケーブルを使います。

Raspberry Pi Zero WHの電源に使うmicroUSB電源ケーブルの写真

パソコン

最初の設定や、パソコンのブラウザからの動作確認に使います。

Windowsパソコンの写真

この記事では、Raspberry Piの画面をVNC Viewerなどで表示しながら、フォトリフレクタの動作確認やPython3プログラムの実行を行います。

ブレッドボード

ブレッドボード は、はんだ付けをしなくても電子部品を差し込んで配線できるボードです。

白いブレッドボードの写真

ジャンパーワイヤー

ジャンパーワイヤー は、Raspberry PiのGPIOピンとブレッドボードをつなぐために使います。

赤と黒のジャンパーワイヤーの写真

抵抗

抵抗は、フォトリフレクタ内の赤外線LEDに流れる電流を制限したり、フォトトランジスタ側の電圧を決めたりするために使います。

抵抗の写真

この記事では、330Ωと30kΩの抵抗を使っています。

LED

LEDは、電流を流すと光る部品です。

最初の動作確認用にLEDを使います。

赤、黄、白のLEDを並べた写真

フォトリフレクタが反応すると、確認用LEDが点灯するようにします。

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

今回使うフォトリフレクタ(反射型フォトセンサ) です。

RPR-220フォトリフレクタ本体の写真

7セグメントLED

7セグメントLED は、後半でフォトリフレクタの値を数字で表示するために使います。

数値を表示するために使う7セグメントLEDの写真

ADコンバータ MCP3002

Raspberry Piはアナログ値をそのまま読み取れないため、ADコンバータ を使います。

アナログ信号をデジタル信号に変換するADコンバータMCP3002の写真

8ビットシフトレジスタ 74HC595

8ビットシフトレジスタ は、7セグメントLEDを表示する際、GPIOを節約するために使います。

GPIOの使用数を減らすために使う8ビットシフトレジスタ74HC595の写真

フォトリフレクタとは

フォトリフレクタは、光の反射によって、近くにある物の有無や位置、反射の強さを検知できるセンサーです。

今回使用するのは、ローム株式会社(ROHM)のフォトリフレクタ(反射型フォトセンサ) RPR-220 です。

フォトリフレクタのしくみ

RPR-220フォトリフレクタの赤外線LEDとフォトトランジスタ、白い紙と黒い紙で反射の強さが変わるしくみを説明した図

フォトリフレクタは、赤外線LEDとフォトトランジスタがセットになったセンサーです。

赤外線LEDから、人間の目には見えない赤外線を出します。

近くに白い紙のような反射しやすいものがあると、その赤外線が反射して戻ってきます。

戻ってきた光をフォトトランジスタが受け取ることで、電気信号として変化が出ます。

反対に、黒い紙のように光を吸収しやすいものは、反射光が少なくなります。

この違いを使って、近くのものが白っぽいか黒っぽいか、反射しやすいかどうかを調べることができます。

しかも、対象物に触れずに検知できるので、回転しているものや動いているものを調べるときにも便利です。

RPR-220の構造

フォトリフレクタは、4本の端子があります。

RPR-220フォトリフレクタの端子側とセンサー部分を写した写真

右側の透明な丸いガラスのように見える部分が、赤外線を出すLEDです。

左側の欠けのあるように見える部分が、反射した光を受け取るフォトトランジスタです。

フォトリフレクタの端子

フォトリフレクタから出ている4本の端子には、それぞれ名前があります。

RPR-220フォトリフレクタの内部構造と4本の端子名を示した図

端子の名前は、次の通りです。

  1. アノード(赤外線LEDの+側)
  2. カソード(赤外線LEDの-側)
  3. エミッタ(フォトトランジスタのエミッタ)
  4. コレクタ(フォトトランジスタのコレクタ)

①アノードと④コレクタをプラス側に、②カソードと③エミッタをマイナス側につなぎます。

ブレッドボードに挿すときは、同じ列に挿さないように注意します。

端子を無理に広げると壊れてしまうことがあるので、扱うときは慎重に作業します。

回路図

Raspberry Pi Zero WHとフォトリフレクタ、通電確認用LEDを接続する回路図を作成しました。

Raspberry Pi Zero WH、フォトリフレクタ、330Ω抵抗、30kΩ抵抗、確認用LEDを接続した回路図

Raspberry Pi Zero WHの3.3V電源とGNDを使い、フォトリフレクタの赤外線LED側とフォトトランジスタ側を接続します。

また、最初の動作確認用として、LEDも接続しています。

抵抗の計算

ここで、どうして330Ωと30kΩの抵抗を使ったのかを確認します。

フォトリフレクタ内の赤外線LED側に入れる抵抗と、フォトトランジスタ側のプルアップ抵抗の考え方を説明した図
うさたん

計算がいっぱいだね

まある

細かい計算なので、配線だけ確認したい場合は「配線方法」まで進んでも大丈夫です。

ここでは、ROHMのRPR-220のデータシートを参考にして抵抗値を考えます。

大事なのは、Raspberry PiのGPIOに大きな電流を流しすぎないことです。

この記事では、GPIOピン1本あたり8mA程度を目安に考えています。

LED側の抵抗値計算

まずは左側のフォトリフレクタ内の赤外線LED側の抵抗を考えます。

フォトリフレクタ内の赤外線LED側に入れる抵抗位置を示した回路図

通常のLEDと同じように、LEDに流れる電流を制限するために抵抗を入れます。

データシートでVFの値を確認すると、順方向電圧 Vf は1.34V であることが分かりました。

Vf = 1.34V

Raspberry Piの3.3Vから、赤外線LEDの順方向電圧1.34Vを引くと、抵抗にかかる電圧が分かります。

3.3V - 1.34V = 1.96V

オームの法則は次の式です。

V(電圧) = I(電流) × R(抵抗)

抵抗を求める場合は、次のように変形します。

R(抵抗) = V(電圧) ÷ I(電流)

GPIOに流す電流を8mAとして計算します。

8mA = 0.008A

計算すると、次のようになります。

R = 1.96V ÷ 0.008A
  = 245Ω

つまり、245Ωより大きい抵抗を使う必要があることが分かります。

今回は、手元にある330Ωの抵抗を使用します。

250Ωくらいの抵抗がないか、秋月電子通商で探してみましたが、240Ωの上は300Ω、330Ωだったので、こちらを使うことにしました。

330Ωの抵抗を使うと、流れる電流は次のようになります。

I = V ÷ R
  = 1.96V ÷ 330Ω
  = 0.006A
  = 6mA

6mA程度なら、目安としている8mAより小さいので、今回の確認用としては扱いやすい値です。

LEDの抵抗計算については、ラズベリーパイでLチカさせる記事内の「抵抗の計算方法」でも紹介しています。

フォトトランジスタ側の抵抗値計算

次に、フォトトランジスタ側の抵抗を考えます。

フォトリフレクタ内のフォトトランジスタ側に入れる30kΩ抵抗の位置を示した回路図

ROHM社の反射型フォトセンサ(フォトリフレクタ) – RPR-220ページにデータシートなどと一緒に不可抵抗算出例が載っているので、これを参考に計算しました。

フォトトランジスタ側では、反射光を受けたときの電流変化を電圧の変化として読み取れるようにします。

この抵抗は、プルアップ抵抗として働きます。

RPR-220の資料から、IF=10mAのときのコレクタ電流 IC の最小値「IC Min」が0.08mAであることが分かります。

IC Min = 0.08mA

今回の回路では、赤外線LED側の電流を約6mAとしているため、6mAでのIC Minを求めます。

IC Min = 0.08mA × (6mA ÷ 10mA)
       = 0.048mA

ここで、不可抵抗算出例では、経時変化を考慮して10年使用で約50%減するというマージンをとっていますが、あまりに小さな値になってしまいますし、10年も使用しないので省略します。

次に、Raspberry PiがHIGH / LOWとして判断するしきい値「スレッシュホールド電圧」を考えます。

この記事では、次の値を参考にします。

Raspberry Piにローと認識させるには0.8V以下の電圧にします。ハイと認識させるには1.3V以上の電圧にします。

引用元:Raspberry Piにハードウエアをつなぐための資料を集めてみる
HIGHとして認識される目安 V HI:1.3V以上
LOWとして認識される目安 V LO:0.8V以下
Raspberry Piの入力電圧をHIGHまたはLOWとして判断するしきい値を説明した図

抵抗の最小値を求めます。

VHI < IC Min × RL Min

という式が成り立ちます。

計算していくと

1.3V < 0.048mA × RL Min

RL Min > 1.3V ÷ 0.000048A
RL Min > 27kΩ

となります。

次に抵抗の最大値を求めます。

データシートから、暗電流 ICEO Max が、0.5μAであることが分かります。

ICEO Max = 0.5μA

なので、

VLO > ICEO Max × RL Max

0.8V > 0.5μA × RL Max
RL Max < 0.8V ÷ 0.0000005A
RL Max < 1,600,000Ω
RL Max < 1.6MΩ

となります。

計算上は、次の範囲の抵抗を使うことになります。

27kΩ < RL < 1.6MΩ

今回は、27kΩより大きい抵抗として 30kΩ を使いました。

配線方法

ここから、Raspberry Pi Zero WHとフォトリフレクタを配線します。

配線図

配線の方法を、図で確認します。

Raspberry Pi Zero WH、フォトリフレクタ、抵抗、確認用LEDをブレッドボードで接続する配線図

まずは、Raspberry Pi Zero WHの3.3V電源とGNDを、ブレッドボードにつなぎます。

Raspberry Piの3.3V(ピン1) → ブレッドボードの+
Raspberry PiのGND(ピン6) → ブレッドボードの-

次に、フォトリフレクタまわりを接続します。

大きく分けると、次の3つの流れがあります。

  1. フォトリフレクタ内の赤外線LED側
  2. フォトリフレクタ内のフォトトランジスタ側
  3. 動作確認用LED側
フォトリフレクタの赤外線LED側、フォトトランジスタ側、動作確認用LED側の3つの流れを示した配線図

① 赤外線LED側

ブレッドボードのプラスから、フォトリフレクタのLED側のプラス(アノード)端子へ接続します。

LED側のマイナス(カソード)端子から、330Ωの抵抗を通して、ブレッドボードのマイナスへ接続します。

② フォトトランジスタ側

ブレッドボードのプラスから、フォトリフレクタのフォトトランジスタ側のプラス(コレクタ)端子へ接続します。

フォトトランジスタ側のマイナス(エミッタ)端子から、30kΩの抵抗を通して、ブレッドボードのマイナスへ接続します。

③ 動作確認用LED側

フォトトランジスタ側のマイナス(エミッタ)端子と30kΩ抵抗の間から分岐して、確認用LEDへ接続します。

確認用LEDの反対側は、ブレッドボードのマイナスへ接続します。

配線の写真

写真で見ると、このような感じです。

Raspberry Pi Zero WHとブレッドボードにフォトリフレクタ、抵抗、確認用LEDを配線した写真

ブレッドボード部分をアップにすると、このようになります。

ブレッドボード上のRPR-220フォトリフレクタ、抵抗、確認用LEDの配線をアップで写した写真

赤外線LEDの動作確認

配線ができたら、Raspberry Pi Zero WHの電源を入れて、フォトリフレクタ内の赤外線LEDが点灯しているか確認します。

赤外線は人間の目では見えませんが、カメラごしに見ると光っていることが確認できる場合があります。

photo-reflector-LED

テレビのリモコンなどもカメラごしに見ると、赤外線LEDが光っているのが見られることがあります。

テスターで電圧・電流を確認

動きはよさそうですが、想定通りの電圧・電流になっているか確認します。

大きすぎる電流を流し続けると、Raspberry Pi Zero WHや部品を壊してしまう可能性があります。

そのため、テスターを使って各所を測定しました。

測定結果

こちらの図の赤字が、実際に測定した結果です。

フォトリフレクタ回路の各所をテスターで測定した電圧と電流の結果を書き込んだ回路図

0.1mAになっているところは、実際はもっと小さい値だと思います。

テスターの最小表示が0.1mAだったため、そのように見えている可能性があります。

誤差はあると思いますが、大きく危険な値にはなっていなさそうなので安心しました。

実際に測って数字を見ると、机上の計算だけでは分からなかった部分も見えてきます。

まある

計算だけで終わらせずに、実際に測ってみるとかなり安心できます。

フォトリフレクタの動作確認

では、実際に反応するか確認します。

白い紙、アルミホイル、赤いキラキラのテープを近づけて、確認用LEDの光り方を見ます。

白い紙

白い紙をフォトリフレクタに近づけて、確認用LEDが点灯すれば成功です。

データシートによると、RPR-220は6mmくらいの距離で反応しやすいようなので、そのあたりを目安に近づけます。

フォトリフレクタに白い紙を近づけて確認用LEDが点灯している写真
まある

LEDが点いた!

こちらの動画では、少しLEDが暗いですが、ちゃんと反応して点灯しています。

アルミホイル

次に、紙よりも光を反射してくれそうなアルミホイルでも試してみました。

フォトリフレクタにアルミホイルを近づけて確認用LEDの反応を見ている写真
うさたん

紙よりも明るくLEDが点きました

アルミホイルは反射しやすいですが、表面がデコボコしているため、少し不安定な反応にも見えました。

ピカピカの赤いテープ

たまたま手元に工作用のピカピカの赤いテープがあったので、これも試してみました。

フォトリフレクタに赤いキラキラのテープを近づけて確認用LEDの反応を見ている写真

写真だと少し分かりにくいですが、試した中ではこの赤いテープが一番よく反応しました。

まある

すごく光ってる。これはちょっと感動します。

フォトリフレクタの値を表示

次にフォトリフレクタの出力値を7セグメントLEDに表示します。

7セグメントLED
Raspberry Pi Zero WHにRPR-220フォトリフレクタをつなぎ、白い紙・アルミホイル・赤いテープの反射を確認して、ADコンバータで読み取り7セグメントLEDに数値表示する流れを説明した図

Raspberry Piは、アナログ信号をそのまま入力することができません。

そのため、フォトリフレクタの出力をADコンバータでデジタル信号に変換してから読み取ります。

さらに、7セグメントLEDを表示するために多くのGPIOを使うため、GPIOを節約する目的で 8ビットシフトレジスタも使います。

構成

構成は、次のようになります。

フォトリフレクタ、ADコンバータMCP3002、Raspberry Pi Zero WH、シフトレジスタ74HC595、7セグメントLEDを使った構成図

流れとしては、次の通りです。

フォトリフレクタ
→ ADコンバータ(MCP3002)
→ Raspberry Pi Zero WH
→ シフトレジスタ(74HC595)
→ 7セグメントLED

回路図

細かくなりますが、回路図はこちらです。

フォトリフレクタ、MCP3002、74HC595、7セグメントLEDを接続した回路図

配線図

配線図はこちらです。

フォトリフレクタ、ADコンバータ、シフトレジスタ、7セグメントLEDをブレッドボード上で接続する配線図

配線の写真

写真で見ると、このような配線になります。

Raspberry Pi Zero WHとブレッドボードにフォトリフレクタ、ADコンバータ、シフトレジスタ、7セグメントLEDを配線した写真

ブレッドボード部分をアップにすると、このようになります。

フォトリフレクタ、MCP3002、74HC595、7セグメントLEDを配線したブレッドボード部分のアップ写真

gpiozeroでADコンバータの値を読む

ADコンバータ(MCP3002)の値を読み取るため、SPI通信を行います(詳しくは、MCP3002で紹介しています)。

SPI通信用のモジュールはいくつかありますが、今回はgpiozeroというライブラリを使います。

プログラム

ここでは、フォトリフレクタで読み取った反射の強さを、7セグメントLEDに数字で表示するPython3のプログラムを使います。

フォトリフレクタの出力は、そのままではRaspberry Piで読み取りにくいため、ADコンバータ(MCP3002)を使って値を読み取ります。

読み取った値は0〜1の範囲で取得されるので、100倍して見やすい数値に変換し、7セグメントLEDに表示します。

このプログラムで行っている主な処理は、次の通りです。

  1. ADコンバータ(MCP3002)からフォトリフレクタの値を読み取る
  2. 読み取った値を100倍して、表示しやすい数値に変換する
  3. 100の位・10の位・1の位に分ける
  4. シフトレジスタ(74HC595)を使って、7セグメントLEDに数字を表示する
  5. Ctrl + C が押されたら、GPIOの設定をリセットして終了する

コードが長いので、全体はアコーディオンの中に入れています。

フォトリフレクタの値を7セグメントLEDに表示するPythonプログラムを見る
import RPi.GPIO as GPIO
from gpiozero import MCP3002
from time import sleep

# A/Dコンバータ チャンネル0を指定
ch0 = MCP3002(channel=0)

# シフトレジスタ GPIO番号設定
SCK = 17   # シフトレジスタクロック
RCK = 18   # ラッチクロック
SER = 27   # シリアルデータ入力

# 7セグメントLED 各桁のアノード GPIO番号
#            DIG1 DIG2 DIG3
dig_anode = [ 4,  3,  2 ]

# 7セグメントLED 桁表示パターン
dig_ptn = [
    [1,0,0], # DIG1
    [0,1,0], # DIG2
    [0,0,1], # DIG3
]

# 7セグメントLEDに数字を表示するパターン
disp_ptn = [
    #a,b,c,d,e,f,g,p
    [1,1,1,1,1,1,0,0], #0
    [0,1,1,0,0,0,0,0], #1
    [1,1,0,1,1,0,1,0], #2
    [1,1,1,1,0,0,1,0], #3
    [0,1,1,0,0,1,1,0], #4
    [1,0,1,1,0,1,1,0], #5
    [1,0,1,1,1,1,1,0], #6
    [1,1,1,0,0,1,0,0], #7
    [1,1,1,1,1,1,1,0], #8
    [1,1,1,0,0,1,1,0], #9
]

#GPIO番号の指定モードを設定(BCM:役割ピン番号)
GPIO.setmode(GPIO.BCM)

# 出力として使用するように設定
GPIO.setup(SCK,  GPIO.OUT)
GPIO.setup(RCK,  GPIO.OUT)
GPIO.setup(SER,  GPIO.OUT)

GPIO.setup(dig_anode[0], GPIO.OUT)
GPIO.setup(dig_anode[1], GPIO.OUT)
GPIO.setup(dig_anode[2], GPIO.OUT)


# 7セグメントLEDに数字を表示する
def disp_num(no, dig):

    # GPIOをLOWにリセット
    GPIO.output(SCK, GPIO.LOW)
    GPIO.output(RCK, GPIO.LOW)
    GPIO.output(SER, GPIO.LOW)

    # 7セグメントLED 各桁のアノード ON/OFF切り替え
    for i in range(3):
      if dig_ptn[dig-1][i] == 1:
        GPIO.output(dig_anode[i], GPIO.HIGH)
      else:
        GPIO.output(dig_anode[i], GPIO.LOW)


    # 7セグメントLEDに数字を表示
    for dp in reversed(disp_ptn[no]):
        if dp == 1:
         # アノードコモン(シンク電流)なのでLOWで点灯
            GPIO.output(SER, GPIO.LOW)
        else:
            GPIO.output(SER, GPIO.HIGH)

        # シフトレジスタ 最下位ビットにSERの内容を追加
        GPIO.output(SCK, GPIO.HIGH)
        GPIO.output(SCK, GPIO.LOW)

    # シフトレジスタから出力
    GPIO.output(RCK, GPIO.HIGH)
    GPIO.output(RCK, GPIO.LOW)

    # ちょうどチラつかない値を設定
    sleep(0.008)

try:
    while True:

        # A/Dコンバータから読み込み 値を100倍に    
        val = int(ch0.value * 100)

        # 100の位を表示
        if val//100:
          disp_num((val//100), 1)
        val %= 100

        # 10の位を表示
        if val//10:
          disp_num((val//10), 2)
        val %= 10

        # 1の位を表示
        disp_num(val, 3)

#キーボードからCtrl+C割込みが入ったら
except KeyboardInterrupt:
    pass

#GPIOの設定をリセット
GPIO.cleanup()

このプログラムのポイントは、ADコンバータから読み取った値を、7セグメントLEDで表示できる形に変換しているところです。

ch0 = MCP3002(channel=0)

この部分で、ADコンバータ MCP3002 のチャンネル0を読み取るように設定しています。

フォトリフレクタの値は、次の部分で読み取っています。

val = int(ch0.value * 100)

ch0.value は0〜1の範囲で取得されるため、100倍して、7セグメントLEDに表示しやすい数値にしています。

7セグメントLEDは3桁で表示するため、値を100の位・10の位・1の位に分けて表示しています。

# 100の位を表示
if val // 100:
    disp_num((val // 100), 1)
val %= 100

# 10の位を表示
if val // 10:
    disp_num((val // 10), 2)
val %= 10

# 1の位を表示
disp_num(val, 3)

disp_num() は、指定した数字を7セグメントLEDの指定した桁に表示するための関数です。

7セグメントLEDは、各桁を高速に切り替えながら表示しています。人の目には、3桁が同時に点灯しているように見えます。

また、シフトレジスタ(74HC595)を使うことで、Raspberry PiのGPIOを節約しながら7セグメントLEDを制御しています。

GPIO.output(SCK, GPIO.HIGH)
GPIO.output(SCK, GPIO.LOW)

このようにクロック信号を送ることで、シフトレジスタへ1ビットずつデータを送っています。

プログラムを止めるときは、Ctrl + C を押します。

最後に GPIO.cleanup() を実行して、GPIOの設定をリセットしています。

GPIO.cleanup()

Raspberry Piで電子工作をするときは、プログラム終了時にGPIOをリセットしておくと安心です。

動作確認

プログラムを動かして、フォトリフレクタに赤いキラキラのテープを近づけてみます。

7セグメントLEDに、フォトリフレクタの値が表示されました。

フォトリフレクタに赤いキラキラのテープを近づけ、7セグメントLEDに95と表示されている写真

こちらは動画です。

LEDがきれいに見えるように、少し暗めで撮影しています。

反射が強いものを近づけると値が大きくなり、反射が弱いものを近づけると値が小さくなります。

うまく動かないときに確認したいこと

フォトリフレクタの向きは合っているか

RPR-220は端子の向きが重要です。

アノード、カソード、エミッタ、コレクタを間違えると、うまく動きません。

ブレッドボードの同じ列に挿していないか

フォトリフレクタの端子をブレッドボードに挿すとき、同じ列に挿してしまうと意図しない接続になります。

端子の列をよく確認します。

抵抗値は合っているか

この記事では、LED側に330Ω、フォトトランジスタ側に30kΩを使っています。

違う値を使う場合は、電流や読み取り値が変わります。

赤外線LEDは光っているか

赤外線LEDは目では見えません。

スマホやデジカメのカメラごしに見て、点灯しているか確認します。

反射させるものとの距離は近すぎないか、遠すぎないか

RPR-220は、対象物との距離によって反応が変わります。

近づけすぎても遠すぎても、思ったような値にならない場合があります。

まとめ

フォトリフレクタ(反射型フォトセンサ)RPR-220を、Raspberry Pi Zero WHで使う方法を確認しました。

今回行ったことは、次の通りです。

  1. フォトリフレクタのしくみを確認する
  2. RPR-220の端子を確認する
  3. LED側の抵抗330Ωを計算する
  4. フォトトランジスタ側の抵抗30kΩを計算する
  5. Raspberry Pi Zero WHとブレッドボードに配線する
  6. カメラごしに赤外線LEDの点灯を確認する
  7. 白い紙、アルミホイル、赤いテープで反応を見る
  8. ADコンバータと7セグメントLEDを使って値を表示する

フォトリフレクタは、コピー機で紙の有無を検知したり、黒いラインを追いかける車を作ったり、回転を検知したり、いろいろな場面で使われています。

今回のように、まずは「白いものと黒いものの反射の違いを見る」ところから始めると、しくみが理解しやすいです。

次は、このフォトリフレクタを使って、ハムスターの回転計に挑戦します。

関連するラズベリーパイ記事や制作記録はこちらです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次