attaching lcd panel to ramps board made in china
In RAMPS 1.4 the capacitors and resistors are now surface mount (SMD) components. This provided more space for more passive components, as well as headers. This does add another set of steps to the assembly process, but we stuck with larger sizes to make it fairly painless.
There are multiple boards all based on the RAMPS 1.3/1.4 design with minor variations in form factors and components, for example Prusa, Ultimaker and others. Other incarnations combined the components of the Arduino ATmega and the RAMPS into a single board, some using ATMega128. They may have different power/rating capabilities but the basic structure and electrical behavior is very similar and we describe them as RAMPS compatible, in fact most boards in firmwares like Marlin are treated as derivate of RAMPS.
This section presents the basic steps to wire an assemble RAMPS 1.4 board assuming the more common scenarios. Check the #Assembly section to learn how to assemble your own Ramps 1.4 board.
Notice that the bed thermistor connects to a header block of three pairs. From left to right they are labeled T0 for the first extruder, T1 for the heatbed, and T2 for a second extruder.
The extruder has a heating element (heater cartridge) in the heating block that connects to the screw terminal labeled D10. The heating element must be 12V and consume an average of 2.5 amps. The temperature of the extruder is monitored by a thermistor also installed in the heat block. The thermistor is connected in the terminal labeled T0 (uses pin A15 in Arduino). (The thermistor does not have a polarity.)
The endstops are the switches that tell the firmware when one of its axis (X, Y, Z) has reached either (or both) its minimum or maximum limit. In the board you will find six 3 pin connectors labeled (from left to right) X-MIN, X-MAX, Y-MIN, Y-MAX, Z-MIN, and Z-MAX. While you may connect both endstops for an axis the common setup is to use only one per axis. (Note firmwares implements software endstops for the opposite side using the dimensions on the build area of the printer.)
To simplify the setup of the firmware it is easier to only use the minimum pins of each axis. The minimum is also know as the home location of your axis, on our traditional cartesian FDM printers we said that the end stop for the Z axis is in the bottom end of the frame, for the X axis is to the left of the frame and for the Y axis is somewhere near the back. (Note: all of this can be configured at will but requires more changes in the firmware. Check this excellent page explaining endstops from the Marlin Firmware guys.)
You have endstops with 3-pin connectors. Now days when shopping online is very common to find 3-pins endstops with leds, mainly due to all the Ender 3, CR-10 and similar clones that use them.
Is also common to find endstops with 2-pin connector or using only 2-wires (even if the connector has 3-pins). This is also the case when you wire your endstops directly, in which case only the COMMON and NC pins of the switch are used.
From top-to bottom you will notice that for each axis the first pin is the Signal S, the second is GND, and lastly the 5V pin. In a two pin connection the + pin is NOT used.
When wiring a 2-pin endstop the NC pin is connected to GND (-) on the board. The COMMON pin (marked as C or S) is connected to the S on the board. Usually the endstop will have their pins identified.
When wiring a 3-pin endstop is best not to make assumptions about the pinout on the endstop, check for markings on the PCB, read the manufacture"s information or use a multimeter to identify the pins.
Once you have figure out the type of endstops all that is left to do is to plug the corresponding connector for each axis using minimum pins in the board.
The board allows up to 5 independent motors using stepper motor drivers which today is mainly drivers using the board design of Pololu like the A4988, the DRV8825 or even TMC2130.
Before installing the driver you need to set up the jumpers corresponding to each stepper to set the steps. These jumpers define the microsteps for that particular driver. For A4988 setting all the jumpers will set the micro stepping to 1/16 of a step. For a DRV8825 setting the last jumper will enable 1/16 micro stepping.
Some notes on TMC2130: Getting TMC2130 stepper drivers to work on a RAMPS 1.4 board requires modifications to the board. TMC2130 stepper drivers are configure by software using SPI. TMC2130 drivers require the pins from AUX02 and AUX-3 to be available if for example you have an SD Card or and LCD, chances are that you won"t be able to setup the SPI interface for the TMC2130.
A RAMPS 1.4 board using traditional Pololu drivers provide from 1A to 1.2A of current and about 4V to a NEMA motor. The force a motor can produce is mainly measure by its holding torque (For example 3.2 kg-cm, You will also find this in Newtons or oz-in)
The force it can produce. The main metrics for this is the holding torque (For example 3.2 kg-cm, You will also find this in Newtons or oz-in). For most designs an average of 44 N·cm is enough force to handle your everyday prints.
The steps of a motor is how accurately it can move. This is given in degrees per step or steps per revolution. For example in 3D printing an average NEMA17 motor used is 1.8 or 0.9 degrees with 200/400 steps per revolution. If a motor makes a 1.8 degree rotation in one step, then to complete one revolution (that is 360 degrees in a circle) it will take 200 steps. Most common NEMA 17 motors are 1.8 degree steppers.
A motor will have 4 cables either directly attached or as a ribbon that has a (JST-XH) six pin connector in the motor. The other end of the connector will be a 4 pin header that attaches to the RAMPS board. (From the six pins of a motor only four are used on the connector.)
Since the motor has two coils (2 phases motors), each coil has two pairs of cables. Like shown on the above picture the trick is to identify what pin in the motor corresponds to a pair. The illustration shows two common combinations, we call them straight and cross. The straight has the pins for the coil in order and the cross switches the two in the middle.
The other thing with the two cables in a pair is their polarity. The polarity tells the direction of the spin. There is not such thing as wrong direction instead the direction is dictated by how is the motor used and the control board. For this reason in many motor diagrams you will NOT see polarity specified as is left for the implementation of the design to select the default direction.
Using a multimeter in continuity (resistance/diode test mode) you can test the combinations of pins until you find the pair that belongs to one coil. In continuity test you will have a low resistance value, some multimeters beep or read "short/closed" to indicate when you found a pair. Use the first picture as reference to check if you have a straight or crossed pinout.
Hint If you are swapping a motor in a printer or equipment already wired, then check both ends to see which are the pairs, use the picture "Common Coil Combinations" for reference. If your new motor came with a cable then compare the motor end of the new and old connector to quickly tell if its cross or straight. Usually black/green are in one side and blue/red in the other (don"t mind the order of the pairs), if you see one cable from one of these two pairs swap in the middle two pins, chances is that you have a crossed connector for your motor.
Connect the 12V power cables to the positive end (+) on the board. In your Power Supply (PSU) these cables may be yellow or red and are usually labeled V+ or 12V. The black cable is negative/ground and is usually labeled V- or COM. Always check the label on the power supply for actual cable details or see the manufacturer"s manual.
The board has two pairs of connectors for power, one labeled 11A and the other 5A, both of these pairs are 12V connections. The 11 amps pair is used to power the heated bed. The 5 amps source is used to power the board, the rest of the printer"s components and the Arduino board.
Your power supply should be able to deliver 16 amps, is ok if it delivers more. The generic S360-12 power supply is commonly used in 3D printers and provide about 30A/360W. Other variants are the S-480 and S-600 for 480W and 600W respectively.
The heater block on the extruder shares the 5A source, make sure that the amperage/current drawn by additional extruders can be supported by the board.
The RAMPS 1.4 has a 1N4004 diode labeled D1 which allows 12V to feed and power the Arduino Mega 2560 board. This diode is installed in most pre-assemble boards, thus the Arduino board is powered by the Ramps by default.
When the RAMPS is not powered or if the diode is not installed or cut/removed, the Arduino gets its power from USB or a power supply connected to its 2.1mm (center positive) power jack.
The Arduino provides a Vin connection to connect an external power source that can be from 7V to 12V, remember the diode D1 can not be connected if you plan to power the Arduino using its Vin.
The PS_ON pin is intended to switch your power supply on and off. Many firmwares support pulling this pin low with M80 command to turn the power supply on, and M81 to turn it off. This behavior is desired for ATX power supplies and can be modified in firmware to support 5V high power supplies like those borrowed from an Xbox.
If you want to use PS_ON to turn on your power supply then don"t use diode D1, you need your Arduino to be powered from 5Vsb otherwise when no USB is connected the PS_ON pin floats (and your power supply pulses on and off).
Or you can hack up a 12V laptop power supply, or other 12 V "wall wart" power supply. Make sure that the power supply can output 5A or greater. Additional 11A may be needed for heated bed support.
The 5V pin in that connector on RAMPS only supplies the 5V to the auxiliary servo connectors. It is designed so that you can jumper it to the VCC pin and use the Arduino"s power supply to supply 5V for extra servos if you are only powered from USB or 5V. Since there is not a lot of extra power from the Arduino"s power supply you can connect it directly to your 5V power supply if you have one. You can also leave this pin not connected if you have no plan to add extra servos.
First, the 1N4004 diode (Diode D1) connects the RAMPS input voltage to the Arduino Mega which has a recommended maximum input voltage of 12 volts. If your board does not have this diode soldered in (or if you cut it), you will need to power the Mega through the USB connector or through a separate 5v line, but this allows a higher RAMPS voltage.
Second, most boards use 25v or 35v aluminum electrolytic capacitors (C2, C3, C4, C6, C7, C9, and C10). To be safe, you should only go to half of your rated maximum voltage -- thus if your board has 35v capacitors (code VZA) then you should use a maximum input of 17.5v. The absolute maximum voltage is determined by the Pololu servo drivers, which themselves are limited to 35V.
DON"T secure Arduino/RAMPS with conductive screws through both mounting holes. The screw may cut into the positive trace creating a HIGH current short.
On R1+ board the extruder heater is connected to the plug labeled D9. This connector corresponds to the original D10 of RAMPS board and still responds to Arduino"s pin 10.
As of 2012 Marlin has built-in support for RAMPS 1.3 and Ramps 1.4 boards. Marlin"s Firmware up to version 1.1.9 and even version 2 compile with ease using new version of the Arduinos IDE. Compiling a firmware older than 1.1.x require changes to the code or to use an older IDE version.
The SRAMP Firmware is a fork of Marlin v1.1.9 exclusively tailored Mendel/Cartesian printers using 8Bit Microcontrollers. The firmware sports a new GCODE parser and aims to make it easier hobby builders to add features (LCD, SD, etc).
Working preconfigured Sprinter firmware can be downloaded here: File:UltiMachineRAMPS1-4Sprinter.zip. Mechanical is in the folder ending with ME, optical endstop firmware is in the folder ending in OE.
mechanical endstops (now the default ultimachine.com option) require #define OPTO_PULLUPS_INTERNAL 1 to be added to configuration.h if not there by default.
Note * You can use Female Headers which are not the exact size, but they are hard to break/cut so in this case buy some extra! (one wasted header per cut)
A BOM for sourcing the RAMPS components from Mouser is also available in this google spreadsheet (This list is incomplete and has missing or incorrect quantities.)
The surface mount can be done a few ways. Since all the SMT components on this board are large 2 pad parts you can do pin by pin soldering pretty easy with normal soldering equipment. Start by putting a small amount of solder on one pad. If you have flux, coat the soldered pad. Use the tweezers to hold the component down in position and heat the solder to tack the component into place (make sure the entire solder blob flows so you don"t get a cold solder). Then solder the other pad. Also popular is using solder paste for pad by pad soldering, Oven Reflow (need link), and HotplateReflowTechnique
These must be placed in the proper orientation. The board has the foot print of the components printed on it. The rounded corners on the base of the capacitor must line up with the white print on the PCB.
These must be placed in the proper orientation. The board has the foot print of the components printed on it. The rounded corners on the base of the capacitor must line up with the white print on the PCB.
Solder 1 1x6, 6 1x4, and 7 2x3 pin headers on top of the board. The long post should be standing up to take a connector. Solder one leg on each one to tack them into place. Then re-heat the joint and push on the component until it is perfectly situated. Then you"ll want to solder the rest of the leads. You will get burnt if you touch the other side of the pin you are soldering.
Place the female headers for the stepper drivers on top of the board. You can use the 1x8 and 1x6 pin headers to jig them straight. Turn the board over and solder these pins.
This section assumes you are using Pololu, but there are other options. Insert two 1x8 pin headers into the board. If you bought a kit with one 16 pin header, simply cut it so that you have two 1x8. Make sure that the side with the labels has the long ends of the posts, and the side you want to solder is the side with the heat sink. Doing this backwards will cause you not to see the labels and will most likely not fit. Remember to apply a heat-sink to the largest chip on the back.
D1 should only be installed if the 5A rail is powered by 12V. It can be omitted and the Arduino will be powered from USB. You will want D1 installed if you add components to print without a PC. To reiterate, D1 MUST be omitted if you are powering the 5A rail by more than 12V, or the power is not absolutely clean, otherwise you may damage your ramps.
This is the smaller yellow fuse. This can be placed in any orientation. When soldering the fuses it is best to use a piece of 3mm filament or something similar to keep the ceramic coating on the pins from blocking proper solder along the through hole.
Since the fuses are the tallest parts, it is simpler and more convenient to solder them last. From this point on, solder the rest of the RAMPS in order of bottom pins, reset switch, terminals, mosfets and then fuses.
Place these on the bottom of the board with the long post out to plug into the Arduino MEGA. You can plug them into the MEGA to hold them in place while you solder. Do not overheat the pins while in Arduino or you may damage its connectors.
This must be oriented where the wire holes are turned towards the edge of the board. Solder a pin on each end and make sure the component is flat on the board and solder the middle pins.
Connect Motors (Do not disconnect or connect motors while powered; if the connection is loose, this will cause the motors to misbehave and possibly kill your stepper driver.)
As there are (by 2019) many different producers of the RAMPS 1.4 board, some who have made their own changes to the design files, thus some boards have some close to critical issues. See examples below.
A "thermals" design flaw has been noted in the RAMPS 1.4 Eagle CAD files. This has been confirmed by visual inspection of production boards, which consistently shows only between two and three (almost never four) thermal-isolating traces per side of the PCB, to power-carrying pins, of under a 0.5 amp carrying-capacity per trace, assuming a 1oz copper thickness.
This image is also in error (it isn"t: it"s a photograph of an existing production RAMPS 1.4 board), the left two unpopulated pins on the image are for the always on fan and use very little current. So are not an issue (actually it is)
The problem may be fixed in the Eagle CAD files - for a future version of RAMPS only - by disabling "thermals" on the GND, +12V and the +12V2 Copper pour. However on existing (mass-produced) RAMPS 1.4 boards, estimating the total widths (including all thermals from all tracks on both sides of the PCB) checking with an online copper width calculator and adding up the total current, assuming a 1oz copper PCB the maximum safe current on the fuses (giving only a 10C rise in temperature of the thermal-isolation tracks) is only around 6 (six) amps and in other areas the maximum safe current (assuming the same 10C rise in temperature) is around 8 (eight) amps.
This problem may potentially be fixed on existing RAMPS 1.4 boards by augmenting the power traces with suitably-thick insulated wires with sufficient current-carrying capacity, soldering them to all the relevant pins.
Minimum total parallel trace with measured on the bed power rail was about 80mil, which would equate to a 4 amp safe limit using the above considerations. Board is marked with "www.bigtee-tech.com" where the "UltiMachine" and "reprap.org/wiki/RAMPS_1.4" markings are in the original 1.4 design.
Note the decreased isolation of the copper pours. Slikscren has the "reprap.org/wiki/RAMPS_1.4" marking but not the "UltiMachine" found on the original design.
Using a "JY-MCU" (vendor Shenzhen Jiayuan Electronic Co.,Ltd.) Bluetooth modules (HC03, HC05, HC06 chipsets) to setup a wireless connection to the Arduino.
Before the module can be used, the default setting has to be changed. You can connect to and modify the BT JY-MCU module settings via the Arduino mega 2560 using the pin 10 and pin 9 as Rx and Tx terminals, respectively. Make sure you connect Rx on the BT module to the Tx on the arduino and vice versa, in other words Rx goes to Tx and vice versa. Upload the simple code to arduino located on an instructable entitled "Success-Using-the-JY-MCU-linvor-Bluetooth-Module". Use the serial monitor within arduino IDE or another terminal program, with baudrate set to 9600 and "No Line Ending" selected, enter the following commands:
Alternatively, you can connect to the module from PC via USB<->RS232 (RxD/TxD) interface with default settings (9600, N, 8, 1). The module shouldn"t be paired at that moment. Use the same AT commands as above.
On RAMPS/Arduino Mega the UART level are 5V but the BT module supports only 3.3V input. Therefore the TxD level has to be divided by resistor. This passive solution is fast enough for 115kBaud. Overall only 4 wires have to be soldered.
I want to upgrade my Anet A8"s motherboard (the stock one is broken anyway, see: Anet A8 reading 739°C from the extruder thermistor!) to the RAMPS 1.4, without having to get a new LCD/microSD module. I am thinking of getting both a smart adapter and sdramps, then maybe plug the sdramps and the stock Anet A8 LCD into the smart adapter, but I am not sure whether the sdramps module has a different pinout than the RAMPS smart controller, which is what the smart adapter is made for.
This website is using a security service to protect itself from online attacks. The action you just performed triggered the security solution. There are several actions that could trigger this block including submitting a certain word or phrase, a SQL command or malformed data.
In order to control the fan on D9, which is used for printerbed, you will need to use the M106 and M107 codes. If you have an LCD display this particular fan is automatically added to it. We retain this function.
Define for how many seconds the fan should run after the last motor activity and set the speed your fan should go.//This is for controlling a fan to cool down the stepper drivers
You might also want to specify the temperature where the fan starts and stops. I use 50c and you can define how fast your fan should go. I have set mine to 200. Don"t dial this too far down for obvious reasons.
PO Box, APO/FPO, Afghanistan, Alaska/Hawaii, Algeria, American Samoa, Angola, Argentina, Armenia, Azerbaijan Republic, Bahrain, Bangladesh, Benin, Bermuda, Bhutan, Bolivia, Botswana, Brunei Darussalam, Burkina Faso, Burundi, Cambodia, Cameroon, Cape Verde Islands, Central African Republic, Central America and Caribbean, Chad, Chile, China, Colombia, Comoros, Congo, Democratic Republic of the, Congo, Republic of the, Cook Islands, Côte d"Ivoire (Ivory Coast), Djibouti, Ecuador, Equatorial Guinea, Eritrea, Ethiopia, Falkland Islands (Islas Malvinas), Fiji, French Guiana, French Polynesia, Gabon Republic, Gambia, Georgia, Ghana, Guam, Guernsey, Guinea, Guinea-Bissau, Guyana, Hong Kong, Indonesia, Iraq, Jersey, Jordan, Kazakhstan, Kenya, Kiribati, Kuwait, Kyrgyzstan, Laos, Lebanon, Lesotho, Liberia, Libya, Macau, Madagascar, Malawi, Maldives, Mali, Marshall Islands, Mauritania, Mauritius, Mayotte, Micronesia, Mongolia, Morocco, Mozambique, Namibia, Nauru, Nepal, New Caledonia, Niger, Niue, Oman, Pakistan, Palau, Papua New Guinea, Peru, Qatar, Reunion, Russian Federation, Rwanda, Saint Helena, Saint Pierre and Miquelon, Saudi Arabia, Senegal, Seychelles, Sierra Leone, Solomon Islands, Somalia, Sri Lanka, Suriname, Swaziland, Taiwan, Tajikistan, Tanzania, Togo, Tonga, Tunisia, Turkmenistan, Tuvalu, US Protectorates, Uganda, Ukraine, United Arab Emirates, Uzbekistan, Vanuatu, Venezuela, Vietnam, Wallis and Futuna, Western Sahara, Western Samoa, Yemen, Zambia, Zimbabwe
APO/FPO, Afghanistan, Africa, American Samoa, Armenia, Azerbaijan Republic, Bahrain, Bangladesh, Bermuda, Bhutan, Brunei Darussalam, Cambodia, Central America and Caribbean, China, Cook Islands, Fiji, French Polynesia, Georgia, Greenland, Guam, Hong Kong, India, Indonesia, Iraq, Jordan, Kazakhstan, Kiribati, Kuwait, Kyrgyzstan, Laos, Lebanon, Macau, Maldives, Marshall Islands, Micronesia, Mongolia, Nauru, Nepal, New Caledonia, Niue, Oman, Palau, Papua New Guinea, Philippines, Qatar, Russian Federation, Saint Pierre and Miquelon, Slovenia, Solomon Islands, South America, Sri Lanka, Taiwan, Tajikistan, Tonga, Turkmenistan, Tuvalu, US Protectorates, Ukraine, United Arab Emirates, Uzbekistan, Vanuatu, Vietnam, Wallis and Futuna, Western Samoa, Yemen
It is recommended to look at the pin layout of the stepper driver and the RAMPS. However all A4988 and DRV8825 stepper driver are built the same. So you can use the potentiometer as a reference point, but always double check the pin layout. Be carefull! If you mount the stepper drivers wrong, you will destroy them and the RAMPS board probably as well.
The connector of the stepper motor is just above the stepper drivers for each axis/extruder. They are all labeled on the RAMPS. It does not really matter which way you connect the stepper motors. You won’t destroy anything, only the direction will be switched. Later you can fix the direction by turning the connector around or changing it in the firmware. So when you have loaded your firmware move your axis for some mm in one direction and check that it is moving in the right direction. Also use the same colour order like in the picture.
Be carefull when connecting the limit switches. DO NOT connect the + and – pins with your limit switch. You are causing a short and probably destroying your RAMPS/Arduino. See the picture how to connect the limit switches. From left to right there are the pins for the min-X, max-X, min-Y, max-Y, min-Z, max-Z.
Connect the heatbed to D8. Keep in mind the connectors are at their limit providing that much current to the heatbed. There were many reports on burning connectors, both of the power input of the RAMPS and the connection of the heatbed. So I highly recommend you buying an external mosfet for the heatbed and use (end) terminals for your connections.
The last thing you have to do, is to wire the display. For that you will need a Smart adapter. The smart adapter connects to the pins at the end of the RAMPS (opposite side of the power input). This adapter will fit your old screen (2004) or the bigger full graphic LCD (12864). If the screen module has a SD Card reader, make sure you connect the two cables right (EXP1 to EXP1, EXP2 to EXP2). If they are connected wrong you will get a beeping noise (if you have a beeper on the module).
Check all connections, the orientation of the stepper drivers and so on. Then power up the RAMPS board and look for magic smoke. You then have to flash a firmware on your arduino.
also in order to power servo, I have to put a jumper to 5a/vcc slots (they moved it to a different place on different ramps versions (also took 2 days to find)
probably still missing a jumper under a driver. all three jumpers should be on for 1/16th microstepping. if your board somehow supports 1/32… then you have to adjust.
im been using Arduino Mega Board with RAMPS 1.4 with cheap or clone Futaba S3003 servo motor since September 2017… its work flawlessly till Jun 2018 as the Futaba stop working randomly after 1 hour or less.. id bought so many Futaba & even upgrade the makelangelo firmware still the new Futaba stop working after 3 hours.. maybe there is some sort of electrical short from Futaba to RAMPS board since there is some glitch or when that servo motor connected to RAMPS the whole system when hang!.. LCD cant display properly etc… it when good after id disconnected that servo motor..
Hi richyrich140db2000, i do believe that the latest firmware didnt tweak very well for smartcontroller LCD as per firmware before Jun 2018 that really work well with SmartController that have built in SD Card.
apparently i do get prompt with command that need to enter from smartcontroller.. id try to disable to define has LCD & SD from firmware but still the command appear.
only 1 motor is responding on X access no other access has power output and the motor is putting out a annoying high frequency humm. Yes the stepper driver power has been adjusted.
The Lcd display I’m using is the “reprap smart lcd controller with built is SD card reader”. It gets power but dose not display anything and the built in speaker puts out a high frequency dog whistle sound. It’s annoying as hell.
It’s not enough information to determine the cause of the problem. If it was just one motor I’d say the wiring is wrong on that motor OR the driver is dead.
I did a Makelangelo Bot by Ramps 1.5 + Arduino Mega 2560 yesterday. I uploaded Makelangelo firmware 7.20.1 for my bot successfully. In Makelangelo software, I can control stepper motor move and servo up/down, but when I upload image file and press Start/Start at line, the bot isn’t work. Can you help me? Sorry for my English. I’m from Vietnam.
and upload again. The machine waits for you to press a button on the LCD to confirm the pen is ready to draw before starting. With no LCD panel, there is no button and the wait will be forever.
When you connect the software to your machine it should assign a unique ID number to that device and register the machine with my server. This is a once-only thing so I can count how many Makelangelos are in the world: https://www.marginallyclever.com/makelangelos_over_time.php
I uncommented #define HAS_LCD and upload again. But the bot still not work when I press START/START AT LINE. However, I still controll servo and stepper motor move. Help tell me what is wrong?
I get some problems. First, I use Makelangelo V3, so when I press Go Home, the bot move any location and stop. Second, what is ratio between loads which you hang on timing belt and bot? because when the bot move, sometimes it’s sliding step (between pulley 20 teeth on stepper motor and timing belt GT2).
@vontemp I made my own adapter board, converting from the RAMPS adapter to a couple of X3 wire looms to the various EXP ports of the X3. It is not pretty but works well enough. I did not bother with the SD card reader.
Honestly though, if you have an X3 I highly recommend using the Viki2 or the Mini-Viki instead, the form factor is much nicer (and so is the display).