Tous les forums > Equipements > Le multiplexeur NMEA 0183 du pauvre !
Avatar
Ebraball

Le multiplexeur NMEA 0183 du pauvre !

J'ai réalisé avec succès le montage suggéré par voilier-Idem, d'un multiplexeur à base de carte Arduino Mega. Comme j'avais besoin de 4 entrées (Wind Navman, Multi Navman, GPS FX312 et AIS sur Navicom RT650), j'ai un peu modifié son montage et son programme pour mettre deux Mega en cascade (j'ai donc encore une entrée disponible !). Je n'ai réalisé que la partie réception, pour avoir les données sur mon vieux ThinkPad. J'ai utilisé une vraie Mega Arduino (20 €) et une Mega chinoise (9 €) qui fonctionne parfaitement, à part une inversion de marquage sur un RX/TX !... À corriger, donc.
Quelques avantages :
Pas de souris folle sous XP, comme avec certains adaptateurs série/usb.
Le port par défaut est l'USB, mais on peut adapter des modules WiFi, BT ou ethernet comme l'a fait voilier-Idem.
Reconnexion immédiate à la sortie de veille de l'ordinateur (je faisais jusqu'à présent avec des adaptateurs série/pcmcia qui n'étaient plus reconnus ou qui changeaint de n° de port à la sortie de veille).
Alimentation par USB, qui se coupe à la mise en veille de l'ordi.
Voilà le lien pour qui voudrait se lancer (attention, les premières photos ne sont pas des Mega) :

http://www.voilier-idem.com/affich_contents.php?Ind=58

Enjoy !

jeudi 25 mai 2017 23:32

Liste des contributions

  • Merci. Sailabout mercredi 14 février 2018 09:57
Missing
1
Darjeeling

Bonjour!
Je suis sur ce sujet depuis un mois et nouveau en matière de programmation Arduino. en attendant de recevoir ma commande, j'étudie le code et rencontre quelques difficulté de compréhension avec celui développé par le voilier Idem. Malheureusement aucune réponse à mes demandes de clarification.
Pourrais-tu me faire passer le code que tu as utilisé pour réussir ton montage?
Par avance merci.
Bien cordialement

mardi 13 février 2018 11:47
Pavillonbleuocc
a_guy

je n'avais pas vu ce post !!!

jolie !!!

mardi 13 février 2018 12:00 *** Message modifié par son auteur ***
Lauben_bmr_83x110
mardi 13 février 2018 13:17
Avatar
Ebraball

J'avais récupéré les librairies réalisées par Voilier-Idem, comme elles ont fonctionné pour moi, je n'ai pas trop cherché à les décortiquer, je les ai utilisées telles quelles. J'ai en revanche un peu modifié le programme pour mettre les Arduino en cascade. Le seul problème que j'ai eu est que, pour une raison que j'ignore, les ports d'une même carte devaient être réglés à la même vitesse pour fonctionner. J'ai donc réglé l'Arduino "amont" à 4800 en réception et j'y ai envoyé Wind, Multi et GPS. Je l'ai renvoyé via le tx vers l'Arduino "aval" en 38400. L'Arduino "aval" reçoit en plus l'AIS, toujours en 38400 puis renvoie le tout en USB vers le PC, toujours en 38400. L'alim se fait par le PC via l'USB et repart vers l'"amont" par la connexion 5v. La plus grande difficulté rencontrée a été la confection d'une sorte de circuit imprimé pour une connexion fiable des 75175.

mardi 13 février 2018 16:19
Avatar
1
Ebraball

J'ajoute que j'ai eu un petit souci de connexion des instruments vers les Arduino, qui m'a fait chercher un moment : il ne fallait pas connecter les rx-, ça ne fonctionnait pas. Le - se fait donc par la masse de l'alim. Sans doute un conflit rs232/rs422 ?

mardi 13 février 2018 16:29
Avatar
Tobago

rs232 = +12v 0 v

rs422 = +12v -12v = donc l’adaptation rs232 = +12v 0v

Problème de référence mais c'est compatible

mardi 13 février 2018 21:48
Missing
1
Sailabout

Quelqu'un a-t’ il des schémas d'opto-coupleurs pour des entrées et sorties RS232, RS422, etc. . ?

mercredi 14 février 2018 09:00
Avatar
1
Schnaps

Si cela peut t'aider, en pièce jointe le schéma que m'avait transmis "Vents" quand j'ai réalisé un programme arduino pour le capteur LCJ CV7...

mercredi 14 février 2018 09:47
Avatar
1
Schnaps

Pfff, n'est pas passé dans la réponse.
Le voilà, ce schéma (si ça passe...)

mercredi 14 février 2018 09:48
Lauben_bmr_83x110
bmayer

Merci beaucoup !

mercredi 14 février 2018 10:42
Missing
Sailabout

Merci.

mercredi 14 février 2018 09:57
Missing
1
Darjeeling

Grand merci Ebraball, voici une réponse claire et documentée!

Pour clarifier mes questions, je précise ci-dessous mon projet , (assez ambitieux), de multiplexeur:

- Base: une carte Arduino Mega complétée par une module Wi-Fi.
- Ensemble précédé, (à l'entrée), par des modules optocoupleurs, suivis par un ou deux étages de mise en forme des signaux NMEA vers USB, (C.I. SN 74174 et SN 74175, comme décrit par Idem).

En entrée, je souhaite connecter:
- un GPS Furuno GP 32, (NMEA 0183)
- à l'avenir, un transpondeur AIS, (NMEA 0183)

En sortie, "câblée":
- Une VHF ASN Standard Horizon, (en NMEA 183)
- Un PC portable (en USB), sauf si une connexion par Wi-fi est possible

En sortie,Wi-Fi:
- Une tablette Galaxy Tab 10 avec OpenCPN et cartes OeSENC,
- Le PC portable ci dessus, si c'est possible.

Pour "corser" le tout,
- Connexion par Wi-Fi aux réseaux internet "de rencontre", afin de pouvoir télécharger des fichiers GRIB
- Le PC portable serait un jour remplacé par un Raspberry Pi3, avec disque SSD.

Mes questions maintenant:
- Je me perds dans les différents codes publiés par le voilier Idem. Peux-tu me confirmer lequel tu as utilisé. Il devrait s'agir du dernier?

- Concernant l'optocoupleur, pourquoi cette référence? On doit pouvoir la remplacer par un composant bien connu comme le 4N26 par exemple?

Par avance merci pour tes remarques et conseils, merci aussi à tous ceux qui voudront bien me faire partager leurs expérience sur ce sujet.

mercredi 14 février 2018 14:12
Avatar
Ebraball

J'ai utilisé la bibliothèque complète "NMEA-ACQ" sans la modifier, elle fonctionne parfaitement (merci Voilier-Idem !) pour mon montage.
Le code utilisé est bien le dernier (celui après les bibliothèques) que du devras adapter (comme indiqué en bleu sur le site) en fonction des sorties que tu utiliseras.
Pour le choix du CI, je ne me suis pas posé de questions, j'ai utilisé le 75175, indiqué comme devant bien fonctionner, et il fonctionne…
Pour le reste, cela fait un moment que j'ai fait ce montage, qui est sur le bateau, et ma vieille mémoire est un peu floue sur les détails du montage !
La carte Mega chinoise à 9 € que j'ai utilisée fonctionne parfaitement (à part la petite erreur de sérigraphie sur tx/rx) mais n'utilise pas la même puce que la vraie Arduino, il faut donc trouver (assez facilement) le pilote adapté.

mercredi 14 février 2018 15:19
Missing
1
Darjeeling

Bonjour Ebraball.

Je continue à m'auto-former sur l'Arduino Mega et à tenter d'y téléverser le sketch décrit par le voilier Idem. Je rencontre des difficultés, (normal pour un "absolute newbie"):

Le sketch sur lequel je travaille est celui du 3ème pavé jaune, immédiatement sous la bibliothèque, dans l'article du voilier Idem.

- Une erreur récurrente, (sur 3 lignes de code identiques), avec le message: "error 'envoi_nmea' was not declared in this scope"
- Une autre et unique erreur en fin de sketch: "error expected initializer before 'Udp'.

J'avoue ne pas y comprendre grand chose, malgré des heures de recherche et lecture sur Internet.
Je précise que le téléversement du 1er sketch d'Idem, (1er pavé jaune après la bibliothèque), a parfaitement réussi.

Côté matériel j'ai tout vérifié:
- Carte OK puisque je suis parvenu à y téléverser des sketches simples, ou morceaux de sketch d'Idem, plusieurs fois de suite.
- Donc,câble USB OK
- Donc le driver de carte changé, (références ci-dessous), est le bon, puisque je peux téléverser

Il s'agit peut-être d'un problème de syntaxe ou d'une erreur du sketch d'Idem, (ça semble pourtant très improbable).

Ma config:
- PC portable Windows 7 Pro 64 bits + 8 Go RAM
- Logiciel Arduino 1.8.5
- OpenCPN 4.8.0 officiel + cartes OeSENC officielles
- Carte " MachinDUO" Mega 2560 R.3 chinoise, (bien construite), avec interface USB/serial basée sur une puce CH340 :
• Driver Version: 3.1.2009.06
• Release Date: 2009-06-03
• File Size: 35.3K
• Supported OS: Windows 10 32 & 64bit, Windows 8.1 32 & 64bit, Windows 7 32 & 64bit, Windows Vista 32 & 64bit, Windows XP, téléchargé sur http://www.driverscape.com/download/usb-serial-ch340

Je t'envoie une copie de mon sketch, avec le résumé des messages d'erreur.s
Merci par avance pour ton coup de main, merci aussi à tous ceux qui m'aideront.

Bien cordialement.

2 jours
Morvan
Lithops

Il ne manque pas une accolade après l'entête de :

void envoi_nmea() // fonction : envoi des paquets ?

void envoi_nmea() { // fonction : envoi des paquets

2 jours
Missing
Darjeeling

Bonjour Lithops
Eh oui il y avait un problème de parenthèse de fermeture! Après correction, la compilation c'est faite sans difficulté. Reste à vérifier si ça marche.
Merci à toi!

1 jour
Missing
MARIN34GM

Bonjour
Peux utiliser une entrée SeaTalk sur ce multiplexeur
Merci

2 jours
Missing
Darjeeling

Bonjour Marin34GM
D'après ce que je sais, mais je ne suis pas un gourou de la carte Arduino ni du langage C++
- Ce programme ne fonctionne QUE pour le NMEA-0183;
- La partie électronique est probablement incompatible avec le bus Seatalk, (à vérifier cependant, si par chance Seatalk est identique au NMEA2000).

Désolé de ne pouvoir en dire plus
Bon courage dans ta recherche

1 jour
Avatar
Ebraball

Je ne suis pas non plus un spécialiste, loin de là, et je pars dîner chez des amis… Réponse rapide, donc, et approximative : "envoi-nmea" n'est pas une fonction qui existe dans la bibliothèque. Peut-être faut-il déclarer "envoi-nmea" ave un #define etc… et ensuite appeler un "envoi-nmea begin" ?

2 jours
Missing
Darjeeling

Bonjour Ebraball,
Il s'agissait d'un manque de parenthèse de fermeture, comme me l'a suggéré Bepey. Après correction, la compilation a pu se faire très facilement. Je retiens quand-même tes commentaires qui me semblent très cohérents et utiles pour ma culture.
Il me reste à compléter le tout avec un petit module Wi-Fi ESP 8266, et à tout installer à bord. Conseils et commentaires bienvenus!
Encore merci de ton aide!

1 jour
Vignette_heo
1
bepey

if (rec_nmea1.lecture(car))
{ // récupération de la phrase
Serial.print(rec_nmea1.phrase());
buffer = rec_nmea1.phrase();
envoi_nmea(); // appel de la fonction d’envoi des paquets }
}
}

void envoi_nmea() // fonction : envoi des paquets

Udp.beginPacket(ip_client, port_client);
Udp.write(buffer);
Udp.endPacket();

}

Il faut une dernière accolade fermante avant void envoi_nmea() pour fermer loop.
Les fonctions sont déclarées hors de la loop, là tu as mis une fonction DANS la boucle en mettant l'accolade tout en bas.
Et une fonction c'est nom_fonction() { // accolade ouvrante
et qui finit par accolade fermante.

Il te manque donc { après void envoi_nmea()

Pour s'aider, c'est pas mal pour setup et loop de mettre fin pour l'accolade fermante, c'est plus facile à lire.

void setup () {
x
x

} // fin setup

void loop () {
x
x

} // fin loop

on a tous commencé comme ça en passant des heures sur une faute de ponctuation ...

2 jours *** Message modifié par son auteur ***
Missing
Darjeeling

Bonjour Bepey

Oui c'était bien une manque d'accolade de fermeture, là où tu me l'a signalé! C'est fou le nombre de conséquences et de messages d'erreurs que cela induisait. Une fois corrigé la compilation c'est faite sans difficulté.
Reste à savoir si ça va marcher, mais avant je souhaite compléter ce montage en y incorporant un module Wi-Fi ESP8266.
Si tu as d'autre aussi bons conseils, je suis preneur, car je reste vraiment un grand débutant, (il y a 15 jours seulement que je me suis mis à la programmation Arduino, en "piochant" sur le site du voilier Idem).
Encore merci!

1 jour
Missing
Darjeeling

1 - Merci à tous, c'est sympa de répondre si vite! Je vais essayer toutes ces solutions et je reviens vous dire ce qu'il en est.

2 - Concernant la question de Marin34GM,
- Ce programme ne fonctionne QUE pour le NMEA-0183;
- La partie électronique est probablement incompatible avec le bus Seatalk, (à vérifier cependant).

Bonne nuit à tous!

2 jours
Avatar
1
Ebraball

Content que quelqu'un de plus doué que moi ait pu te répondre !
@ Marin34gm : pour le Seatalk, il faudrait inclure une bibliothèque de décodage et de conversion du seatalk en nmea, et ajouter une interface de connexion pour le seatalk. Il faut aller voir le site de Mark Knauf qui a déjà pas mal déblayé le terrain.

http://www.thomasknauf.de/seatalk.htm

1 jour
P1010128_petite
1
fxvt

Hello,

Très chouette ce mémo !
Ca me donne envie de relire de sketches que j'ai fait et qui plantaient.
Merci.

Amicalement.
FX

environ 19 heures
Missing
Darjeeling

OK merci! Un peu tard pour s'y remettre et demain je suis à bord pour la visite de routine.
A plus tard donc et bon W.E!

1 jour
Dsc00929
SAISILAVIE

Une question de néophyte qui fera bondir les spécialistes j'en suis sur : le routeur wifi tplink utilisé dans ce montage: peut-on le connecter sur un réseau NMEA 2000 existant ? le montage présenté est interressant mais réservé à des spécialistes

environ 18 heures
Avatar
Ebraball

Je ne sais pas quel est le protocole de transmission du nmea 2000, et s'il est compatible, mais de toute façon, je crains que l'Arduino ne soit trop lent (115200 b) pour gérer les transmissions avec le nmea 2000.

environ 16 heures *** Message modifié par son auteur ***

Répondre

Pour participer aux forums, vous devez être inscrit et identifié

Vous identifier | Créer un compte matelot

Retour forums