-
Using Analog Temp Sensor with LCD on Arduino
06/30/2017 at 03:20 • 0 commentsHardware Setup
In this example I hook up the TMP36 sensor to one of the analog input pins on the Arduino Uno and then I tie the 3.3V output supply from the Arduino to the AREF pin using it as an external reference for the ADC to get better accuracy. (When I used the default 5V supply for reference I did notice a bigger temperature difference by about 6 degrees compared to using the external reference) I am also using the LCD from a previous example to display the measured temperature.
Temperature Sensor Sketch
For the code you need to read the analog input pin and then convert the value to voltage from the ADC. Then you need to convert the voltage to the temperature based on the TMP36 datasheet.
Below is the Sketch to read the temperature sensor and display result to LCD:
// //Date: 8/14/15 //Version: 1.0 // //Comments: //This sketch reads an analog temperature sensor and writes the temperature in F to the LCD display. // // LCD Pinout Connection: // RS Pin: Connect to digital input 2. // Enable Pin: Connect to digital input 3. // D4 Pin: Connect to digital input pin 4. // D5 Pin: Connect to digital input pin 5. // D6 Pin: Connect to digital input pin 6. // D7 Pin: Connect to digital input pin 7. // R/W Pin: Connect to Ground so in write mode which is logic low "0". // Vo Pin: Connect to the 10K pot that is connected between power and ground. // // Analog Temperature Sensor Connection: // Vout Pin: Connect to analog input 0. // // Arduino LCD Display Library #include // Call the library with the right pin configuration // In this sketch we are using: lcd(RS,EN,D4,D5,D6,D7) in 4 bit mode LiquidCrystal lcd(2,3,4,5,6,7); // The AREF pin is tied to the 3.3V output pin to be used as an external reference for the ADC #define aref_ext_voltage 3.3 // Assign Arduino analog input pin to be connected to temp sensor int tempPin = 0; // Assign a variable to hold the temperature sensor reading int tempVal; // the analog reading from the sensor // The setup runs once when you press reset or power on the board void setup() { // Setup the LCD display column and row // We are using a 20x4 display in this example lcd.begin(20, 4); // Need to tell Arduino that we are using an external voltage reference for ADC // Always have to set this first before calling analogRead() or else you could short out your board analogReference(EXTERNAL); // Allow voltage on ADC to settle out before reading analogRead(0); } void loop() { // Read the temperature sensor and store the value tempVal = analogRead(tempPin); // Convert the digitized number 0-1023 from the ADC into a voltage based on the reference voltage // For an external reference voltage of 3.3V => (ADC value) * (3.3V/1024) float voltageConvert = tempVal * aref_ext_voltage; voltageConvert /= 1024.0; // Convert the voltage into temperature using the linear graph data from the TMP36 datasheet // TMP36 has 500mV offset and 10mV/C degree scale // Temp in C = (Voltage - 500mV)/10 // Voltage is in Volts so multiply by 100 instead of divide by 10 to get correct result (1000mV=1V) float tempC = (voltageConvert - 0.5) * 100 ; // Convert C to F float tempF = (tempC * 9.0 / 5.0) + 32.0; // Print a message to the LCD. lcd.setCursor(0, 0); // set the start of the message to be first column first row lcd.print("The current temp is "); lcd.print(tempF); lcd.print(" degrees F"); }
The temperature sensor was reading around 73 F and my room thermostat was showing 71 F so for a basic thermostat this would work fine.
-
Connecting LCD to Arduino
06/30/2017 at 03:17 • 0 commentsHow I connected and programmed the LCD to Arduino Uno R3:
As you can see from the picture above it can be a little messy to connect up the LCD module to the Arduino Uno board. I usually try to keep my wire colors coordinated so I know what are power, ground, and data but didn't have everything I needed this time around. Below is the circuit diagram which is easier to look at:
LCD Sketch
The LCD module that I used was a 20x4 which means 20 characters per row and 4 rows. To display a message on the LCD display you need to put the message into the LCD display registers then put instructions in the LCD instruction register. This can be a little complicated but the Arduino has a built-in library to handle the low level interaction for you. The key is to use the right setup with the LiquidCrystal() function as described below from the Arduino website:
Below is the Sketch for the Arduino Uno to send a message to the LCD:
// //Date: 8/2/15 //Version: 1.0 // //Comments: //This sketch writes a message to a 20x4 character LCD display. // // LCD Pinout Connection: // RS Pin: Connect to digital input 2. // Enable Pin: Connect to digital input 3. // D4 Pin: Connect to digital input pin 4. // D5 Pin: Connect to digital input pin 5. // D6 Pin: Connect to digital input pin 6. // D7 Pin: Connect to digital input pin 7. // R/W Pin: Connect to Ground so in write mode which is logic low "0". // Vo Pin: Connect to the 10K pot that is connected between power and ground. // Arduino LCD Display Library #include // Call the library with the right pin configuration // In this sketch we are using: lcd(RS,EN,D4,D5,D6,D7) in 4 bit mode LiquidCrystal lcd(2,3,4,5,6,7); // The setup runs once when you press reset or power on the board void setup() { // Setup the LCD display column and row // We are using a 20x4 display in this example lcd.begin(20, 4); } // Main code for Arduino goes in the loop function to be run over and over again void loop() { lcd.setCursor(0, 0); // set the start of the message to be first column first row lcd.print("Line 1"); // print a message to the LCD lcd.setCursor(0, 1); // set the cursor to print beginning of second line lcd.print("Line 2"); // print a message to the LCD lcd.setCursor(0,2); // set the cursor to print beginning of third line lcd.print("Line 3"); // print a message to the LCD lcd.setCursor(0,3); // set the cursor to print beginning of fourth line lcd.print("Line 4"); // print a message to the LCD }