Controlla il tuo acquario con Arduino : Guida passo passo! 4.38/5 (13)

Ti piace questo articolo? Condividilo dove vuoi!

Il progetto nasce con l’intento di voler racchiudere in un unico dispositivo il controllo “quasi” totale del proprio acquario tropicale. Il quasi, sta nel fatto che al momento manca il controllo di alcuni parametri come il ph e la conducibilità, e la possibilità di vedere da locale e remoto l’andamento del proprio acquario e ricevere delle notifiche in caso di allarmi (es. mancato raggiungimento della temperatura).


Il sistema è composto da diversi blocchi, tutti racchiusi in un’unica scatola. In questa scatola, oltre ad arrivare il cavo di alimentazione, arrivano tutti i segnali di ingresso (sonda temperatura, galleggiante vasca e galleggiante tanica rabbocco….) arrivano tutti i segnali di uscita/alimentazioni (StripLed, ventola di raffreddamento acqua…). Alla multipresa vanno collegate tutte le uscite di potenza (filtro, riscaldatore, pompa rabbocco, elettrovalvola Co2 (predisposizione futura).
Il cuore del sistema è l’Arduino Uno, una piattaforma hardware composta da una serie di schede elettroniche dotate di un microcontrollore. È stata ideata e sviluppata nel 2005 ad Ivrea come strumento per la prototipazione rapida e per scopi hobbistici, didattici e professionali.


Inizialmente il progetto doveva solo gestire le StripLED in modalità dimmer, illuminando gradualmente l’acquario, eliminando quello stress che si provoca ai pesci quando si illumina l’acquario tutto in un colpo.


Successivamente è nata l’esigenza di controllare la temperatura dell’acqua, non solo in inverno ma anche in estate, e quando è arrivata l’estate, dopo i primi rabbocchi di acqua ho introdotto anche un galleggiante per controllare il livello dell’acqua e una pompa per riempire l’acquario quando si è lontani da casa.


In un unico progetto sono riuscito a racchiudere i tanti progetti che si trovano in rete per gestire un semplice acquario, cioè l’uso della centralina TC420 per il controllo dei LED, l’uso della centralina ITC1000 per il controllo della temperatura e l’uso di un relay per pilotare la pompa per il rabbocco dell’acqua, minimizzando gli spazi rendendo il progetto versatile per qualsiasi acquario grazie all’uso di connettori rapidi e la possibilità di variare i parametri senza l’uso del PC (il PC viene utilizzato solo per caricare il programma sull’Arduino UNO).
Il sistema controlla:


⦁ 4 linee di LED di diverse temperature (tutti a 12VCC):
⦁ 2700°K, temperatura calda per simulare la luce del sole durante la fase di alba e tramonto
⦁ 6500°K, temperatura fredda per simulare la luce del sole nella restante parte della giornata
⦁ Grow, per stimolare la crescita delle piante
⦁ Blu, per simulare il riflesso della Luna in acqua e aiutare i pesci a orientarsi in acqua
⦁ un riscaldatore a 230 VAC e una ventola a 12VCC per garantire la giusta temperatura dell’acqua,
⦁ una pompa a 230VAC per garantire il giusto livello dell’acqua
⦁ una ventola a 12 VCC per garantire la giusta temperatura dell’elettronica

Tutti i parametri vengono visualizzati su un LCD 16X2 e modificati grazie all’uso di 5 pulsanti (select/su/giu/destro/sinistro)

Funzionamento controllo acquario con Arduino


All’avvio, per due secondi, sul display viene visualizzata la versione e la data del programma caricato sulla scheda.


Successivamente, il sistema riprende a funzionare secondo l’ultimo stato di funzionamento. Esempio, se prima di andar via la corrente, il ciclo di funzionamento era impostato su automatico, e va via la corrente in casa, quando questa ritorna, il sistema riprenderà a lavorare normalmente: viene attivato il filtro, le luci si attivano in relazione all’orario, il riscaldatore/ventola acquario/ventola elettronica si attivano in relazione alle temperature lette dalle sonde, se il contatto del galleggiante è chiuso si attiva la pompa di riempimento. Se l’acquario è in manutenzione e per un qualsiasi motivo il sistema viene disalimentato, quando verrà rialimentato, l’acquario rimane in manutenzione finché non si cambia lo stato di funzionamento.


Il menu è suddiviso in 5 sezioni, ogni sezione ha ulteriori sottosezioni dedicate. È possibile navigare nel menu principale e nei sottomenu, grazie ai 5 tasti posti alla dx del display.


Nella Pagina iniziale, ogni 2,5 secondi, ciclicamente, verranno visualizzate le seguenti informazioni:


⦁ Data/ora attuale, stato di funzionamento (automatico/manuale/manutenzione), stato (on/off) del filtro
⦁ Temperatura acqua e temperatura elettronica, stato (on/off) del riscaldatore/ventola acquario/ventola elettronica
⦁ Ciclo luci, per ogni canale un valore che va da 0% a 100%
⦁ Uscita luci, per ogni canale, un valore che va da 0 al valore massimo impostato (val. massimo 255)
⦁ Stato del galleggiante (alto/basso), stato (on/off) della pompa del rabbocco.


Dalla pagina inziale, premendo sul tasto “selezione” si accede al menu, premendo il tasto sopra si scorre attraverso il menu e premendo il tasto selezione si entra nel sottomenu dedicato:
Impostazioni:


⦁ Data/ora: permette di modificare la data e ora di sistema.
⦁ potenza max: per ogni canale permette di regolare la potenza massima da applicare a ogni singolo canale. In questo modo, se si ha una plafoniera sopra dimensionata si ha la possibilità di adattarla al proprio acquario senza apportare modifiche.
⦁ EEPROM (lettura/scrittura): tutti i parametri (potenza max, programmazione ciclo luci, setpoint temperature….) vengono conservati su una memoria non volatile, in assenza di rete non ci sarà bisogno di riconfigurare il tutto. L’operazione di scrittura va fatta manualmente quando si modifica almeno un parametro. L’operazione di lettura va fatta se si vuole tornare all’impostazioni precedenti (se non si è effettuata un’operazione di scrittura), e al riavvio della scheda.


Configura ciclo automatico: permette di impostare, per le 4 fasi (alba/giorno/tramonto/notte), l’ora/minuto di inizio fase, la durata dell’intera transizione (min:1 min, max 30 min)


⦁ Alba, gradualmente, l’intensità di luce dell’uscita dedicata ai led a 2700°K aumenta e l’intensità di luce dell’uscita dedicata ai led Blu diminuisce
⦁ Giorno, gradualmente, l’intensità di luce dell’uscita dedicata ai led a 6500°K aumenta
⦁ Tramonto, gradualmente, l’intensità di luce dell’uscita dedicata ai led a 6500°K diminuisce
⦁ Notte, gradualmente, l’intensità di luce dell’uscita dedicata ai led blu aumenta e l’intensità di luce dell’uscita dedicata ai led a 2700°K diminuisce


Sonde&Temperature:


parametri sonda acqua – parametri sonda elettronica: il sistema usa due sonde, la DS18B20 per misurare la temperatura dell’acqua e la sonda a bordo del modulo RTC ⦁ DS3231 per misurare la temperatura dell’elettronica. Per entrambe, in un menu dedicato per ogni sonda, è possibile visualizzare la temperatura letta ed effettuare una correzione in positivo e in negativo se la lettura non corrisponde a quella di altri termometri.
Setpoint temperatura acqua: in questo menu è possibile impostare la temperatura desiderata in acqua. Se la temperatura letta supera la temperatura impostata viene alimentata la ventola installata sopra l’acquario, mentre se la temperatura letta scende al di sotto della temperatura impostata viene alimentato il riscaldatore.
Setpoint temperatura elettronica: in questo menu è possibile impostare la temperatura desiderata nella scatola dove sono installate le schede. Se la temperatura letta supera la temperatura impostata viene alimentata la ventola installata nella scatola che provvede a tirare via l’aria calda.

Stato (man/auto/manu) test uscite: in questo menu è possibile cambiare lo stato di funzionamento della centralina e testare le diverse uscite.


Manuale: tutte le uscite vengono disattivate, e manualmente:
⦁ È possibile impostare un valore che va da 0(min) a 255(max) per le uscite dedicate ai led (blu-fitostimolanti-giorno-alba/tramonto)
⦁ È possibile attivare e disattivare le uscite “riscaldatore d’acqua-ventola acqua-ventola elettronica-filtro” in modalità (on/off);
⦁ È possibile attivare, solo se il galleggiante è a livello logico alto (galleggiante basso), l’uscita “pompa di rabbocco”;


Automatico: viene attivato il filtro, le luci si attivano in relazione all’orario, e il riscaldatore/ventola acquario/ventola elettronica si attivano in relazione alle temperature lette dalle sonde, se il contatto del galleggiante è chiuso si attiva la pompa per il rabbocco.


Manutenzione: tutte le uscite vengono disattivate a parte la ventilazione dell’elettronica che è legata alla sonda di temperatura dell’elettronica.

Materiale necessario


In elenco tutto il necessario per realizzare questo progetto (a parte i led la quantità di led che varia in base alla dimensione del proprio acquario). I link sono orientativi, per facilitare la ricerca e l’acquisto dei prodotti; potrebbero essere non validi se il prodotto è stato rimosso dal venditore (link con affiliazione pubblicitaria Amazon) :


⦁ Arduino UNO (va bene anche uno compatibile) : https://amzn.to/3m18Z2Y
⦁ Modulo RTC DS3231 : https://amzn.to/2J1nBAJ
⦁ Schede PCB per prototipi, morsetti a saldare, connettori pin : https://amzn.to/3pM36sF
⦁ Alimentatore 5V (vecchio alimentatore per smartphone) e cavo USB lato alimentatore funzionante
⦁ Sezione alimentazione: LM7809 + 1 condensatore elettrolitico da 10µF + 1 condensatore elettrolitico da 1µF+ 2 condensatori ceramico nF
⦁ Sezione scheda interfaccia Arduino/In-out: resistenza 100KΩ e 4,7 KΩ
⦁ Sezione tastiera:
⦁ pulsanti NO : https://amzn.to/3nMYaBN
⦁ resistenze da: 2.2KΩ 330Ω 660Ω 1KΩ 3.3K
⦁ Sezione scheda potenza led: 5 resistenze da 2.2KΩ e 5 TIP120 : https://amzn.to/2KoZdcM
⦁ 1 multipresa senza cavo da modificare https://www.leroymerlin.it/catalogo/multipresa-senza-protezione-electraline-82013-da-appoggio-bianco-32576082-p
⦁ Pressacavi
⦁ Guaina termoretraibile
⦁ Presa a pannello : https://amzn.to/3lURwcj
⦁ Scatola di derivazione a pareti lisce : https://amzn.to/3nKWj0q
⦁ Ventola per pc 80mm
⦁ Sonda temperatura a immersione : https://amzn.to/2HoJ3yY
⦁ Galleggiante acquario : https://amzn.to/395oaUV

Schemi e collegamenti dei diversi moduli

All’unita centrale (Arduino Uno), sono collegate le seguenti schede:
Scheda IN/OUT, questa scheda ha la funzione di interfacciare tutti i segnali di ingresso, e in parte i segnali di uscita (esempio la tastiera). Su questa scheda alloggia anche il modulo RTC, un dispositivo con funzione di orologio ed è alimentato da una batteria autonoma rispetto all’alimentazione principale per poter mantenere il conteggio del tempo anche a circuito non alimentato. A questa scheda va collegata la sonda ad immersione DS18B20 che va a leggere la temperatura dell’acqua, i galleggianti per leggere il livello dell’acqua in vasca e nella tanica del rabbocco, la tastiera per spostarsi nel menu e impostare i valori richiesti, e il display 16×2 per visualizzare tutte le informazioni disponibili.


⦁ Il display a cristalli liquidi (in ⦁ acronimo LCD) è un tipo di ⦁ display che utilizza le proprietà di modulazione della luce dei ⦁ cristalli liquidi. È utilizzato come dispositivo di visualizzazione. Nel nostro caso può visualizzare fino a 32 simboli (16 colonne x 2 righe). La comunicazione, come per il modulo RTC, avviene su bus I2C I²C (abbreviazione di Inter Integrated Circuit), è un sistema di ⦁ comunicazione seriale bifilare utilizzato tra ⦁ circuiti integrati. Il classico ⦁ bus I²C è composto da almeno un master ed uno slave. Nel nostro caso c’è un masterArduino Uno e due slave display e modulo RTC. Il vantaggio di utilizzare un bus, è quello di poter gestire attraverso solo due pin del Microcontrollore uno o più dispositivi.


⦁ La Scheda di potenza StripLed e ventole, ha come cuore il transistor (nel nostro caso 6). Il transistor è composto da un materiale semiconduttore al quale sono applicati tre terminali che lo collegano al circuito esterno. L’applicazione di una tensione elettrica o di una corrente elettrica a due terminali permette di regolare il flusso di corrente che attraversa il dispositivo, e questo permette di amplificare il segnale in ingresso. Nel nostro caso viene utilizzato per:

⦁ L’amplificazione di un segnale in entrata (nel caso dei led). Il microcontrollore non ha un vero e proprio segnale analogico in uscita, ma ha alcuni pin digitali che si possono utilizzare come uscita PWM. La modulazione di larghezza di impulso (o PWM, acronimo del corrispettivo inglese pulse-width modulation) è un tipo di modulazione digitale che permette di ottenere una tensione media variabile dipendente dal rapporto tra la durata dell’impulso positivo e dell’intero periodo (duty cycle). In questo modo riusciamo a regolare la tensione da applicare ai capi delle StripLed
⦁ Il funzionamento da interruttore (nel caso delle ventole di raffreddamento)
⦁ La Scheda relay, ha la funzione di amplificare il segnale di uscita per poter collegare carichi di potenza a 230Volt (filtro, riscaldatore, pompa rabbocco)
⦁ La Tastiera, è costituita da 5 tasti NO e da resistenze poste in serie che vanno a costituire un partitore di tensione. L’intero circuito è collegato all’alimentazione 5v che arriva dal Microcontrollore e a un pin Analogico. Il segnale Analogici si differenzia da quello digitali, molto semplicemente perché in un arco temporale possono assumere più valori compresi tra due valori (val.min e val.max). Il segnale digitale può assumere solo due valori (0/1 alto/basso). Il nostro microcontrollore, con nessun tasto premuto legge il valore massimo applicabile all’ingresso 5V1023, premendo il tasto destro legge il valore minimo applicabile 0v0 perché l’ingresso analogico e collegato direttamente a massa chiudendo il pulsante, premendo gli altri tasti legge valori diversi in base al tasto premuto perché più piccola è la resistenza posta in serie tra il polo negativo e l’ingresso e più piccolo sarà il valore letto.

NOTA BENE : Essendo che nel progetto è previsto l’uso della 220V, prestate molta attenzione, ne io e ne il sito Filo Connesso ci assumiamo alcuna responsabilità su problemi e danni recati a cose, animali e persone per un uso incauto della tensione di casa.

L’attuale versione del mio codice la trovate qui : https://drive.google.com/file/d/1K2s60rK6kjKHxAfoqPVvQAgjSmPQo3d9/view?usp=sharing

Vi invito a usare i commenti se avete necessità di aiuto o semplicemente per dire la vostra!

Vincenzo Erario per Filo Connesso

Valuta questo articolo, è anonimo e non richiede registrazioni!

Avatar photo

Vincenzo Erario

cosa raccontarvi di me...... pluri-diplomato, prima come perito informatico e successivamente come operatore elettrico. nella mia vita ho sempre lavorato come elettricista, prima nel settore civile/terziario, successivamente ho lavorato per un’azienda che realizzava prettamente impianti domotici. per circa tre anni ho lavorato come programmatore PLC. Ad oggi lavoro come meccatronico su un magazzino automatico. da piccolo ho sempre avuto la passione per l'elettronica, ma niente di serio. poi ho scoperto "Arduino" grazie a un ex collega. da lì ho rispolverato un pochino il mio diploma. quando riesco, cerco di costruirmi qualcosa di utile. il mio primo progetto serio è stato quello di realizzare, come illustrato nel mio primo articolo, un quadro comandi per un acquario. Non sogno di diventare un maker, ma di portar avanti questa passione, e quando riesco è sempre un piacere aiutare chi come me ha questa passione….


Scansiona il QRCode per leggerlo sul cellulare!

Scansiona il QRCode con la nostra applicazione ufficiale per leggere l'articolo sul tuo smartphone Android! Scarica l'ultima versione


SPONSORIZZATO

Potrebbero interessarti anche...

15 risposte

  1. Massimo ha detto:

    ciao ho trovato molto interessante il tuo progetto ho caricato lo sketch mi dà caricato ma sul display non viene visualizzato nulla ho un display I2C 16 x 2 come tu descrivi mi sapresti dare qualche dritta sul perchè non vedo nulla grazie

    • Avatar photo Vincenzo Erario ha detto:

      Ciao, hai provato a verificare i collegamenti (se sono collegati correttamente i pin sda scl). Una volta andato in run compare il messaggio della versione del programma, in pratica il testo che viene stampato nel setup. Prova a verificare il tutto con un programma di test per display e successivamente con il mio programma. Aspetto tuoi aggiornamenti

  2. Massimo ha detto:

    ciao ho provato con questo test ma il display non visualizza nulla
    #include
    #include

    // Create new LCD03 instance
    LCD03 lcd;

    void setup() {
    lcd.begin(16, 2);
    lcd.backlight();
    lcd.print(“Hello world”);
    delay(3000);
    lcd.clear();
    }

    void loop() {
    lcd.home();
    lcd.print(millis());
    delay(300);
    }
    i collegamenti sono giusti non capisco come mai

    • Avatar photo Vincenzo Erario ha detto:

      dal codice che hai postato vedo che manca l’inclusione delle librerie che ti servirebbero per comunicare con il display in I2C.

  3. Arben ha detto:

    Buonasera
    Sto da mesi a tentare a far funzionare per i miei acquari, però non riesco andare avanti oltre alla pagine Impostazioni. Ho controllato i codici utilizzati senza raggiungere l’obiettivo.

  4. Avatar photo Vincenzo Erario ha detto:

    Che problematica hai riscontrato? Se mi dai maggiori informazioni cerco di darti quante più informazioni utili per risolvere i tuoi problemi

    • Arben ha detto:

      Nella cartella 6_procedure personali, vengono indicati 5 pulsanti ma i valori sono 6 (L, R, U, D, S e N). e quindi ho aggiunto il sesto pulsante ed ho ricalcolato i valori. Con questo riesco ad andare oltre l’impostazioni però non riesco più andare avanti in quanto non ci sono più le indicazioni dei pulsanti da utilizzare per effettuare la navigazione nel menù.

    • Avatar photo Vincenzo Erario ha detto:

      Una mia curiosità, perché hai aggiunto il sesto pulsante?
      Per la gestione delle pagine, c’è una scheda gestione pagine. Li ci sono (non ricordo if oppure case..of) che in base al numero di pagina, premendo i pulsanti vi si può spostare nei menu. Aggiornami.

  5. Arben ha detto:

    Innanzitutto ti ringrazio della pazienza e la disponibilità. Dunque ho dovuto aggiungere il sesto pulsante in quanto viene richiamato in diversi menu come nella gestione del menu:
    void gestione_pagine() //gestione disattivazione tasti cambio pagina
    { if (btn_push == ‘N’) {cambio_pagina = true;}
    if (btn_push != ‘N’) {time_pagina = millis();}

    oppure nel menu procedure_personale:
    void retroilluminazione() {
    unsigned long retro_currentMillis = millis();
    if (btn_push != ‘N’)
    { retro_t_p = retro_currentMillis;
    lcd.backlight();}
    else if ((retro_currentMillis – retro_t_p >= 100000) && (btn_push == ‘N’))
    {retro_t_p = retro_currentMillis;
    lcd.noBacklight();}}

    • Avatar photo Vincenzo Erario ha detto:

      Ciao, perdonami se uso qualche termine inappropriato, quel tasto “N” non è nessun pulsante fisico ma virtuale. Ai fini funzionali viene gestito come nessun pulsante premuto. Esempio nello spegnimento schermo, se non premo nulla dopo 10 secondi spegni lo schermo.

    • Avatar photo Vincenzo Erario ha detto:

      Ciao, come è andata? È un periodo che certe cose le ho abbandonate, ma se riesco è un piacere dare una mano. Il tasto N come ora ricordo corrisponde al valore analogico di nessun tasto premuto. Se vuoi diagnosticare il circuito dei pulsanti trovi in rete programma e schema cercando pulsanti su un solo ingresso analogico. Se hai bisogno sono qui

  6. Alessandro ha detto:

    Ciao direi che e un super lavoro… però pure a me da dei problemi…
    una volta composto il programma

    //selezione pagina
    switch (pagina_attiva) {
    case 1: pagina_principale(); break;

    case 2: pagina_2(); break;//Impostazioni
    case 20: pagina_20(); break;//Set DataOra
    case 200: pagina_200(); break;//Set DataOra
    case 21: pagina_21(); break; //Potenza Max Led Blu
    case 22: pagina_22(); break; //Potenza Max Led Fitostimolanti
    case 23: pagina_23(); break; //Potenza Max Led Giorno
    case 24: pagina_24(); break; //Potenza Max Led AlbaTramonto
    case 25: pagina_25(); break; //lettura scrittura eeprom

    tutte queste mi dicono che non sono dichiarate…
    cosa ho dimenticato?

    • Avatar photo Vincenzo Erario ha detto:

      ciao Alessandro, ho provato ora a compilare e zero problemi. hai selezionato la scheda giusta?

  7. lorenzo ha detto:

    Ciao,interessante. ne ho uno che mi gira da un paio di anni fatto da me, ma ogni tanto si blocca. Autodidatta molto base. Ho provato questo ma anche a me si blocca nelle impostazioni. l’unica scelta è modifica data, riesco ad entrare muovo il cursore tra ora e data ma non riesco a cambiare niente. qualsiasi pulsante fa spostare il cursore ma non modificare. e con select ritorno ad impostazioni e basta. rimango o su impostazioni o entro in cambio ora senza concludere nulla

    • Avatar photo Vincenzo Erario ha detto:

      ciao lorenzo, scusami se rispondo adesso. hai avuto modo di testare i pulsanti. se riesco provo a reperire un progetto per eseguire un test sui pulsanti per capire dove è il problema

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *