LateX

  • English
  • Français
  • mercredi 25 février 2015

    Première expérience sur l'automatisation








    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’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
    Avec ces éléments, j’ai opté pour un transformateur 240 VAC en 12V, 1500 mA

    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.
    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é :


    L’eau de mer est conductrice. Sa résistance varie en fonction de la quantité de sel dissous dans l’eau. Le problème est que cette résistance varie en fonction du sel dissout dans l’eau mais aussi de la température. Un autre problème est que le résultat varie beaucoup en fonction du brassage de l’eau.


    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.

    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)


    Ensuite, il existe de nombreux tutoriels pour mettre cela sur une plaque de cuivre. 


    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.










    [i]  Il existe d’autres circuits intégrés qui font le même travail, notamment la série des microcontrôleurs PIC..

    14 commentaires:

    1. 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épondreSupprimer
      Réponses
      1. Merci 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...)

        pour 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/

        Supprimer
    2. Bonjour Bertrand, pour info je viens de placer le lien du blog sous mon Forum.
      www.projetrecifalx.fr

      Merci.

      DenisLuc

      RépondreSupprimer
    3. Bonjour,
      Super 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

      RépondreSupprimer
    4. 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

      je 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....

      RépondreSupprimer
      Réponses
      1. Bonjour,

        Aprè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.

        Supprimer
    5. bonjour vous fête le système et le vendre merci

      RépondreSupprimer
    6. Bonjour
      Votre 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


      RépondreSupprimer
    7. 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épondreSupprimer
      Réponses
      1. Ce commentaire a été supprimé par l'auteur.

        Supprimer
      2. Pour 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.
        En tout cas merci pour vos encouragements

        Supprimer
    8. Bonjour,
      Bravo 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

      RépondreSupprimer
    9. 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épondreSupprimer
    10. Bonjour,
      Tout 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

      RépondreSupprimer