Capteur ultra-sons CV7 & ARDUINO

Ramené à DK, Schnaps était équipé d'un capteur anémomètre et de son afficheur dédié, tous deux de marque Stowe.
D'origine, il manquait un godet à l'aérien, de ce fait je n'avais pas la force du vent, mais au moins sa direction. Il me fallait réparer cet aérien ou le changer, vaste programme (et sacré budget, car la pièce se fait rare...) !
 

Par la suite, un coup de vent en hiver, le mât voisin qui tricote avec le mien ou alors un goëland un peu plus con que les autres, je ne sais pas trop... toujours est-il qu'un jour, j'ai retrouvé des éléments de l'aérien sur le pont et en haut du mât, il ne restait plus rien...
 

Sachant la fragilité (et le coût prohibitif des aériens d'anémomètre), j'ai rapidement été tenté par l'installation d'un capteur à ultra-sons CV7. Aucune pièce en mouvement, une fiabilité éprouvée, je ne comprends pas que ce système ne soit pas plus répandu...

Seul souci, l'afficheur que je possédais (et possède toujours, il va très bien, merci) ne lit pas les phrases NMEA récentes envoyées par le capteur aérien CV7
 

J'ai pris le risque d'acheter malgré tout le capteur CV7 et j'ai écrit un programme à base d'ARDUINO pour traduire les phrases en NMEA récent en phrases en NMEA ancien...

Et ça marche ! (à noter la réactivité et la qualité des réponses du fournisseur de CV7 qui m'a utilement conseillé...devil
 

cliquez pour agrandir les photos

feu mouillag anemo.jpg
 

La tête de mât démontée, j'ai pu tranquillement installer - entre autres - le feu de mouillage/éclat/tricolore et le capteur de l'anémomètre que l'on voit sur cette illustration, petite tête blanche au bout d'un bras de carbone...

biggrin

teste anemo PC.jpg

Je vous épargne les photos de l'installation et du câblage de l'anémomètre vers l'arduino et vers le PC. eek
Comme le montre le test, cela fonctionne très bien, à la fois sur le PC et sur le vieil afficheur Stowe, ce qui signifie que l'afficheur reçoit les phrases "traduites" par l'arduino en ancien NMEA et que le PC reçoit, lui, directement les phrases en NMEA0183 actuel...

A noter qu'initialement j'avais testé le tout avec une carte ARDUINO UNO. Je l'ai ensuite remplacée par une carte ARDUINO NANO beaucoup plus petite mais qui suffit largement et sur les conseils du technicien de la société LCJ, j'ai également installé un petit optocoupleur pour isoler l'ensemble.

devil

***** Pour ceux que cela pourrait intéresser, ci-dessous un c/c du programme *****
(à copier/coller dans l'ide arduino puis à téléverser dans la carte arduino Nano)


RAPPEL :

Les // servent à mettre des commentaires ou décommettre une instruction.
Quand il y a plusieurs lignes, on met en début    /*  et à la fin  */ et cela rend les instructions inopérantes.
 

Avant d'exécuter ce programme (sketch), il est nécessaire d'ajouter la bibliothèque adéquate dans le dossier de l'IDE (généralement dans c:\...\Documents\arduino\libraries\..)
 

N.B.  : Cette bibliothèque est proposée sur ce site en téléchargement car des modifications de lignes ont été nécessaires pour assurer son fonctionnement avec ce sketch.
 

Les vitesses indiquées en parenthèses ex : Serial1.begin(9600); correspondent à la vitesse de lecture de l'arduino QUI DOIT correspondre à la vitesse de sortie de l'émetteur.
Exemple : si votre GPS émet en 4800 bds, il faudra indiquer Serial1ou2ou3.begin(4800)...

PRECISION :

Le sketch ci-dessous est le 1er que j'ai écrit.
A la relecture, je constate que je lis les données NMEA par mySerial(9,10) et ces données "ressortent" après traitement par le Serial (Rx, Tx).
Il serait plus correct d'inverser ce chemin, mébon, cela fonctionne tel quel depuis plus de trois ans, donc je laisse en l'état...
 

devil

/*
  Remplacer la phrase NMEA MWV par l ancienne phrase NMEA VWR
 VWR - Relative Wind Speed and Angle

         1  2  3  4  5  6  7  8 9
         |  |  |  |  |  |  |  | |
 $--VWR,x.x,a,x.x,N,x.x,M,x.x,K*hh<CR><LF>

Field Number:
1. Wind direction magnitude in degrees
2. Wind direction Left/Right of bow
3. Speed
4. N = Knots
5. Speed
6. M = Meters Per Second
7. Speed
8. K = Kilometers Per Hour
9. Checksum

********************************************************

MWV - Wind Speed and Angle

        1   2 3   4 5
        |   | |   | |
 $--MWV,x.x,a,x.x,a*hh<CR><LF>

Field Number:
1. Wind Angle, 0 to 360 degrees
2. Reference, R = Relative, T = True
3. Wind Speed
4. Wind Speed Units, K/M/N
5. Status, A = Data Valid
6. Checksum

 */
 ///////////////////////////////////////////////////////////
 
 #include <PString.h>
 #include <SoftwareSerial.h>
 #include <nmea.h>  
 
 char angl ;
 NMEA nmeaDecoder(ALL);
 SoftwareSerial mySerial(9,10);

void setup() {
  Serial.begin(4800);
  mySerial.begin(4800);
 
}
   
 // calculate checksum function (thanks to https://mechinations.wordpress.com)  
 byte checksum(char* str)
 {  
   byte cs = 0;   
   for (unsigned int n = 1; n < strlen(str) - 1; n++)   
   {  
     cs ^= str[n];  
   }  
   return cs;  
 }  
   
 void loop() {  
 if (mySerial.available()) {  
   if (nmeaDecoder.decode(mySerial.read())) {  
     char* title = nmeaDecoder.term(0);  
      if (strcmp(title,"IIMWV") == 0) {            // on ne retient que les phrases qui commencent par MWV (vent)         
      int degr = atoi(nmeaDecoder.term(1));     // changer float par int et atoI et plus atoF pour lire l'angle (0-360) en degre
      if (degr > 0 && degr < 180){              //test pour convertir l'angle en 0-180 en precisant L ou R
      degr = degr;
      angl = 'R';
      }
      else {
        degr = 360 - degr;
        angl = 'L';
      }
      float vit = atof(nmeaDecoder.term(3));   //on reprend la vitesse du capteur LCJ
          
      // on ajoute les termes pour faire la phrase NMEA en ajoutant les virgules  
      char mtwSentence [36];                       
      byte cst;  
      PString strt(mtwSentence, sizeof(mtwSentence));  
      strt.print("$IIVWR,");  
      strt.print(degr);  
      strt.print(",");
      strt.print(angl);
      strt.print(",");
      strt.print(vit);
      strt.print(",N,,,");      
      strt.print(",*");  
      cst = checksum(mtwSentence);  
      if (cst < 0x10) strt.print('0');            
      strt.print(cst, HEX);  
      Serial.println(mtwSentence);       
           }  
        }  
      
     }  
   } 

Le matériel est en général acheté sur AMAZON. Les prix indiqués sont TTC frais de port compris (FdP).
Ne me demandez pas comment ils font pour livrer "gratuitement" de l'électronique à 2-3 roros qu'on trouve à plus de 10 dans les boutiques !

Pour résumer :

  • une carte ARDUINO NANO à 3,44 €
    SODIAL(R) Nano V3.0 AVR ATmega328 P-20AU Carte Module Noir Bleu w USB Cable
  • un optocoupleur à 0,50€ (prix pour 5 =>2,53€, FdP compris )
    SODIAL(R) 5 MAX485 Module/RS485 Module/TTL a RS-485 Module Carte convertisseur Pour Arduino 5V
  • un convertisseur 12V - 5V à 3,22€
    SODIAL(R) DC/DC Convertisseurs electriques Converter Regulator 12V to 5V 3A 15W Car Led Display Power Supply Module DCCON-C3A

Plus quelques fils et dominos..., bref, en investissant moins de 10 euros, j'ai évité d'acheter un afficheur neuf dont le prix débute aux alentours de 250 € !
biggrin

Photos agrandissables

R422_485_SHIFFTER.jpg
optocoupleur R422_485 SHIFFTER
convertisseur.jpg
convertisseur 12V/5V
Nano.jpg
Arduino NANO


 

La timonerie et son équipement prennent forme.

Prochain chantier (détaillé dans un autre chapitre) : multiplexer toutes les data NMEA et les transmettre par WiFi et/ou Bluetooth, pour un prix raisonnable....

Tim_PC_Barre.jpg

Rochers7163.gif


Date de création : 28/08/2017 15:19
Catégorie : -
Page lue 8303 fois