Adding an LCD display to Arduino projects can add real value but the cost of doing so can be significant. Not a financial cost - you can pick up 16 (characters) x 2 (rows) LCD for as little as £3.50. The cost is the pin count it can take to drive them. Using the built-in LiquidCrystal Display library it can take as many as 6 pins! That does not leave much for your sensors, motors and other components.

There are many projects that discuss using alternatives - such as a much more expensive Serial LCD (£10 up). Other projects discuss using two-wire interfaces, increasing the complexity of your code. The simplest way to drive the HD44780 style LCDs, in my opinion, is to use a 74HC595 shift register, taking the pin count down to 3.

In any case, connecting an LCD either using the 595 Shift Register or the more traditional way takes a lot of wiring which is not only a super mess (unless you use a ribbon cable I guess), it takes time.

This shield is simplifies this process - all that is required is power and three wires back to the Arduino - ie. connect the LCD in under 6 seconds!

Step 1: Required Components

This is an extremely easy board to make and should take you no more than 15 minutes to solder up and have running.

Component List
    1 x 74HC595 Shift Register
    1 x BC547 NPN (or MOFSET or similar NPN)
    1 x 10k Trimmer Potentiometer
    6 x Male headers (I used right angle connectors)
    16 x Female headers
    Strip/Vero-board 17 strips x 13 holes (I used 15 for cable support)
    Hookup wire
    Your soldering kit


