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