Bomba de controle automático ESP32 usando sensor de umidade do solo com LCD (MicroPython)
Controle automático da bomba de água com MicroPython. Usando a placa ESP32 e o sensor de umidade do solo. Ligue a bomba de água se o nível de umidade do solo for baixo. Desligue a bomba de água se o nível de umidade do solo for alto. Mostrar o status na tela LCD.




Código MicroPython – Bomba de controle automático ESP32 usando sensor de umidade do solo com tela LCD
from machine import Pin, SoftI2C
from machine import Pin, ADC
from i2c_lcd import I2cLcd
import time
import _thread
# PUMP
pump = Pin(33, Pin.OUT)
pump.off()
# LCD
i2c = SoftI2C(scl=Pin(22), sda=Pin(21),freq=100000)
lcd = I2cLcd(i2c, 0x27,2,16)
time.sleep(1)
lcd.clear()
# Soil Moisture
soil = ADC(Pin(35))
m = 100
min_moisture=0
max_moisture=4095
soil.atten(ADC.ATTN_11DB)       #Full range: 3.3v
soil.width(ADC.WIDTH_12BIT)     #range 0 to 4095
def check_moisture():
    print('Check Moisture Starting...')
    global m
    while True:
        try:
            soil.read()
            time.sleep(2)
            m = (max_moisture-soil.read())*100/(max_moisture-min_moisture)
            moisture = 'Soil Moisture: {:.1f} %'.format(m)
            print("Soil Moisture: " + "%.1f" % m +"% (adc: "+str(soil.read())+")")
            time.sleep(5)
        except:
            pass
# START
text = 'Starting...'
lcd.putstr(text)
# RUN
global pump_status
pump_status = 'OFF'
def show_lcd():
    while True:
        try:
            moisture = 'Moisture: {:.1f} %'.format(m)
            pump_s = 'PUMP: {:}'.format(pump_status)
            lcd.clear()
            lcd.putstr(pump_s)
            time.sleep(2)
            lcd.clear()
            lcd.putstr(moisture)
            time.sleep(2)
        except:
            pass
def auto_pump():
    global pump_status
    while True:
        if m < 20:
            time.sleep(1)
            pump.on()
            pump_status = 'ON (AUTO)'
            time.sleep(5)    # TURN ON PUMP 5 sec
            pump.off()
            pump_status = 'OFF (AUTO)'
            time.sleep(10)
        else:
            pass
_thread.start_new_thread(check_moisture,())
_thread.start_new_thread(show_lcd,())
_thread.start_new_thread(auto_pump,())
Please follow and like us:
 
			