Assembling The Vision 3D Printer (Steps 22 – 26)

Step 22 (endstops):

parts needed:

  • 3 endstop brackets (printed)
  • 3 wired endstops
  • 3 black bolts (16mm)
  • 3 small black nuts
  • 3 zip ties


Attach the endstops to the brackets with the zip ties. Note the orientation of each bracket in the photos:

IMG_0100 IMG_0104

Mount the end stops so that they limit the print nozzle from moving past the 0,0,0 position on the board. Or in other words:

  • X – Nozzle is furthest left
  • Y – Nozzle is closest to the front (bed all the way back)
  • Z – Nozzle can get very close but not touch the print bed (Don’t forget the glass/mirror)

Mounted X endstop:


Mounted Y endstop:


Mounted Z endstop:


Step 23 (Controller firmware):

Items needed:

NOTE: This step is Mac OSX specific, but the Arduino site has great instructions for uploading firmware or all supported operating systems.

Plugin the board to the computer using the USB cable. Confirm the computer registers the board By Going to System Preferences->Networking:

Screen Shot 2013-02-23 at 4.08.02 PM

Download the Arduino software and move it into Applications. Open the software and Select Tools->Board->Arduino 2560. Then select the correct serial port. It will be called /dev/tty.usbmodem*

Screen Shot 2013-02-23 at 4.10.11 PM

Open the Marlin.pde Sprinter.pde firmware file in the Arduino app, and click the Configuration.h tab. Look for the following variables and make them look like this:

#define _AXIS_STEP_PER_UNIT {80, 80, 3275,700}

const bool INVERT_X_DIR = true;

const bool INVERT_Y_DIR = false;

const bool INVERT_Z_DIR = true;

const bool INVERT_E_DIR = true;

NOTE: _AXIS_STEP_PER_UNIT will likely need some tweaking based on your exact setup. See Software Setup for calculating the values.

Finally, click the upload button (right arrow). You can unplug the controller once its done.

Step 24 (Connecting the controller):

parts needed:

  • ramps controller
  • 3d printer assembly
  • zip ties
  • 4 small washers


Cut 4 zip ties near the head.


To mount the controller, slide a zip tie through one of the holes on the board and into the printer. Then take a washer and put it around the zip tie, and finally tighten the zip tie with one of the cut off end. Mount the controller so that the USB and power plug faces up:


Attach all the wires to the controller as shown in the RAMPS wiring diagram. NOTE: make sure to match the colors of the wires, not the orientation of the plugs.

Step 25 (Lighting):

parts needed:

  • lighting controller
  • lighting strips
  • Y adapter
  • printer assembly
  • double sided tape
  • Kapton tape
  • 2 Foam strips

Tilt the printer onto its face. Take some pieces of double sided tape and attach a light strip to the bottom edge of the 3d printer. Make sure its centered. Peel the backing off of the light strip, and take 3 pieces of kapton tape and secure the strip to the base at the ends and center:


Take a foam strip, peel off it’s backing and attach it to the lighting strip (sticky side to sticky side). Then repeat this process for the other side.


Step 26 (tidy up the wires):

At this point the printer is basically assembled (minus the cooling fan and shroud). Tidy up all the loose wires with zip ties:


Make sure the extruder wires are loose and can span the entire distance that the X-carriage needs to travel:


Make sure to create a strain-relief for all 3 endstops:


The controller wiring looks like a mess in this photo, but its actually quite organized:



