De quoi s’agit-il ?
Il s’agit
d’une application mobile qui permet de :
- Recevoir les informations de température ;
- Recevoir les informations de PH
- Recevoir les informations de salinité ;
- Gérer L’éclairage ;
- Gérer Le niveau d’eau dans la cuve technique ;
Cela se traduit par 6 composants logiciels qui assument ces fonctions. Sur la photo, on retrouve la température en haut à gauche, le pH en haut au milieu, la densité en haut à droite, la gestion de l’éclairage en bas à gauche et enfin la gestion du niveau de la cuve technique en bas à droite.
Les informations passives (température, pH et densité) sont mises à jour toutes les 5 minutes par défaut et sont paramétrables.
Comment cela fonctionne ?
Description générale :
La tablette
fonctionne sous Androïd. La programmation des applications se fait en java. Il existe un très bon tutorial pour débuter en programmation sous Androïd : http://openclassrooms.com/courses/creez-des-applications-pour-android.
Le système
est composé d’une application java sur la tablette qui joue le rôle de
« client » et d’un circuit intégré qui joue le rôle de «
serveur ». (Microcontrôleur Arduino).
Le
« Client » (la tablette, le smartphone, le PC…) envoie des requêtes
(donne-moi la température, donne-moi le Ph, donne-moi la densité) et affiche la réponse sur l’interface
utilisateur. Le « Client » peut aussi envoyer des commandes (Prend en
compte ces nouveaux horaires pour l’éclairage, prend en compte ces nouveaux niveaux
pour le déclenchement de la pompe)
Les composants principaux :
L’Arduino
Le cœur du système est une carte Arduino[i] (www.arduino.cc). C’est un circuit intégré programmable libre de droit. Pour rassurer les lecteurs novices ou sans connaissances en électronique, Il y a 6 mois, je ne savais pas que cela existait et je n’avais aucune idée de son fonctionnement. Une fois le premier choc passé, on arrive très rapidement à faire clignoter une diode et à se lancer dans des applications plus complexes.
Ce
microcontrôleur dispose de 14 entrées sorties numériques et 6 entrées analogiques.
L’intensité maximum est de 40 mA par sortie pour une intensité maximale en sortie de 200 mA.
L’intensité maximum est de 40 mA par sortie pour une intensité maximale en sortie de 200 mA.
L’Ethernet Shield
Ce composant permet à l’Arduino de se
connecter à internet via un câble Ethernet classique. Il s’emboite parfaitement
sur la carte Arduino. Il existe d’autres solutions ( Wifi, Blutooth, …). J’ai personnellement ma « box »
internet dans le meuble sous l’aquarium. J’ai opté pour ce composant que je
peux connecter très facilement.
Les capteurs :
Capteur de Ph :
J’utilise une sonde Ph. Elle est parfaitement compatible avec l’arduino pour un prix raisonnable.
http://dfrobot.com/wiki/index.php/PH_meter(SKU:_SEN0161.
Capteur de Température :
Il existe plusieurs types de capteur de
température. J’en ai choisi un inoxydable et étanche.
Capteur de niveau et pompe :
Après
beaucoup de recherche sur les différentes possibilités techniques. Je me suis
réalisé mon propre détecteur de niveau (Cf. description technique).
Capteur de salinité :
Je n’ai pas
trouvé de capteur électronique à un prix raisonnable pour effectuer cette
mesure. J’utilise donc ici aussi une méthode maison (Cf. description technique).
Description technique :
L’alimentation électrique :
- L’Arduino doit être alimenté par une tension entre 7
et 12 V
- La pompe doit être alimentée en 12V, 1,2 ampère.
- Le circuit PCF8583 (horloge interne) doit être
alimentée en 5V et perd ses informations (l’heure, les heures d’allumage
et d’extinction des néons) si il y a une coupure de l’alimentation
Les bases de l’Arduino :
L’Arduino
dispose de 6 entrées analogiques. Concrètement, cela signifie que la carte est
capable de lire une tension entre 0 et 5V (ni plus, ni moins, c’est à notre
charge de s’assurer que cette tension soit comprise entre ces valeurs, sinon
vous risquez d’endommager la carte).
La
carte se relie de manière très simple à un PC grâce à un câble USB (non
fourni). Ensuite, il suffit d’installer les drivers et nous voilà prêt pour
notre premier programme.
Un programme
Arduino ressemble beaucoup à du C. Il existe de très bons tutoriels sur cet
outil et l’apprentissage est assez facile.
L’Arduino dispose de 14 entrées sorties numériques et 6 entrées analogiques. Les sorties numériques permettent de mettre une borne dans un état « HIGH » à +5V ou dans un état « LOW » à 0V. Les entrées numériques (qui sont les même que les sorties) permettent de déterminer si un état est « HIGH » ou « LOW ». Les Entrées analogiques permettent de transformer une tension entre 0V et 5V en un entier entre 0 et 1024. Ces entrées analogiques sont particulièrement utiles pour lire la température, le pH et la densité.
Les
sorties numériques me servent de commande. Les Pin 4, 10, 11, 12,13 sont
utilisés par l’Ethernet Shield et ne peuvent pas être utilisés en
programmation.
Lecture de la température :
Le
capteur de température est un composant électronique tout simple qui vaut
quelques euros (trois euros environ). Sa particularité est d’être étanche et
d’être en inox, ce qui est plutôt pratique pour un capteur qui sera en
permanence dans l’eau de mer.
Ce
capteur a une résistance proportionnelle à la température (plus la température
augmente, plus la résistance diminue). A 20°C, la résistance est d’environ 10K
Ohm.
Le
principe consiste à faire un pont diviseur de tension sur ma tension de base de
12V pour transformer ma tension en une valeur entre 0V et 5V qui variera en
fonction de la température. On envoie alors cette tension sur l’entrée
analogique de l’Arduino.
En
programmation « arduino », cela se fait de manière très simple avec
une fonction :
Int
Temp = AnalogRead(A0) ;
Cette fonction lit la tension appliquée à la borne A0, la traduit en un nombre en 0 et 1024 (0=0V ; 1024=5V) et stocke le résultat dans la variable « Temp ».
Le schéma de
principe est présenté ci-dessous :
Ce
montage délivre une tension entre 0 et 5V sur l’entrée analogique de l’Arduino.
La tension fournie est 12*R/(R+12K). Il suffit après de transmettre la valeur
lue au client (la tablette, pc, téléphone…)
Le
problème est que ce montage consomme en permanence du courant alors que la
température n’est mesurée que toute les 5 minutes.
L’astuce est
de commander le passage du courant quand on souhaite mesurer la température, on
obtient un montage un peu plus complexe mais qui ne consomme que quand on
l’utilise…
On ajoute au
montage un transistor. Quand le transistor reçoit sur sa base un petit courant,
il devient conducteur entre son collecteur et l’émetteur. La diode est juste là
pour faire jolie et s’allumer quand la carte reçoit une demande de température.
Étalonnage : Le client reçoit une valeur entre 0 et 1024, ce qui ne signifie rien. Il y a donc nécessité d’étalonner avec deux sources de température connues.
Lecture du PH :
La sonde est livrée avec 3 fils, un pour le
+5V, un pour la terre (0V) et un pour une entrée analogique. Comme pour la
température, on lit la valeur à l’aide de la fonction :
Int Ph = AnalogRead(A0) ;
et on obtient la valeur du pH. C’est aussi simple que cela.
Int Ph = AnalogRead(A0) ;
et on obtient la valeur du pH. C’est aussi simple que cela.
J’ai
rencontré pour ce montage un problème sur l’alimentation. Il est précisé dans
la documentation que la sonde doit être alimentée en 5V précisément, or
l’Arduino délivre du 5V théorique sur ses sorties numériques et si l’on rajoute
une diode, la tension chute de 0.6V. La tension n’est alors plus suffisante.
Comme pour la température, je souhaite aussi commander cette sonde de façon à
mesurer le Ph à intervalles réguliers (toutes les 5 minutes).
Le
schéma devient plus compliqué et fait intervenir un transistor de type NPN et
un transistor de type PNP. J’utilise aussi une diode Zener pour garantir du 5,1
V constant, elle devient passante si une tension supérieure est appliquée.
Le
premier transistor (à gauche) est un transistor de type NPN. Si aucun courant
n’est appliqué sur sa base (Etat de la sortie numérique à LOW), alors le
transistor est bloqué. Dans ce cas, le deuxième transistor est bloqué car sa
base est à un potentiel inférieur à 12V qui correspond au potentiel du nœud
« S ».
Si
un courant n’est appliqué sur sa base (Etat de la sortie numérique à HIGH),
alors le transistor est passant. Dans ce cas, le potentiel du nœud
« S » diminue et vaut 12-R*i. Un courant provient alors de la base du
transistor PNP qui devient passant et alimente la sonde à 5.1V précisément.
Lecture de la densité :
J’utilise exactement le même principe que pour la température. Ensuite il faut faire un étalonnage en tenant compte de la température.
Mise à jour 02/06/2016 : Cette méthode ne fonctionne pas dans le temps. J'utilise une autre méthode un peu plus complexe à mettre en œuvre avec un courant alternatif dans une bobine... Cela fonctionne et fera l'objet d'un prochain article détaillé.
Gestion du niveau d’eau
Quand le
niveau d’eau descend sous un niveau minimum, la pompe se déclenche et remplit
la cuve technique d’eau osmosée jusqu’au
niveau maximum. En comptant une réserve de 40 litres d’eau osmosée et une
évaporation d’environ 2 litres par jour. L’autonomie est de 20 jours environ
Le niveau Min
et Max sont réglable avec la tablette. Il y a plusieurs solutions pour résoudre
ce problème. Un flotteur type « chasse d’eau » ne me permet pas
d’avoir les niveaux réglables. Les solutions à base de laser sont chères, j’ai donc opté pour un chapelet de résistance
pour détecter le niveau d’eau.
Info mise à jour 02/06/2016 : J'utilise un autre système pour mesurer le niveau de l'eau beaucoup plus fiable, voir le lien suivant : détection de niveau
Gestion
de l’éclairage :
C’est
la partie la plus complexe.
J’ai
personnellement une rampe de 8 T5 de 54W qui nécessite 3 prises de courant 220
VAC. La première prise commande 4 néons, la deuxième commande les quatre néons
restants et enfin la troisième commande des leds de faible puissance et les
ventilateurs.
Pour
commander les prises, j’utilise des relais de puissance.
Ce sont de petits appareils qui se comportent comme des interrupteurs, ils sont fermés si on applique du 5V et ouverts par défaut ( photo ci-dessus à droite). La gestion des heures d’éclairage est assurée par une puce PCF 8385 ( photo ci-dessus à gauche). J’ai passé de nombreuses heures à comprendre et tester le fonctionnement de cette puce.
Ce sont de petits appareils qui se comportent comme des interrupteurs, ils sont fermés si on applique du 5V et ouverts par défaut ( photo ci-dessus à droite). La gestion des heures d’éclairage est assurée par une puce PCF 8385 ( photo ci-dessus à gauche). J’ai passé de nombreuses heures à comprendre et tester le fonctionnement de cette puce.
L’horloge
possède les informations de temps (adresse 00 à 0F) et de la RAM de libre (à
partir de l’adresse 10 jusqu’à FF) ce qui permet de stocker les moments où les
néons doivent s’allumer et s’éteindre. J’ai divisé la journée en tranches de 30
minutes ( 00 :00 00 :30 01 :00 etc..), cela représente 48
créneaux horaires qui occupent les adresses 20 à 57. Chaque adresse stocke l’information sur les 3 prises.
X
|
X
|
Prise 3
|
Prise 3
|
Prise 2
|
Prise 2
|
Prise 1
|
Prise 1
|
00 :
signifie ne change rien
01 :
Allume
10 :
Eteint
11 : Non
utilisé
Ainsi, si à
l’adresse 30 j’ai l’information 00 00 01 00, cela signifie allume la prise 2 à
05 :00 du matin. Quand on clique sur le bouton « envoyer » de la
tablette, en fait celle-ci envoie 48 octets (+1 octet de commande) pour remplir les adresses 20 à 57
de la puce.
Dialogue Client / Serveur
Pour
dialoguer entre eux, j’utilise des sockets. L’arduino écoute en permanence. La
tablette envoie des requêtes ou des commandes.
Requête envoyée par Client (Tablette,
smartphone, Pc…)
|
Réponse de l’Arduino
|
||
50
|
1
octet : demande de Température
|
Byte1
Byte2
|
2 octets =
1 nombre entre 0 et 1024 traduit côté client en température
|
51
|
1
octet : Demande de pH
|
Byte1
Byte2
|
2 octets =
1 nombre entre 0 et 1024 traduit côté client en pH
|
52
|
1
octet : Demande de densité
|
Byte1
Byte2
|
2 octets =
1 nombre entre 0 et 1024 traduit côté client en densité
|
53 Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7 […] Byte48
|
49
octets : allumage et extinction des néons
|
Aucune,
prise en compte et intégration dans l’horloge
|
|
54 Byte1
|
2
octets : niveaux cuve
|
Aucune,
prise en compte
|
Conception circuit imprimé :
Une fois que
l’on a testé que tout fonctionne, il reste à rendre cela un peu plus propre
pour que cela s’intègre bien avec la « freebox » dans le salon.
J’utilise un
logiciel qui s’appelle Kicad pour le dessin de mon circuit imprimé. ( un logiciel libre)
Combien le système coûte :
Au-delà des
nombreuses heures de développement de test et d’essai. Les prix de chaque
élément est très raisonnable.
Arduino :
25 euros
Ethernet
Schield : 25 euros
Sonde
Ph :25 euros
Sonde
Température : 3 euros
Divers
composants électroniques (résistances, led, transistors, relais, horloge,
connecteurs, circuits imprimé vierge ) : 10 euros
Pour moins de
100 euros, le système est fonctionnel.
Les améliorations :
Il manque un boîtier pour faire quelque chose de plus "professionnel", je n'ai pas investi dans une imprimante 3D. Ensuite sur le fond, l'objectif est de partir deux semaines en vacances sans interventions humaines. Je souhaiterai :- Ajouter la distribution de nourriture
- Ajouter la vidéo de l'aquarium sur la tablette car rien ne remplace l'image pour détecter les problèmes...
Si vous avez
trouvé cet article intéressant, faites moi part de vos commentaires.
Mise à jour 06/06/2017.
Au départ en écrivant ces lignes, je ne pensais pas en faire un véritable outil, juste quelques idées pour partager. Si vous m'avez lu jusque là, c'est que le domaine vous intéresse et quelques personnes qui me demande si mon système est à vendre. je vous serais très reconnaissant de répondre à mon petit sondage de 10 questions qui m'aidera à savoir si je dois franchir le pas pour l'industrialiser. Merci par avance.
Mise à jour 06/06/2017.
Au départ en écrivant ces lignes, je ne pensais pas en faire un véritable outil, juste quelques idées pour partager. Si vous m'avez lu jusque là, c'est que le domaine vous intéresse et quelques personnes qui me demande si mon système est à vendre. je vous serais très reconnaissant de répondre à mon petit sondage de 10 questions qui m'aidera à savoir si je dois franchir le pas pour l'industrialiser. Merci par avance.
[i]
Il existe d’autres circuits intégrés qui font
le même travail, notamment la série des microcontrôleurs PIC..
Bonjour, très intéressant et beau travail ! Pourriez-vous indiquer les références du matériel utilisé ? Merci encore pour le partage !
RépondreSupprimerMerci pour les encouragements. J'entrerai dans le détail en fonction des questions que j'ai reçues dans quelques semaines. En attendant, voici les sites où j'ai acheté le matériel : ( attention à selectronic qui n'envoie pas toujours tout ce que l'on commande...)
Supprimerpour la sonde pH:
http://www.gotronic.fr/art-sonde-ph-interface-sen0161-21552.htm
carte arduino
http://www.gotronic.fr/art-carte-arduino-uno-12420.htm
ethernet shield
http://www.gotronic.fr/art-module-ethernet-shield-arduino-12425.htm
capteur température
http://www.conrad.fr/ce/fr/product/323879/Capteur-de-temperature-NTC-30-a-105-C-boitier-en-acier-inoxydable-10-k-1-MJSTS-103-3950-1-600-3D
composants (relais, résistance, Led, plaque de cuivre...),
http://www.conrad.fr
http://www.selectronic.fr/
Bonjour Bertrand, pour info je viens de placer le lien du blog sous mon Forum.
RépondreSupprimerwww.projetrecifalx.fr
Merci.
DenisLuc
Bonjour,
RépondreSupprimerSuper boulot
Je n'arrive pas à trouver l'opération pour afficher la bonne température en fonction de la tension. Pouvez me donnez le code correspondant svp ?
Merci beaucoup
Jody
Notre ONG est crée pour luter contre la dénutrition en Colombie, (chaque jour des enfant et adulte meurs de faim ici hélas ). Je ne suis pas programmateur mais je peut monter et trouver sur place tout le materiel . Donc si une personne a l'âme charitable peut nous aider a développer cette base ce serait génial... merci d'avance pour notre Fondation
RépondreSupprimerje doit pouvoir gérée la culture de 8 bassins et j'ai penser que mettre des Arduino par bassin serait la solution.
je doit mesurée deux fois par jour les élément suivant;
PH, Température de l'eau, Température aire, niveau d'eau, Opacité ou plus exactement concentration algue (disque se selchi), ensoleillement, Salinité. Conjointement je doit pouvoir Contrôler que le brassage fonctionne bien et régler la fréquence de brasage (4h et arrêt 20mn), et pour finir le pilotage de 4 vannes avec compteur de débit pour; Eau d'apport, Purge ver extraction, Apport aliment liquide, Apport en CO2.
Lecture et contrôle a distance;
l'idée est que cette culture puisse ce contrôler via internet , chaque Arduino peuvent recevoir un câble RJ 45 pour regrouper ceci sur mon PC labo, Mais le contrôle doit ce faire sur une page HTML de cette façon si je suis en déplacement je peux aider les operateurs a distance et avoir des alarme en cas de problème de culture. si j'utilise mon téléphone pour accéder a la page je peut contrôler les vannes d'aliment si besoin etc....
Bonjour,
SupprimerAprès un an, Le système fonctionne correctement, sauf la mesure de la salinité pour lequel j'ai du employer une autre méthode à base de courant alternatif, je publierai dès que j'aurai un peu de temps.
Pour votre projet, Je peux aider dans la mesure de mes possibilités. Même si tout semble faisable. En pratique, il y a la question de la fiabilité du système à prendre en compte pour en faire quelque chose de professionnel.
J'ai par exemple eu des algues qui se sont développées au bout de quelques semaines dans mon détecteur de niveau ce qui a eu pour effet de faire déborder la décante, rien de grave mais on ne peut pas se permettre d'erreurs...
Je crains vraiment que pour maintenir un système dans le temps, il faille le maitriser pour pouvoir le dépanner.
bonjour vous fête le système et le vendre merci
RépondreSupprimerBonjour
RépondreSupprimerVotre automate me semble un tres bon projet autour de l 'arduino et j'envisage d'en fabriquer un pour mon bac.Je vais commencer par un controleur pour l eau douce donc pas de mesure de salinité pour l'instant.
J ai quelques questions sur le capteur de PH surtout sur sa durée de vie : la notice dit qu'on ne peut pas laisser la sonde continuellement dans le bac. Quel est votre retour d 'expérience ( durée de vie, précision) sur la mesure du PH ?
Quels outils utilisez vous pour developper le code Android?
Le code et les schémas sont ils disponibles ? Je voudrais interfacer ' arduino en Bluetooth et utiliser une charge par induction pour noyer l'électronique des capteurs dans le bac sans fil et communiquer en BLE.
Merci
gchatre@icloud.com
Bonjour, je trouve votre arduino génial. Je fais déjà de la domotique à base de raspberry et de zwave et j'ai équipé brièvement mon aquarium recifal avec des capteurs de temperature et de niveau mais il me manque la densité et le ph. Je n'ai pas le temps pour me lancer dans un nouveau projet en arduino mais je suis interressé par ce que vous avez réalisé. bravo ! Serriez-vous intéressé par m'en vendre un exemplaire ? grand merci. coolsth-at-hotmail.comme.
RépondreSupprimerCe commentaire a été supprimé par l'auteur.
SupprimerPour l'instant, je ne vends pas mon projet, il n'est pas encore assez professionnel à mon goût. Je progresse dans la fiabilisation qui est l'élément le plus difficile à maîtriser et je ne veux pas vendre un système qui n'est pas sûr à 100%. Ce qui me prend 5 minutes à dépanner peut vite devenir insoluble pour un utilisateur qui n'est pas à l'origine du système. Je vais peut être me lancer dans la fabrication professionnelle de ce projet, et je ne manquerai pas de donner quelques prototypes à ceux qui veulent bien m'aider.
SupprimerEn tout cas merci pour vos encouragements
Bonjour,
RépondreSupprimerBravo pour votre projet.
Je me lance moi même dans ce même type de projet après l’acquisition récemment d’un aquarium recifal. je n’ai aucune compétence en électronique et je suis donc à la recherche de tout ce qui pourrais m’aider. Si je peux vous apporter mon aide , du coup plutôt sur la partie Software, je serait ravit de pouvoir échanger avec vous.
Cordialement
Bonjour je souhaite réaliser le même projet, je ne dispose pas des connaissances nécessaires pour réaliser un tel code. Pouvez vous me partager votre code Arduino afin que je puisse avancer.
RépondreSupprimerBonjour,
RépondreSupprimerTout d'abord bravo beau projet car peu d'information sur la salinité sous arduino
Pourriez-vous partager le code arduino SVP pour les débutants car le projet est tres intéressant mais il faut encore maîtriser le code
Merci par avance
Cordialement
je voulais partager les liens des produits arduino qui sont généralement assez cher
le module conductivité avec sonde Temperature DS18B20 pour 27€
https://fr.aliexpress.com/item/1005001593777390.html?spm=a2g0o.detail.1000014.32.1497600ewqy2HR&gps-id=pcDetailBottomMoreOtherSeller&scm=1007.33416.205108.0&scm_id=1007.33416.205108.0&scm-url=1007.33416.205108.0&pvid=95ca1c9b-00d7-4b73-9dfe-26ca81f36d6f&_t=gps-id:pcDetailBottomMoreOtherSeller,scm-url:1007.33416.205108.0,pvid:95ca1c9b-00d7-4b73-9dfe-26ca81f36d6f,tpp_buckets:668%230%23209439%233_668%23888%233325%234_23416%230%23205108%236_23416%234721%2321967%23216_23416%234722%2321972%235_668%232846%238108%231977_668%232717%237561%23376_668%231000022185%231000066058%230_668%233422%2315392%23561_4452%230%23211409%230_4452%233474%2315675%23194_4452%234862%2322449%23689_4452%233098%239599%23611_4452%235106%2323440%23149_4452%233564%2316062%23607
sonde ORP REDOX 45€
https://fr.aliexpress.com/item/4000562124706.html?spm=a2g0w.12057483.0.0.5fbd1752Vj5mmS
SONDE PH avec sonde temperature DS18B20 15€
https://fr.aliexpress.com/item/33014998723.html?spm=a2g0o.detail.1000014.15.5fd1487acilCwl&gps-id=pcDetailBottomMoreOtherSeller&scm=1007.33416.205108.0&scm_id=1007.33416.205108.0&scm-url=1007.33416.205108.0&pvid=5db843cf-2a08-4724-b015-fcaff16bba1b&_t=gps-id:pcDetailBottomMoreOtherSeller,scm-url:1007.33416.205108.0,pvid:5db843cf-2a08-4724-b015-fcaff16bba1b,tpp_buckets:668%230%23131923%2315_668%23888%233325%234_23416%230%23205108%236_23416%234721%2321967%23216_23416%234722%2321972%235_668%232846%238108%231977_668%232717%237561%23376_668%231000022185%231000066058%230_668%233422%2315392%23871_4452%230%23211409%230_4452%233474%2315675%23194_4452%234862%2322449%23689_4452%233098%239599%23611_4452%235106%2323440%23149_4452%233564%2316062%23607