TiDiGino Contest, Automazione Giardino con PC e Arduino di Felice Pascarelli

Presentiamo la candidatura del Sig. Felice Pascarelli che si propone per la realizzazione del firmware del progetto TiDiGino e che ci presenta una sua recente applicazione con Arduino: Automazione per Giardino con PC e Arduino.

Lasciamo la parola a Felice:
Lavoro da ventiquattro anni nel campo dell’elettronica, inizialmente facendo il tecnico presso un centro assistenza audio/video. In quegli anni cominciavo a imparare la programmazione  in assembler dei microcontrollori PIC e ST6 proseguita successivamente in C con i dsPIC e attualmente con gli ARM. Successivamente ho gestito per vari anni un laboratorio di assistenza e servizi elettronici (dalla progettazione alla riparazione di sistemi elettronici). Attualmente sono consulente per un’azienda leader nel settore dell’elettronica ferroviaria.  In campo informatico programmo correntemente in  C, C++ e C#.
Vi propongo la mia candidatura con un progetto di automazione di giardini realizzato con Arduino interfacciato ad un PC tramite comunicazione Bluetooth da 100m (Classe 2).
L’idea è nata quando, alcuni giorni fa, sono stato ospite di un amico nella sua nuova villa con piscina (beato lui!!). Mentre eravamo in giardino sotto l’ombrellone a gironzolare su internet con i nostri PC portatili e le nostre consorti in piscina, riceviamo la telefonata di un altro amico che ci comunica che da alcuni minuti era fuori dal cancello con un altro folto gruppo di persone (che attendevamo da un po’) e che cercavano in tutti i modi (campanello e strombazzate di clacson) di “notificarci”  la loro presenza.
Una volta aperto il cancello ognuno dei nuovi arrivati ha proposto una soluzione per replicare il suono del campanello: chi ha proposto di montare una sirena, chi di inserire lampade tipo stroboscopio da discoteca ed io, da elettronico, ho proposto di replicare il campanello, e magari anche l’apertura del cancello, sul computer.
A questo punto il padrone di casa, con tono ironico, mi ha chiesto se potessi fare di meglio e cioè di poter comandare anche le luci del giardino ed il sistema di irrigazione e magari di controllare lo stato dei sensori a microonde dell’antifurto perimetrale installato a protezione del giardino (per evitare che quando lui è in piscina qualcuno possa scavalcare la recinzione e intrufolarsi in casa approfittando di porte e finestre aperte).
Ritornato a casa ho cominciato a pensare a come risolvere la questione. Ho pensato di progettare un software da far girare sul PC che comunica via Bluetooth con una centralina costruita intorno ad Arduino ed interfacciata al quadro elettrico generale.
È nato così il progetto “Automazione Giardino”.
Naturalmente il software che ho progettato ed il firmware di Arduino, anche se perfettamente funzionanti, andrebbero ottimizzati ma, per mancanza di tempo (il 31 agosto è il termine ultimo per partecipare), lo invio ugualmente. Ed ecco il progetto Automazione Giardino con Personal Computer e Arduino:Il software da installare su PC comunica via Bluetooth (naturalmente il PC deve essere dotato di Bluetooth incorporato o su USB) con un altro modulo convertitore Bluetooth/RS232 della HandyWave, e montato su Arduino sfruttando le linee della UART seriale di quest’ultimo disponibile sui pin 0(RX) e 1(TX) del connettore di interfaccia.
Per interfacciare Arduino al quadro elettrico ho utilizzato dei relè, mentre per l’interfacciamento con antifurto e campanello ho utilizzato un circuito con optoisolatori per evitare possibili problemi di scariche e sovratensioni che potrebbero danneggiare la scheda Arduino.
Ho disegnato lo schema elettrico ma, per mancanza di tempo, ho preferito montare momentaneamente il tutto su basetta millefori (vedi figura sotto).

Questo è il disegno di una possibile ingegnerizzazione del tutto:


Mentre questo è lo schema elettrico del circuito:

Questo è l’elenco dei componenti necessari:

