Displays


So far in this series we have used the Serial Monitor to display data. But if we want to take our circuit out in the field to collect data, it would be better to not have to carry the computer along. It solve this problem we can add a display to our circuit. There are many different types and sizes of displays we can purchase for our Arduino. We are going to use the liquid crystal display (LCD) for our display. This display will allow us to have 32 (2 rows of 16 characters) characters. We will construct the LCD use two different methods.

Circuit #1


Let’s start with the basic functionality of the LCD. Looking at the diagram below wire up the LCD screen. There are a lot of wires, if you mess up it is ok. This is a great exercise in troubleshooting your wiring.

LCD wiring

Code #1

 

Once you have the LCD screen wired up, we can write some code to test the circuit. Copy the code below and upload it to the Arduino board.

test code for lcd main

Troubleshooting


My LCD is not lighting up -> check you wiring connects-> check for broken wires
My LCD is lighting up but I don’t see anything-> turn the knob on potentiometer to change contrast-> check wiring
My LCD screen has a bunch of mumbo jumbo-> reset the Arduino board->check wiring


Code #2

 

Now that you have successfully sent data to the display, lets explore how we can use the LCD. We are going to make a revolving meal menu and a temperature display. These are just a few things you can use displays with. There are more uses and different types of displays out there and they all work pretty much the same. This next section of code to copy will produce a revolving menu a dining hall. This code should start up and display “today’s menu”) and then start looping through the different meals.

Menu code

Code #3


This next code allows us to send data to the lcd from the serial monitor. It almost like sending instant messages, but it is only to the lcd. Copy the code below and follow the instructions. This code can also be found in the file->examples->liquidcrystal->serialdisplay. If you use the example code, make sure you make changes to the pin outs for the lcd.

serial code lcd


Upload the code to your Arduino board and open the serial monitor. At the top of the serial monitor is a command bar where we can type in. Type “test” and click send. You should see “test” show up on your lcd screen. Remember we can only have 16 characters and spaces count as a character.

testing serial connection lcd

Circuit #2


Now that we have the basic functionality of the LCD screen down, lets look at a way to simplify the wiring. We are going to use the I2C (inter-integrated circuit ) adaptor for the LCD to condense the wires down to 4. To start find your I2C adaptor and attach it to your LCD. Next create the circuit below.

I2C lcd


Once you have the circuit built, let’s look at the first code we are going to use. When using I2C we need to find the address of the device. Most devices you purchase will come with an address labeled. But what if you need to find the address? Well there is a code for that prebuilt in the LiquidCrystalI2C library, which is not included in our Arduino library. We will need to install this library first. In Arduino go to Tools->manage libraries. When the library manager opens, search for “liquidcrystal I2C”. You will need to scroll down a bit and find the right library by Marco Schwartz. Click the install button and wait for the library to be installed and close out of the library manager.

llibrary manageri2c library download

Scanning for Address

Find the i2c scanner under File->Example->Wire->ic2_scanner. Open that sketch and upload it to your board. Once the code is uploaded, open the serial monitor and watch the code do its job. You will be given a hex address that you should right down, we will be needing it later. Mine for this device is 0x27. In more complex circuits we would need to change addresses of devices but that is outside the scope of what we are doing for this series.
Now that we have the device address we can start playing with the lcd again using I2C adaptor. Most of the code will still be the same as before with a differences. Lets look at the code on the next page and see what is different. This code can be found in examples under the LiquidCrystal I2C library labeled hello world. You will need to make some changes to the example code to work with our display of 12x2. The example uses a 20x4 display.

 

Code #1

hello world i2c


As you can observe, with only a few differences, the lcd still functions the same , but with only 4 wires. This will help down the road when we start adding more components and will need to have pins available to us.

Circuit #3

Now that we are comfortable with the lcd screen, let’s add a sensor to the project. We are going to create a temperature reader. We will be using TMP36 sensor. These are a cheap but pretty precise sensor. If you look at it with the flat side towards you the left pin needs to be connected to 5v. The middle pin needs to be connected to A0. The right pin needs to be connected to ground. Now if you have the 5v and ground flipped you will know, the sensor get very hot when this happens and will burn you if you are not careful. When you power up the circuit and you feel heat, power down right away and flip the connections. Use the diagram below to help with construction.

lcd temp circuit

One of the things you might notice is that we can use arithmetic in our code. We use arithmetic in this project to convert the voltage reading from the A0 pin to a value we can understand (temperature). You may notice that we can print variable values into the LCD.

Code #1

Temp. code

Troubleshooting


• Sensor is very hot-> gnd and 5v needs to be flipped
• LCD is showing jumbo->check connects-> check code->reset board

Going further


• Add another temperature scale to display
• Can you change code to get a more accurate reading?
• How could you waterproof the temperature sensor?