Libelium is offering new technical support channels, to contact with de Technical Support team to solve any issue our doubt please contact with your sales agent or visit our contact site



Post a new topicPost a reply Page 1 of 1   [ 7 posts ]
Author Message
 Post subject: [open Aquarium] Personal installation
PostPosted: Mon Dec 05, 2016 6:33 pm 

Joined: Fri Dec 02, 2016 6:23 pm
Posts: 10
Based on the open Aquarium shield, I made my own installation according my needs.

The tank is 400l and there is a nursery for baby fish connected on the lower side.
It is a tropical one from amazonia area.

Kitchen side :
Image

Rear side :
Image


I used :
- the RF controler to pilot nursery light / UV light / moon light
- the temperature sensor
- the aquaponic shield with pH and conductivity.

Image

I also add a LCD screen 20x4 to have a view on the data in real time.

Image

I will detail the installation and code in next post.


Top
 Profile  
 
 Post subject: Re: [open Aquarium] Personal installation
PostPosted: Mon Dec 05, 2016 6:36 pm 

Joined: Fri Dec 02, 2016 6:23 pm
Posts: 10
Here the is the nursery :

Image

You can see the UV light in the middle.
On the right side, there are pH, conductivity sensor and the pH sensor for CO2 injection.

Image

On the left, there is the pH sensor and on the bottom, the CO2 bottle.


Top
 Profile  
 
 Post subject: Re: [open Aquarium] Personal installation
PostPosted: Mon Dec 05, 2016 6:42 pm 

Joined: Fri Dec 02, 2016 6:23 pm
Posts: 10
Here the RF power plug.

Image

And here the temperature sensor in the main tank.

Image


Top
 Profile  
 
 Post subject: Re: [open Aquarium] Personal installation
PostPosted: Mon Dec 05, 2016 6:46 pm 

Joined: Fri Dec 02, 2016 6:23 pm
Posts: 10
And now here the code I use.
Sorry but comments are in french but the programme language is universal.
It is a little bit long but it is my first project with Arduino.

Code:
// --- Programme Arduino --- Pilotage Aquarium --- V3.1
// par Soclo
// 2016 11 15


// --- Fonctionnalités utilisées ---
// Utilise un afficheur LCD 20x4 en mode I2C
// Lecture et affichage température de l'eau
// Pilotage multiprise par radio-fréquence
// Affichage conductivité


// ********************************************************************************
// --- Déclaration des bibliothèques ---
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>            // Inclusion de la bibliothèque pour le LCD par I2C
#include <OpenAquarium.h>                // Inclusion de la bibliothèque pour le shield OpenAquarium


// ********************************************************************************

// --- Déclaration des variables ---
float temperature;                 // Variable valeur de la température du capteur


DateTime now;                      // Variable valeur de la date et l'heure


                                   //RF_Receive_remoteControl_codes
unsigned long on1 = 1571953134;   
unsigned long off1 = 1571953136;
unsigned long on2 = 1571953152;
unsigned long off2 = 1571953154;
unsigned long on3 = 1571953044;
unsigned long off3 = 1571953046;
unsigned long on4 = 1580341490;
unsigned long off4 = 1580341492;
unsigned long on5 = 1571952396;
unsigned long off5 = 1571952398;



// --- Initialisation des fonctionnalités utilisées ---
#define I2C_ADDR 0x3F                             // Adresse du I2C : 0x3F
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7

int n = 1;

LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);



// Définition des points d'étalonnage pour le pH
#define calibration_point_4 2197  //Write here your measured value in mV of pH 4 2221
#define calibration_point_7 2153  //Write here your measured value in mV of pH 7 2104
#define calibration_point_10 2109 //Write here your measured value in mV of pH 10 2031



// Définition des points d'étalonnage pour la conductivité
#define point_1_cond 40000         // Noter ici la valeur de la solution étalon n°1 en µS/cm
#define point_1_cal 40            // Noter ici la valeur de résistance mesurée dans la solution n°1
#define point_2_cond 10500       // Noter ici la valeur de la solution étalon n°2 en µS/cm
#define point_2_cal 133         // Write here your EC value measured in resistance with solution n°2




// ********************************************************************************


void setup()   { // debut de la fonction setup()

// --- ici instructions à exécuter au démarrage ---

OpenAquarium.init();                     // initialize le shield OpenAquarium
OpenAquarium.initRTC();                 //  fonction horloge
OpenAquarium.calibrateEC(point_1_cond,point_1_cal,point_2_cond,point_2_cal);     // fonction conductivité
 OpenAquarium.calibratepH(calibration_point_4,calibration_point_7,calibration_point_10);  // fonction pH

lcd.begin(20,4);                                // initialise le LCD avec 20 colonnes x 4 lignes
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);   // Allumage de l'écran LCD
lcd.setBacklight(HIGH);

