Note
¡Hola, bienvenido a la Comunidad de Aficionados a Raspberry Pi, Arduino y ESP32 de SunFounder en Facebook! Profundiza en Raspberry Pi, Arduino y ESP32 con otros entusiastas.
¿Por qué unirse?
- Soporte de expertos: Resuelve problemas posventa y desafíos técnicos con ayuda de nuestra comunidad y equipo.
- Aprender y compartir: Intercambia consejos y tutoriales para mejorar tus habilidades.
- Vistas previas exclusivas: Obtén acceso anticipado a anuncios de nuevos productos y avances.
- Descuentos especiales: Disfruta de descuentos exclusivos en nuestros productos más nuevos.
- Promociones festivas y sorteos: Participa en sorteos y promociones de fiestas.
👉 ¿Listo para explorar y crear con nosotros? Haz clic en [] y únete hoy!
¡Bienvenido al proyecto Monitor de Plantas!
En este proyecto, utilizaremos una placa ESP32 para crear un sistema que nos ayude a cuidar de nuestras plantas. Con este sistema, podemos monitorear la temperatura, humedad, humedad del suelo y niveles de luz de nuestras plantas, y asegurarnos de que reciban el cuidado y atención que necesitan para prosperar.
Componentes Requeridos
Para este proyecto, necesitamos los siguientes componentes.
Es definitivamente conveniente comprar un kit completo, aquí está el enlace:
Nombre | ELEMENTOS EN ESTE KIT | ENLACE |
---|---|---|
Kit de Inicio ESP32 | 320+ |
También puedes comprarlos por separado en los enlaces a continuación.
INTRODUCCIÓN DEL COMPONENTE | ENLACE DE COMPRA |
---|---|
cpn_esp32_wroom_32e |
|
cpn_esp32_camera_extension |
- |
cpn_breadboard |
|
cpn_wires |
|
cpn_resistor |
|
cpn_dht11 |
|
cpn_lcd |
|
cpn_pump |
- |
cpn_l293d |
- |
cpn_button |
|
cpn_photoresistor |
|
cpn_soil_moisture |
Esquemático
El sistema utiliza un sensor DHT11 para medir los niveles de temperatura y humedad del entorno circundante. Mientras tanto, un módulo de humedad del suelo se utiliza para medir el nivel de humedad del suelo y un fotoresistor se utiliza para medir el nivel de luz. Las lecturas de estos sensores se muestran en una pantalla LCD, y se puede controlar una bomba de agua usando un botón para regar la planta cuando sea necesario.
IO32 tiene una resistencia interna de pull-down de 1K, y por defecto, está en un nivel lógico bajo. Cuando se presiona el botón, se establece una conexión a VCC (alto voltaje), resultando en un nivel lógico alto en IO32.
Conexión
Note
Se recomienda aquí insertar la batería y luego deslizar el interruptor en la placa de expansión a la posición ON para activar el suministro de la batería.
Código
Note
- Abre el archivo
6.8_plant_monitor.py
ubicado en el caminoesp32-starter-kit-main\micropython\codes
, o copia y pega el código en Thonny. Luego, haz clic en "Ejecutar script actual" o presiona F5 para ejecutarlo. - Asegúrate de seleccionar el intérprete "MicroPython (ESP32).COMxx" en la esquina inferior derecha.
from machine import ADC, Pin
import time
import dht
from lcd1602 import LCD
# DHT11
dht11 = dht.DHT11(Pin(13))
# Humedad del suelo
moisture_pin = ADC(Pin(14))
moisture_pin.atten(ADC.ATTN_11DB)
# Fotoresistor
photoresistor = ADC(Pin(35))
photoresistor.atten(ADC.ATTN_11DB)
# Botón y bomba
button = Pin(32, Pin.IN)
motor1A = Pin(27, Pin.OUT)
motor2A = Pin(26, Pin.OUT)
# Configuración del LCD I2C1602
lcd = LCD()
# Rotar la bomba
def rotate():
motor1A.value(1)
motor2A.value(0)
# Detener la bomba
def stop():
motor1A.value(0)
motor2A.value(0)
estado_del_boton = False
# Definir la función de callback del botón para alternar el estado del botón
def button_callback(pin):
global estado_del_boton
estado_del_boton = not estado_del_boton
# Adjuntar la función de callback del botón al borde ascendente del pin del botón
button.irq(trigger=Pin.IRQ_RISING, handler=button_callback)
pagina = 0
temp = 0
humi = 0
try:
while True:
# Si el botón está presionado y el estado del botón es Verdadero
if estado_del_boton:
print("rotar")
rotate()
# Si el botón está presionado de nuevo y el estado del botón es Falso
if not estado_del_boton:
print("detener")
stop()
time.sleep(2)
# Limpiar la pantalla LCD
lcd.clear()
# Alternar el valor de la variable pagina entre 0 y 1
pagina=(pagina+1)%2
# Cuando la pagina es 1, mostrar temperatura y humedad en el LCD1602
if pagina is 1:
try:
# Medir temperatura y humedad
dht11.measure()
# Obtener valores de temperatura y humedad
temp = dht11.temperature()
humi = dht11.humidity()
except Exception as e:
print("Error: ", e)
# Mostrar temperatura y humedad
lcd.write(0, 0, "Temp: {}\xDFC".format(temp))
lcd.write(0, 1, "Humi: {}%".format(humi))
# Si la pagina es 0, mostrar la humedad del suelo y luz
else:
luz = photoresistor.read()
humedad = moisture_pin.read()
# Limpiar la pantalla LCD
lcd.clear()
# Mostrar el valor de la humedad del suelo y luz
lcd.write(0, 0, f"Humedad: {humedad}")
lcd.write(0, 1, f"Luz: {luz}")
except KeyboardInterrupt:
# Detener el motor cuando se captura KeyboardInterrupt
stop()
- Cuando el código está ejecutando, el LCD I2C1602 muestra alternativamente temperatura y humedad, así como valores analógicos de humedad del suelo e intensidad de luz, con un intervalo de 2 segundos.
- Presiona el botón para iniciar la bomba de agua, y presiónalo de nuevo para detener la bomba de agua.
Note
Si el código y la conexión son correctos, pero el LCD aún no muestra ningún contenido, puedes ajustar el potenciómetro en la parte trasera para aumentar el contraste.