Quando la passione per gli acquari arriva ad alti livelli,ovvero pazzia assoluta,ecco che scende in campo l’ingegneria.
Carissimi colleghi acquariofili è molto che ho il desiderio di avere una bella vasca, anzi no una MEGA TANK, così ho chiamato il progetto, logicamente di acqua dolce e perchè no anche fatta a plantaquario in stile ADA.Come potrete immaginare una vasca di discrete dimensioni,credo sarà circa una mezza tonnellata,in stile ADA non è proprio il massimo di facilità nella gestione e allora perchè non rendere la vasca quasi del tutto automatizzata?Ecco che mi viene in aiuto l’ingegno,della seria la notte invece di sognare una bella donzella mediterranea cosa faccio?Sogno gli schemi elettrici per automatizzare il tutto.
La mia intenzione è quella rendere la gestione di una vasca, di piccole o grandi dimensioni,il più facile possibile. Certo è che per vasche di piccolissime dimensioni,sotto i 100 l, non vale la pena fare un’automazione a questi livelli perché ci costerebbe più della vasca allestita.Ora vi starete chiedendo … ma cosa si può automatizzare?
Le prime cose che ci vengono in mente sono:

  • Illuminazione (tassativamente a led)
  • climatizzazione vasca
  • distribuzione CO2
  • rabbocco acqua evaporata
  • somministrazione fertilizzanti

Come potete vedere sopra ho scritto le classiche cose che comunemente si fanno o con dei semplici timers o a mano,ma allora perché non spingersi oltre e aggiungere altro?

  • climatizzazione plafoniere(visto che è a led)
  • cambio acqua completamente automatizzato o semiautomatizzato
  • controllo quantità acqua nella vasca di rabbocco
  • controllo quantità fertilizzanti ancora presenti
  • possibilità di creare le stagioni
  • controllo pH
  • varie ed eventuali

Altra domanda che possiamo porci è: come e con che cosa possiamo creare l’autogestione delle vasca?

Le soluzioni sono molteplici due delle quali sono Micro PLC e con scheda Arduino.Entrambe le soluzioni hanno pregi e difetti

Micro PLC
Pro:
1) facile programmazione
2) espandibilità modulare elevata
3) facile istallazione
4) facile cablaggio
Contro:
costo elevato dei componenti

Piattaforma Arduino
Pro:
1) costo basso dei componenti
2) discreta espandibilità

Contro
1) programmazione non proprio semplice
2) difficile istallazione(se non si ha un minimo di pratica)
Tra i due io ho scelto l’automazione con Arduino,un po’ più complessa ma molto più versatile e soprattutto perché posso mettere uno schermo touch .
Una volta elencati i pro e i contro dei due sistemi e cosa si vuole autogestire si dovrà creare uno schema, che all’inizio sarà a blocchi per chiarire meglio cosa si deve e vuole fare, poi in un secondo momento si farà un vero e proprio schema elettrico dell’impianto.Inoltre per scongiurare eventuali black out di lunga durata e quindi consecutiva perdita di tutti i batteri della vasca, morte dei pesci ecc ecc ho pensato anche di inserire un sistema di continuità di energia elettrica che andrà ad alimentare il controllore e il filtro della vasca.
Nella foto seguente è illustrato lo schema a blocchi

schema a blocchi

 

Passiamo ora alla parte tecnica e quindi poi alla realizzazione pratica dell’automazione.
Il Sistema di controllo
Come gia detto in precedenza utilizzerò una piattaforma Arduino, molto economica e quindi quelli che vorranno intraprendere l’automazione potranno farlo tranquillamente senza spendere un patrimonio.

