Arduino LCD-termometer / temperaturkontroll med TMP36GZ Temp sensor lagt 2 chanel relay, lagt till RTC ds1307, lagt till en case.based på WWC Guide. (10 / 36 steg)
Steg 10:
> ~ 30° c / 86° F hot 2 chanel relay stänga båda kanalerna.
ny skiss september 13 2013 addet reläet
/*
September 13 2013
September 12 2013
Oktober 25 2012
Baserade bort av ett projekt av DJ Mentzik omfattar http://www.arduino.cc/en/Tutorial/SwitchCase
Utökad och uppdaterad av WWC, citin
Styrkande handlingar finns på wwwc
Citin
Användning och modife som behövs.
Visar ström, 8 SEK medelvärde, Max och Min temperatur, 2 chanel reläutgång
på / av genom att nå min/max sensor rådata och varnar kall/varm/ok.
För att koppla din LCD-skärm till din Arduino, ansluta följande stift:
LCD-stift 6 till digital stift 12
LCD-stift 4 till digital stift 11
LCD-Pin 11 till digital stift 5
LCD-Pin 12 till digital stift 4
LCD-Pin 13 till digital stift 3
LCD-Pin 14 till digital stift 2
LCD-PIN 15 till +
LCD-stift 16 till GNd
*/
Dessa konstanter inte kommer att ändra:
CONST int sensorMin = 160; sensor minimum needet att få minsta temprature, upptäckte genom experiment
CONST int sensorMax = 230; sensor maximal, 41, 9celsius = 248 \Data upptäckte genom experiment
#include < LiquidCrystal.h > / / include LCD förare biblioteket
deklarera variabler
flyta tempC = 0; Variabel för att hålla Celcius temp (flytande decimalpunkter precision)
flyta tempf = 0; variabel för att hålla Fareghneit temp
int tempPin = 0; Om att den analoga ingången vara 0 (A0) av Arduino ombord.
float prover [8]. Matrisen att hålla 8 prover för genomsnittlig temp beräkning
float maxi = 0, mini = 100; Max/Min temperatur variabler med ursprungliga värden. LM35 i enkel installation bara mäter Temp över 0.
int i;
LiquidCrystal lcd (12, 11, 5, 4, 3, 2); initiera bibliotek med numrerar av gränssnittet stiften
void setup()
{
Serial.BEGIN(9600); Öppnar serieport, anger datahastigheten till 9600 bps
LCD.BEGIN (16, 2); Ange den LCD antal kolumner och rader:
lcd.setCursor (2, 0); Ställa in LCD markörens position (kolumn, rad)
LCD.Print("Bartagamen"); Skriva ut text till LCD
lcd.setCursor (3, 1); Ställa in LCD markörens position (kolumn, rad)
LCD.Print("thermometer"); Skriva ut text till LCD
Delay(1000); vänta 500ms / / fördröjning för att läsa text
LCD.Clear(); tydlig LCD-display / / rensa displayen
lcd.setCursor (2, 0); Ställa in LCD markörens position (kolumn, rad)
LCD.Print ("LCD visas"); Skriva ut text till LCD
lcd.setCursor (1, 1); Ställa in LCD markörens position (kolumn, rad)
LCD.Print ("Averaged Temp"); Skriva ut text till LCD
Delay(5000); Dröjsmål att läsa text
LCD.Clear(); Clear LCD
}
void loop()
{
Serial.println(""); Tom rad för mellanrum i följetong monitor
Serial.println ("du tittar på ett projekt som byggdes av WWC, Citin"); Skriva ut text till Serial monitor
Serial.Print ("Feal fritt att använda och modife som behövs.");
Serial.println(""); Tom rad för mellanrum i följetong monitor
Serial.Print ("TMP36GZ rådata:"); Skriva ut text till Serial monitor
Serial.println(analogRead(tempPin)); Visar på serial monitor som ingick i urvalet värdet före konvertering till verkliga temperatur läsning
Start av beräkningarna för loop.
för (jag = 0; jag < = 7; i ++) {/ / blir 8 prover av temperatur
prover [i] = (4,7 * analogRead(tempPin) * 27) / 1024.0; omvandling matematik av tmp26gz har dubbelkontrollera redan kontrolleras
5V är utbudet volt av tmp26gz. Ändra appropriatelly att ha korrekt mätning. Mitt fall är 4.4Volts.
Om ström från USB Använd värdet 4.4v till 4.6v. Om strömmen 7v < till Arduino och använd sedan 4.9v till 5.1v
Spänningen är avgörande för noggranna avläsningar
Serial.println(samples[i]); Skriva ut prover [i] till sertiual bildskärm
(LCD Obs: linje 1 är den andra raden, sedan räknar börjar med 0):
lcd.setCursor (0, 0); Ställa in LCD markörens position (kolumn 0, raden 0)
LCD.Print ("aktuell Temp är:"); Skriva ut text till LCD
lcd.setCursor (1, 1); Ställa in LCD markörens position (kolumn 1, rad 1)
LCD.Print ("Celcius"); Skriva ut text till LCD
lcd.setCursor (12, 1); Ställa in LCD markörens position (kolumn 12, rad 1)
LCD.Print(samples[i]); Temp-aktuella utskriften till LCD
tempC = tempC + prover [i]; göra tillägg för medeltemperatur
Delay(4000); vänta 800ms
Läs sensorn:
int sensorReading = analogRead(A0); får sensorn RÅDATA Ställ in läge för aktuell
karta sensor spänna till en rad fyra alternativ:
int utbud = karta (sensorReading, sensorMin, sensorMax, 0, 3); sensor output don t förändring.
göra något annorlunda beroende på den
intervallvärde:
Växla (range) {
fall 0: / / kalt / / Visa kalla och switch båda vidarebefordra chanels på att värme check relay tillstånd.
analogWrite(8,HIGH);
analogWrite(10,HIGH);
Serial.println("Dark");
lcd.setCursor (1, 1); Ställa in LCD markörens position (kolumn 0, linje 1)
LCD.Print("Cold"); Skriva ut text till LCD
lcd.setCursor (1, 1);
Delay(800); vänta så kan du se meddelandet
bryta;
fall 1: / / ok, inget att göra både relä chanels är OFF
Serial.println("Dim");
analogWrite(8,LOW);
analogWrite(10,LOW);
lcd.setCursor (1, 1);
LCD.Print("Rise"); Skriva ut text till LCD
lcd.setCursor (1, 1);
Delay(800); vänta så kan du se meddelandet
bryta;
fall 2: / / din hand är några inches från sensor / / ok, inget att göra både relä chanels är senaste stat
Serial.println("medium");
lcd.setCursor (1, 1);
LCD.Print("OK"); Skriva ut text till LCD
lcd.setCursor (1, 1);
Delay(800); vänta så kan du se meddelandet
bryta;
fall 3: / / din hand är långt ifrån sensorn
Serial.println("Bright"); för att heta relä alla chanels off stop uppvärmning.
digitalWrite 8, låg. för att heta relä alla chanels off stop uppvärmning. Kontrollera relay
digitalWrite (10, låg). för att heta relä alla chanels off stop uppvärmning. Kontrollera relay
lcd.setCursor (1, 1);
LCD.Print("hot"); Skriva ut text till LCD
lcd.setCursor (1, 1);
Delay(800); vänta så kan du se meddelandet
bryta;
{}} / / END av FOR-loop
Serial.println(""); Tom rad för mellanrum i följetong monitor
Serial.println(""); Tom rad för mellanrum i följetong monitor
tempC = tempC/8.0; beräknad averare för 8 samples i Celcius
tempf = (tempC * 9) / 5 + 32; konverterar till fahrenheit
IF(tempC > Maxi) {maxi = tempC;} / / set max temperatur
IF(tempC < mini) {mini = tempC;} / / set min temperatur
Skicka resultaten till Serial Monitor
Serial.println ("ny mätning:");
Serial.Print ("genomsnittliga temperaturen i Celsius"); Skriva ut text till Serial monitor
Serial.println (tempC), //send data till datorn / / skicka data till datorn
Serial.Print ("Medeltemperaturen i Farenheit är"); Skriva ut text till Serial monitor
Serial.println (tempf), //send data till datorn / / skicka data till datorn
Serial.Print ("MAX temperaturen i Celsius är"); Skriva ut text till Serial monitor
Serial.println (maxi); //send data till datorn / / skicka data till datorn
Serial.Print ("MIN temperaturen i Celsius är"); Skriva ut text till Serial monitor
Serial.println (mini), //send data till datorn / / skicka data till datorn
Skicka resultaten till LCD.
lcd.setCursor (0, 1); Ställa in LCD markörens position (kolumn 0, linje 1)
LCD.Print ("Fahrenheit"); Skriva ut text till LCD
lcd.setCursor (12, 1); Ställa in LCD markörens position (kolumn 12, linje 1)
LCD.Print(tempf); Skicka data till LCD-skärmen
Delay(6000); Vänta 3 sekunder för att Visa Fahrenheit temp och 3 sekunder att visa resultat till LCD skärmen innan de börjar loopen igen = 6 sekunder.
tempC = 0; Satt tempC till 0 så beräkningar kan göras igen
}