Milopapa Posted November 17, 2015 Posted November 17, 2015 I’ve started a joystick modding project and since I did a lot of research and got a lot of inspiration from other posts around the net, I thought I’d also post my updates on various flight sim forums (the original thread is here). My goal: extend the MS FFB2 so I could enjoy the enhanced precision provided by a longer throw. Along the way, I also found that this is a good opportunity to replace the grip with something that has more buttons. Background: I needed something that could be easily removed as I have two small kids who can’t be expected to show proper respect to Daddy’s flying equipment – which (for now) lives in the living room until I can get my own room (next year’s project). I’m already using VESA mounts for the CH Throttle which I routinely install and remove on the arms of the chair (with the help of some 3M velcro). I won’t be needing the built-in twist rudder as I’m now using my namesake’s excellent Crosswind rudder. I found these posts to be really inspiring: http://forums.eagle....86&postcount=51 http://forum.il2stur...k-2/#entry46228 http://forums.eagle.ru/showthread.php?t=125281 Here are the steps I performed so far: Preparing MS FFB2 base remove original grip (incl cabling and twist rudder) add carbon tube extension (20cm) create hole in base for extra cabling remove throttle control for tighter fit increase current to FFB motors to compensate for longer leverage by adding resistors to one of the base PCBs Seat modification cut away parts of my office chair’s seat to allow enough movement for stick between my legs install tray to hold joystick base below leg level Grip replacement strip down Thrustmaster F-16 FLCS joystick for grip only install Teensy board, connect to grip wiring add mini-USB cable connected to Teensy, lead through the shaft extension and out in the base program board so it shows up as a joystick device in Windows limit stick throw by adding an outer ring the bottom of the shaft Materials needed: Microsoft Sidewinder Force Feedback 2 Thrustmaster F-16 FLCS joystick (gameport) Teensy 2.0 board 8 x SMD resistors (RC1206 1R 1Ohm 1/4W 1%) for motor boost Mini-B USB cable, 3m Carbon tube (internal diameter 14mm, outer diameter 16mm) Tray: wooden shelf, screws, brackets, paint (from local brick and mortar shop) My existing office chair (optional: I used a powered USB hub on the side of my table for cable management purposes) In the consecutive posts I'll detail each of the stages. 1
Bando Posted November 17, 2015 Posted November 17, 2015 I'm curious. Hope it will work as you intend. Please post some pics if possible.
Milopapa Posted November 17, 2015 Author Posted November 17, 2015 1. MS FFB2 base modificationsSo here is the first step, removing the grip and trying on the carbon extension.I had to remove the buttom plate to get access to the wiring - I wanted to keep the original grip intact and the only way to do that is to pull it through the shaft. The central 3 screws scared me first - I though they were stripped as a regular philips head wouldn't catch them. Fortunately I found this guide which assured me these were normal heads and all I needed was to experiement with different screwdrivers till I found a fitting one. Basically the grooves are a lot deeper that in a regular phillips head - I eventually just used a trusted old flathead.You can see the cable strip going into the shaft on the image above - that's the one carrying the signals of the grip buttons, the twist rudder and the IR sensor.Next I tried the tube on – it fits really nice and tight: It's a bit long as my raw material is 50cm long - I cut it to a comfortable size after a few tests (currently 20cm).During the disassembly process I came unto an interesting find. The twist rudder's centering force is achieved through a U-shaped spring. By bending and twisting it a little (well, I'm saying little but it took me more than half an hour) I could lessen the centering force which previously made it very difficult to apply small movements in the rudder. Once happy with the result, I took out the spring from this stick (I won't be needing it) and installed it in my backup joystick (which I'll be keeping as a regular MS FFB2 in case I mess up the extension ). It made a huge difference in my ability to use the twist rudder and I wholeheartedly recommend everyone using the twist rudder in this joystick to give it a try. I did some preliminary tests and while the centering forces seemed okay, the shaking effect was reduced significantly. So next step was to increase motor power – as described in this thread.I used these SMD resistors (RC1206 1R 1Ohm 1/4W 1%): I couldn't believe my eyes when I open the box, they are tiny little f*ckers! Photos did them no justice - they are really small! I was already scared shitless about the soldering (for me soldering is a necessity not a skill), but I did some practice runs on an old HDDs circuitry and managed to figure out the right technique. This video also helped a lot: In the end, the actual soldering took maybe 10 minutes. Here's what the result looks like: Zooming in: Result:The force feedback effects are back in their glorious strength! I actually had to reduce the centering effect from 100% to about 70% in Rise of Flight, same as with the unmodified stick. Shaking is now clearly noticable, not to mention the bumping on the ground effect (that was always crazy strong anyway).This mod makes a world of a difference to the extension, makes it feel exactly like the original. I'm not sure what the longevity effect is but if it last for at least 2 years, I'll be a happy man. There is some noticable heating around the power conversion area (lots of capacitor there) – I might add a fan in the long run.
Milopapa Posted November 17, 2015 Author Posted November 17, 2015 2. Chair modification Here's where I started: Cutting the sitting materials out, preserving the leather: The result: Since I haven't found anything that would work as the joystick holder, I decided to make one myself.Here is what it looks like: I later painted it black to make it blend in some more (don’t forget, this is in a living room).
Milopapa Posted November 17, 2015 Author Posted November 17, 2015 3. Grip modification Here is the original F-16 joystick from Thrustmaster: This goes for $30-40 on ebay – no use in newer PCs as it still uses a gameport connection. For me, that doesn’t matter, I just needed the grip with the buttons. Grip replacement I started out by disassembling the joystick and then the grip itself. Surprise: as opposed to the CH Fighterstick, the handle is chock full of wires and a control PCB so I had trouble finding a home for the Teensy. As the inside of the grip is extremely busy, it took a long time to figure out where to put the Teensy... or more precisely, the Teensy + the mini USB cable going through the handle. In the end, I put it on top of the exisiting PCB but I had to reroute some of the existing wires to different parts of the grip. Soldering was also a bitch... This was probably the most difficult part of the whole project. The two-stage trigger was worn down, I ended up replacing the hard foam for the second stage as a large part of it was missing. This is how the grip looks like. I put a screw perpendicular to the shaft to try and keep it from rotating... it’s not perfect but it’ll do for now. This is how the extra USB cable is routed in the base. For the outlet, I simply enlarged the existing one to accommodate an extra cable. It's tight but it works. Programming the Teensy: Getting the Teensy to work in Windows was relatively easy (apart from a bug). I need the Arduino IDE (only version 1.6.5 works with Teensy) and the Teensyduino extension. Then I pasted in this code (credit: NonWonderDog): /* USB FLCS Grip You must select Joystick from the "Tools > USB Type" menu */ // Buttons are muxed into shift registers, use the SPI protocol to read them #include <SPI.h> const int slaveSelectPin = 0; unsigned int buttonInputs1; // data read from SPI unsigned int buttonInputs2; unsigned int buttonInputs3; // Use some macros to clean things up #define S3 !(buttonInputs1 & 0x80) /* Pinky Switch */ #define TG1 !(buttonInputs1 & 0x40) /* Trigger 1 */ #define TG2 !(buttonInputs1 & 0x20) /* Trigger 2 */ #define S1 !(buttonInputs1 & 0x10) /* Nose Wheel Steering */ #define S4 !(buttonInputs1 & 0x08) /* Paddle Switch */ #define S2 !(buttonInputs1 & 0x04) /* Pickle */ #define H1D !(buttonInputs2 & 0x80) /* Trim */ #define H1R !(buttonInputs2 & 0x40) #define H1U !(buttonInputs2 & 0x20) #define H1L !(buttonInputs2 & 0x10) #define H4U !(buttonInputs2 & 0x08) /* CMS */ #define H4L !(buttonInputs2 & 0x04) #define H4D !(buttonInputs2 & 0x02) #define H4R !(buttonInputs2 & 0x01) #define H3D !(buttonInputs3 & 0x80) /* DMS */ #define H3R !(buttonInputs3 & 0x40) #define H3U !(buttonInputs3 & 0x20) #define H3L !(buttonInputs3 & 0x10) #define H2D !(buttonInputs3 & 0x08) /* TMS */ #define H2R !(buttonInputs3 & 0x04) #define H2U !(buttonInputs3 & 0x02) #define H2L !(buttonInputs3 & 0x01) // setup() runs once on boot void setup() { // set the slaveSelectPin as an output: pinMode (slaveSelectPin, OUTPUT); // start the SPI library: SPI.begin(); // configure the joystick to manual send mode. This gives precise // control over when the computer receives updates, but it does // require you to manually call Joystick.send_now(). Joystick.useManualSend(true); } // loop() runs for as long as power is applied void loop() { // take the SS pin low to select the chip digitalWrite(slaveSelectPin,LOW); // send a value of 0 to read the SPI bytes buttonInputs1 = SPI.transfer(0x00); buttonInputs2 = SPI.transfer(0x00); buttonInputs3 = SPI.transfer(0x00); // take the SS pin high to de-select the chip: digitalWrite(slaveSelectPin,HIGH); // Write to joystick buttons Joystick.button(1, TG1); Joystick.button(2, S2); Joystick.button(3, S3); Joystick.button(4, S4); Joystick.button(5, S1); Joystick.button(6, TG2); Joystick.button(7, H2U); Joystick.button(8, H2R); Joystick.button(9, H2D); Joystick.button(10, H2L); Joystick.button(11, H3U); Joystick.button(12, H3R); Joystick.button(13, H3D); Joystick.button(14, H3L); Joystick.button(15, H4U); Joystick.button(16, H4R); Joystick.button(17, H4D); Joystick.button(18, H4L); //Joystick.button(19, H1U); //Joystick.button(20, H1R); //Joystick.button(21, H1D); //Joystick.button(22, H1L); // Determine Joystick Hat Position int angle = -1; if (H1U) { if (H1R) { angle = 45; } else if (H1L) { angle = 315; } else { angle = 0; } } else if (H1D) { if (H1R) { angle = 135; } else if (H1L) { angle = 225; } else { angle = 180; } } else if (H1R) { angle = 90; } else if (H1L) { angle = 270; } Joystick.hat(angle); // Because setup configured the Joystick manual send, // the computer does not see any of the changes yet. // This send_now() transmits everything all at once. Joystick.send_now(); } I had to choose "Serial+Keyboard+Mouse+Joystick" under Tools > USB Type as the one without the Serial wouldn't show any buttons or axis in joy.cpl - this looks like a Windows bug. I also chose 1MHz speed as some reported issues with faster speeds - didn't bother to test. Uploading the code was a simple matter and the joystick shows up in Game controllers right away. All buttons work (even if some require extensive force due to the age)! So here is what it looks like at the moment: I limited the stick throw slightly as it was getting a bit excessive. I used a plastic ring cut from a windshield cleaner bottle – pretty much anything that’s a hard (non-sticking) plastic ring would do. I don't have pictures about that yet, can upload later if anyone's interested. Overall - I spent some time testing this setup in Il2 Bos, Rise of Flight and DCS:Huey and flying with the extended stick is AWESOME. Summary of impressions: great immersion, controls feel much more natural center-mounted precise control of pitch and roll - crucial for heli but really useful for prop planes too abundancy of buttons (even if they are a bit worn) very slight throbbing/vibrations can be felt occasionally, might be due to the increased current to the motors - insignificant overall the grip reduced the force feedback further but it's still pretty good - motor boost is a must have with an extension like this two-stage trigger is NICE - I programmed guns to TG1 (leading) and cannons to TG2 (killing) Please let me know if there is any additional detail you'd be interested to hear more about. 1
Milopapa Posted November 17, 2015 Author Posted November 17, 2015 Wow, great job. It looks good. Thank you. Apart from bragging rights I wanted to share this so maybe more people will find the courage to start a similar project. After trying it, stick extension feels like a must have and since MS FFB2 is still one of the best joysticks out there, it seems logical that we convert them.
Bando Posted November 17, 2015 Posted November 17, 2015 I have one on the attic. I use a Warthog now with Sahaj's 20cm extension. Very happy with it, although it lacks FFB. Flying with the stick up from the floor is much more precise and feels a lot more realistic imho.
EAF_51_FOX Posted November 20, 2015 Posted November 20, 2015 @Milopapa: what's the purpose of using the trustmaster grip replacement + teensy? just to have more buttons or it is a need for have teensy+trustmaster grip for having the compensate FFB loose from the mod of the stick?.
Sokol1 Posted November 20, 2015 Posted November 20, 2015 Since the MSFFB2 controller circuit handle only ~8 buttons, for use a grip with more is need other controller (e.g. Teensy), for Windows and games the joystick is now 2 individual devices. To compensate the more weight above the pivot point is added resistors in FFB2 circuit board to allow more current drain. Some users add a counter weigh under the FFB2 base, specially using heavy grips like Cougar/Warthog (~600 grs), but this weight have the penalty to add inertia...
Milopapa Posted November 20, 2015 Author Posted November 20, 2015 Sokol's got it right Primary reason was to have more buttons + a nicer, more serious looking grip. I also liked how I could use a USB cable instead of soldering the base wires to the grip directly - this way it was a lot easier to adjust the extension height.
EAF_51_FOX Posted November 20, 2015 Posted November 20, 2015 (edited) Thank for clearing me M8's, and in final I ask you then what are the right resistances to order ( 1 Ohm, 1/4 or 1/2 watt ?) and if you are happy with "default/standard" cooling even after 2/3 hurs of game.. of may be FF2 may broke if not mounting a little pc Fan? Edited November 20, 2015 by EAF_51Raptor
Milopapa Posted November 21, 2015 Author Posted November 21, 2015 This is the full spec for the resistors: RC1206 1R 1Ohm 1/4W 1% 1206 is the form factor, meaning the size (metric equivalent is 3216) 1R is the same as 1 Ohm 1/4W is what it says, 0.25W 1% is the tolerance Not sure where you are located, these are the ones: Germany Hong Kong Can't find anything in the US.
Milopapa Posted November 21, 2015 Author Posted November 21, 2015 Oh, about the cooling: I usually fly at least 2 hours, the base gets warm to touch but so far I haven't seen the need for a fan.
Sokol1 Posted November 21, 2015 Posted November 21, 2015 ... if not mounting a little pc Fan? The hot area is the AC/DC board: http://www.simprojects.nl/images/MS-SW_FF2_ACDC_PCB.JPG In the MS FFB PRO (gameport) are a (lound) cooler in the base.
EAF_51_FOX Posted November 22, 2015 Posted November 22, 2015 Thank you very much for your prompt and exaustive reply miopapa, I'm italian, so I will go to see german catalogue you kindly posted above. I will report my workaround on my stick as soon as I start the work;). Cheers.
SCG_Neun Posted December 13, 2015 Posted December 13, 2015 Wow...just very impressed how some of you guys can do this stuff. Great job!
Milopapa Posted December 13, 2015 Author Posted December 13, 2015 Wow...just very impressed how some of you guys can do this stuff. Great job!Once you get going, there's not stopping Seriously - the more DIY stuff you do, the braver and more confident you get. And it bleeds into other areas - I just knocked up a new handrail for our stairway in no time
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now