C1         100nF
C2         100uF 
C3         0,33uF
C4         0,33uF
C5         0,33uF
C6         100nF
C7         47uF
C8         0,33uF
C9         0,33uF 
C10        1uF 
C11        1uF
C12        100nF  
C13        100nF 
D1         1N4007  
D2         4,8V 
D3         4,8V
D4         1N4007
D5         1N4007 
D6         LED 
D7         LED 
D8         LED
D9         LED
D10       LED
D11       LED
J1         DB9
K1         RELAY_G5V-2
K2         RELAY_G5V-2
K3         RELAY_G5V-2
K4         RELAY_G5V-2
K5         RELAY_G5V-2
K6         RELAY_G5V-2
K7         CONN_3_V
K8         CONN_3_V
K9         CONN_3_V
K10       CONN_3_V
K11       CONN_3_V 
K12       CONN_3_V
P1         CONN_6
P2         CONN_8
P3         CONN_2_V
P4         CONN_8 
P5         CONN_2_V 
P6         CONN_2_V
R1         10 K
R2         10 K
R3         270 Ohm
R4         270 Ohm
R5         470 Ohm
R6         470 Ohm 
R7         330 Ohm
R8         330 Ohm 
R9         330 Ohm
R10        330 Ohm
R11        330 Ohm
R12        330 Ohm 
U1         7805
U2         PHDARL 
U3         PHDARL 
U4         MAX232
U5         ULN2803A

Prima di avviare il software “Automazione_Giardino” sul  PC, bisogna associare, utilizzando l’apposita utility presente sul PC, il Bluetooth del PC con il modulo montato su Arduino.
Una volta associato il Bluetooth e avviato il software “Automazione_Giardino”, basta selezionare dall’apposita casellina la porta seriale associata al Bluetooth e premere  il pulsante “connetti” presente in basso nell’applicativo (vedi l’ubicazione di detti controlli nella figura in alto).
A questo punto basta premere sulle icone delle lampadine per eccitare o diseccitare i relè corrispondenti sulla scheda di interfaccia collegata ad Arduino. Per il relè del cancello ho previsto il funzionamento ad impulso. Ogni qualvolta si preme sull’icona di apertura cancello il relè associato si chiude per 1s e quindi si riapre.
Per notificare il suono del campanello o l’intervento dell’antifurto perimetrale anche quando il software è ridotto a icona, ho previsto una finestra che si apre in automatico al verificarsi dell’evento e si sovrappone a qualsiasi altra applicazione aperta sul PC. Basta poi cliccarci sopra per chiuderla.
Il firmware installato su Arduino non fa altro che ricevere i comandi in arrivo sulla porta seriale, interpretarli, accendere o spegnere i relativi relè e reinviare al PC il nuovo stato delle uscite o degli ingressi. Come detto prima, il firmware va ottimizzato e magari inserita una routine di checksum sulla comunicazione seriale. Ma comunque così come è funziona ugualmente.
Al posto del convertitore RS232/Bluetooth utilizzato è possibile impiegare qualsiasi altro modulo magari con uscita TTL. Utilizzando un modulo con uscita TTL è possibile eliminare il convertitore RS232/TTL (MAX232 e componenti di contorno) inserito per interfacciare Arduino al modulo Bluetooth della HandyWave.
Per chi non disponesse di un trasmettitore Bluetooth e volesse provare il circuito, può tranquillamente utilizzare Arduino collegato via USB al PC su quale è installato il software e selezionare nel campo Porta Seriale la COM assegnata ad Arduino.

Ed ecco lo sketch per Arduino:

// Sistema Di Automazione Giardino

// Felice Pascarelli 2011

// [email protected]

long ritardo =300;

byte rxrs232;

String ricezione = "";

String rele = "0";

String bufferrx = "0";

String uscite = "K";

String rel = "0";

String rel1 = "a";

String rel2 = "b";

String rel3 = "c";

String rel4 = "d";

String rel5 = "e";

String rel6 = "f";

String in1 = "2";

String in2 = "4";

void setup() 

{     

  pinMode(2, OUTPUT);

  pinMode(3, OUTPUT);

  pinMode(4, OUTPUT);

  pinMode(5, OUTPUT);

  pinMode(6, OUTPUT);

  pinMode(7, OUTPUT);  

  pinMode(8, INPUT);

  pinMode(9, INPUT);

  pinMode(10, INPUT);

  pinMode(11, INPUT);

  pinMode(12, INPUT);

  Serial.begin(19200);

}

void loop()

