Système de pilote automatique avancé pour voiliers – Gouvernail automatique de précision
Composants et fournitures
- 1 × Arduino UNO (MCU principal)
- 1 × Arduino Nano R3 (Watchdog externe)
Liste complète détaillée dans la section « Composants » ci-dessous.
À propos de ce projet
Préface
J'aime naviguer seul : en mer sur son voilier, on a tout pour s'élever. La mer agitée par mauvais temps est dure, mais par beau temps avec bon vent, le plaisir est maximal. Bonheur = horizons infinis, technique parfaite, choix optimaux... et aussi choses humaines : bon drink et bon sandwich ! C'est là qu'intervient le pilote auto : il barre pendant votre « tea time » de 17h. :-)
Ce que le pilote auto fait pour vous
Un voilier n'a pas de moteur et ne peut pas suivre une route programmée (port → plage → spot pêche → phare → retour) tout seul. Tout le travail est fait par le marin : réglage voiles, météo/vent, manœuvre cordages, trafic, décision cap et barre. Quand le marin veut une pause (10 secondes à quelques minutes), il active le pilote. En quelques secondes, le GPS acquiert position, vitesse, cap et maintient la route. Le système de barre (bâton lié au gouvernail), d'habitude tenu par le marin, est contrôlé par le pilote via un moteur pas-à-pas connecté par poulies et cordages.
Contrôler le gouvernail est un travail continu d'ajustements fins ou gros. Plus le bateau est petit/léger, plus les facteurs (vagues, vent, déplacement de poids, courants) influencent le cap. Mais le marin reste vigilant, même avec le pilote, modifiant la route via télécommande : 4 boutons +1, -1, +10, -10 (degrés). Ces boutons sont aussi sur le boîtier (vert=droite, rouge=gauche). Bouton bleu (milieu) = activer/désactiver (pause). Bouton noir = réglage paramètres en mémoire.

Le circuit
Traitement principal par Arduino Uno. L'Arduino Nano est le watchdog : je sais qu'il existe un watchdog interne, mais j'ai voulu un microcontrôleur externe indépendant – rêve réalisé ! Uno alimente Nano via broche 3 → A0 (HIGH/LOW, 5/0V) au moins une fois toutes les 2,5 s (feedingInterval) ; sinon Nano reset l'Uno. Jamais arrivé yet.
Affichage LCD1602 2×16 + convertisseur I2C (4 fils seulement). Boutons et télécommande par diviseurs de tension résistifs pour économiser les ports (résistances 1% précision). Valeurs analogiques dans le code ; si boutons non reconnus (autres résistances), modifiez les constantes dans checkRfRC() et checkHWButtons(). Télécommande RF 433 MHz (XD-YK04) + antenne bobine (fil cuivre) – testé 10 m, probablement 20+ m (bateau test 4,20 m).
GPS : Au début EM406A, mais bug « Week Rollover » (trop ancien). Remplacé par Beitian BN-220T. Config logiciel : sortir 2 Hz, seule phrase NMEA $GNRMC. GPS TX → broche 0 (RX) Uno. ATTENTION : déconnecter GPS pendant téléversement (broche 0 partagée).
EEPROM I2C 24C04 (512 octets) : stockage paramètres moteur pas-à-pas (détails plus bas).
Liste complète des composants
- Arduino Uno (MCU)
- Arduino Nano (Watchdog)
- GPS Beitian BN-220T
- Moteur pas-à-pas 23LM (54 pas = 1/4 tour)
- Contrôleur Keyes L298
- RF 433 MHz RC XD-YK04 + télécommande 4 boutons + antenne bobine
- 6 boutons NO (2×Rouge, 2×Vert, 1×Noir, 1×Bleu)
- Interrupteur marche/arrêt (Blanc)
- Connecteurs ronds 6 broches M/F (moteur externe)
- Buzzer
- LCD1602 2×16 + convertisseur I2C
- 3 LED (rouge, bleu, jaune)
- IC 24C04 I2C EEPROM
- IC 4051 multiplexeur
- Batterie LiPo 2S 7,4V 2600 mAh
- Régulateur 7805 + dissipateur
- Thermistance NTC MF52-103 10k
- Fusible réarmable 2A
- 6× diodes 1N4148 (D1-D6)
- Résistances shield alimentation (R1-R4=10k, R5=100k)
- Résistances shield pilote (R1=330, R2=1k, R3=2k, R4=5,1k, R5=1k, R6/R7/R14=330, R8-R13=10k, R15=10M)
- Condensateurs (C1=470µF 16V, C2=100nF)
- Résistance 2W 0,22 Ω (R6)
- Broches mâles, connecteurs femelles longs
- Boîtier transparent « étanche »
Capteurs sur multiplexeur IC 4051 :
- Thermistance → température dissipateur 7805
- Résistance 2W + 4×10k (diviseurs) → consommation courant (Ampères)
- Tension batterie LiPo : critique si élément < 3,3V. Pack 2S → alarme buzzer (bips courts) si < 7,0V. Éteindre et recharger vite !
LED : Jaune clignote 1 Hz = Watchdog OK. Bleue = pilote auto actif (éteinte = pause). Rouge clignote = bouton télécommande pressé.
Alimentation : LiPo 2S 7,4V 2600 mAh → 7805 → 5,0V. Courant < 800 mA (typique 100-450 mA). Dissipateur obligatoire. Thermistance dessus → buzzer si > 50°C.








