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.

jeudi 22 février 2018 16:29
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

jeudi 22 février 2018 17:03
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!

vendredi 23 février 2018 10:39
Missing
MARIN34GM

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

jeudi 22 février 2018 17:21
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

vendredi 23 février 2018 10:02
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" ?

jeudi 22 février 2018 19:13
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!

vendredi 23 février 2018 10:54
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 ...

jeudi 22 février 2018 19:38 *** 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!

vendredi 23 février 2018 10:37
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!

vendredi 23 février 2018 00:54
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

vendredi 23 février 2018 10:15
Vignette_heo
4
vendredi 23 février 2018 20:17
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

samedi 24 février 2018 07:29
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!

vendredi 23 février 2018 23:40
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

samedi 24 février 2018 08:01
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.

samedi 24 février 2018 10:23 *** Message modifié par son auteur ***
P1010128_petite
1
fxvt

Hello,

Si si, un Arduino fonctionne parfaitement bien pour gérer du NMEA2000. J'ai deux montages à bord à base d'Arduino connecté au bus NMEA2000.
En réalité, ce n'est pas l'Arduino lui-même qui est connecté. On ajoute un shield CAN-Bus qui fait parfaitement le job.
L'Arduino calcule, gère, etc, etc... et le shield interface le bus.
Le bus NMEA2000 est à 250kb/s, ce type de shield peut monter jusqu'à 1Mb/s.
http://wiki.seeed.cc/CAN-BUS_Shield_V1.2/

SOFTWARE:
Pour ce qui est du soft, il existe une excellente librairie
https://github.com/ttlappalainen/NMEA2000
Bien documentée et active. Son créateur Timo Tappalainene est très collaboratif.

HARDWARE:
https://fr.aliexpress.com/item/CAN-BUS-Shield-Expansion-Board-Development-Board-Fieldbus-Expansion-Board-For-arduino/32242321274.html
On en trouve bien sur aussi sur les sites français:
https://www.lextronic.fr/shield-communication/28869-platine-can-bus-shield-v1-2.html
pour ce qui est de l'Arduino, si le sketch n'est pas trop gros, un Uno peut suffire, mais c'est limite, il faut optimiser le code.
Pour être à l'aise il vaut mieux combiner le shield en question et un Uno Mega qui a beaucoup plus de mémoire.

Amicalement.
FX

dimanche 25 février 2018 09:58
Lauben_bmr_83x110
bmayer

Ca donnerait presque envie d'avoir un système NMEA2000 !

dimanche 25 février 2018 11:27
Avatar
1
Ebraball

Très intéressant !
C'est vrai que quand on commence à mettre le doigt dans l'univers Arduino, on tombe, au fur et à mesure des progrès que l'on fait, sur un monde d'applications et de possibilités insoupçonnées !

dimanche 25 février 2018 10:09
Missing
Darjeeling

Bonsoir à tous!
Après avoir tout laissé de côté un long moment, j'ai enfin reçu mon matériel. Je reviens sur le sujet du multiplexeur NMEA, car je n'ai pas beaucoup fait de progrès en programmation Arduino ni en réseau d'ailleurs.

En résumé j'ai une carte chinoise Mega 2560, un shield Ethernet chinois "Mega compatible," un modem routeur TP Link.
Tout ceci est strictement identique aux recommandations faites dans l'article du voilier Idem, et assemblé à l'identique.
Après avoir corrigé quelques petites erreurs dans le programme final, (avec l'aide de plusieurs d'entre vous, merci!!), j'ai pu le téléverser dans la carte Arduino et tout semble aller.
L'adjonction du shield Ethernet n'a pas causé de soucis et les 2 cartes semblent dialoguer avec le routeur TP Link.

Et là je bloque dans les manips d'adresses que j'ai du mal à comprendre!

Impossible de m'aider avec UDP Test Tool dont la page de droite reste désespérément vide. Bref, je me perds dans ces adresses et n'ai aucun moyen de vérifier ce qui cloche!

Impossible aussi de faire le setup du routeur en allant sur l'adresse 192.168.0.254 ou 192.168.1.1 etc. , mentionnées dans l'article d'Idem, accès refusé. Est-ce que mon antivirus serait responsable? (Avast).