Per creare l’automazione con Arduino abbiamo bisogno di:

  • scheda Arduino(ovvero il “cervello”) è indispensabile in questo caso un Arduino Mega 2560 R3
  • Display LCD TFT Touch (io userò il Touch da 2,8″ Adafruit, certo più costoso ma il lavoro finale è migliore)
  • schede relays Arduino, o Arduino compatibili (nel mio caso l’ho costruita io poi inserirò le foto del prototipo)
  • scheda Real Time Clock
  • 3 x sensore di temperatura analogico LM35DT
  • 1x sensore di temperatura digitale DS18B20(meglio se quello stagno in quanto andrà sommerso nell’acqua)
  • 2xsensori ad ultrasuoni HC-SR04
  • pHduino o similari
  • sonda pH continuo
  • cavi vari
  • alimentatori da 5-12VDC
  • led vari da 5mm
  • basette ramate da 233x160mm
  • basette ramate da 160 x 100mm
  • basette ramate da 75x100mm
  • pellicola PnP
  • componenti elettronici vari(in seguito farò la lista)
  • Cloruro Ferrico ATTENZIONE E’UN ACIDO

Per gli ultimi 5-6 punti se avete buona manualità e un minimo di esperienza in elettronica potete fare i PCB da soli altrimenti potete chiedere a qualcuno di farveli.
Di seguito foto di vari materiali utilizzati per la costruzione :

 Arduino mega 2560 R3Arduino_mega_2560_R3

Real Time Clock

Real Time Clock

 schermo LCD-TFT

schermo_LCD-TFT

 sensore temperatura

Sensore _temperatura

 sensore ultrasuoni

Sensori ultrasuoni

 varie

Varie

 

Cos’è Arduino?
Arduino è una piattaforma hardware low-cost programmabile,con cui è possibile create tutti i tipi di circuiti o quasi sia in ambito robotico che di automazione. Arduino si basa su un Microcontrollore della ATMEL, nasce a Ivrea nel 2005 da un’idea di un professore universitario, un Ingegnere Elettronico, Massimo Banzi, che decise di creare una piattaforma per i propri studenti. Fu un vero e proprio successo, a tal punto da spingere l’ingegnere a rendere questa piattaforma Open Source,infatti sul sito www.arduino.cc è possibile trovare tutti gli scemi di come è fatta questa piattaforma. La piattaforma è programmabile tramite il programma scaricabile gratuitamente dal sito http://arduino.cc/en/Main/Software dove sono presenti anche le librerie, indispensabili per creare un programma. Vi rimando al sito ufficiale di arduino www.arduino.cc per avere altre info in merito.Dopo questa piccola infarinatura storica passo a illustrarvi brevemente Arduino Mega

Microcontrollore
ATmega2560
Tensione di funzionamento = 5V
Tensione di ingresso (consigliato) = 7-12V(meglio 9V)
Tensione di ingresso (limiti) = 6-20V
Pins digitali I / O = 54 (di cui 15 utilizzate come uscite PWM)
I PWM ci consentono di avere un uscita variabile da 0V a 5V
Pins di ingresso analogico = 16
Corrente DC per Pin I / O = 40 mA
Corrente DC per Pin 3.3V = 50 mA
Flash Memory = 256 KB di cui 8 KB utilizzati dal bootloader
SRAM = 8 KB
EEPROM = 4 KB
Velocità di clock = 16 MHz

