Howto:Use Arduino with FlightGear: Difference between revisions

Jump to navigation Jump to search
no edit summary
No edit summary
No edit summary
Line 1: Line 1:
'''[http://www.arduino.cc/ Arduino]''' is an open-source electronics prototyping platform based on flexible, easy-to-use [[:Category:Hardware|hardware]] (consisting of a board designed around an 8-bit or a 32-bit microcontroller) and software [http://arduino.cc/en/main/software Arduino IDE]).
'''[http://www.arduino.cc/ Arduino]''' is an open-source electronics prototyping platform based on flexible, easy-to-use [[:Category:Hardware|hardware]] (consisting of a board designed around an 8-bit or a 32-bit microcontroller) and software [http://arduino.cc/en/main/software Arduino IDE]).
[[FlightGear]]'s IO interface allows easy development of hardware that can improve the immersion and realism of the simulation. The output [[Generic protocol|protocols]] allow hardware to response to simulation data, while the input protocol allows FlightGear to reply to hardware events (eg. on the press of a button).
[[FlightGear]]'s IO interface allows easy development of hardware that can improve the immersion and realism of the simulation. The output [[Generic protocol|protocol]] allow hardware to response to simulation data, while the input protocol allows FlightGear to reply to hardware events (e.g., on the press of a button).


==How to: Control Flightgear with Arduino==
== How to: Control Flightgear with Arduino ==


With this "how to", you are able to do a switch and a potentiometer interface to control Flightgears properties such as aileron, elevator, gears, lights, fuel valve, etc.
With this "how to", you are able to do a switch and a potentiometer interface to control Flightgear's properties such as aileron, elevator, gears, lights, fuel valve, etc..


===Equipment and software===
=== Equipment and software ===


This example uses following components and software:
This example uses following components and software:
*FlightGear 3.2
* [[Changelog_3.2|FlightGear 3.2]]
*[[FlightGear_Launch_Control|Flightgear Launch Control]] (program to make FlightGear start without terminal command and options)
* [[Flightgear Launch Control]] (program to make FlightGear start without terminal command and options)
*Arduino UNO
* Arduino UNO
*Linux (Ubuntu 14.04)
* Linux (Ubuntu 14.04)
*on/off switch
* On/off switch
*potentiometer
* Potentiometer
*Flightgears Cessna 172P Skyhawk
* Flightgear's Cessna 172P Skyhawk


===Input protocol file===
===Input protocol file===
Line 26: Line 25:


Create controltest.xml file to your protocol folder and paste code from below to it.
Create controltest.xml file to your protocol folder and paste code from below to it.
 
<syntaxhighlight land="xml">
  <?xml version="1.0"?>
  <?xml version="1.0"?>
  <PropertyList>
  <PropertyList>
Line 51: Line 50:
  </PropertyList>
  </PropertyList>
  </code>
  </code>
 
</syntaxhighlight>
Explanation of lines:
Explanation of lines:


Line 71: Line 70:
====Code====
====Code====
Copy this code to Arduino IDE and send it to Arduino Uno:
Copy this code to Arduino IDE and send it to Arduino Uno:
 
<syntaxhighlight lang="
     /*
     /*
       FGFS Input Test
       FGFS Input Test
Line 142: Line 141:
First number is switch data, so it's either 0 (switch off) or 1 (switch on). After "," mark is our throttle data. First it's 0.00 meaning idle throttle and then potentiometer is gradually turned until it reaches 0.99.
First number is switch data, so it's either 0 (switch off) or 1 (switch on). After "," mark is our throttle data. First it's 0.00 meaning idle throttle and then potentiometer is gradually turned until it reaches 0.99.


'''NOTE!''' Remember to '''unplug Arduino's USB cable and plug it back''' in because Flightgear won't be able to read serial without doing this! You have to do this every time after you use Arduino IDE.
{{Warning|Remember to '''unplug Arduino's USB cable and plug it back''' in because Flightgear won't be able to read serial without doing this! You have to do this every time after you use Arduino IDE.}}


====Start Flightgear====
====Start Flightgear====


Flightgear needs to be started with a correct command line option for it to be able to read serial connection. This example uses following option:
Flightgear needs to be started with a correct command line option for it to be able to read serial connection. This example uses following option:
  --generic=serial,in,30,/dev/ttyACM0,controltest
  --generic=serial,in,30,/dev/ttyACM0,controltest


Line 152: Line 152:


If you don't now your correct port, you can check it with a following command in terminal: dmesg | tail. It should give you a message something like: "ttyACM0: USB ACM device" or "ttyACM1: USB ACM device". That's your port. Finally save setting by clicking 'OK' and click 'Run' to start flightgear. For more detailed guide, see [https://sites.google.com/site/flightgeararduinoandlinux/home Flightgear, Arduino and Linux]
If you don't now your correct port, you can check it with a following command in terminal: dmesg | tail. It should give you a message something like: "ttyACM0: USB ACM device" or "ttyACM1: USB ACM device". That's your port. Finally save setting by clicking 'OK' and click 'Run' to start flightgear. For more detailed guide, see [https://sites.google.com/site/flightgeararduinoandlinux/home Flightgear, Arduino and Linux]


[[File:Arduinofgfs.jpg|thumb|270px|Arduino LCD panel displaying speed, heading and altitude.]]
[[File:Arduinofgfs.jpg|thumb|270px|Arduino LCD panel displaying speed, heading and altitude.]]
Line 159: Line 158:
Rubdos (Ruben De Smet) has built an example using the [[Generic Protocol]] and an Arduino Mega 2560.
Rubdos (Ruben De Smet) has built an example using the [[Generic Protocol]] and an Arduino Mega 2560.
The code used to control the Arduino with generic protocol was:
The code used to control the Arduino with generic protocol was:
<syntaxhighlight lang="xml">
  <?xml version="1.0"?>
  <?xml version="1.0"?>
  <PropertyList>
  <PropertyList>
Line 190: Line 190:
     </generic>
     </generic>
  </PropertyList>
  </PropertyList>
</syntaxhighlight>
It is a simple plaintext protocol, which can easily be parsed by an Arduino. The code used on the Arduino is available on github as a gist: [https://gist.github.com/rubdos/5422870]
It is a simple plaintext protocol, which can easily be parsed by an Arduino. The code used on the Arduino is available on github as a gist: [https://gist.github.com/rubdos/5422870]


Navigation menu