Our existing thermostat is a White Rogers that currently controls our Air Conditioner and Electric Furnace. We will be replacing this with our Arduino and LCD display. Attached are the photo's, schematic, and documentation of the existing control. We will post the code and schematics of the new system as it develops. More details on how Thermostats work and are wired can be found at http://www.epatest.com/store/resources/images/misc/how-a-thermostat-operates.pdf
Learn to monitor and control your home & environment with self contained, inter-communicating microprocessors. Applications include ham radio, robotics, weather stations, model railroading, toys and more. - KK4HFJ
Saturday, June 30, 2012
Monday, June 25, 2012
LCD / Keypad Shield
We are building a thermostat to control our furnace and A/C. We are using a DFRobot LCD / Keypad shield we received from Hacktronics.com to display the temperature, and to set the temperature ranges for both the heating and cooling modes. The following is a sketch that shows how the lcd and the buttons are utilized. Only one analog input is needed for the 6 buttons, as they are connected to resistors, and the resistance is measured to determine which button is being pushed. We will be customizing this with a Dallas DS18B20 temperature sensor, and MOSFET / SSR control over the Furnace and A/C. A video of how this works has been uploaded to YouTube.
//Sample using LiquidCrystal library#include "LiquidCrystal.h"/*******************************************************This program will test the LCD panel and the buttonsMark Bramwell, July 2010********************************************************/// select the pins used on the LCD panelLiquidCrystal lcd(8, 9, 4, 5, 6, 7);// define some values used by the panel and buttonsint lcd_key = 0;int adc_key_in = 0;#define btnRIGHT 0#define btnUP 1#define btnDOWN 2#define btnLEFT 3#define btnSELECT 4#define btnNONE 5// read the buttonsint read_LCD_buttons(){ adc_key_in = analogRead(0); // read the value from the sensor // my buttons when read are centered at these valies: 0, 144, 329, 504, 741 // we add approx 50 to those values and check to see if we are close if (adc_key_in > 1000) return btnNONE; // We make this the 1st option for speed reasons since it will be the most likely result if (adc_key_in < 50) return btnRIGHT; if (adc_key_in < 195) return btnUP; if (adc_key_in < 380) return btnDOWN; if (adc_key_in < 555) return btnLEFT; if (adc_key_in < 790) return btnSELECT; return btnNONE; // when all others fail, return this...}void setup(){ analogWrite(10, 50); // set brightness on pin 10 to 0-255 lcd.begin(16, 2); // start the library lcd.setCursor(0,0); lcd.print("Push the buttons"); // print a simple message} void loop(){ lcd.setCursor(9,1); // move cursor to second line "1" and 9 spaces over lcd.print(millis()/1000); // display seconds elapsed since power-up lcd.setCursor(0,1); // move to the begining of the second line lcd_key = read_LCD_buttons(); // read the buttons switch (lcd_key) // depending on which button was pushed, we perform an action { case btnRIGHT: { lcd.print("RIGHT "); break; } case btnLEFT: { lcd.print("LEFT "); break; } case btnUP: { lcd.print("UP "); break; } case btnDOWN: { lcd.print("DOWN "); break; } case btnSELECT: { lcd.print("SELECT"); break; } case btnNONE: { lcd.print("NONE "); break; } }}
Subscribe to:
Posts (Atom)