Nota

Ciao, benvenuto nella community di SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts su Facebook! Approfondisci le tue conoscenze su Raspberry Pi, Arduino e ESP32 insieme ad altri appassionati.

Perché Unirsi?

  • Supporto Esperti: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra community e del nostro team.

  • Impara & Condividi: Scambia consigli e tutorial per migliorare le tue competenze.

  • Anteprime Esclusive: Accedi in anteprima agli annunci di nuovi prodotti e alle anticipazioni.

  • Sconti Speciali: Goditi sconti esclusivi sui nostri prodotti più recenti.

  • Promozioni Festive e Giveaway: Partecipa ai giveaway e alle promozioni festive.

👉 Pronto a esplorare e creare con noi? Clicca su [qui] e unisciti oggi stesso!

6.8 Monitor per le Piante

Benvenuto nel progetto Monitor per le Piante!

In questo progetto utilizzeremo una scheda ESP32 per creare un sistema che ci aiuterà a prenderci cura delle nostre piante. Con questo sistema, potremo monitorare la temperatura, l’umidità, l’umidità del suolo e i livelli di luce delle nostre piante, assicurandoci che ricevano la cura e l’attenzione necessarie per prosperare.

Componenti Necessari

In questo progetto, abbiamo bisogno dei seguenti componenti.

È sicuramente conveniente acquistare un kit completo, ecco il link:

Nome

OGGETTI IN QUESTO KIT

LINK

ESP32 Starter Kit

320+

ESP32 Starter Kit

Puoi anche acquistarli separatamente dai link qui sotto.

INTRODUZIONE AI COMPONENTI

LINK PER L’ACQUISTO

ESP32 Scheda

ACQUISTA

Estensione Fotocamera ESP32

ACQUISTA

Breadboard

ACQUISTA

Cavi Jumper

ACQUISTA

Resistore

ACQUISTA

Sensore di Temperatura e Umidità DHT11

ACQUISTA

I2C LCD1602

ACQUISTA

Pompa Centrifuga

-

L293D

-

Pulsante

ACQUISTA

Fotoresistenza

ACQUISTA

Modulo di Umidità del Suolo

ACQUISTA

Schema

../../_images/circuit_6.8_plant_monitor_l293d.png

Il sistema utilizza un sensore DHT11 per misurare i livelli di temperatura e umidità dell’ambiente circostante. Nel frattempo, un modulo per l’umidità del suolo viene utilizzato per misurare il livello di umidità del suolo e una fotoresistenza viene utilizzata per misurare il livello di luce. Le letture di questi sensori vengono visualizzate su uno schermo LCD, e una pompa d’acqua può essere controllata tramite un pulsante per irrigare la pianta quando necessario.

IO32 ha una resistenza pull-down interna di 1K, e per impostazione predefinita, si trova a un livello logico basso. Quando il pulsante viene premuto, stabilisce una connessione a VCC (alta tensione), risultando in un livello logico alto su IO32.

Cablatura

Nota

Si consiglia di inserire la batteria e poi far scorrere l’interruttore sulla scheda di espansione nella posizione ON per attivare l’alimentazione della batteria.

../../_images/6.8_plant_monitor_l293d_bb.png

Codice

Nota

  • Apri il file 6.8_plant_monitor.py situato nel percorso esp32-starter-kit-main\micropython\codes, oppure copia e incolla il codice in Thonny. Successivamente, fai clic su «Esegui lo script corrente» o premi F5 per eseguirlo.

  • Assicurati di selezionare l’interprete «MicroPython (ESP32).COMxx» nell’angolo in basso a destra.

from machine import ADC, Pin
import time
import dht
from lcd1602 import LCD

# DHT11
dht11 = dht.DHT11(Pin(13))

# Umidità del suolo
moisture_pin = ADC(Pin(14))
moisture_pin.atten(ADC.ATTN_11DB)

# Fotoresistenza
photoresistor = ADC(Pin(35))
photoresistor.atten(ADC.ATTN_11DB)

# Pulsante e pompa
button = Pin(32, Pin.IN)

motor1A = Pin(27, Pin.OUT)
motor2A = Pin(26, Pin.OUT)

# Configurazione I2C LCD1602
lcd = LCD()

# Ruota la pompa
def rotate():
motor1A.value(1)
motor2A.value(0)

# Ferma la pompa
def stop():
motor1A.value(0)
motor2A.value(0)

button_state = False

# Definisci la funzione di callback del pulsante per alternare lo stato del pulsante
def button_callback(pin):
global button_state
button_state = not button_state

# Collega la funzione di callback del pulsante al fronte di salita del pin del pulsante
button.irq(trigger=Pin.IRQ_RISING, handler=button_callback)

page = 0
temp = 0
humi = 0

try:
while True:

      # Se il pulsante viene premuto e lo stato del pulsante è True
      if button_state:
            print("rotate")
            rotate()

      # Se il pulsante viene premuto di nuovo e lo stato del pulsante è False
      if not button_state:
            print("stop")
            stop()
      time.sleep(2)

      # Cancella il display LCD
      lcd.clear()

      # Alterna il valore della variabile page tra 0 e 1
      page=(page+1)%2

      # Quando page è 1, visualizza temperatura e umidità sul LCD1602
      if page is 1:
            try:
            # Misura temperatura e umidità
            dht11.measure()

            # Ottieni i valori di temperatura e umidità
            temp = dht11.temperature()
            humi = dht11.humidity()
            except Exception as e:
            print("Error: ", e)

            # Visualizza temperatura e umidità
            lcd.write(0, 0, "Temp: {}\xDFC".format(temp))
            lcd.write(0, 1, "Humi: {}%".format(humi))

      # Se page è 0, visualizza l'umidità del suolo e la luce
      else:
            light = photoresistor.read()
            moisture = moisture_pin.read()

            # Cancella il display LCD
            lcd.clear()

            # Visualizza il valore di umidità del suolo e luce
            lcd.write(0, 0, f"Moisture: {moisture}")
            lcd.write(0, 1, f"Light: {light}")

except KeyboardInterrupt:
# Ferma il motore quando viene catturato un KeyboardInterrupt
stop()
  • Quando il codice è in esecuzione, l’I2C LCD1602 visualizza alternativamente temperatura e umidità, così come i valori analogici di umidità del suolo e intensità della luce, con un intervallo di 2 secondi.

  • Premi il pulsante per avviare la pompa dell’acqua e premilo di nuovo per fermarla.

Nota

Se il codice e la cablatura sono corretti, ma l’LCD non riesce ancora a visualizzare alcun contenuto, puoi regolare il potenziometro sul retro per aumentare il contrasto.