Construisez une molette de trim d'élévateur compacte pour FlightGear avec Arduino Nano
Composants et fournitures
| Composant | Quantité | Notes |
|---|---|---|
| Arduino Nano R3 (ou compatible) | 1 | Lecture potentiomètre + affichage |
| Potentiomètre rotatif (10 kΩ typique) | 1 | Commande analogique |
| Condensateur 100 µF | 1 | Filtrage alimentation |
| Écran OLED SSD1306 0,96″ I2C (128×64) | 1 | Affichage jauge trim |
| Fils de connexion | 1 lot | Câblage |
Applications et services
- Arduino IDE – Programmation
- Anaconda (Python) – Script passerelle série→UDP
- FlightGear – Simulateur de vol open-source
À propos du projet
Objectif : créer une **molette de trim physique** (commande analogique) pour contrôler le trim d'élévateur dans FlightGear, à moindre coût et encombrement minimal. La liaison Arduino → FlightGear ne peut se faire directement en série ; un script Python intercepte les données série et les envoie par **UDP** via le protocole générique de FlightGear.
Qu'est-ce qu'une molette de trim ?
Dispositif analogique qui règle la déviation de l'onglet de trim (trim tab), surface aérodynamique maintenant une surface de commande (ici l'élévateur, contrôlant le tangage) en position sans effort du pilote.
Prérequis logiciels
Python avec bibliothèques serial (pyserial), socket, sys. Via Anaconda :
conda install -c anaconda pyserial
(socket et sys sont standards).
Trois scripts
- Arduino sketch (
arduinoElevatorTrimOLED.ino) – À téléverser sur le Nano. Utilise la bibliothèqueU8glib. Ajustez la ligne 2 selon votre écran OLED. - Script Python (
arduinoElevatorTrim.py) – Passerelle série → UDP. Modifiez le port série (ex:COM4Windows,/dev/ttyUSB0Linux) et l'adresse/port UDP (localhost:21567). - Fichier XML (
arduinoElevatorTrim.xml) – Protocole générique FlightGear. À placer dans<FlightGearRoot>/data/protocol/une seule fois.
Code Arduino – Points clés
#include
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);
int const potPin = A6;
float potVal;
int p, w, m; // p=lecture brute, w=trim -100..100, m=aiguille 0..90
void loop() {
potVal = analogRead(potPin);
potVal = (potVal - 512.0) / 512.0; // centré sur 0
Serial.print(potVal); Serial.print("\n");
p = analogRead(potPin);
w = map(p, 0, 1023, 100, -100); // valeur trim envoyée
m = map(p, 0, 1023, 90, 0); // angle aiguille affichage
// Affichage OLED (jauge circulaire + valeur numérique)
u8g.firstPage();
do { gauge(m); } while (u8g.nextPage());
delay(10);
}
Pour inverser le sens de rotation, échangez les bornes min/max dans les map().
Script Python – Points clés
host = "localhost"
port = 21567
addr = (host, port)
UDPSock = socket(AF_INET, SOCK_DGRAM)
tty = "COM4" # adapter selon votre OS
ser = serial.Serial(tty, 9600)
prevline = ""
while 1:
line = ser.readline()
if line != prevline:
print(line)
UDPSock.sendto(line, addr)
prevline = line
Important : fermez le moniteur série Arduino avant de lancer le script Python, sinon le port est occupé.
Fichier XML (protocole FlightGear)
\n
,
Elevator trim
/controls/flight/elevator-trim
float
Lancement
- Téléversez le sketch sur le Nano.
- Placez
arduinoElevatorTrim.xmldansdata/protocol/de FlightGear. - Lancez le script Python :
python arduinoElevatorTrim.py - Démarrez FlightGear avec l'argument :
--generic=socket,in,30,localhost,21567,udp,arduinoElevatorTrim
Dépôt GitHub : github.com/dciliberti/arduinoElevatorTrimOLED
Processus de fabrication
- Dé numérique Arduino sur écran LCD 16x2 – Générateur aléatoire à bouton poussoir
- Construire un Iron Man animé avec Arduino : capteurs, sons et relais
- Horloge à persistance rétinienne (POV) style analogique — Arduino Nano 17 LEDs
- Find Me : Localisateur d'objets intelligent avec Arduino et Bluetooth
- Construire un bras robotique 3D fonctionnel piloté par Arduino – Guide pas à pas
- Contrôleur d'humidificateur DIY avec Arduino et relais – Installation haute tension sécurisée
- Jeu Pong sur Matrice NeoPixel avec Arduino Nano
- Volant Joystick Arduino Personnalisé pour Jeux Vidéo
- Construisez un récepteur FM performant avec Arduino et module TEA5767