I2C master controller


Simchair MKIII I2C master controller is the main “brain” of the set: it detects connected devices automatically and then loads device-specific configuration. It uses an Arduino Leonardo board. There are several cool things about it:

  • device-specific configuration
  • external I2C ADCs for flight stick gimbal and pedals
  • unified interface for everything, buttons or axes
  • peripheral-specific software-driven special features
  • new features are added to the software frequently
  • Joystick library by MHeironymus, which simplifies things like ten times; no need to mess with USB descriptors

I don’t think there’s any point in using an old analog version anymore, as there are now controllers with buttons (an old UNO – based analog controller only supported six axes as it had to do some massive filtering because of a noisy 10 bit built-in ADC)


1 * Arduino Leonardo
4 * M3x50mm screws
4 * M3x12mm screws
2 * M3x16mm screws
6 * M3 nuts
3 to 8 * TJ8-8P8 sockets
ribbon cable
hot glue

Available mods

  • housing lids with 6 and 8 Ethernet socket slots


STLsĀ  / sources

Flashing and configuration tutorial

Software manual page


  1. Remove supports from printed parts.

  2. Press-fit M3 nuts into their sockets in the enclosure bottom part.

  3. Inser Arduino Leonardo board into the enclosure and fasten with 4 M3x12mm screws.

  4. Solder 4-wire cables cut off the ribbon to 1st 4 pins of Ethernet sockets (pin 1 is where the orange-white wire is in the plug, pin 2 is the next one in another row, housing lids with slots for 3 to 8 sockets are available under Mods directory, we will be using a default 3-socket lid for this tutorial)

  5. Tie wires together by their pin numbers, and use another 4-wire cable to connect sockets to the board. Split that 4th cable into 22-wire cables and solder 2-pin headers to its ends. Use hot glue and insulation to strengthen them.

  6. Connect sockets to the board (5v, GND, SCL, SDA pins), flash it and check that all sockets work by plugging something to it (after re-plugging stuff, reset the board). If everything works, go on!

  7. Press-fit sockets into the lid and pour enough hot glue to fix everything in place properly.

  8. Connect pin headers to the board and put the lid on, use 4 M3x50mm screws to fix it.

  9. Insert 2 M8x50mm bolts into the mount part 1. Fix with nuts from the other side.

  10. Attach the mount to the controller housing with 2 M3x16mm screws (MAX 20mm!) . Put part 2 of the mount onto its bolts.

    Congratulations, you have finished the master controller assembly!
    We will be using this connection scheme for all of our devices:






You can try flying with it right now, or read about firmware configuration.




5 Replies to “I2C master controller”

  1. Hi Alex,

    I’ve spent most of today familiarizing myself with your work and researching the bits I don’t know. I’ve gone through all of Peter’s work and whatever documentation of yours I can find, but I still have a few questions. First, I understand there’s a box which contains the main leonardo board, but where are the pro mini boards located for each peripheral? it looks like there’s a pro board fitted inside the collective head, so is the collective mini board located in the base of the gimbal? Lastly, how are the ADS1115 i2c busses connected? I’ve used an arduino for my printer before, but most of this is going to take some work to understand on my part.

    Thank you!

  2. Every peripheral is a separate device, it has its own Arduino pro mini (except for cyclic gimbal and pedals which have ADS1115 boards inside (they are connected directly to the master controller via I2C because of how i2c library works) and a 412 head that has 2 pro mini’s in it). Everything is connected together through I2C, with ethernet cables. First 4 wires of the cable are used, white-orange for 5v, orange for GND, white-green for SCL, blue for SDA.

    ADS1115 are used for a higher resolution of axes in most critical parts (you can only have 4 of them connected simultaneously because of address limitations). Basically, you either put boards into correspondingly shaped slots or just stuff everything in and screw together (collective heads). In “scale” stuff like the B8 stick grip and the Huey collective head, you have to do some cable management for wires to fit in a tight enough space =)

    Devices with axes require some initial mechanical and software calibration after assembling (takes around 5 minutes), collective heads and a cyclic grip are pretty much “flash and fly”.


  3. I’m just preparing to do my build. What are the dimensions of the RJ45 sockets you have used? I’ve measured the cutouts and it looks like the cutouts support 15mm wide by 12.8mm high sockets but I’m having trouble finding sockets with those dimensions. Most I can find are 15.8mm or so wide which would make the gap to fit them in 2.4mm too narrow. Huge thanks by the way for sharing your project, I can’t wait to retire my X56!

    1. Hi Andy! You’re right, the dimensions are 15×12,8mm. It’s a TJ8-8P8 socket, I bought it locally. There are a few different types, so sadly it’s a bit of a pain (couldn’t find any links on ebay or aliexpress!), but I think you can find something similar in a local electronics store! There are shielded sockets, some of them will fit with the shield removed. Anyway, you can always file the hole or a socket a bit or just glue it to the outer side of the part =) Alternatively, if you want, I can buy some and send to you, along with Lada clutch springs if you need them =) This may take some time, however.


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.