delay(100);                              // pause rapide pour laisser temps initialisation

// Test du LCD
lcd.print("Demarrage PilotAqua") ;        // affiche la chaîne texte
lcd.setCursor(0, 1);                      // place le curseur en bas à gauche
lcd.print("LCD en fonction") ;           // affiche la chaîne texte
lcd.setCursor(0, 2);
lcd.print("Version : 3.1") ;             // affiche la chaîne texte
delay(4000);                            // pause de 2 secondes
lcd.clear();                           // efface écran
delay(1000);                          // pour laisser temps effacer écran

} // fin de la fonction setup()
// ********************************************************************************


//*************** FONCTION LOOP = Boucle sans fin = coeur du programme *************
// la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension


void loop(){ // debut de la fonction loop()

lcd.home();

// Affichage de l'heure
now = OpenAquarium.getTime();                    //Mettre la date et heure dans la variable now
lcd.setCursor(0, 0);                            // place le curseur en haut à gauche
lcd.print("Heure :");                          // affiche la chaîne texte

if (now.hour() < 10){                                       // test pour savoir si heure est inférieure à 10
lcd.setCursor(8, 0);
lcd.print(0);
lcd.setCursor(9, 0);
lcd.print(now.hour());                    // affiche l'heure
}                                                 
if (now.hour() >= 10){                                      // test pour savoir si heure est supérieure ou égal à 10
lcd.setCursor(8, 0);
lcd.print(now.hour());                       // affiche l'heure
}

lcd.setCursor(10, 0);                          // positionne le curseur
lcd.print(":");                             // affiche :


if (now.minute() < 10){                                    // test pour savoir si minute est inférieure à 10
lcd.setCursor(11, 0);
lcd.print(0);
lcd.setCursor(12, 0);
lcd.print(now.minute());                       // affiche les minutes
}                                                 
if (now.minute() >= 10){                                    // test pour savoir si heure est supérieure ou égal à 10
lcd.setCursor(11, 0);
lcd.print(now.minute());                       // affiche les minutes
}

lcd.setCursor(13, 0);                          // positionne le curseur
lcd.print(":");                             // affiche :

if (now.second() < 10){                                    // test pour savoir si minute est inférieure à 10
lcd.setCursor(14, 0);
lcd.print(0);
lcd.setCursor(15, 0);
lcd.print(now.second());                       // affiche les secondes
}                                                 
if (now.second() >= 10){                                    // test pour savoir si heure est supérieure ou égal à 10
lcd.setCursor(14, 0);
lcd.print(now.second());                       // affiche les secondes
}


// Affichage de la température
lcd.setCursor(0, 1);                   // place le curseur sur la 2ème ligne
lcd.print("Temp  :") ;                // affiche la chaîne texte
temperature = OpenAquarium.readtemperature(); //Lecture de la température
lcd.setCursor(8, 1) ;                        // positionne le curseur à l'endroit voulu (colonne, ligne) (1ère=0 !)
lcd.print(temperature-1.7,1) ;              // affiche la variable temperature avec 1 décimale et correction de -1.7°C
lcd.setCursor(13, 1) ;                     // positionne le curseur à l'endroit voulu (colonne, ligne) (1ère=0 !)
lcd.print("Deg C");                       // affiche Deg C
delay(100);                             // pause


// Affichage du pH
lcd.setCursor(0, 2);                                              // place le curseur sur la 3ème ligne
lcd.print("pH    :") ;                                           // affiche la chaîne texte
lcd.setCursor(8, 2) ;                                           // positionne le curseur à l'endroit voulu (colonne, ligne) (1ère=0 !)
int mvpH = OpenAquarium.readpH();                              // Value in mV of pH
float pH = OpenAquarium.pHConversion(mvpH);                   //Calculate pH value
lcd.print(pH,2) ;                                            // affiche la variable de conductivité
delay(100);                                                 // pause


// Affichage de la conductivité
lcd.setCursor(0, 3);                                         // place le curseur sur la 3ème ligne
lcd.print("Cond  :") ;                                      // affiche la chaîne texte
lcd.setCursor(8, 3) ;                                       // positionne le curseur à l'endroit voulu (colonne, ligne) (1ère=0 !)
float resistanceEC = OpenAquarium.readResistanceEC();      //EC Value in resistance
float EC = OpenAquarium.ECConversion(resistanceEC);          //EC Value in µS/cm
lcd.print(EC,1) ;                                            // affiche la variable de conductivité
lcd.setCursor(14, 3) ;                     // positionne le curseur à l'endroit voulu (colonne, ligne) (1ère=0 !)
lcd.print("µS/cm");                       // affiche
delay(100);                             // pause


// test de l'heure pour activation et désactivation prises de courrant

// prise n°1 : injection CO2 de 9h00 à 19h30**********************************************************************

if (now.hour() == 9 && now.minute() == 00){                               // test pour savoir si heure = 09:00
    lcd.clear();                                                            // Efface l'écran LCD
   delay(2000);                                                           // pause
   OpenAquarium.sendPowerStrip(on1);                                     // si OK : allumage prise 1
   delay(2000);                                                         // pause
   lcd.clear();                                                        // Efface l'écran LCD
   lcd.print("Prise 1 :on");                                          // affichage
   lcd.setCursor(0, 1) ;                                             // Changement position affichage
   lcd.print("Injection CO2");                                      // affichage
   delay(58000);                                                   // pause
   lcd.clear();                                                   // Efface l'écran LCD
  }                                                              // Fin du test de l'heure
if (now.hour() == 19 && now.minute() == 30){                    // test pour savoir si heure = 19:30
    lcd.clear();                                                            // Efface l'écran LCD
   delay(2000);                                                           // pause
   OpenAquarium.sendPowerStrip(off1);                          // si OK : extinction prise 1
   delay(2000);                                               // pause
   lcd.clear();                                              // Efface l'écran LCD
   lcd.print("Prise 1 : off");                              // affichage
   lcd.setCursor(0, 1) ;                                   // Changement position affichage
   lcd.print("Injection CO2");                            // affichage
   delay(58000);                                         // pause
   lcd.clear();                                         // Efface l'écran LCD
   OpenAquarium.newday();
  }                                                   // Fin du test de l'heure
 
// prise n°2 : Lampe UV de 10:00 à 18h00**************************************************************************

if (now.hour() == 10 && now.minute() == 00){                                // test pour savoir si heure = 10:00
    lcd.clear();                                                            // Efface l'écran LCD
   delay(2000);                                                           // pause
   OpenAquarium.sendPowerStrip(on2);                                       // si OK : allumage prise 2
   delay(2000);                                                           // pause
   lcd.clear();                                                          // Efface l'écran LCD
   lcd.print("Prise 2 : on");                                           // affichage
   lcd.setCursor(0, 1) ;                                               // Changement position affichage
   lcd.print("Lampe UV");                                             // affichage
   delay(58000);                                                     // pause
   lcd.clear();                                                     // Efface l'écran LCD
  }                                                                // Fin du test de l'heure
if (now.hour() == 18 && now.minute() == 00){                      // test pour savoir si heure = 18:00
    lcd.clear();                                                            // Efface l'écran LCD
   delay(2000);                                                           // pause
   OpenAquarium.sendPowerStrip(off2);                            // si OK : extinction prise 2
   delay(2000);                                                 // pause
   lcd.clear();                                                // Efface l'écran LCD
   lcd.print("Prise 2 : off");                                // affichage
   lcd.setCursor(0, 1) ;                                     // Changement position affichage
   lcd.print("Lampe UV");                                   // affichage
   delay(58000);                                           // pause
   lcd.clear();                                           // Efface l'écran LCD
   OpenAquarium.newday();
  }                                                    // Fin du test de l'heure

// prise n°3 : Tube néon Blue Moon de 20:49 à 23h00*******************************************************************

if (now.hour() == 20 && now.minute() == 49){                                // test pour savoir si heure = 20:49
   lcd.clear();                                                            // Efface l'écran LCD
   delay(2000);                                                           // pause
   OpenAquarium.sendPowerStrip(on3);                                     // si OK : allumage prise 3
   delay(2000);                                                         // pause
   lcd.clear();                                                        // Efface l'écran LCD
   lcd.print("Prise 3 : on");                                         // affichage
   lcd.setCursor(0, 1) ;                                             // Changement position affichage
   lcd.print("Blue Moon");                                          // affichage
   delay(58000);                                                   // pause
   lcd.clear();                                                   // Efface l'écran LCD
   delay(2000);                                                  // pause
  }                                                             // Fin du test de l'heure
if (now.hour() == 23 && now.minute() == 00){                   // test pour savoir si heure = 23:00
   OpenAquarium.sendPowerStrip(off3);                         // si OK : extinction prise 3   
   OpenAquarium.newday();
  }                                                         // Fin du test de l'heure


// prise n°4 : Lampe LED Nurserie de 07:50 à 21h05*******************************************************************

if (now.hour() == 7 && now.minute() == 50){                              // test pour savoir si heure = 07:50
    lcd.clear();                                                            // Efface l'écran LCD
   delay(2000);                                                           // pause
   OpenAquarium.sendPowerStrip(on4);                                    // si OK : allumage prise 4
   delay(2000);                                                        // pause
   lcd.clear();                                                       // Efface l'écran LCD
   lcd.print("Prise 4 :on");                                         // affichage
   lcd.setCursor(0, 1) ;                                            // Changement position affichage
   lcd.print("Led Nurserie");                                      // affichage
   delay(58000);                                                  // pause
   lcd.clear();                                                  // Efface l'écran LCD
  }                                                             // Fin du test de l'heure
   if (now.hour() == 21 && now.minute() == 05){                // test pour savoir si heure = 21:00
   lcd.clear();                                                            // Efface l'écran LCD
   delay(2000);                                                           // pause
   OpenAquarium.sendPowerStrip(off4);                         // si OK : extinction prise 4
   delay(2000);                                              // pause
   lcd.clear();                                             // Efface l'écran LCD
   lcd.print("Prise 4 :off");                              // affichage
   lcd.setCursor(0, 1) ;                                  // Changement position affichage
   lcd.print("Led Nurserie");                            // affichage
   delay(58000);                                        // pause
   lcd.clear();                                        // Efface l'écran LCD
   OpenAquarium.newday();
  }                                                  // Fin du test de l'heure


// Pilotage de l'allumage de l'écran LCD************************************************************

// Allumage du rétro-éclairage de l'écran LCD *******************************************************************

if (now.hour() == 07 && now.minute() == 30){                            // test pour savoir si heure = 07:30
    lcd.setBacklight(HIGH);                                           // Allumage de l'écran LCD
    delay(1000);                                                    // pause
  }     

// Extinction du rétro-éclairage de l'écran LCD *******************************************************************

 if (now.hour() == 21 && now.minute() == 30){                         // test pour savoir si heure = 21:30
   lcd.setBacklight(LOW);                                            // Extinction de l'écran LCD
   delay(1000);                                                    // pause
   }     

}

