AB412 collective head

Download links

3D models:
STLs / Sources

switch controller
pot controller


This is the AB412-style collective lever head. It’s not 100% scale, but is close enough and has quite a lot of stuff in it: two Arduino Pro Minis onboard, two hat switches, seven 3-way switches and three buttons on the top panel, and optionally up to two rotary pots on its sides, along with a mode switch. It also has some interesting software-driven features:

  • four switch modes to cover all your needs
  • you can choose which switches to use: toggle 3-way switches of spring-loaded ones in any combination
  • DCS UH-1 idle stop compatibility mode – this thing can realistically start and stop the Huey, although it doesn’t support advancing throttle past idle-stop detent with a joystick axis
  • X-Plane X-Trident AB412 idle stop compatibility mode (with an external Lua script)
  • mode switch triples your buttons and spring-loaded switches number


You will need:

2 x Arduino pro mini board
2 x KY-023 joystick module
1 x USBtoCOM adapter (e.g., PL2303) or another Arduino to program it
1 x PBS-10B-2 button
1 x KN3(B)-103A-A3 switch (starter, in a real 412 it seems to be a toggle type switch)
2 to 7 x MTS-223-A2  (ON)-OFF-(ON) spring-loaded switches
0 to 5 MTS-223-A1  ON-OFF-ON toggle type switches
some wires
2 x m3x20 screws and nuts
2 x m3x40 screws and nuts
1 x Simchair MKIII I2C controller (Arduino Leonardo based) (https://www.thingiverse.com/thing:2919692)
1 x Simchair MKIII collective (single or twin-throttle version)

1x TJ8-8P8 ethernet socket


  1. Remove supports from all printed parts. Take a spare piece of square alu pipe and put the head housing onto it several times to ensure a tight, but not overly tight, fit. Press-fit nuts into their sockets.

  2. Insert switches and a button into the top cover. By default, there are two (ON)-OFF-(ON) momentary switches, that go to two lower slots on the left side of the head cover. All others are toggle type – ON-OFF-ON. Switch next to the starter (idle stop) flips sideways.
  3. Break off parts of contact points with screws from a starter switch.  Apply some solder to remaining parts of contact pads.

  4. Now, it’s time to solder ground pins together. Cut 1 wire from the ribbon cable, make cuts in its isolation where needed, and solder it to middle pins of each switch and one of the button pins. Note that for switches with 2 rows of pins, you only need to use 1 row (they are not connected internally). Proper cable routing is very important at this stage.
  5. Cut a 16-wire cable off the ribbon cable. Position the head cover so the little red button will be on the bottom. Turn the cover and start soldering wires, 1st wire to the upper contact point of the 1st switch from the right, 2nd wire to its lower contact point, 3rd wire to the upper contact point of the next switch to the left in the same row, and so on until everything will be connected. Switches flipping sideways should be soldered starting from their rightmost contact point.  The last wire goes to ground. When finished, secure everything in place with hot glue. Please consult with the picture below.

  6. Now it’s time to solder another end of the 16-wire cable to an Arduino pro mini (solder a UART header to it first). Start from pin0,(top-right switch upper contact pad should go there) and solder all wires one by one. Remove the led, connected to pin 13 (you can find it next to pin 9). The 11th wire goes to pin 10. The 15th wire will go into A0 pin, that’s ok. The 16th wire goes to a GND pin.

  7. Cut a 3-wire cable from a ribbon and solder it to the mode switch. Connect its signal wires to pins A1 and A2. Solder the pot’s ground to the outermost GND pin on UART header. The switch controller is now assembled!

  8. Let’s move on to the pot controller. Attach pot boards to their frame, pins facing backward, with 8 M3x6mm screws. (or you can use 2 M3x6mm screws on the left side and 10mm screws elsewhere) .

  9. Solder wires to pot boards and connect them as follows:

    POT BOARD 1 VRx -> A0
    POT BOARD 1 VRy -> A1
    POT BOARD 2 VRx -> A2
    POT BOARD 2 VRy -> A3

    OT BOARD 1 SW -> PIN 11
    POT BOARD 2 SW -> PIN 12
    ROTARY POT 1 SIGNAL -> A6 (5V on the left leg of the pot facing up)

    The pot board is now assembled!
  10. It’s time to connect everything with the I2C bus. Solder 4wires to 1st 4 pins of an ethernet socket, then connect them to both boards as follows:

  11. Electronics is finally assembled! Now, we need to flash Arduino boards and test everything. At first, connect a USB-UART adapter to boards and flash them with their corresponding firmware. You can uncomment Serial.prints to test switches (NOTE THAT ALL SWITCHES SHOULD BE CENTERED, YOU MAY NEED TO PRESS RESET MANUALLY DURING FLASHING PROCESS). When you press something, a “1” should turn on somewhere. After all, switches are tested, comment out “Serial.prints”, reflash the board,  connect the ethernet socket to Simchair MKIII I2C controller and check that the collective head is recognized. Collective heads register as the 3rd “Arduino Leonardo” in the list.
  12. Let’s put the stuff into the box. Start with inserting the ethernet socket. Secure it with a fair amount of hot glue. Put rotary pot 1 to the right side of the lever (relative to its normal position in a helicopter), rotary pot 2 to the left side, mode switch facing upwards with wire, connected to A1 pin.

  13. If you have chosen the version with rotary pots, do not forget to put knobs onto them.

Congratulations, you’ve just assembled the 412collective switch panel! You can try it right away, or read about switch configuration options below.

Software configuration

Switch modes

Let’s talk about switch modes.  They are configured in the master_controller.ino file:

// AB412 switch modes
// write joystick button numbers here as they are displayed in joy.cpl in order of increment
byte ab412_sw_mode_button_switches[] = {1,2,5,9,10,17}; //active when being held
byte ab412_sw_mode_toggle_switches[] = {6};//2-way switch mode: single button press when switch is turned to “on”, one more press when switch is turned to “off”; something you can assign to a single key press; e.g. gear extend/retract
byte ab412_sw_mode_selector_button_switches[] = {}; //3-WAY SWITCHES ONLY, FIRST BUTTON (WITH LOWER NUMBER) MUST BE GIVEN HERE; REMOVE THE SECOND BUTTON FROM EVERYWHERE ELSE FOR CORRECT OPERATION; when a switch is on, a button is held; when off, another button is pressed and held;

byte ab412_sw_mode_selector_switches[] = {3,5,11,13,15}; //same as above, but buttons are pressed and released – e.g. landing light extend / hold / retract

Comments are pretty much self-explanatory here (i hope).

How to find the button numbers? Just look for them in joy.cpl dialog. You press the button, you see e.g. 17, you write it to the list of the type you want it to be. If you want to assign a 3-way switch to one of the selector types, write the 1st button of it only (with the lower number, e.g. if you have 17 and 18, you write 17 and remove 18 from everywhere else).

Now what the mode switch does, it assigns different sets of joystick buttons to those in the ab412_sw_mode_button_switches[] list. You can choose from several different bottom head part variations: a semi-scale one (no switches or pots on sides), 1 pot, 2 pots, 1 pot + mode switch, 2 pots + mode switch. You can also assign mode switch to any one of the 3-way toggle switches.

Compatibility modes

For some reason, a lot of developers of very detailed and overall great models tend to simplify things, that can be quite minor for the casual simmer, yet quite annoying for hardcore ones. When I have finally finished the collective head, I found that the only heli (from what I have) that more or less works from the box with the collective idle stop switch is the Dreamfoil B407 for X-plane. Yet, my beloved DCS Huey had no support for past-idle stop detent throttle grip movement with an axis! The same thing was to be found out for AB412 which my friends love to fly. Compatibility mode fixes that sad behavior for each popular helicopter model specifically.

For now, DCS UH-1 and AB412 are supported. AB412 requires an additional plugin (FlyWithLua) and a Lua script installation. Please look at this post for detailed instructions. I will be adding support for what I have little by little.

You may always ask me to add support for your favorite helicopter (and/ or sim), but I will need to get it somehow to do that.

That’s it, happy flying!

Download links


Check out the latest software on GitHub

6 Replies to “AB412 collective head”

  1. Hi! I have now started concentrating my work on creating an AB412 head, but as I am trying to get my head around this project I am having some questions. I hope you can help me with this like you helped me with the collective:

    1) I think I found a typo:
    should probably read

    2) To avoid the stupid problems I had with the collective electronics, I made another crude schematic of the pot controller board. Is this the correct way to wire it? Link: https://imgur.com/eMuIqdI

    3) I am a bit puzzled by the wording in the description of the switches controller. Does it mean that I:

    3a) Start by connecting all middle pins of all switches (as well as one “leg” of the button) to GND on the board
    3b) Then connect outer pins of switch 1 in the uppermost row to PIN0 and PIN1
    3c) Then connect outer pins of switch 2 in the uppermost row to PIN2 and PIN3
    3d) And so on, continuing with the rows one after the other

    4) Where is the second rotary potentiometer located on the AB412 head? I can’t see it on any of the pictures you showed me.

    5) Where should the second “leg” of the button be connected to?

    6) I am not sure what this line means and entails “BE SURE TO REMOVE LED ON PIN 13!”. Do I need to physically remove/desolder the LED? What exactely am I supposed to do and how?

    Sorry for turning up again with so many questions! Have a nice day!

  2. 1) yup, there’s a typo, will fix it =)

    2) looks good. You can also wire all 5v together, then solder the tie to the VCC pin on an Arduino board with a single wire =)

    3) Take a single wire. It will be the ground one. Connect all the middle pins together (if a switch has 2 rows of contacts on it – only use one) with it (start from the TOGA button and go around, for example)? then connect it to Arduino’s GND. Then look at the switches on the head: start from top-left one (when you turn the head to solder wires it will be the top right one), from the outermost contact of it, it should go to pin0. Its bottom contact will go to pin1. Then go to the next one in the same row, start with its outermost contact, etc. I recommend using this switch order so you won’t need to mess with reassigning buttons for some special functions on software update =)

    4) Side potentiometers are optional! You can use the semi-scale version without them, or a version with one pot on the right side, or a 2-pot version (pots on right and left walls of the head, all of them are under mods folder). Same for the mode switch, you can use any of the switches on top for it (but I think it’s better to have one on the side =) )

    5) Whether its a button or a switch, there’s no difference (a switch is basically 2 buttons), just connect it to a pin, following the common connection pattern from top to bottom, left to right.

    6) yup, that’s important, desolder it, otherwise, button 13 will be always pressed =) Just carefully touch it with a soldering iron, be sure that it’s mounting pads are not connected after desoldering (it’s an SMD one, doesn’t need much heat to come off).

    Btw pin 3 on a TJ8P8C socket means the one where the green-white wire goes in an ethernet cable.

    It’s fine =)

  3. Hello again!

    Thank for your helpful hints! I was very busy lately and could not find any free time to continue (or fly with my new collective….). But recently I had a few minutes and managed to progress (see my gallery update: https://imgur.com/a/ExZKnbT ).

    Now I am finally ready to tackle the mounting of the electronic parts. And yet again I have questions.

    1) Where would you mount the second potentiometer? I am not sure If I want to but I would love to know.
    2) Are those switches momentary switches (return to center because of spring) or regular ones (A-0-B, don’treturn to center)?

    All the best!

    1. Hey there! Your 412 head looks great!

      1) For the second pot, there’s a modified version of the enclosure (under mods directory):

      Don’t worry, yours is perfectly fine, reaching the pot on the left in flight is a bit problematic =)

      2) That’s what’s cool about open source stuff: you can use any of them in any combination. The only thing – I recommend using 3-way switches everywhere (you can always make a 3-way switch behave like a 2-way, but not the other way).

      I have to note here that you have to follow the wiring scheme (buttons order) precisely to avoid pain with assigning buttons later =)

      Firmware supports 4 switch modes for now. They are:
      – regular pushbutton (joystick button is pressed when the physical button is being held or the switch is on)
      – toggle mode (joystick button is pressed for a moment when you flip a switch, then the same button is pressed again when you return the switch to its center position) example: gear up/down (or anything that can be assigned to a single button press).

      These are two basic modes that would be sufficient in most cases. Now, there are 2 advanced modes:

      – selector_button (same as a pushbutton, but has a joystick button in the middle) example – searchlight (or landing light, don’t remember which one of them exactly) switch in DCS Huey. In this mode, one of the joystick buttons is ALWAYS pressed.
      – selector (same as selector_button, but joystick buttons will be pressed for a moment and released)

      Let’s talk about how you assign switches to one of four modes.

      In the configuration section of the master controller sketch, there are 4 lists (arrays), where you put joystick button numbers as seen in joy.cpl in mode 0. For 1st two modes, you put each button you want to be assigned to the list. For 2 advanced modes, you ONLY put the 1st button of the switch (the one with the lower number, e.g. if your switch is buttons 3 and 4, you put 3 there and remove 4 from everywhere else!)


      byte ab412_sw_mode_button_switches[] = {1,2,9,10,11,12,17};
      byte ab412_sw_mode_toggle_switches[] = {3,4,5,6,7,8};
      byte ab412_sw_mode_selector_switches[] = {15};

      This is a default config that kinda shows how stuff works. I recommend using something like Pointy’s joystick tester (http://www.planetpointy.co.uk/joystick-test-application/) to see all the buttons, as joy.cpl only sees 1st 32 =)

      Now, there’s the mode switch (a special little one). You can assign any switch as a mode switch. This switch controls which (of three) joystick button set is mapped to physical switches at the moment. Three sets have 32 buttons each. The middle position of the switch maps joystick buttons 0-32 to physical switches, other 2 positions – buttons 32-64 and 64-96.

      Note, that mode switch ONLY works for buttons, that are configured either as pushbuttons (or selector_buttons).

      That’s because logically, one would usually configure spring-loaded switches or buttons as pushbuttons (imagine you have flipped the gear position switch to “up”, then switched a mode from 0 (middle) to 1 (up), and have something assigned to the same switch in mode 1. Now, before switching to mode 0 where your gear switch is still up, you have to return it back to “up” position in mode 1 as well, which pretty much kills all the point of using the mode switch with non-spring loaded switches).

      Then, there’s a VERY advanced selector_button type use scenario, that I think you wouldn’t likely be using, but it’s here if you need it:

      You can switch modes while holding a button! What will happen, is an associated joystick button in a mode where you have pressed the physical button initially, will remain held (let’s say, mode 1). You can now use the same switch in another mode (mode 2 for example), and when you will switch back to mode 1 again, the joystick button will remain pressed. Now, to release it, you have to press that button again.

      Now, there is also stuff called compatibility mode. This is basically a set of crutches for DCS Huey and Xplane 11 AB412, that allows performing an (almost) proper startup procedure (connect external power before startup to make it more realistic). These special functions only work in mode switch position 0 (412 also requires some additional LUA scripts to be loaded). When flying other aircraft, if these functions interfere with controls, you can just use modes 1 or 2 when assigning buttons, or disable compatibility mode in firmware.

      It can be a little confusing at first, try watching this video where I tried to explain it:


  4. Wow, thank 1000 times for the improved description and the great photos! Now everything is absolutely clear and understandable!

    Also: That indepth explanation is the motherload of information. Will take me a few readthroughs until I get it all. Thank you!

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.