G'day,
I am very deeply inspired by the Bergison G-seat and what it achieves. He proved it could be done and very gratefull that he showed us how.
So after much testing on single units it is time to build my G-seat version proper.
This is the second stage where I am building everything on breadboards to actual size and testing them. Once it's all working as expected then I can design and build the final version without a hitch

The seat base actuators and belt tensioners.
Making sure the crank arms don't crash.
The seat back actuators and belt tensioners.
Also testing out a Force Feedback controller build using the G-seat controller breadboard. The proposed pitch control column geared up to dc motor with arduino and XPID. This is still a first stage test bed.
Many many thanks to Chris, and of course to X-Sim for even making this possible!
UPDATE: 2nd November 2015.
I am still waiting on parts to fire up this second stage build. The feedback pots are coupled to the pulleys and there is considerable slop in the mechanics so I know that this is going to be a problem. The rod end bearings used are the cause of the slop and were replaced with M8 ball and socket rod ends. MUCH BETTER! I may still need to couple the feedback pots to the motor crank shaft but it is so much better * The only slight knock is the 22mm pulley bearings in the brackets. This should be fixed with some loctite.
The back seat flaps will be actuated via the pulley through the motor base board. (The motors facing out from the seat.) The pulley brackets were re-adjusted to make way for the change. The base seat flaps will still be actuated upwards from the motor base board.
Manually torquing up the pulleys, the 16mm chipboard is flexing so thick MDF for the motor mounts.
I wanted to fit LED indicators to show the state of the motor drives for second and final stage testing. This was a green drive enabled and a red drive disabled LED. Normally you need two types of transistor to easily switch the two LEDs, but I only had a stack of one type which were going to be used for a single state LED. This was breadboarded and worked well. R3 and R4 values need to be adjusted depending on the LEDs you use of course.
The veroboard wiring for a single switch channel.
UPDATE Wednesday, 4th November 2015
After looking at the Bergison video again while waiting for time to work on this. I now realise that the pivot points I've used are around the wrong way. Pushing out on the body rather than falling away on it

UPDATE Sunday, 8th November 2015
Finally got the interconnect board wired in and working. Just need to connect up the motors and feedback pots then the fun begins. Doing much more study on the pivot points on the seat flaps. Just need to make sure there is "loft" in the seat base flaps. I am confident the back seat flaps are good.
UPDATE Monday, 16th November 2015
After double checking the wiring I was able to adjust X-PID on the designated Left seat flap motor controller without much hassle. Very happy with the response (under no load yet of course).
Settings for tight control with very little overshoot on large moves (none on short) and no oscillations
PWM frequency 31250Hz
P = 2.0 to 2.1
I = 0.2
D = 0.2
PWM Power Offset = 2%
PWM Power Maximum = 100%
UPDATE Saturday, 21st November 2015.
More wiring and allocated the motor controllers to their respective seat flaps.
I've investigated further about the limit switches to prevent damage to the seat. I devised a potentiometer range clipping circuit on a breadboard based on the LMC6482 rail to rail op amp. After testing I was able to adjust the pot from 280° to 90° FSD with full linear range. This should be enough to prevent a physical crash and still get full dynamic range of the pot. X-PID values will need to be rechecked.
The veroboard wiring of the clipping board.
UPDATE Saturday, 28th November 2015
I found that there was a wire not connected onto pin 5 of the op amp on the veroboard layout while soldering the board up. Also it was impossible to solder the circuit using veroboard with so many jumper leads. So I bit the bullet and drew up a PCB layout to be etched. The 10 turn long pots have better resolution than the short vertical 25 turn trim pots but I've included them both in the PCB layout. After rethinking the layout I will also need these boards for my force feedback controllers so I've added the +5/GND to the output connectors and also made a PCB version with just the two feedback pots. PDF's will be available once I find a file host. Just another weeks delay again while I get this etched and get replacement parts,

