Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

FlightGear analoges Trimm-Tabrad

Komponenten und Verbrauchsmaterialien

Arduino Nano R3
oder kompatibles Board
× 1
Drehpotentiometer (allgemein)
× 1
Kondensator 100 µF
× 1
Adafruit SSD1306 0,96 Zoll OLED
× 1
Jumper (generisch)
× 1

Apps und Onlinedienste

Arduino-IDE
Anaconda
FlightGear

Über dieses Projekt

Arduino mit FlightGear zu verbinden ist nichts Neues, aber ich habe festgestellt, dass Wikis veraltet sind und Foren wertvolle Hinweise geben, wo man etwas umgehen muss.

Die Idee war, einen schönen, billigen und kompakten analogen Befehl zu haben, um das Höhenruder-Trimmrad eines Flugzeugs in FlightGear zu steuern. Das Wiki funktioniert bis zum Kommunikationsteil. Streng genommen können Sie die serielle Kommunikation nicht direkt verwenden, um Befehle von Arduino an FlightGear zu übergeben. Um Pakete über UDP zu senden, müssen Sie mit Python umgehen.

Was ist ein Trimmrad? Es ist ein analoges Gerät, um die Auslenkung der Trimmklappe zu steuern, die ein aerodynamisches Gerät ist, um eine Steuerfläche (in diesem Fall das Höhenruder, das die Flugzeugneigung steuert) ohne Anstrengung des Piloten in einer bestimmten Position zu halten. Aus Wikipedia:

Zusätzliche Anforderungen für dieses Projekt:Python mit den Bibliotheken seriell , Buchse , und sys Eingerichtet. Angenommen, Anaconda wurde installiert, können die fehlenden Bibliotheken mit der Anaconda-Eingabeaufforderung abgerufen werden, indem Sie Folgendes eingeben:

>>> conda install -c anaconda pyserial

das gleiche mit seriell und Buchse . Suchen Sie im Internet nach einem geeigneten Paket, normalerweise sind die am häufigsten heruntergeladenen für Ihre Plattform gut. Sobald Sie Python mit diesen Bibliotheken (und natürlich FlightGear installiert) haben, können Sie mit dem nächsten Abschnitt fortfahren.

Es gibt drei Codeskripte:eine Arduino-Skizze, ein ausführbares Python-Skript und ein XML-Skript. Die Arduino-Skizze muss auf Ihrem Board geladen werden. Das Python-Skript muss ausgeführt werden, um die Kommunikation zwischen Arduino und FlightGear zu ermöglichen. Das XML-Skript ist ein generisches FlightGear-Protokoll, das nach /data/protocol verschoben werden muss ein für alle Mal.

Die Arduino-Skizze erfordert das U8glib Bücherei. Passen Sie, wie im Kommentar erwähnt, die Zeile 2 der Skizze an Ihre Anzeige an:

#include U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); // I2C / TWI 

Siehe U8glib Beispiele und Dokumentation. Der Sketch sollte auch ohne Display funktionieren, sodass du ohne visuelles Feedback von deinem Board spielen kannst.

Wenn Sie mit der Drehrichtung unzufrieden sind, vertauschen Sie einfach die Position der letzten beiden Argumente in der folgenden Karte Anleitung

w =Karte(p,0,1023,100,-100);m =Karte(p,0,1023,90,0); 

so dass die Werte des Potentiometers von -100 bis 100 und die Nadelstärke von 0 bis 90 gehen (dies ist ein Trick, um die Nadel in die richtige Position zu ziehen, versuchen Sie es selbst, wenn Sie neugierig sind).

Das Python-Skript enthält die Hostadresse und die Seriennummer des seriellen Ports. Der Host sollte "localhost" sein (Wenn es nicht funktioniert, versuchen Sie es mit 127.0.0.1 ), der Port any (vielleicht ist es besser, der nicht von anderen Anwendungen verwendet wird, ich weiß es nicht), der serielle Port, an dem Ihr Board angeschlossen ist, kann von der Arduino IDE gelesen werden. In meinem Fall ist es "COM4" . Hinweis:Wenn Sie das Arduino mit dem seriellen Monitor testen, müssen Sie möglicherweise Ihr Board trennen und erneut anschließen, bevor Sie das Python-Skript ausführen, damit tomakeit ordnungsgemäß funktioniert.