22 thoughts on “Assembling The Vision 3D Printer (Steps 22 – 26)

  1. Ryan, awesome! I have been trying to figure out how to mount the y-stop, and never thought to put it on the other side of the mount. I’ve got everything constructed now. Now I just need to focus on the software side.

    So, did you really need to load the firmware? I’m unclear on whether Matt preloaded it. I am brand new to arduino so I know nothing, but Pronterface is connecting to the board and is I think receiving messages from it. I can’t figure out what the heck is happening after that though. When I power on the printer it seems to be seeking the end stops, but the y-carriage keeps sliding out and stopping at the maximum physical extent (toward the front) rather than heading back and into the y-stop. Also, the z-axis motors are not doing anything.

    Any ideas?

    Your guide was invaluable. I don’t think there is any way I could have done this the way you have, just figuring things out from the photos etc. Thank you very much for that.


  2. Uh oh. In desperation I uploaded the Marlin.pde and now pronterface can’t connect to it anymore. I think perhaps Matt had already loaded some sort of custom firmware?.?

    I’ll google around and let you know what I figure out.

    • Here’s the response via pronterface:
      attempted to write invalid text to console”

      My google searches are coming up weird, not dry. No clear cut answer. Some say baud rate issues, I tried them all. Some say to try the Repetier Firmware which I can’t get to compile on my machine due to some weird ubuntu issue with the gcc-avr lib.

      Crazy stuff.

      • Hey Ryan,

        I got this resolved by uploading Sprinter, a version I modified that inverts all the motors.

        Looking OK now in terms of the 3 axes. The extruder, not so much. I can’t get it to spit out hot ABS (any ABS for that matter). Also my x-axis stepper got super hot. I have to adjust the pot on it and see whats up.

        Last thing, I don’t know where the fan goes, do you?

    • I haven’t had a chance to turn on the printer yet. I was out of town yesterday. Maybe tonight I’ll get some time…

      Also, I saw your comment about Marlin vs Sprinter. I might need to re-flash my controller as well. Still no luck with your extruder?

      • Ah, I remember you said you’d be busy until the weekend.

        Yeah, Sprinter worked like a charm aside from the “polarity” issues where I needed to change the INVERT settings for the steppers. The 3 axes are working perfectly. The extruder is giving me trouble. I bet Matt could help me debug it but he’s been incommunicado for a while.


    • Hi George,
      Thanks for posting your Sprinter settings. They worked great for me and I’ve added them here. My printer is working on it’s first print as I type!

      • Congratulations!

        I made a post last night on the KS comments regarding the electrical taped nuts for the z-axis springs that you might want to check out and confirm. I’m not positive about it myself, but it made sense to me.

        Thanks for all your help.


  3. Hi Ryan,

    In my configuration.h file, I do not have an INVERT_E_DIR, but I have a:

    INVERT_E0_DIR= false
    INVERT_E1_DIR= false
    INVERT_E2_DIR= false

    Should I set them all to true?

    • Hi Matt,

      E0, E1, and E2 with be your first, second, and third extruder respectively. If you only have 1 extruder, then you only need to set INVERT_E0_DIR, but it is also safe to set all three.


      • Yes, all 3. Marlin is the firmware that will run on the arduino. Pronterface is a nice app for controlling the printer from your computer, and slic3r is what takes your 3D models and coverts them into a printable form. You will likely spend a lot of your time in slic3r tweaking the setting for your printer, filament and parameters specific to the part you are printing.

        This reminds me, I’ve learned so much about tuning and configuration recently, I’m overdue for another blog post. Maybe I can write something up tonight/tomorrow.


  4. Hello Ryan! recently i build my Vision+ and get to software\arduino point. I am comletely noob at this arduino stuff… so could you please help me with this:
    1) i cannot get what Sprinter or Marlin should i use? (this page and “Software setup” pages tells different)
    2) i tried to use Marlin (downloaded Arduino sofrtware, downloaded Marlin from your link, downloaded your Comfiguration.h and replaced generic one with it. Then i open Marlin.pde and push “Upload” button but at compilation i get ” ‘EXTRUDERS’ was not declared in this scope” error
    3) i got an micro-SD card in my kit, and i want to use print from SD feature as far as i know that connected printing got issues, but i cannot find any cardreader slot on arduino board and no extension for that – what should i by/get/attach to connect SD-card to my arduino?
    4) do i need to somehow mod Configuration.h for my Vision+ (i believe that Z-axis is longer that Vision’s)?

    sorry for such noob questions, your guide is great

    • Hi Alex,

      1) I started with the Sprinter firmware because I had trouble getting Marlin working initially. Since then I have switched to Marlin and all is working well.

      2) The error you are getting is because my configuration file was for an older version of Marlin. I’ve just uploaded a new copy that should work for the current version of Marlin at

      3) While the SD-card adapter that comes with the printer works, it also kinda sucks. I ended up buying a Viki LCD instead which has a SD reader and nice LCD + buttons for selecting files, etc. I think you should wait until you have everything else working great before trying to add the SD card into the mix. You’ll likely be fiddling with the setting so much in the beginning that the SD card will be more headache than benefit.

      4) If you read through the the Configuration.h file, you should find that most of the values/settings are really just questions about your printer. Things like what is the print area?, how are your endstops installed?, etc… You’ll need to customize this file for your printer since you have a plus model. That said, starting from mine will save you a little bit of work. And when in doubt, just leave the value that is already there.

      Hope this helps!

      • Yay!
        new Configuration.h compiled fine

        tonight i will try to sort out with my parameters and mod the file according to it
        i believe that i should not mess with the thermal section and check&fix only mechanical section part?
        mostly those:
        #define X_MAX_POS 240 (why 240 ?)
        #define Y_MAX_POS 200
        #define Z_MAX_POS 150 ( i believe that in my Vision+ case it would be #define Z_MAX_POS 200)
        As far as i can get, this values – are basically a distance in mm from Zero-endstops, and with endstops they set an area for hotend not to get out of heated-bed platform boundaries and not not hit zero level and not to scratch the mirror. Am i right?
        I am asking because i got this:
        Obviously i am doing something wrong…

        As for Viki LCD – i am also want to buy this one, but as long as it go to me, can i use SDRAMPS – is it completely useless? how exactly it sucks?
        And should i comment “#ifdef ULTIPANEL” whole section, since i have no LCD panel at the moment?

      • Correct, you probably don’t need to mess with the thermal setting because you should have the same extruder temp sensor that I have. For the endstops, it is really up to you how you want to set them up. When warming up, my nozzle leaks a fair amount of plastic, so I have my minimum X endstop set so that the nozzle is off of the build platform. This was something Matt suggested and works really well. The idea is that before printing, the printer “homes” itself, so that the nozzle is to the side of the platform, and just a hair above the glass plate. Then when it moves to start printing, it ends up cutting off the leaked out plastic (the nozzle and glass plate act as scissors).

        This reminds me. I think I have the endstop inverting setting backwards in the Configuration.h you downloaded. I just uploaded yet another new one that should be correct. (I’m not willing to upload a new firmware to my printer right now to test). In the new copy I just uploaded I think I also have it setup so that you don’t need the extra jumpers for the MAX endstops (new feature in this version of Marlin).

        For the SD card, I think the only thing you need to do is make sure SDRAMPS is defined. I have a separate Configuration.h for the Viki lcd setup (that I still need to update for the new Marlin). I guess its not so much that the SDRAMPS itself is bad, but that it alone is insufficient for me when printing. I really want to be able to move the nozzle before printing, monitor the temperatures while printing and warming up, and I want to see the errors reported when there is a problem. Without some form of LCD panel, you still need the computer plugged in, in which case, why bother with the SD card…

        If I get a bit more time, I’ll test out some of the updates I’ve made and update the instructions.

    • Hey Alex,
      Sorry for the delay. This comment got lost in my inbox. I imagine you already have the printer running by now, but I think the wiring looks good. At least from what I can tell by the photos.

      Have you gotten your first print yet?

      • Hey Ryan!
        My delay waaay greater than yours 😉
        Yeah, since 2013 i got my printer running and rebuilt couple of times, upgraded to E3D and Titan extruder. And i want to thank you WERY much, without this assembly instructions of yours – i really dunno how i possibly managed to build this printer (actually two)
        My profile at Thingiverse is

        You are my hero! ))

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s