UPDATE Saturday, 5th December 2015
IT WORKS!!!!
Took the SU-27 for a fly in DCS World and it was great to see the seat actuators working on the breadboards.
The pot trimmer board works great as installed. The limit is around 40° travel so I will revisit the gain values for the force feeback controllers to get them to at least 30°.
Time to start delving into the final setup parameters... (The ground roll looks a shocker, Cessna on a padock yes, Jet fighter on runway, I don't have any experience with that.)
UPDATE Monday, 14th December 2015
I am having some setting issues with the X-PID setup for the motors. Cycling from 30% to 70% and looking at the response with a scope, a gain of 1.0 gives no overshoot. Anything more overshoots. There is still a slop of about 5% feedback as read on screen using 1% increments in position. Upping the derivative to around 1.6 and adding 0.3 integral gets it so that there is no slop. (Any more integral breaks into oscillation.) However it takes about a second for the response to settle even for a 1% change. (Gains 1.0, 0.3, 1.6 and at 3.6Khz for the power. Noisy!)
Cycling the command in game at these gains produces a bumpy acceleration and a bumpy on change of direction. (Using the in game values to set the max and min values.)
Reducing the gains way back down I get a smooth acceleration in game but it is still a bumpy change of direction. (Iv'e just read the hint about using a joystick command so I will try that rather than in game.) (Gains 0.6, 0.1, 0.1)
Also I have not included a spike filter yet into the math, so that will most likely help. I am using the scalar of *1000 to the values sent from DCS via export.lua. I will try 100 and 10 to see if this helps. Adjusting the G-Force min-max values accordingly. (At least with the DCS Extractor display will be more readable.) The back seat flaps are being built up for testing and already showing that there is an issue with the angle limits of the ball sockets on the linkages. And that the 3mm low carbon steel sheet used in the motor brackets is way too flexible once the motor and the belt pulley is attached. I am now thinking 10mm for these brackets to get rid of any flexing.
UPDATE Tuesday, 15th December 2015
After more reading I found that X-PID should be running at 115200 instead of 9600 (Non ftdi Uno R3's). That is definitely going to help. I'm also configuring the test breadboard for both the seat back flaps as these have all three forces on them (Accel.x, Accel.y, Accel.z). This will be getting closer to the final hardware configuration.
If there was a wrong way to wire the motors and pots... In the new layout got everthing all going the one way - the wrong way. Had to change polarity of the pots and motors so now the seat flaps move in the right direction. (Doing an invert in the math did not help.) The photo shows the flaps at the 1G position. The minimum -3G's will flatten the flaps while 9G's will draw them fully back. Note that this is the view looking up through the seat, with reference to the Basic Configuration diagram. That is as far as I got so it will be gains tomorrow.
UPDATE Wednesday, 16th December 2015
Reverted back to the eyelet type bearings for the seat flaps as these give more angle without crashing the sides.
3-4mm spacers between the bearing give the clearance on the pushrod so there is no crashing. It also stops rattle. The 8mm bolt through the inner bearing race is sloppy causing rattle. Epoxy will be used to stop this.
Set the X-PID arduinos to 115200. Used a joystick throttle input as a command to the seat flaps - A brilliant option with the software! Now I can determine the output behaviour so much better with manual control of the input via moving the throttle. The smooth math filter really smoothed all the bumps out, the only problem was response was way too slow. Playing with the spike filter and gains is starting to yeild some results.
Unfortunately the motor crank arm is attached to the actuators by two nuts wedging together and tends to break free too easily. I will now be concentrating on an E-STOP/LIMIT Switch for the motors so that I can connect everything up solid without fear of crashing. For the Elechouse 50A motor boards that means both motor outputs need to be high to lock the motor in position. (Dropping DRIVE ENABLE still lets the motor coast into a crash so that is not an option). I am hoping a simple mod to the arduino code will work. The actual active E-STOP/Limits switching will be tricky.
UPDATE Saturday, 19th December 2015
This is the current configuration on the actuator arms where the M8 nuts clamp onto it.
If only got a P of 0.6 and a hefty spike filter in to boot to get smooth operation. The fidelity appears to be not so good yet.
The limit switch sensing modification to X-PID program worked well. Now when there is an open circuit or failure anywhere in the motor limits sense circuit the motors all get locked into a braked position without coasting thus preventing damage. The motor limits sensing circuit is breadboarded and is located where the 4 blue leds are. The actual motor position sensing circuit for each motor has not been built yet so that is next on the agenda.
I am using a GF-TQ6 throttle to manually command the movement of the flaps. The response on the Back Right is better than the Back Left. Looks like I have to turn the Back Right Motor around again to match
https://www.youtube.com/watch?v=x6oBfUied8Y
UPDATE Wednesday, 24th December 2015
I've got the Motor Limit switch sensing circuit working on a breadboard. I've used an opto interrupter circuit to trigger a limit condition to send to the Arduino to brake the motors. Like all EMERGENCY STOP circuits, this need to be active (Voltage) to allow the motors to operate. Should there be an electronics failure or an open circuit somewhere in the wiring the motors are braked. It should be easy enough to fashion a cardboard/aluminium interrupter blade to attach to the motor actuator arm. I just need to trim it down so as soon as the arm gets to a bad position the opto is unbroken.
I have designed the PCB layout for the 4 PCB's for the motor limit switchs (one for each motor). And also the limit switch interface board that they will all plug into. (The interface board is wired up to the Arduinos.) Due to the Christmas break my manufacturing capacity is limited and this is a show stopper for the moment. I can do the seat base test flaps like the back seat test flaps so that will be next.
https://www.youtube.com/watch?v=AOgh_wQCULk
UPDATE Sunday, 27th December 2015
After looking at the repositioning of the motor on the back seat flap to match motor direction response, it aint going to happen just yet. I need to look at how the seat base flaps are going to work for *
The seat base test flaps have been started. The test breadboard was chopped and fitted to duplicate the pivots like the seat back. Whether this is right or wrong remains to be seen.
Fitting the spaces to the seat base actuators like the seat back actuators.
Setting the push rod length for the seat base actuators. This is a preliminary adjustment and will be refined once the motion control has been tested (just like the seat back flaps). With this setup I am hoping to reinforce it and build it to actually test real loads.
UPDATE Monday, 28th December 2015
Finally got all four seat flaps working together. I have gone for 9 to -3 G's for the full range of movement. I may need to go to 6 to -2 G's to get the appropriate force sensation from the seat. I will be getting some real flying time in to make sure that the seat responds truely.
The motor responses need more work. Still lumpy and sluggish. I am not sure whether it is resolution related or not. I need to send a mathematically calculated commands to the motors to check their dynamics. I will investigate the software further or I may need to write some routines myself to send.
Anyways here it is working with a joystick as a command input to all the motors.
https://www.youtube.com/watch?v=Thr4TU3_Oiw
UPDATE Sunday, 10th January 2016
The Limit switch boards have been designed and built. An opto interrupted board will close a relay when the motor is in a good position, one for each seat flap motor position. These are strung together so as a short circuit to the interface board. On a short circuit the interface board sends a good signal to the arduinos and the motors are commanded. Any out of position or break in wiring will cause a bad signal where the arduinos will lock all the motors. The optical masks are being laser cut out of 2mm black acrylic after being drawn up in CorelDraw once the angles and dimensions were calculated.
The new Limit Switch Interface board has been temporarily fitted and wired in (top right on the power supply chassis). The Feedback board is just to the lower left of it. The Motor Drive Enable board sits between the Arduino's and the Elechouse 50Amp motor driver boards. G-Seat MKII will have these board incorporated into a single board which sould reduce the number of connectors required down to about 10. The interconnecting cables are still being wired up. All going well next weekend should be a fully coupled test and then down to the nitty gritty of perfecting the PID.
UPDATE Monday, 11th January 2016
The limit switch circuits wired in and working. The blue LED's showing all 4 motor positions good in this test setup thanks to some chopped up icy pole sticks in the interrupters. The opto boards can now go onto the motor bread boards properly and once the masks are fitted to the motor crank arms, I can start testing without fear of a motor crash.
UPDATE Wednesday, 13th January 2016
Fitted some opto masks on the seat base motors and wired the back seat opto's in. Works very well. Slightest loss and ALL motors stop instantly. The pushrods can now be properly connected. (Photos and docs to follow.) Now I can finally concentrate on getting this PID sorted. Still lumpy using the GF-TQ6 throttle as an input. Maybe if I use my X-55 joystick as the command input and see what happens... Smooth as


It is now 40°C inside the house at night and I have been cycling the motors for all they are worth for half an hour now and they are hot! Peak current visible on the meter was around 4.5amp per motor. I will add another arduino UNO purely as a motor temp sensor and wire it into the Limit Circuit. This is not a show stopper and I can finally get on with designing the G-SEAT seat at last...
UPDATE Sunday, 17th January 2016
The opto boards are being fitted with the masks and the mechanics being coupled properly.
The motor temp sensors will be epoxied to the motor bodies. One temp sensor will be free air on the inside of the seat housing. Overtemp will shut down the motors via the limit switch circuit and has an LED indication. With all the spare ports on this Arduino it will be used for the Emergency Stop button and anything else that may need to be monitored.
UPDATE Tuesday, 2nd February 2016
I need to fit all this into a Martin Baker Mk14 ejection seat replica for my project.
Many thanks to the guys over at Hornetpits.org I was able to get a handle on the dimensions I needed to assist in the build. It is going to take time to get it all together. I am just starting on the seat base layout.
UPDATE Saturday, 20nd February 2016
The electromechanicals have been tested and verified working, but because the actual seat build itself is a whole new project on its own, I will be breaking the post up into Parts. The next part being the design and build of the actual seat itself incorporating the electromechanicals.
It is getting closer...
.