host ="localhost"port =21567#buf =1024addr =(host,port)UDPSock =socket(AF_INET,SOCK_DGRAM)tty="COM4"print("tty is", tty) 

Das Python-Skript kann sich überall befinden. Sie können es über die Befehlszeile Ihres Betriebssystems ausführen. In meinem Fall (Windows) gebe ich die Eingabeaufforderung ein:

python c:\path\to\file\arduinoElevatorTrim.py

Dies kann vor oder sogar nach dem Starten von FlightGear gestartet werden.

Abschließend muss das XML-Skript, wie bereits erwähnt, ein für alle Mal in den Protokollordner Ihrer FlightGear-Installation verschoben werden. Jetzt sind Sie bereit zu gehen. Starten Sie FlightGear mit Ihrem bevorzugten Modus (Befehlszeile oder Startprogramm), indem Sie den folgenden Befehl hinzufügen (kein Leerzeichen zwischen den Zeichen!) :

--generic=socket,in,30,localhost,21567,udp,arduinoElevatorTrim

wo wir FlightGear anweisen, ein generisches Protokoll über Socket anzuwenden, lesen Sie die Eingabe 30 Mal pro Sekunde auf der Adresse localhost, Port 21567, UDP-Protokoll, Anweisungen in der Datei arduinoElevatorTrim.xml. Genießen Sie Ihr persönliches Trimmrad!

Code

  • arduinoElevatorTrimOLED.ino
  • arduinoElevatorTrim.py
  • arduinoElevatorTrim.xml