// --- Fin programme ---

// --- Mémo instructions ---


// ----- memo LCD ---
// lcd.begin(cols, rows); // initialisation nombre colonne/ligne
//
// lcd.clear(); // efface écran et met le curseur en haut à gauche
// lcd.home(); // repositionne le curseur en haut et à gauche SANS effacer écran
//
// lcd.setCursor(col, row) ; // positionne le curseur à l'endroit voulu (colonne, ligne) (1ère=0 !)
// lcd.print("texte") ; // affiche la chaîne texte
//
// lcd.cursor() ; // affiche la ligne de base du curseur
// lcd.noCursor() ; // cache le curseur
// lcd.blink() ; // fait clignoter le curseur
// lcd.noBlink() ;// stoppe le clignotement du curseur
// lcd.noDisplay() ; // éteint le LCD sans modifier affichage
// lcd.display() ; // rallume le LCD sans modif affichage
//
// lcd.scrollDisplayLeft(); // décale l'affichage d'une colonne vers la gauche
// lcd.scrollDisplayRight(); // décale l'affichage d'une colonne vers la droite
// lcd.autoscroll() ; // les nouveaux caractères poussent les caractères déjà affichés
// noAutoscroll(); // stoppe le mode autoscroll


// Exemple d'allumage et extinction prise numérotée
// OpenAquarium.sendPowerStrip(on1);             //Turn ON plug 1
// lcd.print("Plug 1: ON");
// // delay(3000);                              // pause
// lcd.clear();                           // Efface l'écran LCD
// OpenAquarium.sendPowerStrip(off1);       //Turn OFF plug 1
// lcd.print("Plug 1: OFF");
// delay(3000);                           // pause
// lcd.clear();                           // Efface l'écran LCD
// delay(1000);                           // pause


Top
 Profile  
 
 Post subject: Re: [open Aquarium] Personal installation
PostPosted: Wed Dec 07, 2016 8:43 am 

Joined: Mon Sep 28, 2009 12:06 pm
Posts: 11366
Hello soclopv,

Thank you very much for sharing your project, and congratulations for your great work. Sure it is very useful for other people in the forum.

Regards


Top
 Profile  
 
 Post subject: Re: [open Aquarium] Personal installation
PostPosted: Tue Dec 20, 2016 5:30 pm 

Joined: Fri Dec 02, 2016 6:23 pm
Posts: 10
Thank you but it was possible only with all the good tutorials on the cooking hacks web site.


Top
 Profile  
 
 Post subject: Re: [open Aquarium] Personal installation
PostPosted: Wed Dec 21, 2016 8:59 am 

Joined: Mon Sep 28, 2009 12:06 pm
Posts: 11366
Thank you for your comments!


Top
 Profile  
 
Display posts from previous:  Sort by  
Post a new topicPost a reply Page 1 of 1   [ 7 posts ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Libelium theme based on 610nm Style by Daniel St. Jules of http://www.gamexe.net


© Libelium Comunicaciones Distribuidas S.L. | Terms of use.