Centrale de navigation Low Cost sur plateforme Arduino (3) - Les interfaces Speedo et Anémo

Publié le 6 Février 2014

La deuxième partie montrait comment interfacer un module GPS sur Arduino. Cette page décris maintenant comment interfacer les instruments analogiques  Pen Lann qui équipent le bateau. Il est possible de s'inspirer des schémas pour d'autres marques de capteurs (speedo plastimo par exemple ..)

Les capteurs du système Pen Lann sont

  • Le speedo (magnétique)
  • L'anémo (Contact type ILS)
  • La girouette (résistif)

Le module Arduino ne peut pas traiter directement le signal issu de ces capteurs, mais dispose de nombreuses interfaces analogiques capables de "lire" la valeur d'une tension continue. Les interfaces décrite ci-dessous adaptent le signal provenant des sondes en le transformant en tension continue pour permettre au module Arduino de le transformer en phrases NMEA.

Technologie des sondes (Anémo et Speedo)

Anémo Pen Lann: Un aimant sur le moyeux d'une roue à ailettes passe devant un relais
minuscule avec une languette aimantée dans le corps de la sonde. A chaque passage de
l'aimant, le contact se ferme et génère une impulsion électrique. La vitesse du vent,
correspondant au nombre de tours/sec de l'anémo est représentée par le nombre d'impulsions par secondes.


Speedo Pen Lann: Fonctionnement identique à l'anémo. Un aimant sur la pale d'une roue à aubes passe devant un relais minuscule avec une languette aimantée dans le corps de la sonde. A chaque passage de l'aimant, le contact se ferme et génère une impulsion électrique. La vitesse du bateau, proportionnelle au nombre de tours/sec de la roue à aubes est traduite ennombre d'impulsions par secondes.