Come è facilmente comprensibile ho scelto proprio una piattaforma Mega per il numero elevato di ingressi uscite sia digitali(54) che analogici(16) e per grande memori a disposizione,ben 256KB. Per molti di voi 256KB sembreranno pochissimi e sicuramente stanno pensando ma questo è pazzo…vi posso assicurare che con 256KB con arduino ci si può fare di tutto e di più.
Il numero elevato di ingressi uscite ci serve perché LCD TFT ha bisogno di almeno 10-12 pin, la grande memoria perché fare una GUI per il touch e quindi tutti i relativi comandi richiede spazio,infatti il 98% dello spazio utilizzato dal mio programma lo occupa la GUI del TFT.
La prima cosa da fare per prendere pratica con la scheda mega e il Touch è montare il tutto secondo le istruzioni fornite dai produttori e provare gli esempi che il produttore dello schermo mette a disposizione(vi consiglio di provare graphicstest e poi tftpaint).
Io come Touch ho usato 2.8 “TFT Touch Shield per Arduino Adafruit (http://www.adafruit.com/products/376)

L’Adafruit fa anche 2.8” 18-bit color TFT LCD with touchscreen breakout board
http://www.adafruit.com/products/335

se riuscite a trovare il secondo tipo è molto meglio,io ho trovato solo il primo e ho dovuto riadattarlo.

Provate provate e ancora provate quando avrete capito come funziona potete copiare il programma,aprire una scheda nuova,incollare e iniziate a modificare per vedere ancor meglio le potenzialità.
Per rendervi la vita un po’ più facile vi do qualche dritta sui comandi del touch per creare una buona interfaccia grafica,è sottointeso che io abbia utilizzato le librerie adafruit (attualmente sono le più semplici da usare).Il programma che state creando all’inizio dovrà essere inizializzato con alcune definizioni,includendo alcune librerie,defindo-chiamando i pin di ingresso e uscita eccecce per questo vi rimando allo sketch del paint dell’adafruit fate copia e incolla e il gioco è fatto(almeno per l’inizializzazione del touch per tutto il resto vedremo in seguito).

N.B. se volete usare la 2.8” Shield come la 2.8” breakout board(ovvero non attaccata direttamente ad arduino) bisogna cambiare alcune definizioni,per cominciare va de commentata una riga su una libreria ma qui non mi dilungo perché le istruzioni adafruit sono esaustine,vanno utilizzate le inizializzazioni dell’esempio tftpaint e non tftbmp_shield e su queste inizializzazioni vano cambiati questi pin:

scrivere questo :

#define YP A1 // must be an analog pin, use “An” notation!
#define XM A2 // must be an analog pin, use “An” notation!
#define YM 29 // can be a digital pin
#define XP 28 // can be a digital pin

Invece di questo:
#define YP A3 // must be an analog pin, use “An” notation!
#define XM A2 // must be an analog pin, use “An” notation!
#define YM 9 // can be a digital pin
#define XP 8 // can be a digital pin

ATTENZIONE:
è assolutamente importante cambiare queste definizioni se si usa un 2.8” Shield come un 2.8” breakout board altrimenti lo schermo non funziona.
Fatto questo potete definire i colori, le librerie adafruit contengono i classici colori se volete potete aggiungerne altri semplicemente copiando al posto di questo codice:
// Assign human-readable names to some common 16-bit color values:
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF

quest’altro:
// Assign human-readable names to some common 16-bit color values:
#define BLACK 0x0000
#define BLUE 0x001F
#define BLUE2 0x051F
#define DARKBLUE 0x01CF
#define LBBLUE 0x2B12
#define LIGHTBLUE 0x7D7C
#define GRAYBLUE 0x5458
#define LGRAYBLUE 0xA651
#define LGRAY 0xC618
#define LIGHTGREEN 0x841F
#define RED 0xF800
#define BRED 0xF81F
#define BRRED 0xFC07
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
#define GRAY1 0x2104
#define GRAY2 0x8430
#define PURPLE 0xF11F
#define ORANGE 0xFD20
#define BROWN 0xBC40

Fatto questo e dopo aver scritto tutto il resto per inizializzare vi dico subito che per controllare tutto tramite touch(quindi niente bottoni aggiuntivi se non il tasto reset) avrete bisogno di un infinità di variabili che nemmeno immaginate,io ne ho usate circa 350. Alcune di queste servono solo per fare il controllo di bottoni sullo schermo,ovvero come potrete immaginare è possibile che nella stessa posizione ma in schermate differenti ci sia un pulsante che svolge una funzione ,ora per evitare che premendo in quella posizione premete 2,3-10-20 pulsanti dovete mettere delle variabile,io ho usato a,b,c eccecc che quando cambia la schermata cambiano in modo tale che quando si va a scrivere il codice che controlla la posizione si aggiunge anche il codice che controlla la variabile e si evita di premere più pulsanti nello stesso tempo. Vi faccio un esempio pratico così mi capirete meglio:

if(p.x>=40 && p.x<=200 && p.y>=230 && p.y<=280 && LuciOnOff==0 && cc==3){

//reimposta la variabile di controllo

a=2;
p.x=0;
p.y=0;
cc=0;
mc=1;
dc=0;
tc=0;
ic=0;
ac=0;
fc=0;
pc=0;
info=0;
fa tutto quello che deve fare
}
Come vedete sopra subito dopo la if e la parentesi ci sono p.x;p.y questi servono per la mappatura dei punti sul touch(vi spiegherò dopo) oltre a questi c’è : cc==3.

Ora che fa questo comando?

Se si verifica tutto quello che ho scritto nelle parentesi ovvero, se p.x è compreso fra 40 e 200 ,p.y è compreso fra 230 e 280 e cc è uguale a 3, fai tutto quello che c’è scritto tra le parentesi graffe ma prima di fare tutto questo dei reimpostare le variabili.

Infatti se noterete dopo cc è stato impostata a zero invece di 3 cc=0;

questo ci permette di premere sullo stesso punto dello schermo e fare altre cose diverse da quelle che abbiamo fatto in precedenza.
Vi metto le foto così capirete meglio

 

Premendo sul tasto manutenzione
foto1

 

Si va su questa pagina
foto2

 

premendo su INIZIA MANUTENZIONE
foto3

 

premendo su FINE MANUTENZIONE
foto5

 

appare
foto6

Fatte queste piccole premesse vi spiego brevemente le chiamate per creare la GUI.
Come prima cosa vi dico che lo schermo che ho usato ha una risoluzione di 240x 320 pixel e che tutto per fare la gui si imposta con le coordinate x;y;z ,la z è solo la coordinata della pressione quindi si utilizzerà solo una volta.

Queste due impostazioni
p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);
p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);