PCB (circuits imprimés) et assemblage
PCB simple face → quelques jumpers (lignes pointillées). Faces composants et soudure (miroir) fournies pour impression laser sur feuilles « jaune » ou « bleu » (bleu meilleur mais plus cher). Désactivez économie toner, 1200 dpi pour noir profond. Transfert toner au fer à repasser. Impression face composants aussi → repérage facile, aspect pro.
Les deux PCB s'empilent sur l'Arduino Uno : shield alimentation en bas, shield pilote au-dessus.
J'ai tout mis ensemble (PCB, MCU, RC, driver, batterie, GPS, boutons, interrupteur, fils, connecteurs) en pensant réutiliser : pas de soudure entre modules, headers et fils Dupont. ~200 connexions non soudées → dysfonctionnements possibles. Recommandation : tout souder pour stabilité.


Réglage paramètres et affichage capteurs
Appui sur bouton noir (côté boîtier) → Mode Setup (possible en navigation active, pas besoin de pause).
- Page 1 : Tension batterie (V=7,83), consommation (mA=177), température thermistance (38°C).
- Pages 2-5 : paramètres modifiables par boutons -1/+1.
- Page 6 : « Updating... » si modifications → sauvegarde EEPROM.
Paramètres :
- Intervalle : ex 2000 ms – temps entre deux tentatives du moteur pour restaurer cap H vers route R.
- Minimum : ex 2° – écart minimal pour intervention ; en dessous, barre au centre.
- Max : ex 40° – correction maxi par cycle ; si calcul donne 50°, moteur ne fait que 40°.
- Coeff. : ex 1,50 × ° – coefficient correction ; si calcul 40°, moteur bouge 40 × 1,50 = 60°.
Ces paramètres permettent l'ajustage fin selon diamètres poulies, sensibilité gouvernail, longueur barre, etc. Testez par beau temps, vent léger !
Fonctionnement « en direct »
Vous naviguez (mer, lac, port). C'est l'heure du thé, coca et sandwich dans la poche. Activez le pilote et attendez fix GPS satellite. Afficheur : vitesse nœuds, heure, cap H270° (R=route, H=cap réel). Rappel : 180°=Sud, 270°=Ouest, 360/0°=Nord, 90°=Est. R et H identiques en Pause (STOP affiché). Connectez le cordage barre (moteur → gouvernail), appuyez bouton bleu → démarrage barre auto. Le pilote maintient R et surveille H. H change forcément (lent/rapide selon météo). Le pilote corrige (-10°, +5°, etc.) jusqu'à H = R. Vous pouvez modifier R via boutons rouge/vert (±1, ±10) ou télécommande. Pour reprendre la main : bouton bleu Pause, débranchez cordage, barre manuelle. Bien joué.
Côté logiciel
Code long mais clair. ~65% mémoire programme, ~45% RAM. String utilisé (phrases NMEA série), flux stable. serialEvent() reçoit GPS 2×/s → nmeaExtractData() → vérification checksum nmea0183_checksum(). Si autre GPS, vérifier structure phrases (ex: EM406A = $GPRMC, BN-220 = $GNRMC). Outil checksum : nmeachecksum.eqth.net. Exemple phrase complète :
$GPRMC,095836.000,A,4551.9676,N,01328.7118,E,2.09,341.84,280519,,*08
Dans Setup() : vérification EEPROM (formatage si neuve/inconnue). Paramètres stockés en octets : 0=0x29, 1=0x00, 2-3=intervalle, 4-5=min, 6-7=max, 8-11=coefficient (byte, byte, int, int, float). Opérations EEPROM prudentes. Capteurs lus toutes les 10 s via readMuxSensors() (multiplexeur) → alarme si batterie basse ou température haute. Résolution consommation ~40 mA. Boutons matériel/RC lus en continu ; comportement selon booléen IsSetup et affichage RefreshDisplay(). Cœur du code : section STEERING CONTROL appelant gomotor() pour bouger moteur pas-à-pas aller/retour (ex: +10° puis retour 0° après intervalle). Watchdog : simple basculement broche dès que possible.
Installation sur un voilier
Comme sur la photo : pilote et moteur pas-à-pas à l'arrière, bien fixés. Cordage 6 mm depuis poulie moteur, autour de 2 poulies latérales fixées au bateau par anneaux élastiques (tension légère). Connexion finale au bâton de gouvernail (connexion temporaire, facile à connecter/déconnecter). Gardez le système à l'abri de l'eau ! :-)