{

  if (Serial.available() > 0)

    ricevirs232();

    ingressi();

  delay(ritardo);

      if(rel == "1")

      {

        if (rele == "A")

        {

          rel1 = rele;  

          digitalWrite(2, HIGH);

        }

        if (rele == "B")

        {

          rel2 = rele;

          digitalWrite(3, HIGH);

        }

        if (rele == "C")

        {

          rel3 = rele;

          digitalWrite(4, HIGH);

        }        

        if (rele == "D")

        {

          rel4 = rele;

          digitalWrite(5, HIGH);

        }

        if (rele == "E")

        {

          rel5 = rele;

          digitalWrite(6, HIGH);

        }

        if (rele == "F")

        {

          rel6 = rele;

          digitalWrite(7, HIGH);

          delay(1000);

          digitalWrite(7, LOW);

          rel6 = "f";

        }        

        if (rele == "a")

        {

          rel1 = rele; 

          digitalWrite(2, LOW); 

        }

        if (rele == "b")

        {

          rel2 = rele;

          digitalWrite(3, LOW);

        }

        if (rele == "c")

        {

          rel3 = rele;

          digitalWrite(4, LOW);

        }        

        if (rele == "d")

        {

          rel4 = rele;

          digitalWrite(5, LOW);

        }

        if (rele == "e")

        {

          rel5 = rele;

          digitalWrite(6, LOW);

        }

        if (rele == "f")

        {

          rel6 = rele;

          digitalWrite(7, LOW);

        }        

        rel = "0";     

      }

        Serial.print(rel1);Serial.print(rel2);Serial.print(rel3);Serial.print(rel4);

        Serial.print(rel5);Serial.print(rel6);Serial.print(in1);Serial.print(in2);

}

void ingressi()

{

  if (digitalRead(8) == 0)

  {

    in1 = "1";

  }

    if (digitalRead(8) == 1)

  {

    in1 = "2";

  }

    if (digitalRead(9) == 0)

  {

    in2 = "3";

  }

    if (digitalRead(9) == 1)

  {

    in2 = "4";

  }

}

void ricevirs232()

{

  if (Serial.available() > 0) 

  {

    rxrs232 = Serial.read();

    if (isDigit(rxrs232)) 

    {

      ricezione += (char)rxrs232;  

    }

    if(rxrs232 =='A' || rxrs232 =='B'|| rxrs232 =='C'|| rxrs232 =='D'|| rxrs232 =='E'|| rxrs232 =='F'

    ||rxrs232 =='a'|| rxrs232 =='b'|| rxrs232 =='c'|| rxrs232 =='d'|| rxrs232 =='e'|| rxrs232 =='f')

     {

      rele = rxrs232,BYTE;

      rel = "1";

     }

  }   

}

Tutti i file relativi al progetto, ovvero:

Automazione_Giardino.exe (programma da installare sul PC);
Cartella AutoGiardino_pde (con sketch da caricare in Arduino);
Cartella Progetto_Kicad (schematici in formato Kicad);
Foto_Progetto_Auto_Giardino.jpg (fotografia del progetto montato su millefori);
sw_Auto_Giardino.jpg (foto della schermata del software);
Arduino_Auto_Giardino.jpg (foto del circuito montato);
PCB_Auto_Giardino.jpg (foto di una possibile ingegnerizzazione);
Sch_Auto_Giardino.jpg (foto schema elettrico);
Elenco_Componenti.txt (elenco componenti)

Sono presenti all’interno di questa cartella zip.

Grande lavoro Felice!!

.