assegnano a p.x e a p.y il valore delle coordinate dei pixel che stiamo premendo sullo schermo.
Di seguito alcune chiamate che bisogna fare per:

tft.fillScreen(RED);
serve per impostare lo sfondo dello schermo( in questo caso ho scritto RED ma può anche essere BLACK o GREEN) a seconda del colore che vogliamo.

tft.setTextColor(BLACK);
imposta il colore del testo che si sta per scrivere.

tft.setTextSize(4);
imposta la dimensione del testo se non sbaglio è da 1 a 4 con 1 la dimensione più piccola e 4 la più grande.

tft.setCursor(5, 5);
imposta il cursore sul pixel desiderato. Il primo numero è la x il secondo è la y.

tft.print(“ATTENZIONE”); oppure tft.println(“Acqua rabboccco ultimata”);
serve per scrivere la parola o la frase desiderata.

tft.drawRect(0, 290, 83, 30, BLUE);
scrive sullo schermo un rettangolo vuoto ovvero solo il bordo.

Il primo numero è la x il secondo la y il terzo la lunghezza(relativa a x) il quarto l’altezza(relativa ad y) poi se seleziona il colore

tft.fillRect(1, 291, 81, 28, YELLOW);
scrive sullo schermo un rettangolo pieno, l’impostazione dei numeri è come sopra.

tft.drawPixel(228,5, WHITE);
scrive un semplice punto.Il primo numero è la x il secondo la y e poi si mette il colore.

tft.drawTriangle( 30,30,50,5,200,30, WHITE);
scrive un triangolo vuoto,ovvero solo il bordo.
Il primi 2 numeri sono le coordinate x ed y del primo vertice del triangolo, il 3 e 4 numero la x e y del secondo vertice, il 5 e 6 numero la x e y del 3 vertice e poi il colore

tft.fillTriangle( 30,30,50,5,200,30, WHITE);
scrive un triangolo pieno,le coordinate sono come sopra.

tft.drawRoundRect(30, 175, 180, 50,10, BLUE);
scrive un rettangolo vuoto con gli angolo arrotondati.
Il quinto numero indica il raggio di curvatura degli angoli il resto è come il rettangolo normale.