Nouvelles & Mises à jour
- 10.05.2020 : fichiers .STEP 3D CAO pour poulie moteur (moi) et plaque fixation (Andrew Barney), + aperçu 3D.
Avertissement & Mises en garde
Considérez ceci comme un jeu, rien de sérieux ! Il y a quelques années, j'ai fait un tour du monde de 16 mois en voilier. Nous avons navigué longtemps avec un VRAI pilote auto (PAS CELUI-CI !) dans toutes conditions, même mauvais temps. Un vrai pilote est matériel/logiciel très robuste, en qui on a confiance. Ce pilote Arduino est un formidable jeu pour s'amuser et passer du temps.
Amusez-vous bien !
Marco Zonca
Code
Sketch Pilote Auto (pour Uno)
Code complet disponible dans le dépôt du projet (trop long pour être affiché ici intégralement).
Sketch Watchdog (pour Nano)
Code complet disponible dans le dépôt du projet.
Pièces personnalisées et boîtiers

23lm-stepper-plate-v2_PlvJaff9Hl.step
23lm-stepper-pulley-56_UhsbaWbiBt.step
Schémas





Processus de fabrication
- Construire un capteur de mouvement infrarouge DIY pour Raspberry Pi – Guide étape par étape
- Conception d'un système de récupération par parachute balistique pour UAV
- La surveillance continue est-elle le bon choix pour vos opérations ?
- ATI Industrial Automation : leader des changeurs d'outils automatiques pour robots industriels
- Votre usine est-elle prête pour l'IoT ? Guide pratique
- Fraises polygonales de précision pour tours automatiques : cartouches ajustables, haute performance
- Tour CNC R07 Cincom – Usinage de précision 7 mm pour petites pièces
- Système de propulsion hypersonique révolutionnaire permet voyages transcontinentaux en moins de 30 minutes
- Comment les transmissions manuelles et automatiques transmettent la puissance : aperçu clair