"""
Module for using the AP Graduate IoT board in a more userfriendly way.
Hardware:
GPIO Hardware
2-9 led1-led8
10 button 2
22 button 1
25 led0 (on raspberry pi)
ADC Hardware
0 temperature sensor (NTC thermistor via spanningsdeler)
28 turn knob
"""
from machine import Pin, ADC
from time import sleep
from math import log
MAXLED = 8 # Max aantal leds
# LEDs
def led(n, use_pin=False):
if use_pin:
return Pin(n, Pin.OUT)
if n == 0:
return Pin(25, Pin.OUT)
if 2 <= n <= 9:
return Pin(n, Pin.OUT)
raise ValueError(f"Invalid LED number: {n}. Must be 0 or 2-{MAXLED}.")
# Buttons
def button(n):
if n == 1:
return Pin(22, Pin.IN, Pin.PULL_UP)
elif n == 2:
return Pin(10, Pin.IN, Pin.PULL_UP)
else:
raise ValueError(f"Invalid button number: {n}. Must be 1 or 2.")
# Temperatuursensor NTC via spanningsdeler
def read_temperature_ntc():
"""
Lees temperatuur van een NTC-thermistor aangesloten via spanningsdeler op ADC0.
Retourneert temperatuur in graden Celsius.
"""
sensor = ADC(0)
reading = sensor.read_u16()
voltage = reading * 3.3 / 65535
Vcc = 3.3
R_fixed = 10000 # Ohm, vaste weerstand in spanningsdeler
B = 3950 # B-waarde NTC (pas aan indien anders)
R0 = 10000 # Weerstand bij 25°C (Ohm)
# Bereken NTC weerstand
try:
R_ntc = R_fixed * voltage / (Vcc - voltage)
except ZeroDivisionError:
R_ntc = 0
if R_ntc > 0:
T0 = 25 + 273.15 # referentietemperatuur Kelvin
inv_T = (1 / T0) + (1 / B) * log(R_ntc / R0)
T = 1 / inv_T
temp_c = T - 273.15
else:
temp_c = None # foutwaarde
print(f"ADC: {reading}, Voltage: {voltage:.3f} V, R_ntc: {R_ntc:.1f} Ω, Temp: {temp_c if temp_c else 'Error'} °C")
return temp_c
# Turn knob
def read_turn_knob():
knob = ADC(28)
return knob.read_u16()
# Test code
if __name__ == '__main__':
print("Test LEDs:")
for i in range(2, MAXLED + 1):
print(f" LED {i} aan")
led(i).on()
sleep(0.5)
led(i).off()
print("\nTest NTC temperatuur sensor:")
temp = read_temperature_ntc()
if temp is not None:
print(f" Temperatuur: {temp:.2f} °C")
else:
print(" Fout bij uitlezen temperatuur.")
print("\nTest draaisensor:")
knob_value = read_turn_knob()
print(f" Draaisensor waarde: {knob_value}")
Button1
Button2