M2 Getting Started

This page is a guide to getting started on your M2 using free and open-source software.



Download and unzip the driver mapping INF file from the RepRap site here.

The motherboard that powers the M2 is an Arduino-compatible board called RAMBo. This board acts, and can be communicated with, just like an Arduino.

Windows does not automatically understand when a USB device needs to be mapped to a USB-to-Serial interface. Windows contains native support for USB-to-Serial in the usbser.sys driver. We just need to get Windows to map the M2 to that driver.

  1. Power on your M2 by plugging the 6-position black power connector to the rear of the RAMBo board, and plugging in the power supply.
  2. Plug the USB cable USB port on the printer, then into any available USB port on your Windows computer.
  3. Windows will try to find and install a driver, then decide that it cannot install it.
  4. Open Windows Device Manager by clicking Start, then typing "Device Manager" (press enter) or by right-clicking My Computer, and clicking Properties; Device Manager is in the list on the left side. If you are unable to find Device Manager in your version of Windows consult the windows user manual or the Microsoft guide
  5. In Device Manager, you will be shown a list of all devices connected to your computer. The section we are interested in is usually "Other Devices." Under that heading you should have an "Unrecognized Device." If you do not, check under "Universal Serial Bus controllers."
  6. To confirm that your Unrecognized Device is your M2, disconnect the USB cable and watch Device Manager. If the Unrecognized Device disappears, reconnect the USB cable and proceed.
  7. Right click the Unrecognized Device and click "Update Driver Software." Then click "Browse my Computer for driver software," browse to the folder on your computer where you extracted the INF file from the RepRap site (for RAMBo), or the Arduino IDE under e.g. arduino-1.0.1\drivers, and click Next. Windows should then select the correct driver. For the older Arduino device, if Windows asks you which driver to install, select "Arduino Mega 2560 R3."
  8. In Device Manager, your Unrecognized Device should have now changed into an "Arduino Mega 2560 R3" or "RAMBo 3D Printer Electronics Board", with a COM port after it, under the "Ports" heading. Make note of which COM port it is installed as (COM3 is common), we will need that information shortly.


MacOS contains the right kernel support for converting the RAMBo USB interface to a serial format. When you power up the M2 and first plug in the M2 USB cable, your Mac may bring up a window asking you to set up the phone number for the serial device; this window can be closed, except to note the proper device identifier (e.g. /dev/cu.usbmodem621 or similar). This device ID will be used in Macpronterface below. You may also need to add your username to the Dialout group to access the printer.


Most distributions of Linux only require the user to be in the "dialout" group to access the printer. The printer USB serial interface will likely be /dev/ttyACM0, /dev/ttyUSB0 or something similar and may change when rebooting or adding other serial adapters.

Machine Control Software (Printrun/Pronterface)

For all operating systems (Windows, Mac and Linux), you will need a program to communicate with the printer. This guide uses the free and open source option, Printrun. There are precompiled versions available at http://koti.kapsi.fi/~kliment/printrun/.

The default temperature settings in Printrun/Pronterface are incorrect for the M2. Please use the temperatures included with your printer.

Now that your computer can communicate with M2, download and extract Printrun (Windows) or Macpronterface (Mac) Pronterface (Linux) if you have not done so already. Once extracted, run pronterface.exe inside \dist. You will see a window like this:

Name Function Notes
COM Port (or Port) Selects the COM port to connect to Clicking Port will refresh the dropdown list of active COM ports. For Mac, use the device ID noted previously, e.g. /dev/cu.usbmodemXXX
COM Speed Selects COM port communication speed Default of 115200 works with M2
Connect Connects to printer, once port and speed are selected
Monitor Printer Enables constant temperature reporting Click/check to enable, recommend enabling
Print controls Controls print commands Covered below
Manual motor controls Manual control of X, Y and Z axes Covered below
Heater Controls Manual control of nozzle and bed temperature Select a temperature from the dropdown menu, or type in a custom temperature, and click Set to set the temperature.
Extruder controls Extrude and retract filament Will not work if nozzle temperature is below 170*C; top number is distance to extrude or retract, bottom number is speed to move at. We recommend setting them at 50 mm and 300 mm/min.
Communication log Log of all messages to and from the printer Any errors, issues or warnings will appear here; if something is amiss, check the log first.
G-code entry Manual entry of G-code to send to the printer Covered below
Custom button creator Create custom UI buttons Covered below
Unlabeled buttons Custom buttons, covered below

