YouTube: Mäter temperatur med Picon
Jag har några olika projekt på gång där just temperaturen är intressant. För dessa projekt använder jag därför olika temperatursensorer. Men innan jag bygger ett stort projekt så lägger jag lite tid på att testa hur de olika komponenterna fungerar.
I denna veckans avsnitt tittar jag närmare på två olika givare. Den ena är en digital givare, DHT11, den andra är en klassisk NTC termistor.
I avsnittet har jag utvecklat lite kod. Den kan du ta del av här:
from Blinker import Blinker
from machine import Pin
from NTC import NTC
import dht
# Gör så att LED börjar blinka (Pico W), använd 25 på Pico utan WiFi
b = Blinker("LED", freq=1)
b.start()
sensor = dht.DHT11(Pin(16)) # DHT11:an finns på pin 16
sensor.measure()
temp = sensor.temperature()
humidity = sensor.humidity()
print("DHT11: {} grader C, {}%".format(temp, humidity))
ntc = NTC(26, Rref = 9860) # NTC finns på pin 26 (ad0)
tempC = ntc.readT()
print("NTC: {} grader C".format(round(tempC)))I koden här över använder jag två klasser. Följande klass heter Blinker och sparas i en fil som heter Blinker.py
from machine import Pin, Timer
import time
class Blinker:
def __init__(self, pin, freq=1):
self.led = Pin(pin, Pin.OUT)
self.timer = Timer()
self.freq=freq
if self.freq < 1:
self.freq = 1
def blink(self, timer):
self.led.toggle()
def start(self, freq = -1):
if freq < 1:
freq = self.freq
self.timer.init(freq=freq, mode=Timer.PERIODIC, callback=self.blink)
def stop(self):
self.timer.deinit()I denna koden visar jag min NTC-klass som ansvarar för inläsning och omvandling från spänning till temperatur. Spara den i en fil du kallar för NTC.py.
from machine import ADC
import math
class NTC:
# A, B, C is the Steinhart-Hart coefficients for the Thermistor (specific for the thermistor)
# Vref = is the voltage given the voltage divider
# Rref = is the value of the resistor in the voltage divider
def __init__(self, pin, A = 1.624e-3, B = 1.235e-4, C = 9.124e-7, Vref = 3.3, Rref = 10e3):
self.A = A
self.B = B
self.C = C
self.ADC = ADC(pin)
self.Vref = Vref
self.Rref = Rref
# Returns the current temperature from the configured pin
def readT(self):
# Read voltage over Rtemp from AD-converter
adc0 = self.ADC.read_u16()
# Convert uint16 -> value between 0 and Vref
Vout = (self.Vref/65535)*adc0
# Calculate Resistance of Thermistor on Pin
Rt = (Vout * self.Rref) / (self.Vref - Vout)
# Use Steinhart–Hart equation to calculate Termperature
# https://en.wikipedia.org/wiki/Steinhart%E2%80%93Hart_equation
TempK = 1 / (self.A + (self.B * math.log(Rt)) + self.C * math.pow(math.log(Rt), 3))
# Convert Temperature in Kelvin to Temperature in Celsius
TempC = TempK - 273.15
return TempCOm du gillar avsnittet, varför inte ge det en 👍🏻? Passa också på att prenumerera på kanalen så missar du inte liknande innehåll i framtiden.