Learn how to set up an LCD screen, click encoder input and SD card reader on your 3D printer!
Setting up a LCD and SD card controller panel
I’m Tom and today i’m going to show you how to add an LCD screen control panel and an SD card reader to your 3D printer for # under 13€ – that’s about 16 US dollars including tax. Why would you want that? Well, even though i use OctoPrint as my main way of interfacing with the printer (which i show you how to set up right here), i still needed a way to work the basic controls of my printer without having to fiddle around on my phone or having to bring down my Laptop. And the LCD control panel gives you just enough control for when you want to tweak or stop a print, change filament or even just jog one of your printer’s axis. And as a bonus, you also get an SD card slot, so if aren’t using OctoPrint, you can use that to print files without needing to have a computer sitting right next to your printer all the time. So let’s get started!
Here’s what you’ll need! First of all, the LCD panel itself. I used the Full Graphic Smart Controller because it’s # the biggest, baddest one out there and really isn’t any more expensive than other solutions. You can also use other panels, for example in the style of the Ulticontroller, but those usually have smaller and less detailed screens. If you want to buy a Smart controller and want to support my videos at the same time, get one here [World/DE]. It’s pretty much the best price out there anyways.
You will also need a way to connect the LCD panel to your printer’s electronics. There are adapters available for the most popular boards, for example for the RAMPS or the RAMBo, and they often come with the LCD panel or your control board, but you can hook them up to pretty much any board out there, including the humble Printrboard. A quick Google search will usually bring up a couple of guides about how you need to connect everything or sometimes even options to order pre-made adapter boards. For the sake of simplicity, i’ll be showing this on my RepRapElectro RAMBo. You can find a review of that right here.
And just like for setting up anything else like auto bed tilt compensation, you will need a readily configured version of your printer’s firmware, preferably Marlin. If you don’t have a version ready to go, check out my guide on the basics of Marlin to get you started.
Before we start hooking things up, i placed a strip of Kapton tape between the LCD screen and the secondary board since it looked like some of the pins would potentially short others out. Then we can hook everything up: Place the adapter board on your mainboard, then plug in both ribbon cables to the panel and the adapter. Now, many adapters don’t clearly label which of these is header one and which is header two, but you won’t damage anything if you get them wrong. Just make sure you don’t plug in one of the connectors backwards.
Next up, we can start digging into the firmware. So open up your Marlin.ino and hop over to the configuration.h file. In here, you’ll want to scroll almost all the way down to the LCD and SD support section. Now, the exact options relevant to you will, again, depend on the specific model of your controller panel, but for the Full Graphic Smart Controller, all you need to do to get it working is to uncomment the line / #define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER. And right here is a reminder that you need to add the U8glib library to your assortment of Arduino libraries, and thanks to the fine folks at Arduino, that is now a super simple process. Download the right zip for your operating system from the link in the description, then, in the Arduino software, hit Sketch, import library, add library, then choose the zip file you just downloaded. / Done.
So at this point, the firmware is ready to be uploaded and will be able to use the smart controller if plugged in correctly. Again, if it doesn’t work on the first try, swap the two connectors and try again.
Now, there were two things that were still off on mine, some of which i had also noticed on for example the Ultimaker’s Ulticontroller before. One is that the encoder input seem to register in the opposite direction i’d expect it to, and the other is that menu scrolling feels weird and that i can’t precisely increment values up and down. But do not despair, i’ll show you how to fix both of these. First of all, to get the scrolling increments right, head back to your firmware’s configuration and scroll down to where it says #if defined (REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER) and then add the two lines #define ENCODER_PULSES_PER_STEP 4 / and #define ENCODER_STEPS_PER_MENU_ITEM 1 / before the endif. You can either copy and paste them from a bit further down in the config or from this video’s description.
Now, to fix the scrolling direction, you need to head over to the pins.h file, which is kind of hard to reach from within the Arduino IDE, so open that file up in Notepad or Notepad++ after you’ve closed the Arduino IDE. Then scroll down to the section for your particular board and swap the numbers after BTN_EN1 and BTN_EN2 in the Smart Controller or NEWPANEL section. If that didn’t fix the scroll direction after saving the file and reuploading with Arduino, you probably edited the wrong section. By the way, the beeper on the board annoyed the crap out of me, so i completely disabled mine by changing the BEEPER pin to minus 1.
So, here’s two more things that are specific to using the Smart controller i bought: One, the software contrast setting doesn’t do anything, there’s a potentiometer for that on the board, and two, the LCD’s backlight on this panel is only enabled for a while if you press the “light” button, which just wouldn’t do it for me. To permanently turn it on, simply move the jumper on the back of the board to the opposite side.
And we’re done! You’ll probably still want to print some sort of mount and case, and you can find cases and knobs for all versions of the Smart Controller on the various 3D model sharing sites.
So as always, thanks for watching! Don’t forget to share this video if you know more people that could find it useful!
Fix the encoder scrolling with:
#define ENCODER_PULSES_PER_STEP 4
#define ENCODER_STEPS_PER_MENU_ITEM 1