Você está na página 1de 6

/*

* Arduino nano pinout:

* ________________

* | USB |

* |13 12|

* |3V3 11|boton

* |AREF 10|Relay

* |A0 9|

* |A1 8|

* |A2 7|LCD

* |A3 6|LCD

* |A4 5|LCD

* |A5 4|LCD

* |A6 3|LCD

* |A7 2|LCD

* |5V GND|

* |RST RST|

* |GND 1/INT2/RX|

* |VIN 0/INT3/TX|

* |MISO SS|

* |SCK MOSI|

* |_______________|

*/

/* LIBRERIAS NECESARIAS PARA EL FUNCIONAMIENTO DEL CODIGO

*/

#include <OneWire.h>

#include <OneButton.h>

#include <DallasTemperature.h>

OneButton button(11, true);// Pin del boton


#include <DHT.h>

#include <LiquidCrystal.h>

LiquidCrystal lcd (2,3,4,5,6,7);

#include <EEPROM.h>

#define DHTPIN 8

#define DHTTYPE DHT11

DHT dht(DHTPIN,DHTTYPE);

OneWire oneWire(8); //se estancia la libreria dallas; Pin del sensor

DallasTemperature sensors(&oneWire);

DeviceAddress outsideThermometer;

int TempVal; // Valor de temperatura establecido

float Frio; // Valor capturado por el sensor

int Relay=10; // Pin salda para el Relay

byte RelayEstatus = 0;

byte cursor = 0;

int tmax = 30;

int tmin = 15;

int MargenTemp = 3; // Histéresis de temperatura

void setup() {

lcd.begin(16,2);

pinMode(Relay, OUTPUT);

digitalWrite(Relay,HIGH);
button.attachClick(click);

button.attachDoubleClick(doubleclick);

button.attachLongPressStart(longPressStart);

if (EEPROM.read(50) == 255) EEPROM.put(0,-5); // Si es la primera vez que se graba en la


eeprom

EEPROM.get(50 , TempVal); // Establece el valor de lo previamente guardado

sensors.requestTemperatures();

delay(1000);

lcd.setCursor(0,0);

lcd.print("T: ");

MideTemperatura();

lcd.setCursor(10,0);

lcd.print("E:");

lcd.setCursor(12,0);

lcd.print(TempVal);

lcd.print("\337");

void loop() {

unsigned long currentMillis = millis();

button.tick();

if (currentMillis > 60000) { // Pasado el primer minuto de arranque del programa

if (currentMillis % 20000 < 3) { // Cada 20 segundos

MideTemperatura(); // Mide la temperatura

Termostato(); // Consulta el termostato

delay(3);

}
}

if(RelayEstatus == 1) { // Si el motor esta funcionando muestra en pantalla una animación

if (currentMillis % 1000 < 2) { // Por cada segundo transcurrido

lcd.setCursor(cursor,1);

lcd.print(" ");

cursor++;

if (cursor > 15) cursor = 0;

lcd.setCursor(cursor,1);

lcd.print("*");

delay(2);

void click() { // Baja la temperatura establecida y la muestra en pantalla

TempVal--;

if(TempVal < tmin) TempVal = tmin;

lcd.setCursor(12,0);

lcd.print(" ");

lcd.setCursor(12,0);

lcd.print(TempVal);

lcd.print("\337");

void doubleclick() { // Sube la temperatura establecida y la muestra en pantalla

TempVal++;

if(TempVal > tmax) TempVal = tmax;

lcd.setCursor(12,0);

lcd.print(" ");
lcd.setCursor(12,0);

lcd.print(TempVal);

lcd.print("\337");

void longPressStart() { // Graba en la eeprom ell valor establecido

EEPROM.put(50 , TempVal);

lcd.setCursor(cursor,1);

lcd.print(" ");

lcd.setCursor(0,1);

lcd.print("** Guardado **");

delay(1500);

lcd.setCursor(3,1);

lcd.print(" ");

void MideTemperatura() {

if (sensors.getAddress(outsideThermometer, 0)) { // Si hay comunicación con el sensor


DS18B20

sensors.requestTemperatures(); //Se envía el comando para leer la temperatura

Frio = sensors.getTempCByIndex(0); //Se obtiene la temperatura en ºC

lcd.setCursor(3,0);

lcd.print(" ");

lcd.setCursor(3,0);

lcd.print(Frio,1); // Imprime la temperatura con un decimal

lcd.print("\337"); // Imprime simbolo °

else { // Si no hay comunicación con el sensor porque se ha cortado el cable, etc.

lcd.clear();

lcd.setCursor(2,1);

lcd.print("Falla sensor"); // Falla el sensor.


digitalWrite(Relay,HIGH); // Apaga el motor.

while(1){ } // Detiene el programa.

void Termostato() {

if (Frio <= TempVal) {

digitalWrite(Relay,HIGH); RelayEstatus = 0; // Apaga el rele

lcd.setCursor(0,1); lcd.print(" ");

if (Frio > TempVal + MargenTemp) {

digitalWrite(Relay,LOW); RelayEstatus = 1; // Activa el rele

Você também pode gostar