from machine import ADC,Pin,I2C,PWM
from time import sleep
from pico_i2c_lcd import I2cLcd
import math
sensor = ADC(26)
servo = PWM(Pin(15))
relay_pin = Pin(2,Pin.OUT)
servo.freq(50)
i2c = I2C(0,sda=Pin(0),scl=Pin(1))
i2c_add = i2c.scan()
lcd = I2cLcd(i2c,i2c_add[0],2,16)
lcd.backlight_on()
lcd.clear()
def sensor_read():
BETA = 3950
value = sensor.read_u16()/64
temp = 1 / (math.log(1 / (1023/value - 1)) / BETA + 1.0 / 298.15) - 273.15
return int(temp)
def lcd_read_temp(tmp):
lcd.move_to(12,0)
lcd.putstr(" ")
lcd.move_to(12,0)
lcd.putstr(str(tmp))
def servo_control(angle):
duty = int(1000 + (angle/180)*8000)
servo.duty_u16(duty)
while True:
temp_c = sensor_read()
lcd.move_to(0,0)
lcd.putstr("Temperature:")
lcd.move_to(14,0)
lcd.putstr("C")
lcd_read_temp(temp_c)
# NORMAL COOLING
if 23 < temp_c < 30:
relay_pin.value(1)
lcd.move_to(0,1)
lcd.putstr("Cooler ON ")
for angle in range(0,90,5):
servo_control(angle)
lcd.move_to(13,1)
lcd.putstr(str(angle))
sleep(0.03)
for angle in range(90,-1,-5):
servo_control(angle)
lcd.move_to(13,1)
lcd.putstr(str(angle))
sleep(0.03)
# HIGH COOLING
elif 31 < temp_c < 45:
relay_pin.value(1)
lcd.move_to(0,1)
lcd.putstr("High Cooling")
for angle in range(0,180,5):
servo_control(angle)
lcd.move_to(13,1)
lcd.putstr(str(angle))
sleep(0.03)
for angle in range(180,-1,-5):
servo_control(angle)
lcd.move_to(13,1)
lcd.putstr(str(angle))
sleep(0.03)
# LOW TEMP
elif temp_c < 15:
relay_pin.value(1)
servo_control(0)
lcd.move_to(0,1)
lcd.putstr("Low Temp ")
# OVERHEAT
elif temp_c > 50:
relay_pin.value(1)
servo_control(0)
lcd.move_to(0,1)
lcd.putstr("OVERHEAT! ")
sleep(3)
relay_pin.value(0)
sleep(5)
break
sleep(0.5)