直接使用掌控板上read_analog读取值时,误差很大,30摄氏度测量出来显示20摄氏度。于是,想一些方法看怎样来减少误差。
考虑到最大测量电压只有1V,(100摄氏度时是1V).因此尝试减小最大测量电压到1.2V,误差果然小了很多。程序在mpythonx0.33中调试通过。
代码: 全选
from mpython import *
class LM35:
def __init__(self, pin):
if pin not in [0,1,2,3]:
raise IndexError("引脚必须是0,1,2,3")
pinList=[32,33,35,34]
# vmax 最大测量电压
self.vmax = 1.2
self.max_Analog = 4096
self.pin = pin
self.adc=ADC(Pin(pinList[pin]))
self.adc.atten(ADC.ATTN_0DB)
self.adc.width(ADC.WIDTH_12BIT)
def read(self):
val = int(sum([self.adc.read() for i in range(50)]) / 50)
t=int(val*self.vmax*1000/self.max_Analog)/10
return t
if __name__ == "__main__":
t = LM35(2)
while True:
x= t.read()
oled.fill(0)
oled.DispChar(("温度:%s摄氏度" % (x)), 0, 20)
oled.show()