Irrigazione automatica

Buongiorno a tutti,
sono in procinto di realizzare il mio primo vero progetto con arduino ed esattamente irrigazione automatica piante.
La mia idea sarebbe di utilizzare:

  • Arduino nano / pro mini
    Sensore umidità terreno
    Pompa 6V
    Relè 5V
    ESP8266-01
    Led red/green/yellow
    Modulo RTC
    Blynk

Vi spiego brevemente.
Vorrei monitorare su APP BLYNK lo stato delle mie piante e restituirmi l’umidità in % su 3 terreni diversi tramite sensori umidità.
In base alla % di umidità terreno decido se bagnare in automatico/manuale o meno ma solo ad un certo orario prestabilito.

Credo che non sia il progetto impossibile per voi, ma potrebbe esserlo per me visto che sono alle prime armi.

P.S. Accetto consigli sulla realizzazione di questa idea :wink:

Un grazie in anticipo :wink:

Dyno

Ciao
Ci sono diverse discussioni in questo forum
Consiglio di iniziare con un problema alla volta

No, non é impossibile.
Comincia a dividere il progetto nelle sue parti fondamentali e vedere quali sai realizzare ed in quali hai problemi. Fai vedere un programma che faccia, come sai farlo, ognuna delle parti, e mostra se hai problemi, così facendo possiamo partire da una base comune.

  1. …se mi dai 100 EURO lo faccio io il tuo progetto :money_mouth_face: :money_mouth_face: ,cosi non ti resta che fare copia incolla :smiling_imp: :smiling_imp: :smiley: :smiley:

Scherzi a parte in questi giorni anchio sto lavorando su un RTC ed un DHT11…solo per visualizzarlo sù LCD…non è impossibile ne difficilissimo (se ci sono riuscito io con la 3 Media),ma ci vuole un po di attenzione e come dice Silente " dividi il progetto siccome ha parti fondamentali".

Ciao, tutte le cose complesse sono fatte da tante cose più semplici.
Quindi anche se ti sembra complesso il progetto, questo sarà fatto da tante parti più semplici, e gli esempi base per usare i vari componenti sono sufficienti “assemblandoli” a realizzare il progetto ultimo.

Prima di scrivere il codice vero e proprio per arduino, scriviti in italiano cosa deve fare, creati quello che si chiama in informatica algoritmo.
Poi conoscendo i vari passi da fare ti sarà semplice scrivere un codice che le realizzi.

Esempio di parte di algoritmo che dovrà eseguire il codice su arduino.

  1. Leggere continuamente i valori di umidità e salvarli in variabili
  2. Leggere continuamente da modulo RTC ora e minuti e salvarli in variabili
  3. salvare in una variabile se l’irrigazione è attiva o non attiva
  4. Se “irrigazione attiva”, E umidità< di valore minimo, E ORE==mieOre, E MINUTI==mieiMinuti
    Allora attiva relé pompa per x minuti

====================
Non so niente di Blynk, ma vedendo gli esempi disponibili sono sicuro che riuscirai ad utilizzarlo.

Grazie e funzionano i vostri consigli. A breve vi posterò il mio sketch finito così Puso dovrai darmi 150 euro per il progetto :slight_smile:

dino72:
Grazie e funzionano i vostri consigli. A breve vi posterò il mio sketch finito così Puso dovrai darmi 150 euro per il progetto :slight_smile:

Ciao Dino72, anche io sto lavorando a un progetto simile e ti dico per esperienza che l'esp8266 necessita di una alimentazione stabile a 3.3V oltre a massimo 800mA per poter funzionare se non vuoi bruciare la schedina. Blynk seppur sembrasse essere completo e favoloso nasconde dei bug interni... sull'app funziona in un modo e quando inserisci il codice su Arduino relativo al widget che hai scelto in precendenza, ti consiglio di dargli un'occhiata dalla A alla Z perchè per esempio sull'app il primo giorno della settimana è Lunedì mentre sullo sketch per Arduino è Domenica.

Io per questo ci ho rinunciato e sto lavorando alla creazione di una centralina d'irrigazione fatta interamente con arduino uno r3 composta da lcd e rtc collegati tramite i2c, 5 pulsanti collegati al pin analogico 0 per risparmiare quanti più pin possibili e una shield relay a 8 canali.

Se ti può interessare ho già creato una discussione nel forum dove ho cominciato a sviluppare il progetto e spero di finirlo il prima possibile grazie ai consigli e aiuti di chi riesce ad aiutarmi nei vari step, così da non farti mangiare la testa e avere ciò che serve a te bello pronto e fatto :slight_smile:

Salve a tutti,
seguendo i vostri consigli, sono riuscito ad inserire un primo codice che mi riporta circa all’80% del mio progetto

// definizione delle librerie
#include <Wire.h>

// frequency musical notes
#define NOTE_C6  1047
#define NOTE_C3  131
#define NOTE_G3  196

// definizione dei pin
int SensUmiA = 1;
int SensUmiB = 2;
int LedA = 3;
int LedB = 6;
int PompA = 8;
int PompB = 7;
int Buz = 2;
int RedLedA = 5;
int GreenLedA = 4;
int RedLedB = 9;
int GreenLedB = 10;

// variabili
int ValSensA; // Valore del sensore A
int ValSensB; // Valore del sensore B

// definizione degli  oggetti


void setup() {

  /* Vorrei fare in modo che il ValSensA e ValSensB eseguano le letture esattamente alle ore; 00:00 , 06:00 , 12:00 , 18:00 di ogni giorno.
    3 letture a distanza di 5 minuti e trarre la media.
    L'attivazione della pompa A/B con ValSensA/B <300 ma solo dalle 22:00 alle 06:00*/

  // inizializzazione seriale
  Serial.begin(9600);


  // inizializzazione Pin Arduino Nano
  pinMode(Buz, OUTPUT);
  pinMode(LedA, OUTPUT);
  pinMode(LedB, OUTPUT);
  pinMode(PompA, OUTPUT);
  pinMode(PompB, OUTPUT);
  pinMode(RedLedA, OUTPUT);
  pinMode(GreenLedA, OUTPUT);
  pinMode(RedLedB, OUTPUT);
  pinMode(GreenLedB, OUTPUT);

  // inizializzazione ritardo
  delay(5000);
}

void loop() {
  // lettura dei sensori
  ValSensA = analogRead(SensUmiA);
  ValSensB = analogRead(SensUmiB);


  // ricerca range di umidità
  if (analogRead(ValSensA) >= 500) {
    digitalWrite(GreenLedA, HIGH);
    // valore superiore a 500 corrisponde terra bagnata
    delay(250);

  }

  if (analogRead(ValSensB) >= 500) {
    digitalWrite(GreenLedB, HIGH);
    // valore superiore a 500 corrisponde terra bagnata
    delay(250);
  }

  if ((analogRead(ValSensA) > 300) && (analogRead(ValSensA) < 500)) {
    //se il valore è compreso tra 300 e 500 lampeggia led verde
    digitalWrite(GreenLedA, LOW);
    delay(500);
    digitalWrite(GreenLedA, HIGH);
    delay(500);
  }

  if ((analogRead(ValSensB) > 300) && (analogRead(ValSensB) < 500)) {
    //se il valore è compreso tra 300 e 500 lampeggia led verde
    digitalWrite(GreenLedB, LOW);
    delay(500);
    digitalWrite(GreenLedB, HIGH);
    delay(500);
  }

  if (analogRead(ValSensA) < 300) {
    digitalWrite(RedLedA, HIGH);
    // valore inferiore o uguale a 300 accendi led rosso terra secca
    tone(Buz, NOTE_C6, 100); // suona allarme
    delay(250);
    digitalWrite(PompA, HIGH); //attiva pompa A
    noTone(Buz);
    ValSensA = analogRead(SensUmiA);
  }

  if (analogRead(ValSensB) < 300) {
    digitalWrite(RedLedB, HIGH);
    // valore inferiore o uguale a 300 accendi led rosso terra secca
    tone(Buz, NOTE_C6, 100); // suona  allarme
    delay(250);
    digitalWrite(PompB, HIGH); // attiva pompa B
    noTone(Buz);
    ValSensB = analogRead(SensUmiB);
  }

  {
    digitalWrite(PompA, LOW); // spegni pompa A
    digitalWrite(RedLedA, LOW); // spegni led rosso A
  }

  {
    digitalWrite(PompB, LOW); // spegni pompa B
    digitalWrite(RedLedB, LOW); // spegni led rosso B
  }

  delay(500);

}

Ora mi rimane da temporizzare le letture del terreno in determinati orari del giorno eseguendo la media di 3 valori ed attivare la pompa, nel caso il valore sia al di sotto di quello stabilito, solo dalle 22:00 alle 06:00
Accetto suggerimenti e consigli da chiunque

Grazie