Paso 3: El código:
Código de eco ducha Arduino
Julian Arnott y James Arnott 2014
//
Estamos usando el sensor de temperatura DS18B20 montado en la tubería de agua caliente de la ducha para activar un temporizador de 20 minutos.
Una vez que el temporizador ha seguido su curso, cambia los relés que cortan la energía a la bomba de la ducha.
Mientras que la temperatura del tubo supera la temperatura de disparo, el relé permanecerá conmutada
//
Podría agregar potes para que padres pueden ajustar la temperatura de conmutación y el tiempo de ducha.
cambio de temperatura entre 20 y 80 grados uso A0 (pin 23)
tiempo de ducha entre 5 y 40 minutos uso A1 (pin 24)
#include
#include
#define ONE_WIRE_BUS 3 / / cable de datos esté conectado en el pin 3 en el Arduino
OneWire oneWire(ONE_WIRE_BUS); Configuración de una instancia de oneWire para comunicarse con dispositivos OneWire
DallasTemperature sensors (& oneWire); Pasar nuestra referencia oneWire a temperatura de Dallas.
Asigne las direcciones de sus sensores de temperatura 1-Wire.
Consulte el tutorial sobre cómo obtener estas direcciones: http://www.hacktronics.com/Tutorials/arduino-1-wire-address-finder.html
Termómetro DeviceAddress = {0x28, 0x16, 0xA3, 0x84, 0 x 04, 0 x 00, 0 x 00, 0xC3};
flotador tempC;
int LEDPlataforma = 5; PIN D5 para el led1
LEDUFO int = 6; PIN D6 para el led2
relé 1 int = 7; PIN D7 para el relé 1
relé 2 int = 8; PIN D8 para el relé 2
int tempPot = 0; conectar el potenciómetro de 10K A temperatura (lineal) forma cónica a A0 entrada analógica
int timePot = 1; conectar el potenciómetro de 10K A temporizador forma cónica (lineal) a1 entrada analógica
int temperature_set;
int temperature_read;
int time_set;
int time_read;
int hasBeenSet = 0;
delaytimer int = 0;
void setup(void)
{
analogReference(EXTERNAL); Dile Arduino para utilizar el pin Aref para el voltaje analógico, (5v)
Serial.Begin(9600); iniciar el puerto serie
Sensors.Begin(); Puesta en marcha de la biblioteca
sensors.setResolution (termómetro, 10); Ajuste la resolución a 10 bit (suficiente?)
pinMode (LEDPlataforma, salida); configurar el pin led rojo (5) como una salida
pinMode (LEDUFO, salida); configurar el pin led verde (6) como una salida
pinMode (relé, 1 salida); configurar el pin del relé (7) como una salida
pinMode (salida de relé, 2); configurar el pin del relé (8) como una salida
digitalWrite (LEDPlataforma, bajo);
digitalWrite (LEDUFO, LOW);
digitalWrite (relé 1, bajo);
digitalWrite (relé 2, bajo);
temperature_read = analogRead(tempPot);
temperature_set = mapa (temperature_read, 0, 1023, 20, 80); temp min 20 grados C - max temp 80 grados
time_read = analogRead(timePot);
time_set = mapa (time_read, 0, 1023, 5, 40); tiempo min 5 minutos - tiempo máximo 40 minutos
}
void loop(void)
{
obtener temperatura
Serial.println ("a partir de 6 segundo retardo");
Delay(6000); 6 segundos
Serial.Print ("para temperature...\n\r");
sensors.requestTemperatures();
Serial.Print ("temperatura:");
printTemperature(Thermometer);
Tenga en cuenta que los controles para el Relais se invierten. es decir: baja y alta de
Esto es porque se invierte en la placa de relé
Serial.Print ("ajuste de temperatura:");
Serial.println(temperature_set);
Serial.Print ("ajuste de tiempo:");
Serial.println(time_set);
Si (tempC > temperature_set) {}
Serial.println ("*** Temp sobre determinado ***");
Si (hasBeenSet < 1) {}
Serial.println ("a partir de fijar retardo");
digitalWrite (LEDUFO, HIGH); led verde para mostrar que el temporizador está a punto de comenzar
mientras que (delaytimer < time_set) {}
Serial.Print ("temporizador de retraso:"); Serial.Print(delaytimer); Serial.Print ("time_set:"); Serial.println(time_set);
Delay(60000);
delaytimer = ++ delaytimer;
}
delaytimer = 0;
hasBeenSet = ++ hasBeenSet; no quiero empezar el retraso otra vez - va a tomar las edades de la tubería se enfríe ya que es
Serial.println ("relé a su vez en"); bajo operación normal, el relé no se energiza, para que encenderla cortará la energía a la bomba
digitalWrite (relé 1, HIGH);
digitalWrite (relé 2, alto);
digitalWrite (LEDPlataforma, HIGH); led rojo para indicar hemos cortar la corriente a la bomba
digitalWrite (LEDUFO, LOW); puede restablecer el verde ahora
}
} else {}
Serial.println ("*** Temp bajo límite ***");
volver al funcionamiento normal
activar relé ahora
Serial.println ("relay vuelta apagado");
digitalWrite (relé 1, bajo);
digitalWrite (relé 2, bajo);
digitalWrite (LEDPlataforma, bajo);
digitalWrite (LEDUFO, LOW);
Ahora falta comprobar que la temperatura otra vez y esperar hasta que le cae por debajo del umbral - así que ir a Inicio
el enfriamiento lento del agua en la tubería debe dar suficiente retraso aquí (en la práctica cuando el umbral se establece en 40 grados, el pipa lleva 23 minutos enfriar)
empezar todo el proceso nuevamente
hasBeenSet = 0;
}
Serial.println("***");
}
void printTemperature(DeviceAddress deviceAddress)
{
tempC = sensors.getTempC(deviceAddress);
Si (tempC ==-127.00) {}
Serial.Print ("Error al obtener la temperatura");
} else {}
Serial.Print ("C:");
Serial.println(tempC);
}
}