Confirm that all subsystems of your printer are working correctly. Once you have selected your previously noted COM port or device ID, and set the speed to 115200, click Connect. Several lines of messages should scroll in the Communication log panel of Pronterface (Printrun), and some fans may startup. This indicates you are connected.

Motor check


Now that you are connected, you can begin testing everything - start first with the X, Y and Z motors, by clicking the -X 10 button. The X axis, including the extruder and hotend, should move 10 mm to the left, when looking at the front of the machine. Clicking -Y 10 should move the build platform 10 mm towards the rear of the machine. -Z 10 should move the platform up, towards the nozzle, 10 mm. (If these seem counter-intuitive, remember that all measurements are made in reference to the nozzle - so -Z moves the platform up, but from the nozzle's point of view, the nozzle is moving Down towards the bed.) The image on the right has the axis directions labeled.

Now that the X, Y and Z axes are moving correctly, you can check the extruder motor ("E" axis). In the G-code entry box in the bottom right corner, send the command "M302". This tells the printer to allow movement of the extruder motor, when the hotend is not at printing temperature. Now click on the Extrude button, in the Extruder Controls section. Extrude should cause the drive gear inside the filament drive to move clockwise. Retract should move the drive gear counter-clockwise.

Endstop check

Once you have confirmed that all axes respond correctly, it is time to check the endstops. First activate each endstop by hand, by pressing on the silver lever until it clicks. If any of the endstops cause the printer to reset, you have the endstop connector flipped where it connects to RAMBo. To flip the endstop connector, you do not need to power down, but it is still a good idea. If all three endstops seem to work fine, you can then confirm that by homing the axes. Start by manually moving the extruder all the way to the right of the X axis. Then, with your finger on, but not pressing, the X endstop lever, press Home X in Pronterface. Once the extruder has started moving, press and hold the X endstop lever. The extruder should stop moving. If it does not stop, press the white Reset button on the front of RAMBo (you may need a pen or similar if your fingers are not small enough to access it) or quickly remove the USB cable from the front of RAMBo. Now confirm that you have the correct endstop connector plugged into the correct socket - X to X-MIN, Y to Y-MIN and Z to Z-MIN. If everything appears correct, but still does not work, contact support.

Once the X endstop is responding correctly, check the Y and Z endstops in a similar manner - start with the bed all the way forward, and Home Y. Press and hold the Y endstop lever. Then, with the Z stage all the way down, press Home Z, and press and hold the Z endstop lever. Once the Z endstop responds correctly, you'll need to check the levelness of the bed, and then activation point of the endstop.

Bed leveling

To level the bed, first raise the Z stage up until the bed is ~1mm from the nozzle, and lock it in place by commanding Z+.1 in Pronterface. Then, by hand, move the bed forward and back while observing the distance between the nozzle and bed. Return the bed to the middle of its travel, and move the extruder left and right, again observing the distance between nozzle and bed. If either distance has a variance of a mm or more, start the leveling process by fully tightening all three bed leveling screws, that extend through the steel Spider Mounting Plate into the anodized aluminum Spider. Move the nozzle and bed so that the nozzle is in the center of the bed, and bring the entire Y stage up until the nozzle is ~.5mm away from the bed. Again check the distance between nozzle and bed as the bed moves forward and back, and the extruder moves left and right. Find the highest side, and then the highest corner of the bed. Bring the Y stage up so that it is ~.2mm from the highest corner.

The easiest way to understand how the M2's bed leveling system works, is to think of two see-saws. One see-saw's height is controlled on each side by the front and back bed leveling screws, and has the third bed leveling screw as its "fulcrum" (the line or point that the see-saw rotates around). The second see-saw's height is controlled by the unpaired third bed leveling screw, and has the two (front and back) bed leveling screws as its fulcrum. Changing any one screw changes the distance between the nozzle and bed across the whole bed. The easiest way to isolate and control this change is to first level the front to back travel, and then level the left to right travel.

If the highest corner is on the right half of the bed, you first will need to loosen the front and back screws until they are both above the third screw. Then find the highest corner again, and move the nozzle to the opposite Y side (if the highest corner is the front left corner, move the nozzle to the rear left corner, or vice versa), and bring that corner to the same distance from the nozzle as the first corner. Go back and forth between those two corners until the nozzle is the same distance from the bed during the whole movement. Once it is, move the nozzle to the center of the bed, and repeat the process using the single bed leveling screw, until the nozzle is the same distance from the bed during the complete left-right movement. Check that the bed is level across the entire travel, front-back on the left, center and right, and that all corners are level as well.

If you wish to be truly precise, you can redo the bed leveling process from your current, more level starting point. Use a folded over piece of paper as a gauge. Find the highest corner, and level all other corners to that one, confirming with your gauge. This may be overkill, however - one can visually level the bed to within .2mm across the whole surface, with a bit of practice.

Z endstop activation point/home distance

To set the Z endstop activation distance, first raise the bed, by hand, to the point where the Z endstop clicks (the red LED will also turn on). If the nozzle is more than ~.5mm away from the bed, you will need to use a 7mm wrench to adjust the trigger bolt. If the nozzle is less than .5mm away from the bed, you should be able to adjust the endstop position by hand. First lock the bed in position by pressing Z-.1 (the .1 is VERY important - if you command it to move -10mm, the motor WILL try to move the solid glass build surface through the equally solid brass nozzle. This is a bad thing, though if it happens accidentally, should not be damaging.) Then use the Z +.1 and -.1 commands to move the bed so that it is .1-.25mm away from the nozzle (a folded over piece of paper is a very good way to gauge this distance). Once the nozzle is in the correct location, rotate the Z endstop holder so that the lever just barely activates at the current position.

Once you have it set, check by Homing Z in Pronterface. If the nozzle is .1-.25mm from the bed in the center, you can continue. If it is not, repeat the above process.

Fan Check

If all endstops are working correctly, you can now check the final few things. First you'll want to confirm that your Bed fan is connected correctly. To control the Bed fan, you will use the g-code command "M106 S*", where * is a number between 0 and 255. The approximate power applied to the fan is (*/255)%. Most 50mm fans will not start below S240, sometimes higher, so to begin, send the command "M106 S255". The 50mm Bed fan should start spinning. If it does not, check first that the two pin connector from the fan to the harness is plugged in correctly - black to black, red to red. Also check that it is connected to the plug for the bed fan, and not the filament drive fan - this can be tested by sending the command "M106 S0"; if the 40mm filament drive fan turns off, you have the connectors swapped.

Heater Check

Now check that both of your heaters work, starting with the bed. First enable "Monitor Printer" by checking the box at the top of the Pronterface window. In the Heater Controls section, open the dropdown menu for the Bed, select "70ºC (PLA)" and click Set. The Bed or "B:" temperature should start slowly rising. If the nozzle or "T:" temperature starts to rise, you have the thermistor connectors swapped at RAMBo - the Nozzle Thermistor needs to be connected to T0, the Bed Thermistor to T2. Turn the Bed "Off", disconnect, remove power and USB, and swap the thermistor cables.

Now check the Nozzle heater, by setting the Heater to "220ºC (PLA)" in the dropdown menu. The temperature should start rising quickly within 5 seconds. The temperature should rise to 220ºC in under two minutes, and, after a small overshoot, should stabilize and stay within 5 degrees of 220.

Test extrude


If your M2 has a V3b hot-end, use 215C for the PLA included with your machine. If you have a V3 hot-end you should use 195C for PLA. The V4 hotend can use v3b settings, but hotter may be needed at higher speeds.

If you have already installed the filament spool holder, filament guide arm, filament guide tube and the spool of filament itself, you can now perform your first test extrude. Feed the filament up through the hole in the filament guide arm, through the filament guide tube, and over to the filament drive. If the end of your filament has any bends or kinks in it, cut the first several inches off, preferably at a sharp angle. Feed the filament into the hole in the top of the filament drive, return to Pronterface, and set your nozzle temperature if you have not already. For the V3 style hotend, 195ºC is good for PLA; V3b style uses 215ºC for PLA. Then click Extrude. The extruder drive gear should move and grab the filament. Press Extrude two or three more times; if the filament continues to feed smoothly, click Extrude 5-10 times; continue until filament starts to come out of the nozzle smoothly.

First Print

Now that all subsystems have checked out, you can begin your first print. Heat the Bed back up to 70ºC and set the nozzle to 220ºC (215ºC for PLA on the V3b, or 196ºC for the v3a). Once both are up to temp, click SD, then SD Print. Select a file from the window that pops up (/m2demos/bracelet.g is a good choice, as it is a quick print), and click Print. The printer will then start printing the file, first by Homing the X and Y axes, then the Z axis. It will then move the nozzle off the bed to the right, extrude some filament, and scrape it off by moving back to the front left corner. It will home all three axes again, then move to the center of the bed and begin printing.

Congratulations - this is your first print X)