tft.fillRoundRect(31, 176, 178, 48,8, YELLOW);
scrive un rettangolo pieno con gli angolo arrotondati.
Si possono fare anche dei cerchi pieni o vuoti e delle semplici line ma per queste vi rimando alle istruzioni adafruit tanto sono semplici.

N.B.
E’ ovvio che se impostate lo schermo di nero non potete mettere le scritte o i triangoli o rettangoli in nero altrimenti non vedete niente.
Vi metto un piccolo spezzone di sketch di quello che ho creato io con successiva immagine per farvi capire meglio come viene il tutto.

//CONTROLLO PER IL TASTO MANUTENZIONE SITO IN HOME PAGE

if (p.x > 30 && p.x < 210 && p.y > 175 && p.y < 225 && (cc==1 || cc==3) )
{//se premo su MANUTENZIONE:

a=0;

tft.fillScreen(BLACK);

tft.setCursor(15, 5);//il primo numero sposta il testo verso dx o sn il secondo in alto o in basso
tft.setTextColor(WHITE); tft.setTextSize(3);
tft.println(“MANUTENZIONE”);
tft.setCursor(50, 35);
tft.println(“ACQUARIO”);

tft.setTextColor(YELLOW);
tft.setCursor(15, 90);
tft.println(“PER INIZIARE”);
tft.setCursor(60, 130);
tft.println(“PREMERE
tft.setCursor(20, 170);
tft.println(“IL PULSANTE”);
tft.drawRect(40, 210, 160, 60, BLUE);//rettangolo MANUTENZIONE
tft.fillRect(41, 211, 158, 58, YELLOW);//RIEMPIMENTO rettangolo MANUTENZIONE
tft.setCursor(85, 220);
tft.setTextColor(BLUE); tft.setTextSize(2);
tft.println(“INIZIA”);
tft.setCursor(49, 245);
tft.println(“MANUTENZIONE”);
tft.drawRect(0, 290, 83, 30, BLUE);//rettangolo MENU’
tft.fillRect(1, 291, 81, 28, YELLOW);//RIEMPIMENTO rettangolo MENU’
tft.setCursor(7, 295);
tft.setTextSize(3);
tft.println(“MENU”);
tft.drawRect(157, 290, 83, 30, BLUE);//rettangolo HOME
tft.fillRect(158, 291, 81, 28, YELLOW);// rettangolo HOME
tft.setCursor(164, 295);
tft.println(“HOME”);

cc=4;
mc=0;
dc=0;
tc=0;
ic=0;
ac=0;
fc=0;
pc=0;
p.x=0;
p.y=0;
info=0;

}

foto2

Home Page
foto0

Quello postato sopra è il codice per controllare il pulsante manutenzione che ho inserito nella mia home page del programma.
Come noterete nelle schermate successive c’è un pulsante a centro schermo che esegue funzioni differenti, questo è stato possibile farlo solo grazie alle variabili che cambiano.

Work in progress

si ringrazia per la pubblicazione di questa prima parte Vincenzo Pio De Marco

E’ vietata la copiatura anche parziale di testi e foto senza l’autorizzazione del proprietario e di acquariofili.com

©www.acquariofili.com

Author: Marco Ferrara

Dal lontano 1978 coltivo la passione per l'acquariofilia e dal 2005 insieme a degli amici abbiamo deciso di mettere su un portale con tante informazioni mettendo a disposizione la nostra esperienza. Ho allevato e riprodotto tantissime specie di fauna dai ciclidi ai poecilidi,ultimamente la mia attenzione è rivolta agli anabantidi nello specie betta splendens ,allevo anche varie specie di caridine e gli immancabili scalari. Ho una particolare attrazione per le piante coltivando anche delle essenze rare con splendidi risultati. Le mie ottime conquiste e risultati sono frutto di prove,letture e anche dell'aiuto di altri amici che hanno condiviso con me le proprie esperienze cosa che io da tempo ho deciso di fare con chi ne ha bisogno.......