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.

ESP32 com sensor de umidade do solo Diagrama de ligação da bomba de controle automático
ESP32 com sensor de umidade do solo Diagrama de ligação da bomba de controle automático
Conecte o módulo do sensor de umidade do solo e o módulo de relé ao ESP32
Conecte o módulo do sensor de umidade do solo e o módulo de relé ao ESP32
Monitore o nível de umidade do solo com ESP32 e tela LCD
Monitore o nível de umidade do solo com ESP32 e tela LCD
Monitore o status da bomba com o ESP32 e o módulo de tela LCD
Monitore o status da bomba com o ESP32 e o módulo de 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:
error0
fb-share-icon
Tweet 20
fb-share-icon20