Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

FlightGear Analog Trim Tab Wheel

Componenten en benodigdheden

Arduino Nano R3
of compatibel bord
× 1
Draaipotentiometer (algemeen)
× 1
Condensator 100 µF
× 1
Adafruit SSD1306 0,96 inch OLED
× 1
Jumperdraden (algemeen)
× 1

Apps en online services

Arduino IDE
Anaconda
FlightGear

Over dit project

Arduino verbinden met FlightGear is niets nieuws, maar ik heb gemerkt dat wiki's verouderd zijn en dat forums waardevolle tips geven waar je moet werken.

Het idee was om een ​​mooi, goedkoop en compact analoog commando te hebben om het lifttrimwiel van een vliegtuig in FlightGear te besturen. De wiki werkt tot het communicatiegedeelte. Strikt genomen kunt u seriële communicatie niet rechtstreeks gebruiken om opdrachten van Arduino naar FlightGear door te geven. Je moet een tijdelijke oplossing met Python gebruiken om pakketten via UDP te verzenden.

Wat is een trimwiel? Het is een analoog apparaat om de afbuiging van het trimvlak te regelen, een aerodynamisch apparaat om een ​​stuuroppervlak (in dit geval de lift die de vliegtuighelft regelt) in een bepaalde positie te houden zonder inspanning van de piloot. Van wikipedia:

Aanvullende vereisten voor dit project:python met de bibliotheken serieel , stopcontact , en sys geïnstalleerd. Ervan uitgaande dat Anaconda is geïnstalleerd, kunnen de ontbrekende bibliotheken worden opgehaald met de Anaconda-prompt door te typen:

>>> conda install -c anaconda pyserial

hetzelfde met serieel en socket . Zoek op internet naar een geschikt pakket, meestal zijn de meest gedownloade voor uw platform goed. Zodra je Python met deze bibliotheken hebt (en natuurlijk FlightGear geïnstalleerd), kun je naar het volgende gedeelte gaan.

Er zijn drie codescripts:een Arduino-schets, een uitvoerbaar python-script en een XML-script. De Arduino-schets moet op uw bord worden geladen. Het python-script moet worden uitgevoerd om communicatie tussen Arduino en FlightGear mogelijk te maken. Het XML-script is een generiek FlightGear-protocol dat moet worden verplaatst naar /data/protocol eens en voor altijd.

De Arduino-schets vereist de U8glib bibliotheek. Zoals vermeld in de opmerking, pas lijn 2 van de schets aan met je display:

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

Zie U8glib voorbeelden en documentatie. De schets zou zelfs zonder display moeten werken, dus je kunt spelen zonder visuele feedback van je bord.

Als je niet tevreden bent met de draairichting, verander dan gewoon de positie van de laatste twee argumenten in de volgende kaart instructies

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

zodat de waarden van de potentiometer van -100 naar 100 gaan en de naalddikte van 0 naar 90 (dit is een truc om de naald in de juiste positie te trekken, probeer het zelf als je nieuwsgierig bent).

Het python-script bevat het hostadres en het seriele poortnummer. De host moet "localhost" zijn (als het niet werkt, probeer het dan met 127.0.0.1 ), de poort willekeurig (misschien is het beter een die niet door andere toepassingen wordt gebruikt, ik weet het niet), de seriële poort waarop je bord is aangesloten, kan worden gelezen uit de Arduino IDE. In mijn geval is het "COM4" . Opmerking:als u de Arduino test met de seriële monitor, moet u mogelijk uw bord loskoppelen en opnieuw aansluiten voordat u het python-script uitvoert om het correct te laten werken.

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

Het python-script kan overal staan. U kunt het uitvoeren vanaf de opdrachtregel van uw besturingssysteem. In mijn geval (Windows) typ ik in de opdrachtprompt:

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

Dit kan worden gestart voor of zelfs na het starten van FlightGear.

Tot slot, zoals eerder vermeld, moet het XML-script eens en voor altijd worden verplaatst naar de protocolmap van uw FlightGear-installatie. Nu ben je klaar om te gaan. Start FlightGear met uw voorkeursmodus (opdrachtregel of opstartprogramma) door het volgende commando toe te voegen (geen spatie tussen tekens!) :

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

