from machine import Pin, ADC, I2C
import time
import uasyncio as asyncio
from lcd_api import LCD_API
from i2c_lcd import I2cLcd
# Configuración del pin analógico
analogInPin = ADC(Pin(26)) # En la Raspberry Pi Pico, el pin ADC0 corresponde al GPIO 26
# Configuración de la pantalla LCD
I2C_ADDR = 0x27 # Dirección I2C del LCD (puede ser 0x27 o 0x3F, depende del modelo)
LCD_ROWS = 2
LCD_COLS = 16
i2c = I2C(0, scl=Pin(1), sda=Pin(0)) # Configura el bus I2C, asegúrate de usar los pines correctos
lcd = I2cLcd(i2c, I2C_ADDR, LCD_ROWS, LCD_COLS)
def leer_lecturas():
buf = []
for i in range(10):
# Leer valor analógico y almacenar en el búfer
buf.append(analogInPin.read_u16())
time.sleep(0.01) # Retraso de 10 ms
return buf
def calcular_promedio_y_conversion(buf):
# Ordenar el búfer para descartar valores extremos
buf.sort()
# Promedio de los valores descartando los más bajos y más altos
inValue = sum(buf[2:8])
# Conversión a voltaje en mV
PHVol = inValue * 100 * 3.3 / 65535 / 6 # 3.3V es el voltaje de referencia en Raspberry Pi Pico
return PHVol
def calcular_pH(PHVol):
# Calcular el pH usando la ecuación proporcionada
return -0.0554 * PHVol + 22.236
def mostrar_en_lcd(pH, PHVol):
# Limpiar la pantalla LCD
lcd.clear()
# Mostrar voltaje
lcd.putstr("Voltaje: {:.2f} mV".format(PHVol))
lcd.move_to(0, 1) # Mover a la segunda línea
# Mostrar pH
lcd.putstr("pH: {:.2f}".format(pH))
def main():
while True:
buf = leer_lecturas()
PHVol = calcular_promedio_y_conversion(buf)
pH = calcular_pH(PHVol)
# Mostrar resultados en LCD
mostrar_en_lcd(pH, PHVol)
# Esperar 2 segundos
time.sleep(2)
if __name__ == '__main__':
main()