Speedo Plastimo: Ce type de speedo (le plus courant) est constitué également d'une roue à ailette aimantée mais dans le corps de la sonde c'est une une self (bobine d'un millier de spires) qui génère l'impulsion. Le signal très faible doit être amplifié avant traitement.

   

La sonde plastimo utilisée pour les tests

La sonde plastimo utilisée pour les tests

Un peu de théorie ...

Le circuit électronique des interfaces convertit le signal impulsionnel issu de la sonde en une tension, proportionnelle à la vitesse de rotation de la roue à aube.

Calcul de l'anémomètre

L'anémomètre se présente comme une roue à aube (coupelles) à trois branches, comme sur le shéma ci dessous. Ces coupelles présentent un coefficient de résistance à l'air supérieur sur leur face concave par rapport à leur face convexe (donc à l'arret, F >> f et en mouvement, la vitesse tangentielle en F = W).

Lorsque le vent souffle sur le système, l'anémomètre tourne à une vitesse (en tours/sec) sensiblement égale à la vitesse du vent V divisée par le périmètre de la roue à aube.

Centrale de navigation Low Cost sur plateforme Arduino (3) - Les interfaces Speedo et Anémo

Fixons la limite maximum de vent « mesurable » à 50 Noeuds


1. Périmètre de la roue à aube : Celle-ci fait 10 cm de diamètre ou 0,05 m de rayon.
Un tour de roue à aube représente donc 2xPIxR soit dans ce cas 2x3.14x0.05=0,314m.

2. Déplacement de l'air pour un vent de 50 Noeuds : l'air se déplace à la vitesse de 50 milles par heure, soit 50x1852 mètres pour 3600 secondes, donc 50x1852/3600 m/s
soit environ 25,72m/sec.

3. Vitesse de la roue à aube pour 50 Noeuds : à la vitesse maximum la roue à aube
tourne à 25,72/0,314=81,91 tours/secondes et génère donc environ 82 impulsions par
secondes.

4. Evolution de la  tension de sortie en fonction du nombre d'impulsions : L'entrée analogique du module Arduino ne peut pas accepter plus de 5 volts. Le circuit d'interface aura donc pour mission de transformer un nombre d'impulsions par secondes (ou tours par secondes) en une tension proportionnelle. A 82 tours (50 noeuds) correspondra 5 volts, 41 tours (25 noeuds) correspondra 2,5 volts, etc.... La fonction sera donc S = 5 / 82 E

Centrale de navigation Low Cost sur plateforme Arduino (3) - Les interfaces Speedo et AnémoCentrale de navigation Low Cost sur plateforme Arduino (3) - Les interfaces Speedo et Anémo

Calcul du speedo


La sonde Speedo fonctionne comme l'anémo à la différence de la roue à aube qui est
beaucoup plus petite. Le concept de calcul est donc identique.


Prenons comme hypothèses une vitesse maximum du bateau de 25 noeuds. (on a le droit de rèver ...)
1. Périmètre de la roue à aube : La roue à aube de la sonde fait 2 cm de diamètre, donc
0,02 m de diamètre ou 0,01m de rayon (R). Un tour de roue à aube représente 2xPIxR
soit dans ce cas 2 x 3.14 x 0.01 = 0,0628 m.

2. Nombre de tours pour réaliser 1 Mille nautique : Lorsque le bateau parcours un
mille nautique (1852 m), la roue fait 1852 / 0.0628 = 29490 tours !

3. Tours/secondes à la vitesse maximum: Pour une vitesse de 1 noeud: (1 mille par
heure) la roue fait donc 29490 tours en une heure (3600 secondes) soit 29490 / 3600
donc 8,1 tours par secondes (disons 8 T/s, nous allons voir plus loin comment calibrer
finement le speedo). A la vitesse maximum (25 noeuds) la roue à aube tourne à 200
tours (ou impulsions) par secondes.

4. Evolution de la  tension de sortie en fonction du nombre d'impulsions :  A la vitesse maximale « mesurable » la tension sera de 5 volts. La tension de sortie sera donc  S = 5 / 200 E

Centrale de navigation Low Cost sur plateforme Arduino (3) - Les interfaces Speedo et AnémoCentrale de navigation Low Cost sur plateforme Arduino (3) - Les interfaces Speedo et Anémo

Réalisation des circuits d'interface


Les interfaces de l'anémo et du speedo transforment une fréquence d'impulsions en une
tension analogique proportionnelle. Le schéma du circuit électronique est donc celui d'un
fréquencemetre analogique très basse fréquence.


Le composant principal est le monostable MC4538 qui va transformer l'impulsion en un
créneau C d'une durée fixe (indépendante de la fréquence). Le haut de la plage de mesure sera atteint lorsque la durée entre deux impulsions issues de la sonde sera égale à la la durée du créneau C. La durée du créneau C est ajustée par les valeurs de la résistance et du condensateur Rc et Cc . C = Rc x Cc.

Le deuxième étage est un intégrateurs qui va lisser les créneaux provenant du monostable pour gènerer une tension continue stable qui sera proportionnelle à la fréquence des impulsions. Il est composé de deux étages RC avec une forte valeur de C afin de lisser les fréquences très basses (jusque 3 impulsions par secondes).


Attention à l'alimentation : Le 5V de l'alimentation est la référence de mesure, il est donc
fondamental que cette tension soit stable. Pour ce montage, j'utilise un convertisseur DC/DC 12v/5v à haut rendement (facilement trouvable sur Ebay)

Centrale de navigation Low Cost sur plateforme Arduino (3) - Les interfaces Speedo et Anémo
Fonctionnement du circuit monostable 4538

Fonctionnement du circuit monostable 4538

Le schéma electronique de l'interface anémo


Calcul des valeurs Rc et Cc du monostable: 82 tours (ou impulsions) par secondes = valeur max, c'est à dire que la durée entre deux impulsions est égale à 1/82 s. Rc x Cc = 1 / 82= 12 ms. Les valeurs qui semblent les plus proches sont R=12O KΩ et C=100nF

L'entrée de l'interface est un diviseur de tension pour ne pas envoyer directement le 10 Volts venant de l'anémo au monostable alimenté en 5V.

Centrale de navigation Low Cost sur plateforme Arduino (3) - Les interfaces Speedo et Anémo

Test de l'anémo au sèche cheveux ... La calibration reste à réaliser

Le schéma electronique de l'interface speedo


Cette interface est un peu plus complexe car il est nécessaire de mettre en oeuvre un trigger pour transformer l'impulsion très faible issue de la self de la sonde en un signal d'amplitude suffisante pour attaquer le monostable.

Le Trigger : Le schéma est l'aboutissement d'expérimentations multiples. Je ne saurais pas expliquer fonctionnement de ce montage curieux à base de 741 mais toujours est il qu'il fonctionne, a fait ses preuves tout au long de l'année 2013 et donc me convient.

Calcul des valeurs Rc et Cc du monostable: 200 tours (ou impulsions) par secondes =
valeur max, c'est à dire que la durée entre deux impulsions est égale à 1/200 s. Rc x Cc =
1/200= 5 ms. Les valeurs qui semblent les plus proches sont R=47KΩ et C=100nF ou
R=100KΩ et C=47nF

Centrale de navigation Low Cost sur plateforme Arduino (3) - Les interfaces Speedo et Anémo

Je dépasse les 10 noeuds au sèche cheveux ... quels surfs ! Observez la vitesse affichée et la tension sur le voltmètre

Calibrage

Il est possible de réaliser le calibrage en remplaçant la résistance Rc par un potentiomètre. L'autre solution que je trouve préférable est de jouer sur les coefficients de calcul réalisés par le module Arduino: une tension de 5 V représente le nombre 1024 sur l'entrée analogique du module. Nous aurons donc approximativement la vitesse vent en divisant la valeur par 20 (si 5V sur l'entrée analogique, nous afficherons alors 1024/20= 51 noeuds) il suffit de remplacer ce coefficient de 20 par une valeur entre  15 et 25 pour calibrer l'appareil (voir la section code).

 

 

Réalisation pratique

 

Ces montages sont réalisés avec trés peu de composants. Il est  facile de souder les composants  sur une plaquette d'expérimentation à pastille ou à bande.

L'alimentation 5V issue d'un composant automobile (facile à trouver sur ebay)

L'alimentation 5V issue d'un composant automobile (facile à trouver sur ebay)

Brochage de l'ampli opérationnel "historique" mais encore trés courant ...

Brochage de l'ampli opérationnel "historique" mais encore trés courant ...

Datasheet du monostable MC 14538

Le code (extraits)

void loop()
{
     char b[300]="0";                  //initialize buffer b
     char c[300]="0";                  //initialize buffer c
     int Z = 0;
     int Y = 0;                        // initialize buffer index
     int X = 0;                        // initialize datalog counter

  EthernetClient client = server.available();   // if an incoming client connects, there will be bytes available to read:
 

  //////////// ////////////// MWV Sentence - Wind Speed & Direction/////////////////

strcpy(MWVSentence,"PIMWV,");  // création de la phrase PIMWV

  sprintf(b,"%d",Z);                        //Z représente l'angle du vent (sera traité ultérieurement)
  strcat(MWVSentence, b);
  strcat(MWVSentence, ",R,");

     Z=analogRead(4);                    //L'anémo arrive sur l'entrée 4 du module
     sprintf(b,"%d",Z/
20);                 //b représente la vitesse du vent en noeud

                                                     //  Le chiffre 20 peut varier pour le calibrage
     sprintf(c,".%d","0");       //c represent the deci knots
     strcat(MWVSentence, b);
     strcat(MWVSentence, c);
     strcat(MWVSentence, ",N,A");   
 
     EtherNMEA(MWVSentence);               // Write MWV Sentence


   //////////// ////////////// VHW Sentence - Water Speed /////////////////
 
    Z=analogRead(3)/4;                    //  read Pin 3 : Boat Speed   -  Speed from 0 to 25 Knots - resolution of 0.1 Knots
    strcpy(VHWSentence, "PIVHW,,T,211,M,");    
    sprintf(b,"%d",Z/10);                //b represent the knots, 10 peut varier pour la calibration
    sprintf(c,".%d",(Z-(Z/10)*10));      //c represent the deci knot
s
    strcat(VHWSentence, b);
    strcat(VHWSentence, c);
    strcat(VHWSentence, ",N,0.0,K");  
   
    EtherNMEA(VHWSentence);        // Write VHW sentence on Ethernet with Checksum

 

///////////////////////////// Routine d'écriture avec calcul du Checksum (sortie sur port Ethernet) //////////////////////////////////////


String Checksum(char* CSSentence) {
        cs=0;             //clear any old checksum
        char b[10]="0";
        //return b;

    for (int n=0; n < strlen(CSSentence); n++) {
        cs ^= CSSentence[n];           //calculates the checksum
      }
      sprintf(b,"%02X",cs);
     return b;
}

  void EtherNMEA (char* NMEASentence) {
     server.print("$");   // Assemble the final message and send it out the serial port
     server.print(NMEASentence);
     server.print("*");
     server.println(Checksum(NMEASentence)); // Call Checksum function
  }

branchement sur le module Arduino. remarquez la carte d'extension Ethernet et la carte SD intégrée qui fera datalogger

branchement sur le module Arduino. remarquez la carte d'extension Ethernet et la carte SD intégrée qui fera datalogger

Prochaine étape

Le réseau WiFI

Rédigé par Jerome Delecour

Publié dans #Instruments

Repost0
Pour être informé des derniers articles, inscrivez vous :
Commenter cet article
C
c de la grosse chiasse
Répondre
P
je suis de ton avis cacaboy
C
bonjoursje suis la pour ovus parler de caca et pipi si vous le souhetait
L
Bonjour,<br /> J'avais mis de coté mon développement Arduino Multiplexeur et girouette sans fil pour cause de vacances et travaux sur le bateau.<br /> La solution empilement carte Ethernet + carte Wifi ne me convenait pas et j'ai fini par trouver une carte WIFI / RS232 pour 10 € qui fonctionne sur Iregatta.<br /> http://www.banggood.com/TLN13UA06-RS232-UART-Serial-Wifi-Wireless-Control-Module-With-Antenna-p-947754.html<br /> Apres une nuit dessus j'ai pu la faire fonctionner sur Arduino et compris les astuce du paramétrage et j'ai pu communiquer avec la tablette et Iregatta. <br /> Pour la partie Data loguer facile de rajouter lecteur carte SD arduino.<br /> Pour ce qui est de la girouette sans fil elle fonctionne parfaitement sauf le redémarrage de la carte Arduino mini qui plante lorsque la réserve batterie est trop bas après plusieurs jours sans suffisamment de lumière pour compenser la consommation, vu la position en tête de mat pas facile de faire Reset.<br /> Je vais reprendre tout ça des janvier.<br /> <br /> Cordialement.<br /> <br /> A.Lopez
Répondre
J
Pareil pour moi, je m'y remet cet hiver. En ce moment priorite au bateau et la mecanique ...
T
Cela permet d’y voir claire sur les interfaces Speedo et Anémo pour les connaisseurs. Très cool aussi pour les mordus de météo ou les chasseurs de tornade. Moi j’ai fait plus simple,  L’arduino je l’utilise pour mesurer la température de 2 chaudières dans notre petite usine de fabrication de biscuit. La sonde que j’utilise je l’ai eu par l’intermédiaire de ce site : http://www.directindustry.fr/fabricant-industriel/sonde-67744.html. Avec un transmetteur pour tête de sonde, c’est d’une précision et fiabilité par rapport au capteur raccordé. L’environnement nécessitait une sonde durable, celle-ci est équipée d’un bout en acier inoxydable très robuste et polyvalent.
Répondre
L
Bonjour,<br /> Je suis voileux et Arduineux.<br /> Ayant récupéré une tête de mat Raymarine en état de fonctionnement je voulais la faire fonctionner sous arduino et surtout sans fil alimenté par mini panneau solaire et batterie tampon .<br /> Je me suis permis de compléter mes recherches par le fruit de vos travaux et j' ai un proto émetteur récepteur qui fonctionne.<br /> Si vous souhaitez plus d'infos je peux vous les envoyer par mail.<br /> Cordialement.<br /> A Lopez
Répondre
A
Mon Mail ange-lopez@orange.fr<br /> Je vous envoie mon dossier par mail.<br /> Cordialement<br /> A lopez
J
Bonjour,<br /> merci pour votre commentaire ! effectivement je n'avais pas pensé à l'alimentation par panneau solaire mais c'est une très bonne idée, compte tenu de la faible conso de l'arduino, et on peut avoir un système quasi autonome ...je suis donc intéressé par votre réalisation . Merci !