JUGEMテーマ:電子工作


ESP32で電力測定したくて、秋月から電流センサーを買ったんですが、
 高精度電流センサー(CTセンサー) 分割型 Φ10mm
 [SR-3704-150N]通販コード P-08960
その前にESP32のADCの使い方の研究です。
普通につないでやってみたけどうまく行かなくて
センサーとつながないで
可変抵抗で分圧して
 

 
測定しても誤差が平気で100とかなるので、
こんなの使えねーじゃんとか色々やってみたところ、
100回程度の平均にすれば、そんなに誤差でないことが判明しておりますので
この方法でなんとか出来ると思いました。
 
あと、下に書きましたが減衰率が指定出来て、
ATTN_11DBにすれば、3.3V入れても大丈夫っぽいので、
このほうが回路も楽になります。
ESPは1.1Vまでしか測れませんってずっと前にESP8266で試したときから
思い込んでおりましたのでこれは僥倖ですね。
 
■adc0.width(machine.ADC.WIDTH_12BIT)
 解像度と言うのだろうか?
 ESP32の場合ADCで取得する値が12BITが最大なんで普通はそのまま使えばいいんだと思うんですが
 その解像度を調整できるみたい。
 machine.ADC.WIDTH_9BIT 0~511  
 machine.ADC.WIDTH_10BIT 0~1023  
 machine.ADC.WIDTH_11BIT 0~2047  
 machine.ADC.WIDTH_12BIT 0~4095 (デフォルト)
 デフォルトが12BITなので特に調整していないです。
 
■adc0.atten(machine.ADC.ATTN_11DB)
 
 減衰率とのことで、デフォルトのATTN_0DBだと、
 1Vぐらいで4095になっちゃうところを調整できるみたい。
 レンジの設定ですね。
 
 ATTN_11DBにすると、3.3Vで取得できる値が4095になるっぽいですね。
 
 そのほかにも以下のものが設定できるメモ
 machine.ADC.ATTN_0DB  0dB    (デフォルト)
 machine.ADC.ATTN_2_5DB 2.5dB     
 machine.ADC.ATTN_6DB  6dB     
 machine.ADC.ATTN_11DB 11dB
 

■ソース

 

import utime
import machine

pin36=machine.Pin(36, machine.Pin.IN)
adc0 = machine.ADC(pin36)
adc0.atten(machine.ADC.ATTN_11DB)

while True :
        val = 0
        min = 4096
        max = 0
        for i in range(50):
          total = 0
          count = 0
          for i in range(240):
                val = adc0.read()
                total = total + val
                count = count + 1
          try :
            ave = total / count
            if( min > ave) :
                min = ave
            if( max < ave) :
                max = ave
          except:
            print("dev-err")
        pp = max - min
        print(str(min)+"-"+str(max))