Stap 12: Upload deze sketch om toe te voegen van de rtc naar de projekt. worden voortgezet.
< ~25°c/77° F koude 2 chanel relay beide chanels inschakelen.
> ~ 30° c / 86° F hot 2 chanel relay beide chanels uit te schakelen.
Toont de real-time.
/*
september 22 2013 toegevoegd RTC
September 13 2013 toegevoegd 2 chanel estafette
12 september-2013
25 oktober 2012
Gebaseerd off van een project van DJ Mentzik bevat http://www.arduino.cc/en/Tutorial/SwitchCase
Verbeterd en aangepast door WWC, citin
Bewijsstukken kan gevonden worden op wwwc
Citin
Gebruik en modife zo nodig.
Toont huidige, 8 sec gemiddelde, Max en Min temperatuur, 2 chanel-relay switch
in- / uitschakelen door bereiken min/max sensor ruwe gegevens en waarschuwt koud/warm/ok.
Sluit de volgende pinnen om de draad van uw LCD-scherm tot je Arduino:
LCD Pin 6 aan digitale pin 12
LCD Pin 4 tot en met digital pin 11
LCD Pin 11 tot en met digital pin 5
LCD Pin 12 aan digitale pin 4
LCD Pin 13 tot en met digital pin 3
LCD Pin 14 tot digitale pin 2
LCD PIN 15 tot +
LCD PIN 16 met GNd
*/
Deze constanten niet gewijzigd:
Const int sensorMin = 160; de minimale needet van de sensor om minimale tempratuur, ontdekt door experiment
Const int sensorMax = 215; sensor-maximum, 41, 9celsius = 248 rawdata ontdekt door experiment
#include < LiquidCrystal.h >
#include < Time.h >
#include < Wire.h >
#include < DS1307RTC.h > / / een elementaire DS1307-bibliotheek die tijd als een time_t retourneert
#include < LiquidCrystal.h >
omvatten van de LCD-stuurprogrammabibliotheek
variabelen declareren
zweven tempC = 0; Variabele voor het houden van Celsius temp (zwevend voor decimalen nauwkeurig)
zweven tempf = 0; variabele voor het houden van Fareghneit temp
int tempPin = 0; Waarbij de analoge ingang als 0 (A0) van de Arduino board.
float monsters [8]; Matrix te houden van 8 monsters voor gemiddelde temp berekening
float maxi = 0, mini = 100; Max/Min temperatuur variabelen met de beginwaarden. LM35 in eenvoudige opstelling meet slechts Temp boven 0.
int i;
LiquidCrystal lcd (12, 11, 5, 4, 3, 2); initialiseren van de bibliotheek met de nummers van de pennen van de interface
VOID Setup
{
Serial.begin(9600); Seriële poort wordt geopend, wordt gegevenssnelheid ingesteld op 9600 bps
setSyncProvider(RTC.get); de functie om de tijd van de RTC
if(timeStatus()! = timeSet)
Serial.println ("Unable to sync met de RTC");
anders
Serial.println ("RTC heeft de systeemtijd instellen");
LCD.begin (16, 2); De LCD's aantal kolommen en rijen instellen:
lcd.setCursor (2, 0); Instellen van de positie van de cursor van de LCD (kolom, rij)
LCD.Print("Bartagamen"); Print tekst op LCD-
lcd.setCursor (3, 1); Instellen van de positie van de cursor van de LCD (kolom, rij)
LCD.Print("thermometer"); Print tekst op LCD-
delay(500); wachten 500ms / / vertraging om te lezen van de tekst
LCD.Clear(); duidelijk LCD-scherm / / Schakel het weergeven
lcd.setCursor (2, 0); Instellen van de positie van de cursor van de LCD (kolom, rij)
LCD.Print ("LCD weergegeven"); Print tekst op LCD-
lcd.setCursor (1, 1); Instellen van de positie van de cursor van de LCD (kolom, rij)
LCD.Print ("Averaged Temp"); Print tekst op LCD-
delay(2000); Vertraging om tekst te lezen
LCD.Clear(); Clear LCD
}
void loop
{
digitalClockDisplay();
delay(1000);
}
VOID digitalClockDisplay()
{
Serial.println(""); Lege regel voor de regelafstand in de seriële monitor
Serial.println ("u zoekt bij een project gebouwd door WWC, Citin"); Print tekst op seriële monitor
Serial.Print ("Feal gratis te gebruiken en modife zo nodig.");
Serial.println(""); Lege regel voor de regelafstand in de seriële monitor
Serial.Print ("TMP36GZ ruwe gegevens:"); Print tekst op seriële monitor
Serial.println(analogRead(tempPin)); De bemonsterde waarde vóór omzetting naar echte temperatuur lezing weergegeven op seriële monitor
Begin van berekeningen FOR-lus.
voor (ik = 0; ik < = 7; i ++) {/ / krijgt 8 monsters van temperatuur
monsters [i] = (4.4 * analogRead(tempPin) * 26) / 1024.0; conversie math voor tmp26gz moeten kruis controleren.
5V is de volt van de levering van tmp26gz. Appropriatelly dat de correcte meting wijzigen Mijn geval is 4.4Volts.
Als gevoed vanuit USB gebruikt u waarde 4.4v te 4.6v. Als macht 7v < aan de Arduino en gebruik vervolgens 4.9v om 5.1v
De spanning is van cruciaal belang voor nauwkeurige metingen
Serial.println(samples[i]); Afdrukken van monsters [i] sertiual monitor
(LCD Opmerking: lijn 1 is de tweede rij, aangezien tellen met 0 begint):
lcd.setCursor (0, 0); Instellen van de positie van de cursor van de LCD (kolom 0, rij 0)
LCD.Print ("huidige Temp is:"); Print tekst op LCD-
lcd.setCursor (1, 1); Instellen van de positie van de cursor van de LCD (kolom 1, rij 1)
LCD.Print ("Celsius"); Print tekst op LCD-
lcd.setCursor (12, 1); Instellen van de positie van de cursor van de LCD (kolom 12, rij 1)
LCD.Print(samples[i]); huidige Temp drukproef op LCD-
tempC = tempC + monsters [i]; doen de toevoeging voor gemiddelde temperatuur
delay(4000); wachten 800ms
Lees de sensor:
int sensorReading = analogRead(A0); krijgen van de ruwe gegevens van de Sensor aan de huidige modus instellen
het sensorbereik worden toegewezen aan een bereik van vier opties:
int bereik = kaart (sensorReading, sensorMin, sensorMax, 0, 3); sensor output don t wijzigen.
iets anders is afhankelijk van de
bereik de waarde:
schakelaar (bereik) {}
geval van 0: / / kalt / / display koude en switch beide chanels op aan warmte selectievakje estafette staat doorgeven.
analogWrite(8,HIGH);
analogWrite(10,HIGH);
Serial.println("Dark");
lcd.setCursor (1, 1); Instellen van de positie van de cursor van de LCD (kolom 0, lijn 1)
LCD.Print("Cold"); Print tekst op LCD-
lcd.setCursor (1, 1);
delay(800); wachten zodat u het bericht zien kunt
breken;
geval 1: / / ok, niets te doen beide Relais chanels zijn OFF
Serial.println("Dim");
analogWrite(8,LOW);
analogWrite(10,LOW);
lcd.setCursor (1, 1);
LCD.Print("Rise"); Print tekst op LCD-
lcd.setCursor (1, 1);
delay(800); wachten zodat u het bericht zien kunt
breken;
geval 2: / / uw hand is een paar inch van de sensor / / ok, niets te doen beide Relais chanels zijn in laatste stat
Serial.println("medium");
lcd.setCursor (1, 1);
LCD.Print("OK"); Print tekst op LCD-
lcd.setCursor (1, 1);
delay(800); wachten zodat u het bericht zien kunt
breken;
Case 3: / / uw hand is nergens in de buurt van de sensor
Serial.println("Bright"); om de hete Relais alle chanels stop verwarming uit.
digitalWrite (8, laag); om de hete Relais alle chanels stop verwarming uit. relay status controleren
digitalWrite (10, laag); om de hete Relais alle chanels stop verwarming uit. relay status controleren
lcd.setCursor (1, 1);
LCD.Print("hot"); Print tekst op LCD-
lcd.setCursor (1, 1);
delay(800); wachten zodat u het bericht zien kunt
breken;
}} // END of FOR loop
Serial.println(""); Lege regel voor de regelafstand in de seriële monitor
Serial.println(""); Lege regel voor de regelafstand in de seriële monitor
tempC = tempC/8.0; de averare voor 8 samples in Celsius berekend
tempf = (tempC * 9) / 5 + 32; converteert naar fahrenheit
if(tempC > Maxi) {maxi = tempC;} max temperatuur instellen
if(tempC < mini) {mini = tempC;} instellen min temperatuur
Resultaten verzenden naar seriële Monitor
Serial.println ("nieuwe meting:");
Serial.Print ("gemiddelde temperatuur in Celsius is"); Print tekst op seriële monitor
Serial.println (tempC), //send de gegevens naar de computer / / de gegevens naar de computer verzenden
Serial.Print ("gemiddelde temperatuur in de Fareneit"); Print tekst op seriële monitor
Serial.println (tempf), //send de gegevens naar de computer / / de gegevens naar de computer verzenden
Serial.Print ("MAX Temperature in Celsius is"); Print tekst op seriële monitor
Serial.println (maxi); //send de gegevens naar de computer / / de gegevens naar de computer verzenden
Serial.Print ("MIN temperatuur in Celsius is"); Print tekst op seriële monitor
Serial.println (mini); //send de gegevens naar de computer / / de gegevens naar de computer verzenden
Resultaten verzenden naar LCD.
lcd.setCursor (0, 1); Instellen van de positie van de cursor van de LCD (kolom 0, lijn 1)
LCD.Print ("Fahrenheit"); Print tekst op LCD-
lcd.setCursor (12, 1); Instellen van de positie van de cursor van de LCD (kolom 12, lijn 1)
LCD.Print(tempf); Stuur de gegevens naar het LCD-scherm
delay(1000); Seconden als u wilt weergeven van de Fahrenheit temp en seconden voor het weergeven van resultaten op LCD-scherm befor beginnen de lus opnieuw = 6 seconden.
LCD.Clear(); duidelijk Display
tempC = 0; TempC ingesteld op 0, zodat berekeningen kunnen worden gedaan om opnieuw
Serial.Print(Hour()); Print tekst naar seriële (PC)
printDigits(minute());
printDigits(second());
Serial.Print("");
Serial.Print(Day());
Serial.Print("");
Serial.Print(month());
Serial.Print("");
Serial.Print(Year());
Serial.println();
lcd.setCursor (2, 0); Instellen van de positie van de cursor van de LCD (kolom, rij)
LCD.Print(Hour()); Print tekst op LCD-
LCD.Print(":");
LCD.Print (minute());
LCD.Print("");
LCD.Print(Second());
LCD.Print("");
LCD.Print("Uhr");
lcd.setCursor (3, 1); Instellen van de positie van de cursor van de LCD (kolom, rij)
LCD.Print(Day());
LCD.Print(".");
LCD.Print(month());
LCD.Print(".");
LCD.Print(Year());
delay(6000); vertraging om tekst te lezen
}
VOID printDigits (int cijfers) {}
hulpprogrammafunctie voor digitale klokvertoning: prenten voorafgaand aan de dikke darm en 0 voorsprong
Serial.Print(":");
if(digits < 10)
Serial.Print('0');
Serial.Print(digits);
}