Paso 12: Subir este bosquejo para agregar el rtc en el projekt. para continuar.
< ~25°c/77° F relé de chanel 2 frío encender ambos canales.
> ~ 30° c / 86° F caliente 2 relé de chanel apagar ambos canales.
Muestra el tiempo real.
/*
22 de septiembre de 2013 ha añadido RTC
13 de septiembre de 2013 ha añadido 2 relé de chanel
12 de septiembre de 2013
25 de octubre de 2012
Base de un proyecto de DJ Mentzik incluye http://www.arduino.cc/en/Tutorial/SwitchCase
Mejorado y modificado por WWC, citin
Los documentos pueden encontrarse en wwwc
Citin
Uso y modife según sea necesario.
Muestra corriente, 8 segundos promedio, Max y Min temperatura, interruptor de relé de chanel 2
encendido / apagado por llegar a min/max datos crudos del sensor y advierte frío/caliente/ok.
Para alambre de la pantalla LCD a tu Arduino, conexión de los siguientes pines:
LCD Pin 6 a pin digital 12
LCD Pin 4 a pin digital 11
LCD Pin 11 al pin digital 5
LCD Pin 12 al pin digital 4
LCD 13 de Pin a pin digital 3
LCD 14 de Pin a pin digital 2
LCD 15 PIN a +
LCD PIN 16 a GNd
*/
estas constantes no va a cambiar:
const int sensorMin = 160; SARCOPTIOSIS mínima sensor para obtener mínimo temprature, descubierto a través de experimento
const int sensorMax = 215; sensor máximo, 41, 9celsius = 248 rawdata descubierto mediante experimento
#include < LiquidCrystal.h >
#include < Time.h >
#include < Wire.h >
#include < DS1307RTC.h > / / una biblioteca básica de DS1307 que devuelve la hora como un time_t
#include < LiquidCrystal.h >
incluyen la biblioteca de controladores de LCD
declarar variables
flotador tempC = 0; Variable para mantener la temperatura Celsius (floating para la precisión de decimales)
flotador tempf = 0; variable para la celebración de Fareghneit temp
int tempPin = 0; Declarar la entrada analógica a 0 (A0) de la placa Arduino.
flotador de muestras [8]; Matriz para 8 muestras para el cálculo de temperatura media
maxi de flotador = 0, mini = 100; Variables de temperatura máxima y mínima con valores iniciales. LM35 en configuración simple solo mide temperatura superior a 0.
int i;
LiquidCrystal lcd (12, 11, 5, 4, 3, 2); inicializar la biblioteca con los números de los pines de interfaz
void setup()
{
Serial.Begin(9600); Abre el puerto serie, establece la tarifa de datos a 9600 bps
setSyncProvider(RTC.get); la función para obtener la hora del RTC
if(timeStatus()! = ajuste del horario)
Serial.println ("no se puede sincronizar con el RTC");
otra cosa
Serial.println ("RTC ha establecido la hora del sistema");
LCD.Begin (16, 2); Fijar número la pantalla del LCD de filas y columnas:
lcd.setCursor (2, 0); Establecer LCD posición del cursor (columna, fila)
LCD.Print("Bartagamen"); Imprimir texto en LCD
lcd.setCursor (3, 1); Establecer LCD posición del cursor (columna, fila)
LCD.Print("Thermometer"); Imprimir texto en LCD
Delay(500); esperar 500ms / retardo para leer texto
LCD.Clear(); borrar pantalla LCD / / borrar la pantalla
lcd.setCursor (2, 0); Establecer LCD posición del cursor (columna, fila)
LCD.Print ("LCD aparece"); Imprimir texto en LCD
lcd.setCursor (1, 1); Establecer LCD posición del cursor (columna, fila)
LCD.Print ("temperatura media"); Imprimir texto en LCD
Delay(2000); Retardo para leer texto
LCD.Clear(); LCD Clear
}
void loop()
{
digitalClockDisplay();
Delay(1000);
}
void digitalClockDisplay()
{
Serial.println(""); Línea en blanco para espacio en el monitor serial
Serial.println ("que busca en un proyecto construido por WWC, Citin"); Imprimir texto a monitor Serial
Serial.Print ("Feal libre de uso y modife según sea necesario.");
Serial.println(""); Línea en blanco para espacio en el monitor serial
Serial.Print ("TMP36GZ datos:"); Imprimir texto a monitor Serial
Serial.println(analogRead(tempPin)); Muestra en el monitor serial el valor muestreado antes de conversión a la verdadera lectura de la temperatura
Inicio de cálculos para el lazo.
para (i = 0; i < = 7; i ++) {/ / obtiene 8 muestras de la temperatura
muestras [i] = (4.4 * analogRead(tempPin) * 26) / 1024.0; matemáticas de conversión de tmp26gz tiene que ver Cruz.
5V es el voltios de suministro de tmp26gz. Cambiar el appropriatelly tener la medida correcta. Mi caso es 4.4Volts.
Si accionado del USB utiliza valor 4.4v a 4.6v. Si la energía es 7v < a Arduino luego use 4.9v a 5.1v
La tensión es fundamental para una lectura precisa
Serial.println(samples[i]); Imprimir muestras [i] para monitor sertiual
(Nota de LCD: línea 1 es la segunda fila, ya que cuenta comienza con 0):
lcd.setCursor (0, 0); Establecer LCD posición del cursor (columna 0, fila 0)
LCD.Print ("Temp actual es:"); Imprimir texto en LCD
lcd.setCursor (1, 1); Establecer LCD posición del cursor (columna 1, fila 1)
LCD.Print ("Celsius"); Imprimir texto en LCD
lcd.setCursor (12, 1); Establecer LCD posición del cursor (columna 12, fila 1)
LCD.Print(samples[i]); impresión actual muestra temperatura LCD
tempC = tempC + muestras [i]; hacer la adición para temperatura media
Delay(4000); esperar 800ms
leer el sensor:
int sensorReading = analogRead(A0); obtener los datos brutos del Sensor para ajustar modo de elaboración
mapa de la gama del sensor a una gama de cuatro opciones:
int rango = mapa (sensorReading, sensorMin, sensorMax, 0, 3); cambio de don t de salida del sensor.
hacer algo diferente dependiendo de la
valor de rango:
interruptor (rango) {}
caso 0: / / kalt / / Mostrar frío e interruptor ambos relais canales en a estado de relé de control de calor.
analogWrite(8,HIGH);
analogWrite(10,HIGH);
Serial.println("Dark");
lcd.setCursor (1, 1); Establecer LCD posición del cursor (columna 0, línea 1)
LCD.Print("Cold"); Imprimir texto en LCD
lcd.setCursor (1, 1);
Delay(800); espere para que pueda ver el mensaje
rotura;
caso 1: / / ok, nada que hacen relé ambos canales están OFF
Serial.println("DIM");
analogWrite(8,LOW);
analogWrite(10,LOW);
lcd.setCursor (1, 1);
LCD.Print("Rise"); Imprimir texto en LCD
lcd.setCursor (1, 1);
Delay(800); espere para que pueda ver el mensaje
rotura;
caso 2: / / tu mano es unas pocas pulgadas del sensor / / bien, nada relé ambos canales están en la última estadística
Serial.println("Medium");
lcd.setCursor (1, 1);
LCD.Print("OK"); Imprimir texto en LCD
lcd.setCursor (1, 1);
Delay(800); espere para que pueda ver el mensaje
rotura;
caso 3: / / tu mano no está ni cerca del sensor
Serial.println("Bright"); caliente todo relé a canales de calefacción de parada.
digitalWrite (8, bajo); caliente todo relé a canales de calefacción de parada. Compruebe el relé de estado
digitalWrite (10, bajo); caliente todo relé a canales de calefacción de parada. Compruebe el relé de estado
lcd.setCursor (1, 1);
LCD.Print("Hot"); Imprimir texto en LCD
lcd.setCursor (1, 1);
Delay(800); espere para que pueda ver el mensaje
rotura;
}} // END of FOR loop
Serial.println(""); Línea en blanco para espacio en el monitor serial
Serial.println(""); Línea en blanco para espacio en el monitor serial
tempC = tempC/8.0; calcula el averare de 8 muestras en Celcius
tempf = (tempC * 9) / 5 + 32; convierte Fahrenheit
if(tempC > Maxi) {maxi = tempC;} temperatura máx.
if(tempC < mini) {mini = tempC;} temperatura mínima set
Enviar resultados a Monitor Serial
Serial.println ("nueva medida:");
Serial.Print ("temperatura media en grados Celsius es"); Imprimir texto a monitor Serial
Serial.println (tempC); //send los datos al ordenador / / enviar los datos a la computadora
Serial.Print ("temperatura media en Fareneit es"); Imprimir texto a monitor Serial
Serial.println (tempf); //send los datos al ordenador / / enviar los datos a la computadora
Serial.Print ("MAX Temperature en Celsius"); Imprimir texto a monitor Serial
Serial.println (maxi); //send los datos al ordenador / / enviar los datos a la computadora
Serial.Print ("temperatura mínima en grados Celsius es"); Imprimir texto a monitor Serial
Serial.println (mini); //send los datos al ordenador / / enviar los datos a la computadora
Enviar resultados a LCD.
lcd.setCursor (0, 1); Establecer LCD posición del cursor (columna 0, línea 1)
LCD.Print ("Fahrenheit"); Imprimir texto en LCD
lcd.setCursor (12, 1); Establecer LCD posición del cursor (columna 12, línea 1)
LCD.Print(tempf); Enviar los datos a la LCD
Delay(1000); Espere segundos para mostrar el Fahrenheit temp y segundos para mostrar los resultados a la LCD de la pantalla antes de comenzar el bucle otra vez = 6 segundos.
LCD.Clear(); borrar pantalla
tempC = 0; TempC se establece en 0 para que los cálculos pueden realizarse otra vez
Serial.Print(hour()); imprimir texto a Serial (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); Establecer LCD posición del cursor (columna, fila)
LCD.Print(hour()); imprimir texto en LCd
LCD.Print(":");
LCD.Print (minute());
LCD.Print("");
LCD.Print(Second());
LCD.Print("");
LCD.Print("Uhr");
lcd.setCursor (3, 1); Establecer LCD posición del cursor (columna, fila)
LCD.Print(Day());
LCD.Print(".");
LCD.Print(month());
LCD.Print(".");
LCD.Print(Year());
Delay(6000); retardo para leer texto
}
void printDigits (int dígitos) {}
función de utilidad para la visualización del reloj digital: impresiones anteriores a colon y lleva 0
Serial.Print(":");
if(digits < 10)
Serial.Print('0');
Serial.Print(digits);
}