I have this running great from an ATtiny85. It also has a TMP36 temp sensor to desplay the current temperature. LCD uses pins 0, 1, 2 and TMP36 uses pin 3.
Here is my version. Thanks, it was a fun project. <br><iframe frameborder="0" height="315" src="http://www.youtube.com/embed/qKhqDKkguL4" width="560"></iframe>
<p>Hi, please where did you buy this stripboard? It was online? I just found another version with independent holes, different of yours... Sorry my English, thanks!</p>
<p>hi. You can get the connected holes from electronic store. They sell copper board with independent holes and copper strip board</p>
That is fantastic Matt. Really nice work.<br><br>Being in London, I feel those cold mornings too.<br><br>Thank-you for sharing.<br>R<br>
Hey thanks bitterOz. I gave your instructables page props in the description of the above video and in the prototype video http://www.youtube.com/watch?v=1ipJzppZvVk <br>Thanks again, It was a fun project. <br>Matt
I'm wanting to build your project Matt. Any chance you could post the modified code for the attiny85?
Hi. Here's a link I made for you. <br>http://pastebin.com/saZ3ect9 <br>It should contain the code. <br>The temp sensor I use is a TMP36 from Adafruit.com<br>I hope this helps.<br>Matt
Thanks! You should really do an instructable on this, or at the least, draw up a schematic for us noobs and post it in the description of your video.
<p>I finished it! This uses and ATTiny85 replacing the take offs for pins 7, 8,and 9 from the Arduino. I also used pins 3 and 4 from the ATTiny to run two flashing LEDs just to see how it work. This is running off a 4.5v battery pack using AAA batteries. I'm glad i got this done,it's a nice unit!</p>
<p>Brilliant stuff Jim. Looks great.</p>
<p>Hi.</p><p>I think it would be really helpful if you flipped the trace image and reuploaded.</p><p>Thanks</p>
<p>Hey, how did you get your display multiple lines like that? I'm a noob and I need help haha</p>
<p>Its a 4 line display. im not sure what you mean by the question?</p>
<p>I thought this would be easy, but of cause it never is. But that was completely due to my sloppy reading.</p><p>So I managed in the end to get it working like it should and I certainly will build more of the shields to display readings from my Arduino. This certainly enhances the possibilities like thermometer, thermostats, clocks, etc etc.</p><p>I really like it, so thanks a lot for sharing,</p>
<p>Finally made it, Had to swap the emitter and collector of the BC547 NPN transistor to make the back light work , Also had to use following to turn on back ight.</p><p>lcd.setLED2Pin(HIGH);<br>lcd.shift595();</p>
<p>@bitteroz Had to swap the emitter and collector of the BC547 NPN transistor to make the back light work. Mistake in circuit drawings? Or is my LCD different ? I have a green one. </p>
<p>Also had to use following to turn on backlight.<br>lcd.setLED2Pin(HIGH);<br>lcd.shift595();<br></p>
<p>Thanks bitterOz for the guide! I added a couple of jumper wires to consolidate into a single ribbon cable port, and omitted the transistor.</p>
Works really well, i used a jumper instead of a transistor.
<p>Got it working, sorry to say but schematic pinout and what is said in code won't match; schematic is correct(pins go reverse between each). Still, thanks for sharing!</p><p>Could you update code so schematic reflects code? Also, mention how OE and MR are hooked in code. :)</p>
<p>I have this running great from an ATtiny85. It also has a TMP36 temp sensor to desplay the current temperature. LCD uses pins 0, 1, 2 and TMP36 uses pin 3</p>
<p>I have this running great from an ATtiny85. It also has a TMP36 temp sensor to desplay the current temperature. LCD uses pins 0, 1, 2 and TMP36 uses pin 3</p>
<p>Is shorting Q6 to ground via the transistor really advisable?</p>
<p>How crucial is transistor Q1 where the 595 pin 6 connected to the base of Q1 feeding the LED- (16) of the LCD? from what i can tell it only controls the backlight of LCD passing GND. could pin 6 be left disconnected?</p>
<p>yes it may be bypassed</p>
<p>Hello I am having a very hard time getting all this to work with the shift register </p><p>i have the 74hc595 and an HD44780 but I cant get the library to work with my </p><p>arduino version 1.6.4 i keep getting error messages it says library not found ?</p><p>and i know it is installed </p>
<p>extract it in the arduino folder in my documents</p>
<p>you could try and remove the existing LiquidCrystal library, quit the IDE and restart it. </p><p>Let me know if that works for you.</p>
<p>Okay so I've tried to build this on a breadboard and I have deleted the original liquidcrystal library, but I still get black boxes on the first line of the lcd. I cannot get it to print anything... Any ideas?</p>
<p>Make sure shift reg is connected to gnd even though the schematic says otherwise.</p>
<p>Hello! The project presented here is not working as is presented here, <br>if you will follow this instructable. I had the same problem like you, <br>and it seems that &quot;copy-paste&quot; method on ALL pages that describe this <br>metod, have the same issues. The problem can be solved if you put data <br>pin (wich goes to the arduino) on shift register pin 14 and LCD no. 6 <br>pin on pin 15 of shift register. The rest is the same. Also, you can <br>remove the transistor from the circuit and put pin 16 of LCD to ground <br>(GND) and pin 15 of the LCD to + Vcc (trough a resistor about 1K if you <br>wish to reduce luminosity).</p>
<p>Finally resorted to removing the transistor as you suggested and works fine. Still have not been able to figure out why the Arduino LED of digital pin 13 stays lit though.</p>
<p>I was confused about why the LED for pin 13 stays lit too. As it turns out, the LED is not driven directly by the pin - there is a buffer / driver that monitors the voltage on the pin. Pin 13 is configured as an input if not used, and so the voltage on the pin floats high enough for the buffer to turn on the LED. Connect a 1k (or whatever you have) resistor from ground to pin 13, and the LED goes out. </p>
<p>That does make sense. Should try that. </p><p>Thank you</p>
<p>i can not get the librarys to work on my arduino at all dont know why </p>
<p>made this 4 my mums bday. Had trouble with the protoboard so made a pcb. Works like a charm. Programmed to work with Attiny85. Eagle design.</p>
<p>Ivan</p><p>I made it on a breadboard</p>
<p>ivan</p><p><em>I made it</em></p>
<p>Hi, thanks for presenting this practical solution of saving 3 pins in LCD applications. I have followed the instructions and uploaded the program on Arduino Uno could successfully, however I could not observe the words on the LCD. I would appreciate any suggestions would help me to get the result.</p>
<p>Hi,</p><p>I have wired up the circuit and installed the LiquidCrystal595.h file in the library properly. The program was uploaded with no error, but no letters appear on the display; just the empty boxes on the first line. I have checked the connections several times, but no success! I would be pleased if you could suggest me a solution.</p>
<p>I made it. But my LCD would not show any text. Is it the potentiometer problem or something else as the the backlight also blinks sometimes. The lcd backlight is always ON but nothing else.</p>
<p>if LCD is plain backlit, try bringing contrast pin to 0 (ground)</p><p>if LCD is showing faint boxes (where the numbers are to be displayed) , than its something else a mistake perhaps, check wirring and steps.</p>
<p>Thankyou. worked for me.</p>
<p>additionally also controlled backlit via shift register and now it fades in on startup</p>
<p>I did it, Thanks</p><p>although I had to change a couple of things to get it done, and had to do a LOT of reading to finally make it wok properly, but learned a lot of things in this 6 seconds process :). Still on the breadboard.</p><p>Also thanks to <em>Build_it_Bob</em>, followed his advice on his comment and changed the pins of the transistor to the following:</p><p>Pin C (collector) of the 2n2222 to +5 volts</p><p>Pin E (emitter) to pin 15 of the Display.</p><p>Display Pin 16 to ground.</p><p>595 Pin 6 (Q6) to 1 k resistor </p><p>Resistor to Pin B (Base) of 2n2222</p><p>As I found out there are versions of 2n2222 with either EBC or CBE pins. Mine was P2N2222A with EBC Pins</p><p>I had to adjust the trimmer as well.</p><p>After I finally managed to make it work, i realized that it would write only the first character of any words or sentences printed. I had to edit the LicuiqCrystal595.cpp file, and add &quot;return 1;&quot; after the &quot;send(value, HIGH)&quot;, like bellow</p><p>inline size_t LiquidCrystal595::write(uint8_t value) {</p><p> send(value, HIGH);</p><p> return 1;</p><p>}</p><p>The lcd.setLED2Pin(HIGH); (or LOW) worked very nice as well</p><p>Thank you!</p>
<p>i need ur help,</p>
<p>i dont know,whats happened to mine,allconnections are correct,but <strong>my lcd is showing only one charecter,</strong></p>
<p>Made it without the NPN transistor</p>
<p>HI, firstly thank you for this instructable. I made it and literally burnt the midnight oil working till 2 AM and was frustrated that it didn't work. The following morning I found the flaw in a few minutes and now it works like a charm. There is a mistake I would like to point out in one of your diagrams though and I have attached the picture to show where the error is. Hope you would correct the original picture.</p><p>Two other question I have are</p><p>(a) why does the LED corresponding to pin 13 on the Arduino stay lit after displaying the message?</p><p>(b) How do I get the back light to come on?</p><p>Please advise.</p>

About This Instructable




More by bitterOz:Hookup an LCD to an Arduino in 6 seconds with 3, not 6 pins 
Add instructable to: