Orto botanico

Blog Image

Orto botanico

  • Monti Cecilia
  • November 19, 2020

In questo post parleremo di come si costruisce un irrigazione automatica per il nostro orto e per le nostre fioriere.
Il progetto si basa su Arduino.Per il progetto useremo i seguenti materiali:
- Arduino Uno
- Arduino Yun
- Shield  V2 Solar Charger 
- 2 moduli Bluetooth HC-05
- 2 Mini Breadboard 
- Sensore di umidità e temepratura DHT11
- Relé
- Pannello solare 5W 7500-SOLPAN1W
- Batteria da 9V
- Batteria polimeri di litio 3,7V 500MA

Tutti i prodotti sono acquistabili sul sito www.futurashop.it

Per la realizzazione del sistema di irrigazione abbiamo utilizzato materiale della Claber per l’irrigazione a goccia reperibile facilmente in qualsiasi negozio di giardinaggio quali:
- Elettrovalvola 9V
- Tubo collettore
- Rubinetti
- Tappi di chiusura
- Presa a due vie 

Per quanto riguarda la parte di stampa 3D abbiamo realizzato una scatola che contenesse le parte elettroniche http://www.thingiverse.com/thing:734474 e l’Arduino e una casetta in cui alloggiate la scatola di Arduino così da tenerla lontana dalla pioggia http://www.thingiverse.com/thing:734480
Inoltre abbiamo realizzato dei supporti da muro per l’elettrovalvola.

Per cominciare abbiamo costruito il sistema di irrigazione con il materiale Claber creando 3 circuiti differenti di irrigazione tramite l’utilizzo di rubinetti uno per l’orto vaso e due per due fioriere, infine li abbiamo collegati tutti al circuito primario. 
Ciascun circuito è collegato al circuito primario e all’elettrovalvola che permetterà l’uscita di acqua solo quando l’Arduino la aprirà.

Nelle foto qui sotto trovate il circuito costruito con il materiale Claber:

Nella foto qui a lato potete vedere il circuito numero 2 
che serve per irrigare l’orto.

In questa foto vedere il gocciolatore e il tappo di chiusura del circuito numero 2 .

In queste foto potete vedere i rubinetti di apertura del circuito che permettono di irrigare l’orto o il vaso anche in momenti differenti.

Nella foto a lato si vede l’elettrovalvola collegata a un circuito
per vederne il funzionamento.

Dopo aver realizzato il sistema di irrigazione, si può procedere al circuito elettronico.La scheda Arduino Uno ci permetterà di rilevare la temperatura atmosferica, l’umidità dell’aria e riceverà i comandi dalla scheda Arduino Yun, installata in casa, su quando attivare l’elettrovalvola per irrigare i vasi.Abbiamo collegato l’Arduino Uno e lo Shield Solar Charger. Per motivi di spazio abbiamo collocato la mini breadboard sulla shield Solar Charger così da mantenere le dimensioni della scatola 3D ridotte.Sulla mini breadboard abbiamo messo il sensore di umidità e temperatura, il modulo HC-05 e le resistenze per abbassare la tensione da 5V a 3.3V, tensione a cui lavora il modulo bluetooth.  Infine abbiamo collegato il Relè che controllerà l’elettrovalvola alla scheda Arduino.

Vediamo ora la scheda Yun che, oltre a inviare il comando di apertura dell’elettrovalvola, raccoglierà i dati di temperatura e umidità per inviarli alla piattaforma Emon CMS dove sarà possibile osservare l’andamento di questi valori nell’arco della giornata.

Di seguito gli sketch da caricare su Arduino. 
Arduino Uno (Esterno)#include <SoftwareSerial.h>#include <dht.h>
dht DHT;#define DHT11_PIN 5const int sensorPowerLed = 12;
const int gLedPin = 13;const int gRxPin = 10;const int gTxPin = 11;const int analogInPin = A0;  // Analog input pin that the VBAT pin is attached toconst int powPin = 6;  // power relè waterconst int owPin = 7;  // control relè to open water
const int gIsMaster = 1;
int BatteryValue = 0;        // value read from the VBAT pinfloat outputValue = 0;        // variable for voltage calculation
SoftwareSerial BTSerial(gRxPin, gTxPin);
String inData;unsigned long start;
void setup(){  BTSerial.begin(9600);  pinMode(gLedPin, OUTPUT);  pinMode(powPin, OUTPUT);  pinMode(owPin, OUTPUT);  pinMode(sensorPowerLed, OUTPUT);
  Serial.begin(9600);  Serial.println(“bt2bt HC module - version a”);}
void loop(){  if (1 == gIsMaster) {    if (millis() > start + 10000) {      start = millis();      digitalWrite(sensorPowerLed, HIGH);      int chk = DHT.read11(DHT11_PIN);      Serial.print(DHT.humidity, 1);      Serial.print(",");      Serial.println(DHT.temperature, 1);      char tempString[10];  //  Hold The Convert Data      dtostrf(DHT.temperature, 2, 2, tempString);      // dtostrf( [doubleVar] , [sizeBeforePoint] , [sizeAfterPoint] , [WhereToStoreIt] )      char tempHumidity[10];  //  Hold The Convert Data      dtostrf(DHT.humidity, 2, 2, tempHumidity);
      // read the analog in value:      BatteryValue = analogRead(analogInPin);      // Calculate the battery voltage value      outputValue = (float(BatteryValue) * 5) / 1023 * 2;      // print the results to the serial monitor:      Serial.print(“Analog value = " );      Serial.print(BatteryValue);      Serial.print(”\t voltage = “);      Serial.print(outputValue);      Serial.println(“V \n”);
      BTSerial.print(“temp:” + String(tempString) + “,hum:” + String(tempHumidity) + “,battery:” + outputValue + “\n”);    }
    // Receive commands    if (BTSerial.available()) {      char received = BTSerial.read();      //Serial.println(received);      if (received != ‘\n’)      {        inData += received;      }      // Process message when new line character is recieved      else      {        Serial.println();        Serial.print(“Arduino Received: “);        Serial.println(inData);        Serial.println();        if (inData == “ow”) {          digitalWrite(powPin, HIGH);          digitalWrite(owPin, HIGH);        } else if (inData == “cw”) {          digitalWrite(owPin, LOW);          digitalWrite(powPin, LOW);        }        inData = “”; // Clear recieved buffer      }    }  }}

Arduino Yun  #include “Bridge.h”#include “HttpClient.h”#include “SoftwareSerial.h”
int gLedPin = 13;int gRxPin = 10;int gTxPin = 11;
int gIsMaster = 0;bool openWater = 0;
SoftwareSerial BTSerial(gRxPin, gTxPin);
String inData;String apikey = “0f7377ae6704ddefd0d58cf77efb2ecc”;
unsigned long start;
void setup(){  BTSerial.begin(9600);  pinMode(gLedPin, OUTPUT);
  Bridge.begin();  Serial.begin(9600);  Serial.println(“Home Controller”);}
void loop(){  if (BTSerial.available()) {    char received = BTSerial.read();    //Serial.println(received);    if (received != ‘\n’)    {      inData += received;    }    // Process message when new line character is recieved    else    {      Serial.println();      Serial.print(“Arduino Received: “);      Serial.println(inData);      Serial.println();
      HttpClient client;
      String updateURL =  “http://emoncms.org/input/post.json?json={" + inData + “}&apikey=” + apikey;      Serial.println(updateURL);      Serial.println();      Serial.flush();      // Make a HTTP GET request to the API:      client.get(updateURL);      while (client.available()) {        char c = client.read();        Serial.print(c);      }      Serial.println();      Serial.flush();
      inData = “”; // Clear recieved buffer    }  }
  // Send request to open water  if (millis() > start + 30000) {    start = millis();    if (openWater) {      openWater = 0;      Serial.println(“Close water”);      BTSerial.print(“cw\n”);    } else {      openWater = 1;      Serial.println(“Open water”);      BTSerial.print(“ow\n”);    }  }
}