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))