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

// fpascar@tiscali.it

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!!

.