waar we FlightGear vertellen om een ​​generiek protocol via socket toe te passen, invoer 30 keer per seconde te lezen, op het adres localhost, poort 21567, UDP-protocol, instructies in het bestand arduinoElevatorTrim.xml. Veel plezier met je persoonlijke trimwiel!

Code

  • arduinoElevatorTrimOLED.ino
  • arduinoElevatorTrim.py
  • arduinoElevatorTrim.xml
arduinoElevatorTrimOLED.inoArduino
Code om op de Arduino Nano te laden. Pas regel 2 (type weergave) indien nodig aan.
#include U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); // I2C / TWI int xmax =128; int ymax =64; int xcentrum =xmax/2; int ycentrum =ymax/2+10; int boog =ymax/2; int-hoek =0; char* label ="TRIM"; int labelXpos =53; int p, w, m;u8g_uint_t xx =0;int const potPin =A6;float potVal;// Aangepaste functionvoid gauge (uint8_t angle) {// teken de rand van de meter 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); // teken de naaldvlotter x1 =sin (2 * hoek * 2 * 3.14/360); float y1 =cos (2*hoek*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); // toon schaallabels// 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, "OMLAAG"); u8g.drawStr( 52, 17 , "NEUT"); u8g.drawStr( 105, 42, "UP"); // toon meterlabel u8g.setPrintPos(labelXpos,32); u8g.print(label); // toon digitale waarde en lijn de positie uit u8g.setFont(u8g_font_profont22); if (w>=99) { u8g.setPrintPos(47,60); } if (w>=10 &&w <99) { u8g.setPrintPos(54,60); } if (w>=0 &&w <9) { u8g.setPrintPos(60,60); } if (w>=-9 &&w <0) { u8g.setPrintPos(48,60); } if (w>=-99 &&w <-9) { u8g.setPrintPos(42,60); } if (w <-99) { u8g.setPrintPos(35,60); } u8g.print(w);}void setup() { Serial.begin(9600); u8g.setFont(u8g_font_chikita); u8g.setColorIndex(1); // wijs standaard kleurwaarde toe als ( u8g.getMode () ==U8G_MODE_R3G3B2 ) { u8g.setColorIndex (255); } else if ( u8g.getMode() ==U8G_MODE_GRAY2BIT) { u8g.setColorIndex(3); } else if ( u8g.getMode() ==U8G_MODE_BW) { u8g.setColorIndex(1); } else 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); Serieel.print("\n"); // p is hetzelfde als potVal, maar het is een geheel getal p =analogRead(potPin); w =kaart(p,0,1023,100,-100); m =kaart(p,0,1023,90,0); // toon naald en kies xx =m; als (xx <45){ xx =xx + 135; } anders { xx =xx - 45; } // afbeeldingslus { u8g.firstPage(); doe { meter(xx); } while( u8g.nextPage() ); } vertraging(10);}
arduinoElevatorTrim.pyPython
Script dat samen met FlightGear moet worden uitgevoerd om seriële communicatie te "vertalen" naar UDP-pakketten. Je moet Python geïnstalleerd hebben om dit script uit te voeren. Wijzig regel 14 (USB-poort waarop de Arduino is aangesloten) indien nodig.
#!/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)behalve:print("Fout bij verbinden met ", tty) prevline=""while 1:outline='' line=ser.readline() if line !=prevline:#some value changes print(line) outline=line UDPSock.sendto(outline,addr) prevline=line
arduinoElevatorTrim.xmlXML
Script dat moet worden toegevoegd in de map /data/Protocol. Doe dit voor eens en altijd.
  \n ,  Elevator trim /controls/flight/elevator-trim float  
Github
Online repository op Githubhttps://github.com/dciliberti/arduinoElevatorTrimOLED

Schema's

Bij Fritzing is het niet mogelijk om draden onder componenten door te voeren. De aardingsdraad van het display kan onder de Arduino Nano gaan.

Productieproces

  1. Arduino digitale dobbelstenen
  2. Iron Man
  3. Analoge stijl LED POV-klok
  4. Vind mij
  5. Arduino 3D-geprinte robotarm
  6. Arduino-luchtbevochtigerbediening
  7. NeoMatrix Arduino Pong
  8. Arduino-joystick
  9. Arduino TEA5767 FM-radio-ontvanger
  10. Stappenteller (Arduino 101)
  11. Arduino kleurenmixer