arduinoElevatorTrimOLED.inoArduino
Code zum Laden auf dem Arduino Nano. Passen Sie Zeile 2 (Anzeigetyp) nach Bedarf an.
#include U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); // I2C / TWI int xmax =128; int ymax =64; int xcenter =xmax/2; int ycenter =ymax/2+10; int arc =ymax/2; int-Winkel =0; char* Etikett ="TRIM"; int labelXpos =53; int p, w, m;u8g_uint_t xx =0;int const potPin =A6;float potVal;// Benutzerdefinierte Funktionvoid Gauge(uint8_t angle) { // Rahmen der Gauge zeichnen u8g.drawCircle(xcenter,ycenter,arc+6, U8G_DRAW_UPPER_RIGHT); u8g.drawCircle(xcenter,ycenter,arc+4, U8G_DRAW_UPPER_RIGHT); u8g.drawCircle(xcenter,ycenter,arc+6, U8G_DRAW_UPPER_LEFT); u8g.drawCircle(xcenter,ycenter,arc+4, U8G_DRAW_UPPER_LEFT); // Zeichne den Nadelschwimmer x1 =sin(2*angle*2*3.14/360); float y1 =cos(2*Winkel*2*3.14/360); u8g.drawLine(xcenter, ycenter, xcenter+arc*x1, ycenter-arc*y1); u8g.drawDisc(xcenter, ycenter, 5, U8G_DRAW_UPPER_LEFT); u8g.drawDisc(xcenter, ycenter, 5, U8G_DRAW_UPPER_RIGHT); u8g.setFont(u8g_font_chikita); // Skalenbeschriftungen anzeigen // u8g.drawStr( 10, 42, "-1.0"); // u8g.drawStr( 19, 14, "-0.5"); // u8g.drawStr( 63, 14, "0"); // u8g.drawStr( 92, 14, "0.5"); // u8g. drawStr( 105, 42, "1.0"); u8g.drawStr( 1, 42, "DOWN"); u8g.drawStr( 52, 17 , "NEUT"); u8g.drawStr( 105, 42, "UP"); // Messgerät-Label anzeigen u8g.setPrintPos (labelXpos,32); u8g.print (Etikett); // Digitalwert anzeigen und Position ausrichten u8g.setFont (u8g_font_profont22); wenn (w>=99) { u8g.setPrintPos(47,60); aufrechtzuerhalten. Wenn (w>=10 &&w <99) {u8g.setPrintPos(54,60); aufrechtzuerhalten. Wenn (w>=0 &&w <9) {u8g.setPrintPos(60,60); aufrechtzuerhalten. Wenn (w>=-9 &&w <0) {u8g.setPrintPos(48,60); aufrechtzuerhalten. Wenn (w>=-99 &&w <-9) { u8g.setPrintPos(42,60); aufrechtzuerhalten. Wenn (w <-99) {u8g.setPrintPos(35,60); } u8g.print (w);}void setup () { Serial.begin (9600); u8g.setFont(u8g_font_chikita); u8g.setColorIndex(1); // Standardfarbwert zuweisen if ( u8g.getMode () ==U8G_MODE_R3G3B2 ) { u8g.setColorIndex(255); aufrechtzuerhalten. Sonst if (u8g.getMode() ==U8G_MODE_GRAY2BIT) { u8g.setColorIndex(3); aufrechtzuerhalten. Sonst if (u8g.getMode() ==U8G_MODE_BW) { u8g.setColorIndex(1); aufrechtzuerhalten. Sonst if (u8g.getMode() ==U8G_MODE_HICOLOR) { u8g.setHiColorByRGB(255,255,255); }}void loop () { potVal =analogRead (potPin); potVal =(potVal - 512.0)/512.0; Serial.print (potVal); Serial.print("\n"); // p ist das gleiche wie potVal, aber es ist eine ganze Zahl p =analogRead (potPin); w =map(p,0,1023,100,-100); m =Karte(p,0,1023,90,0); // Zeige Nadel und Zifferblatt xx =m; wenn (xx <45) {xx =xx + 135; aufrechtzuerhalten. Sonst {xx =xx - 45; } // Bildschleife { u8g.firstPage (); tun { Messgerät (xx); } while(u8g.nextPage()); } Verzögerung(10);}
arduinoElevatorTrim.pyPython
Skript, das zusammen mit FlightGear ausgeführt wird, um die serielle Kommunikation in UDP-Pakete zu "übersetzen". Sie müssen Python installiert haben, um dieses Skript auszuführen. Ändern Sie Zeile 14 (USB-Port, an dem das Arduino angeschlossen ist) nach Bedarf.
#!/usr/bin/pythonimport sysimport serialfrom socket import *host ="localhost"port =21567#buf =1024addr =(host,port)UDPSock =socket(AF_INET,SOCK_DGRAM)tty="COM4"print("tty is", tty)try:ser =serial.Serial(tty,9600)außer:print("Fehler beim Verbinden mit ", tty) prevline=""while 1:outline='' line=ser.readline() if line !=prevline:#ein Wert geändert print(line) outline=line UDPSock.sendto(outline,addr) prevline=line
arduinoElevatorTrim.xmlXML
Skript, das im Ordner /data/Protocol hinzugefügt werden soll. Tun Sie dies ein für alle Mal.
  \n ,  Elevator trim /controls/flight/elevator-trim float  
Github
Online-Repository auf Githubhttps://github.com/dciliberti/arduinoElevatorTrimOLED

Schaltpläne

In Fritzing ist es nicht möglich, Drähte unter Komponenten zu führen. Das Erdungskabel des Displays kann unter den Arduino Nano gehen.

Herstellungsprozess

  1. Arduino Digital Dice
  2. Iron Man
  3. Analoge LED-POV-Uhr
  4. Finde mich
  5. Arduino 3D-gedruckter Roboterarm
  6. Arduino-Befeuchtersteuerung
  7. NeoMatrix Arduino Pong
  8. Arduino-Joystick
  9. Arduino TEA5767 FM-Radioempfänger
  10. Schrittzähler (Arduino 101)