37 Commenti

  1. Finalmente un progetto interessante anche se non tutti hanno un giardino con piscina. Penso comunque che possa andar bene anche per controllare le luci di casa ed aprire il portone. Complimenti.
  2. Salve! Complimenti per il bel progetto, volevo chiedere se fosse possibile avere il sorgente per il programma per PC, cosi da migliorarlo e personalizarlo per proprie automazioni
      • Ciao! Ti ringrazio per la disponibilita', in verita' mi sarebbe piaciuto guardare il sorgente per capire come si fa una applicazione come la tua, potresti almeno dire a grandi line dire come si fa? in che linguaggio' e' scritto. Saluti e complimenti ancora.
        • Il linguaggio che ho utilizzato è il C++, ma potresti utilizzare, altrettanto efficaciemete, VisualBasic che risulta molto più semplice da imparare. Il programma è semplicissimo: dopo aver creato il layout della finestra associo ad ogni elemento grafico disegnato (pulsanti) la reletiva funzione che deve svolgere (trasmissione di un carattere via RS232). Se vuoi imparare a programmare ti consiglio di iniziare con cose più semplici così da comprendere le basi del linguaggio (qualunque esso sia). Le cose più complesse arriveranno da sole, basta non scoraggiarsi all'inizio. Se hai altre domande falle pure. A prsesto
  3. Bravo ottimas ed utile idea!!! è previsto anche un ripristino in caso di black out o cariche elettrostatiche oppure un blocco del pc?
    • Ciao, e grazie per i complimenti. Purtroppo ho svolto il lavoro in pochissimo tempo e quindi molte funzioni non le ho inserite. Stò comunque lavorando a una versione più completa. A presto
  4. Progetto davvero interessante , e lo dico da concorrente al TiDiGino. Trovo questa applicazione utile e penso che proverò a realizzarla, un unico dubbio io utilizzo Mac e/o Linux c'è modo secondo te di realizzarne una versione web oriented, potrei controllare la csa anche via cellulare o dall'ufficio. Complimenti Mauro
    • Ciao, grazie per i complimenti. Anche il tuo progetto è interessante e molto più complesso del mio. Stò lavorando ad una versione migliorata del progetto e tra le caratteristiche che stò pensando di inserire c'è prorio il controllo web. Ti faccio sapere quando finisco. A presto.
  5. Complimenti!!! è da tepo che cercavo un progetto da realizzare. Domanda, il pc deve avere caratteristiche particolari? E se volessi attivare una webcam al citofono?
    • Grazie. Il software gira correttamente con Windows (da Xp a 7) e richiede pochissime risorse (1%,2% di occupazione CPU). Per la webcam non ci ho ancora pensato. Vedremo... Ciao
  6. Davvero un bel progetto, complimenti! E' possibile inserire anche dei timer giornalieri/settimananli che permettono di accendere/spegnere con un solo comando più luci in contemporaenea in modo da far credere la presenza in casa anche quando non c'è nessuno? Grazie. Stefano
    • Grazie per i complimenti. Sto lavorando a un progetto più complesso che, tra le altre cose, implementa anche dei timer. A presto.
  7. ottimo,anzi.......ottimissimo!!!! Cercavo proprio qualcosa di simile per il mio giardino. Aspetto con ansia la versione definitiva, spero che la pubblicherai. Complimenti, continua così
    • Ciao, si la scheda è compatibile, devi solo cambiare l'indirizzo delle porte di ingresso ed uscita. A presto e fammi sapere.
  8. complimenti per il progetto, mi piacerebbe sapere come far riconoscere ad arduino lo stato delle luci ( accese o spente ) per poter spegnere tutte le luci o eseguire degli scenari grazie
  9. Ciao Felice, ottimo lavoro ! La cosa che mi sfugge è se l'impianto luci continua comunque a funzionare con gli "interruttori" (pulsanti) a parete. Quello che stiamo cercando di realizzare noi vorrebbe convivere con gli impianti tradizionali ma non mi è chiara come dev essere la parte elettrica banalmente per consentire ad arduino di capire se una luce è stata accesa o spenta dal pulsante a parete. Ciao e grazie Alberto
    • Ciao e grazie per l'interessamento. Purtroppo il progetto è nato molto in fretta e quindi molte funzioni non sono state implementate. Sto lavorando per rendere il progetto più funzionale. Appena finisco lo pubblico. Se vuoi mandami la tua mail così vediamo se nel frattempo posso aiutarti. Ciao a presto. Felice
  10. il progetto è asssai interessante...... davvero complimenti felice..... mi interesserebbe la procedura di comunicazione con il pc siccome capisco poco di programmazione e quindi un bel esempio in vb mi sarebbbe proprio utile
  11. Ciao, ho visto il prjt, direi molto interessante.. anzi.. cosi' e' riduttivo, e' uno spettacolo.. Anche a me interesserebbe una cosa simile, mi piacerebbe agganciare a questo il controllo di 2 elettrovalvole, con relativo sensore di temperatura.. Volevo pero' farti alcune domande.. Come fai a intercettare la pressione del campanello? La seconda invece e'.. puo' funzionare tutto via LAN, WEB? Magari con un webserver far vedere il "disegnino" come il prgr sopra?? Grazie
  12. ciao, potrebbe assere interessante usare la comunicazione via wi-fi! ed associare una telecamera alla funzione campanello! è un problema ciao grazie!
  13. Bellissimo :D Domanda volendo fare una cosa che entra in una scatolina riusciresti a migrarlo su una piattaforma Arduino Mega 2560 e RASPBERRY ? Dico Arduino 2560 cosi si hanno più I/O e memoria Dato che sarebbe bello magari aggiungere sensore di Temperatura Ambiente Uno Di Umidità Terreno un Temp Piscina Magari anche con relativo sensore Ph e crepuscolare e automatizzare sia la gestione Piscina che giordino in modo più completo e con il RASPBERRY magari dataloggare anche un po il tutto e andare in WiFi criptata ansiche Bluetooth NON sono un programmatore ma se si deve smanettare e provare i ci sto :D Grazie
  14. Se verifico il sorgente con Arduino 1.05 ottengo il seguente errore: AutoGiardino.ino: In function 'void ricevirs232()': AutoGiardino:153: error: invalid conversion from 'byte' to 'const char*' AutoGiardino:153: error: initializing argument 1 of 'String& String::operator=(const char*)' AutoGiardino:153: error: 'BYTE' was not declared in this scope Da Arduino 1.0, la parola chiave 'BYTE' non è più supportata. Per favore usate al suo posto Serial.write().

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Main Menu