最終更新日
記事公開日

【ラズパイPico】CDS光センサーでAD変換(アナログ→デジタル変換)

Raspberry Pi Picoを使って、AD変換(アナログ→デジタル変換)をやってみました。

光センサを手でふさぐとLEDが消灯し、手を離すとまたLEDの点灯が始まります。

回路・配線図

ラズパイPicoの3.3V出力ピンをCDS(光センサー)に繋ぎ、指定した電圧以下になったタイミングで、LEDが点滅するサンプル回路になります。

プログラム(MicroPython)

# ハードウェア関連のライブラリを読み込み
import machine

# 時間関連のライブラリを読み込み
import utime

# GP17(22Pin)を出力ピンに設定、プルダウン(初期値):0
led = machine.Pin(17, machine.Pin.OUT,machine.Pin.PULL_DOWN)

# ADC0(31Pin)をADC変換ピンに設定
cds = machine.ADC(0)

# 永久リピート
while True:
    
    # read_u16() ・・・アナログ値を読込み[0-65535]の整数を返す関数
    # 16bit・2進数の最大値:1111111111111111 ⇒ 10進数の最大値:65535
    # 3.3/65535の意味:電圧の最大値3.3Vを、65535という数値にあてはめるための計算
    adc = cds.read_u16() * (3.3 / 65535)
    
    # 2.6V以上のとき実行
    if adc > 2.6:
    
        # LEDをON
        led.value(1)
        
        # 0.2秒待機
        utime.sleep(0.2)
        
        # LEDをOFF
        led.value(0)
        
        # 0.2秒待機
        utime.sleep(0.2)
        
    else:
        
         # LEDをOFF
        led.value(0)

技術解説

ラズパイPicoには、アナログ信号をデジタル信号に変換する『A/D変換回路』が組み込まれています。

今回紹介した回路では、そのA/D変換回路が非常に重要な役目を担っています。

なぜ、A/D変換が必要なのか?

デジタル信号には、「0」と「1」しか存在していません。

例えば、「3.3V」というアナログ信号を、そのままラズパイのPinが受け取ったとき、どんなデジタル信号に変換されるでしょうか?

正解は「1」という値に変換されます。

では、「2.4V」の場合は?

正解は「1」

では、「1.2V」の場合は?

これも「1」

つまり、アナログ信号のままでは数値を読み取ることができないのです。

CDS(光センサー)とは?

今回、センサーにCDSを使用しました。

CDS(光センサー)とは、光の強さによって抵抗が変わる電子部品です。

CDSセル(5mmタイプ) - 秋月電子通商

フタを閉めたり、物体が目の前に移動してきたときのトリガーとして使います。

CDSに電圧をかけて、明るいとき・暗いときの電圧の違いを読み取るのが、一般的な使い方です。

  • 明るいときの抵抗:小さい
  • 暗いときの抵抗:大きい

例えば、3.3Vをかけた時、CDSより後の電圧はこうなります↓

  • 明るいとき:2.9V
  • 暗いとき:0.9V

しかし、このままではデジタル信号においては、どちらも「1」としか認識されません。

そこで、A/D変換を使います。

プログラム上のA/D変換処理

A/D変換されたデータは、「16bit」で送られてきます。

例えば、

  • 3.3Vなら → 1111111111111111
  • 2.4Vなら → 1011101000101101
  • 0Vなら → 0000000000000000

という感じで、16桁の1と0だけで表現されるデータです。

プログラム上では、これを人間が理解する上で分かりやすいような数字のデータに変換しています。

adc = cds.read_u16() * (3.3 / 65535)

これでようやく電圧の値を数値として、プログラム上で扱うことができるようになります。

関連情報

運営者プロフィール
コダマ

職業はIT系フリーランス。過去、電子配線業務の経験が10年ある為、はんだづけも得意です。宮崎県在住、30代・2児の父親。

プロが教える!イチからわかるハンダ付けのコツ(工学社)の著者です。

カテゴリー