Est-ce que quelqu'un aurait la patience de clarifier le sujet pour moi?

Par avance merci et bon we du 01/05!

lundi 30 avril 2018 19:23
Missing
Darjeeling

Bonjour Libeccio. Merci pour ce lien, je vais l'étudier et reviendrai pour tenir informés ceux qui m'aident. Merci d'avoir pris un peu de temps pour moi!

mardi 01 mai 2018 09:56
Avatar
tux3132

Bonjour à tous,
Est-ce qu'un composant type MAX232 (ou de la même famille MAXIM) ne ferait pas l'affaire pour convertir de et vers les niveaux TTL de l'Arduino ?
Bernard.

mardi 01 mai 2018 11:29
Missing
1
Darjeeling

Bonjour à tous!

Peut-être que mes cogitations pourront vous aider. Voici donc quelques schémas des modules suivants:

1 - Triple alimentation régulée et protégée: 12 V pour la carte Arduino, 5 V pour les opto-coupleurs, 3,3 V pour un futur shield Wi-Fi ESP8266.

Pourquoi une triple alim? Pour ne pas tirer trop sur la carte Arduino et pour bloquer les inévitables parasites véhiculés par le réseau 12V du bord.

2 - Remarques concernant le circuit d'entrées avec adaptateur NMEA 0183 vers TTL et opto-coupleurs.

2.1 - Le GPS envoie des signaux NMEA 0183 à la VHF ASN et aussi sur 2 entrées du SN75175. Théoriquement ça marche, mais je n'ai pas encore pu le tester.

2.2 - deux autres entrées du SN75175 reçoivent les signaux séquentiels NMEA0183 envoyés par la centrale de navigation. Là aussi ça marche en théorie, mais ce n'est pas encore testé.

2.3 - J'ai choisi d'utiliser un SN75175, (voir article de M.Gravier du voilier Idem, merci à lui!!), à la place de 2 C.I. MAX232 pour des raisons d'encombrement et de simplification du câblage. Le MAX232 fonctionnerait aussi bien, dans les deux sens.

2.4 - J'utilise des 4N26 comme opto-coupleurs, (voire l'article dont je me suis inspiré). Tout autre opto-coupleur peut aussi convenir, CNY17 par exemple, à condition de lui fournir le voltage correct.

Vos commentaires seront bien entendu les bienvenus.

Cordialement
Darjee

mercredi 02 mai 2018 13:19
P1010128_petite
fxvt

Hello,

Ca a l'air propret. C'est bien.
Au sujet des masses séparées, je comprends bien que le mieux est qu'elles soient séparées. Mais su un bateau, ça ne me semble pas toujours possible.
Je pose la question car j'ai à bord un montage Arduino qui fait compte tours en comptants les pulses de la borne W de l'alternateur.
Il y a donc 2 fils pour le "capteur": 1 sur la borne W, et l'autre sur la masse moteur.
L'arduino est à son tour alimenté en + et - dont le - est en définitive au même potentiel que la masse moteur.
Certe il y a un petit régulateur avant l'Arduino pour limiter le voltage de son alim à 9V, mais donc au bout d'un moment, où est la séparation des masses ?
Amicalement.
FX

mercredi 02 mai 2018 14:16
Missing
1
Darjeeling

Bonjour FXVT

D'après ta description, il y a bien masse commune, rien à redire à ce montage, fait dans les règles.

Ce qui peut poser un problème de masse flottante, (ou de boucle de masse), c'est lorsque on relie directement deux appareils, (par une liaison data), lorsque chacun a une alimentation électrique différente.

Par exemple un PC ayant sa propre alim, (qui fabrique du 18V à partir du 12 V du bord), et une carte Arduino alimentée directement à partir du 12 V bord.

Dans ce cas, on des masses ayant "un potentiel différent", ce qui constitue un danger pour la carte ou le PC.

Bien à toi
Darjee

mercredi 02 mai 2018 15:14

Répondre

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

Vous identifier | Créer un compte matelot

Retour forums