Control de rele con arduino dependiendo de la temperatura

Hola¡¡ Hace poco me compré el sensor de temperatura para arduino DS18B20, tambien me compre un relé compatible, lo que quiero hacer es muy sencillo y buscando codigo por internet he conseguido que funcionen por separado pero quiero que funcionen juntos y eso es lo que me está costando. Os comento:
Quiero que mi rele se abra cuando la temperatura sea mayor que 25ºC y que se cierre cuando sea menor que 25ºC.
Los codigos que he conseguido son los siguientes. Para el sensor de temperatura:

#include <OneWire.h>
#include <DallasTemperature.h>

OneWire ourWire(2);                //Se establece el pin 2  como bus OneWire

DallasTemperature sensors(&ourWire); //Se declara una variable u objeto para nuestro sensor

void setup() {
  delay(1000);
  Serial.begin(9600);
  sensors.begin();   //Se inicia el sensor
}

void loop() {
  sensors.requestTemperatures();   //Se envía el comando para leer la temperatura
  float temp = sensors.getTempCByIndex(0); //Se obtiene la temperatura en ºC

  Serial.print("Temperatura= ");
  Serial.print(temp);
  Serial.println(" C");
  delay(100);
}

Para el relé:

const int pinRELE = 7;

void setup() {
  pinMode(pinRELE, OUTPUT);
}

void loop() {
  digitalWrite(pinRELE, HIGH);
  delay(5000);
  digitalWrite(pinRELE, LOW);
  delay(5000);
}

Muchas gracias por la ayuda. :smiley:

Hola, no es tu primer post ya en el foro de Arduino, y no has usado las etiquetas correspondientes para publicar el código, te recomiendo que lo hagas, ahora para tu problema solo tienes que utilizar la condición

if(condicion)
{
   //Acciones si las condicion es verdadero
}
else 
{
   //Acciones si las condicion es falso
}

entonces implementado esto en tu código seria de la siguiente forma

#include <OneWire.h>
#include <DallasTemperature.h>

OneWire ourWire(2);                  // Se establece el pin 2 como bus OneWire
DallasTemperature sensors(&ourWire); // Se declara una variable u objeto para nuestro sensor

const int pinRELE = 7;

void setup()
{
    Serial.begin(9600);
    pinMode(pinRELE, OUTPUT);
    sensors.begin(); // Se inicia el sensor
}

void loop()
{
    static unsigned long tiempoAnteriorDatos = 0;
    sensors.requestTemperatures();           // Se envía el comando para leer la temperatura
    float temp = sensors.getTempCByIndex(0); // Se obtiene la temperatura en ºC
    if (millis() - tiempoAnteriorDatos >= 1000)
    {
        tiempoAnteriorDatos = millis();
        Serial.print("Temperatura= ");
        Serial.print(temp);
        Serial.println(" C");
    }

    // Comprueba el valor de la temperatura
    if (temp > 25)
    {
        digitalWrite(pinRELE, HIGH);
    }
    else
    {
        digitalWrite(pinRELE, LOW);
    }
}

Ahora si tu modulo tiene logica inversa tienes que cambiar en la parte de

 digitalWrite(pinRELE, HIGH);

HIGH por LOW y en la siguiente instrucción

digitalWrite(pinRELE, LOW);

LOW por HIGH.

muchas gracias y perdon por las etiquetas, he solucionado lo de los reles, ahora quiero que haga una cosa mas, quiero que cuando la T>25ºC espere 30 minutos y luego se encienda y cuando la T>25ºC espere 30 minutos y se apage, como puedo poner esa funcion?

Moderador
Te recomiendo que veas el privado que te he enviado.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.