buenas tardes desde colombia
necesito ayuda.
soy novato en arduino y estoy realizando un proyento el cual no logro hacer funcionar
este consiste en :
un control de temperatura sencillo que prende un rele como control( esta parte ya esta )
pero necesito que cuando llegue a cierta temperatura por ej 31 grados centígrados prenda un rele por un tiempo ej 15 minutos y luego que este relé se apague, se prenda otro rele por tiempo ej 10 minutos.
el problema es que no puedo usar delay por que tengo que mostrar temperatura el lcd al mismo tiempo (entonces seria millis pero logro hacer que funcione .
esta es la parte que si funciona
#include <LiquidCrystal.h>
#include <Wire.h>
#include "max6675.h"
int ktcSO = 22;
int ktcCS = 24;
int ktcCLK = 26;
MAX6675 ktc(ktcCLK, ktcCS, ktcSO);
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
//////////////////////////////////
int h = ktc.readCelsius(); // Lee la humedad temperatura lcd
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int pinrele=20; //Asignamos el pin 13 al rele
///////////////////////////////////////////////////////////
int pinrele2=17; //Asignamos el pin 13 al rele
int led13=30;
////////////////////////////////////////////////////////////////////////////////////
int control1=32;
int numero = 10;
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////
void setup()
{
Serial.begin(9600);
// Definimos la LCD con dimension 2x16 y definimos los caracteres que deben salir en las filas:
pinMode(pinrele,OUTPUT); //configura la salida
//tengo un pulsador conectado al pin 7 usando la resistencia pull-up
//cuando lo presiono leo cero
//////////////////////////////////////////////////////////////////////////////////////////
pinMode(control1,OUTPUT); //Declaramos el rele como salida
/////////////////////////////////////////////////////////////////////////////////////
pinMode(45,OUTPUT); //Declaramos el rele como salida
//Declaramos el boton como entrad
pinMode(pinrele2,OUTPUT); //Declaramos el rele como salida
digitalWrite(pinrele2,HIGH); //desactiva el rele
digitalWrite(pinrele,HIGH); //desactiva el rele
//Declaramos el rele como salida
/////////////////////////////////////////////////////////////////////////////////////////////////////////
lcd.begin(16, 2);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}
void loop()
{
//////////////////////////////////////////////////////////////////
{
int h = ktc.readCelsius(); // Lee la humedad temperatura lcd
lcd.setCursor(13, 0); //columna, fila
lcd.print(h);
lcd.setCursor(11, 0); //columna, fila
lcd.print("T");
Serial.print("Deg C = ");
Serial.println(ktc.readCelsius());
delay(300); //tiempo agua
///////////////////////////////////////////////////////////
}
if (h<33)
{
digitalWrite(control1,HIGH);
} //tiempo agua
//Enciende el LED control de temperatura
else //si no
digitalWrite(control1,LOW); //desactiva el rele
//////////////////////////////////////////////////////////////////////////////////////////////////////
}
No acabo de entender la secuencia.Hablas de un rele de control que no especificas como debe funcionar
y de un rele que cuando se llega a determinada temperatura se acciona durante 15 minutos y al acabar los 15 minutos se apaga dicho rele y se enciende otro rele durante 10 minutos.Porfavor ,se mas especifico para poder ir "al grano".
Bueno estoy como jose.
Mejoré tu código y me encuentro con que quieres que superada una temperatura 33 según tu código, actives el rele1 x T1 (15min) y luego se apaga y activa rele2 por T2. Okay y que pasa con la temperatura durante ese tiempo o no tiene importancia?
De todos modos esto es lo que hice: Supongo que cuando la temperatura supere tu valor (en este caso 33 grados), se haga la secuencia de reles sin importar que pase con la temperatura luego.
#include <LiquidCrystal.h>
#include <Wire.h>
#include "max6675.h"
#define ktcSO 22
#define ktcCS 24
#define ktcCLK 26
MAX6675 ktc(ktcCLK, ktcCS, ktcSO);
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
#define pinRele1 20 //Asignamos el pin 20 al rele1
#define pinRele2 17 //Asignamos el pin 17 al rele2
#define led13 30
#define control1 32
#define TIEMPO1 15*60*1000 // 15 min = 15 * 60 seg * 1000 mseg
#define TIEMPO2 10*60*1000 // 10 min = 10 * 60 seg * 1000 mseg
int h;
int numero = 10;
bool flag1 = false;
bool flag2 = false;
unsigned long startRele = 0;
unsigned long muestroTemp;
void setup(){
Serial.begin(9600);
// Definimos la LCD con dimension 2x16 y definimos los caracteres que deben salir en las filas:
lcd.begin(16, 2);
pinMode(pinRele1, OUTPUT); // configura la salida
// tengo un pulsador conectado al pin 7 usando la resistencia pull-up
// cuando lo presiono leo cero
pinMode(pinRele2, OUTPUT); // Declaramos el rele como salida
digitalWrite(pinRele1, HIGH); // desactiva el rele
digitalWrite(pinRele2, HIGH); // desactiva el rele
pinMode(control1,OUTPUT); // Declaramos el rele como salida
pinMode(45,OUTPUT); // Declaramos el rele como salida
// Declaramos el boton como entrada
}
void loop() {
if (millis() - muestroTemp > 1000) {
h = ktc.readCelsius(); // Lee la temperatura
lcd.setCursor(13, 0); //columna, fila
lcd.print(h);
lcd.setCursor(11, 0); //columna, fila
lcd.print("T");
Serial.print("Deg C = ");
Serial.println(ktc.readCelsius());
muestroTemp = millis();
}
if (h < 33) {
digitalWrite(control1,HIGH); // desactiva el rele
}
else {
digitalWrite(control1,LOW); // activa el rele
if (!flag1 && !flag2) {
startRele = millis();
digitalWrite(pinRele1, LOW); // activo Rele1
}
}
if (flag1) {
if (millis()-starRele >= TIEMPO1) {
digitalWrite(pinRele1, HIGH); // desactivo Rele1
digitalWrite(pinRele2, LOW); // activo Rele2
flag2 = true;
flag1 = false;
startRele = millis();
}
}
if (flag2) {
if (millis()-starRele >= TIEMPO2) {
digitalWrite(pinRele2, HIGH); // desactivo Rele2
flag2 = false;
}
}
}
gracias por la respuesta
veo que no tuve mucha claridad a explicarme.
la temperatura seguirá midiendo y controlando y mostrándose en la lcd por aparte.
lo importante es la secuencia uno por uno de los reles aunque.
en tu codigo la temperatura se pausa al iniciar la secuencia (como no me explique bien ) debera seguir midiendo
por otra parte lo ensaye moviendo los tiempos (TIEMPO2 10601000 // 10 min = 10 * 60 seg * 1000 mseg) de esta manera TIEMPO2 1601000 // 10 min = 10 * 60 seg * 1000 mseg pero no hubo secuencia se quedo prendido ?
si kme pueden ayudar
gracias
gracias por la pronta respuesta la verdad soy novato y hay voy entendiendo el tuyo para asi aprender un poco mas de este tema
mi problema es que el tuyo no da secuencias prende rele1 y así se queda no pasa nada mas.
supuestamente a los 15 minutos prendería el otro pero no es así se queda encendido.
(ya mire lo del long claramente)