Samples_ADC - gfd-dennou-club/mrubyc-esp32 GitHub Wiki

はじめに

ADC クラスのメソッドについては,Class_ADC を参照されたい.

AD 変換の基礎

アナログセンサの出力電力はアナログ値 (連続値) であるのに対して, マイコンが扱えるのはデジタル値 (離散値) である.プログラム処理するためには アナログ値からデジタル値に変換する必要があり,この機能を提供するのが A/D 変換である.

アナログ値からデジタル値に変換する場合には,分解能を指定する必要がある. 以下の図のように分解能を 2 bit にすると,2 の 2 乗の 4 階調でアナログ値が 表現される.分解能を高くすれば,計算リソースが余計に使われるが, デジタル値とアナログ値の誤差は小さくなる.本ライブラリでは分解能は 12 bit で固定している.

image

プログラム例

アナログセンサからの読み込み例

adc39 = ADC.new(39)
loop do
  puts( adc39.read_raw )   #電圧に変換する前の数値
  puts( adc39.read)        #電圧
  sleep 1
end

サーミスタ温度計での測定

教育ボードのサーミスタ温度計 を使う場合のプログラム例

adc39 = ADC.new( 39 )

B = 3435.0
To = 25.0
V = 3300.0
Rref = 10.0

loop do
  voltage = adc39.read() * 1000.0  # V -> mV
  temp = 1.0 / ( 1.0 / B * Math.log( (V - voltage) / (voltage/ Rref) / Rref) + 1.0 / (To + 273.0) ) - 273.0
  puts("#{voltage} V")
  puts("#{sprintf('%.2f',temp)} C")  #小数点以下 2 桁まで表示
  sleep(2)
end