import machine
from machine import Pin, PWM # Se importa la librería pwm
from time import sleep_ms
from lcd import LCD
import random
from math import log
frequency = 5000
Motor = PWM(Pin(5), frequency)# Se crea on objeto pwm 5 Khz
# Configuramos el ADC
pin34 = machine.Pin(34) # Se inicializa el PIN34
adc34 = machine.ADC(pin34) # Se inicializa la lectura ADC en el PIN34
adc34.atten(machine.ADC.ATTN_11DB) # 6 dB de atenuación. Rango de lectura entre 0.0V y 2.0V
adc34.width(machine.ADC.WIDTH_12BIT) # Lectura con precisión de 9 bits
lcd = LCD(23,21,19,18,4,2) # RS, E, D4, D5, D6, D7
lcd.clear() # Limpia la pantalla LCD
BETA = 3950 # es el coeficiente del beta del termistor
KELVIN_CONSTANT = 273.15
#Funciones
def adc_to_celsius(x):
return (1 / (log(1/(4096/x - 1))/BETA + 1/298.15) - KELVIN_CONSTANT)
lcd.move_to(0,0)
lcd.putstr("Micros 32 bits")
lcd.move_to(4,1)
lcd.putstr("UDI 2023")
sleep_ms(2000)
for x in range(15):
lcd.shift_right()
sleep_ms(300)
for x in range(15):
lcd.shift_left()
sleep_ms(300)
sleep_ms(500)
lcd.clear()
sleep_ms(200)
lcd.move_to(2,0)
lcd.putstr("Control Motor")
lcd.move_to(5,1)
lcd.putstr(chr(223)+"C")
lcd.move_to(9,1)
lcd.putstr("V=")
while True:
# Leemos el valor del ADC
lectura = adc34.read()
Temperatura = adc_to_celsius(lectura)
lcd.move_to(0,1)
lcd.putstr(str(round(Temperatura, 1)))
if Temperatura >=0:
duty_cycle = int(Temperatura*1023/80)
lcd.move_to(11,1)
Porcentaje = int(duty_cycle*100/1023+1)
lcd.putstr(str(Porcentaje)+"% ")
Motor.duty(duty_cycle) # Se varía el ciclo util del pwm
sleep_ms(500)
else:
Motor.duty(0) # Se varía el ciclo util del pwm
lcd.move_to(11,1)
lcd.putstr("0% ")
sleep_ms(500)