Arduino como sustitucion de la ECU, controlador de la calefaccion y placa controladora del ventilador.
Abro este hilo para explicar el proceso de la creacuon de un sistema de control para una calefaccion EBERSPACHER D3LC pero que seguramente servira para casi cualquier calefaccion estatica, haciendo algunas pequeñas modificaciones.
Como tengo la centralita de mi eberspacher fastidiada y ya viene el invierno y el precio de una Ecu ronda los 250€ pues. Me hago la mia y aprobecho para mejorar el controlador de serie en mi t4 multivan.
(http://www.furgovw.org/galeria/fotos/gcab/mitimer0.jpg)
Tengo este timer, aue entre esto y un interruptor on/off... Bueno que apqrobecho que tengo el arduino y depaso lo mejoro unñoco poniendo le control poet temperatura.
La idea:
Arduino para reemplazar todo el control de bomba de gasoil, bujia, velocidades de ventilador y encendido apagado para un tiwmpo concreto o fijando una temperatura para toda la noche.
(http://www.furgovw.org/galeria/fotos/gcab/img_20161030_1246120.jpg)
Aqui unas pruebas alimentando la calefa con una fuente de alimentacion de ordenador.
(http://www.furgovw.org/galeria/fotos/gcab/img_20161030_1105240.jpg)
El grafico de los valores de resistencia que ofrece el sensor de temperatura de dentro de la calefa.
Funcionamiento:
Selecciono con un mando la opcion entre encender con un tiempo predeterminado o temperatura,(tambien se puede solo el ventilador, pal verano), se enciende el ventilador pa limpiar unpoco la camara, se enciende la bujia y empieza la bomba a bomhear lento, una vez que la resistencia detecta un valor de temperatura alto se deduce que hay llama asique ventilador al 100% y bomba rapido, y cuando llega a una temperatura cercana al sobrecalentamiento, menos gasoil para quemar no seme vaya a invendiar la furgo ;Dy asi hasta que se acabe el ciclo.
Pal control del ventilador y bomba de gasoil he usado dos mosfets y para la bujia un rele pero bueno tampoco voy a echar la chapa sobre montaje del circuito aqui, si a alguien le interesa el modelo o el montaje que pregunte .malabares
Ya ire adjuntando fotos .fotografo .fotografo
(http://www.furgovw.org/galeria/fotos/gcab/img_20160515_1439420.jpg)
El codigo lo pondre cuando lo termine, ire actualizando este post pero cualquier duda o si alguien lo quiere para hacerse su propio controlador que lo pida y selo paso.
Los materiales:
Un arduino .sombrero
Semsonr de temperatura LM35 (para la temperatura dentro de la furgo)
Un rele
Dos mosfets
Resistencias variass
Un mando infrarojo como losde los reproductores mp3para coche de los chinos
Un receptor de infrarojos
Una pantalla lcd y modulo i2c pa no tener 74939479 cables desde el arduino ala pantalla
Una calefa ;)
Cables y una placa para soldar todo
Y con esto y un bizcocho...
Todavia esta sin acabar pero espero que quede txulo y no me tenga qie comprar una calefa nueva.
AGUR!!
puf... la idea es buena pero yo no la montaba asi ni loco...
Y el sensor de sobretrabajo de la turbina?
Y el sensor de bloqueo de la turbina?
Y el sensor de fallo de llama (3 veces)
Y el sensor de bajo voltaje o sobre voltaje?
Asi por encima son los mas importantes, pero tienes muchos mas... inclusive que al reitera un fallo varias veces la maquina entre en bloqueo para revisar lo que falla...
Ten cuidado compañero que juegas con un aparato que esta quemando gasoil mientras duermes... ;D
La idea es buena, si la desarrollas del todo puede funcionar.
Por supuesto, esto es una explica cion muy simplificada del funcionamiento, esos factores ya los tengo en cuenta en el codigo, y todo se puede simplificar a que si pasado un tiempo la temperatura dentro de la camara de combustion no es la adecuada, inmediatamente parar todo y ya se vera la mañana siguiente que ha ocurrido.
Pasate por aqui
http://www.furgovw.org/index.php?topic=160490.msg1158900#msg1158900
Te sigo para ver cómo va yendo todo.
Una pregunta, ¿en lugar de un LM35, has pensado en el DS18B20? lo digo porque si hay que recoger varias temperaturas, el DS18B20 está direccionado de fábrica y se pueden conectar todos en un mismo par de cables. Eso ahorraría mucho hardware y por lo tanto espacio y complicaciones. Es sólo una sugerencia porque tengo poca idea de todo ésto.
Felicidades por empezar y gracias por compartir.
Salud!
-Genial .palmas
-El Arduino una vez más, va a ser genial dentro de nada, nos vamos a poder modular bien la gestión domótica de la furgo .ereselmejor
-Ánimo con el proyecto, si me gustaría cuando lo termines, acceder a la información y al exquema, sería bueno estudiarlo y aprender de ello :roll:
Gracias y un saludo furgonetero ;)
UNAS FOTOS:
Una vez la calefaccion este funcionando en el modo temperatura:
(http://www.furgovw.org/galeria/fotos/gcab/img_20161113_2315160.jpg)
El selector de modo
(http://www.furgovw.org/galeria/fotos/gcab/img_20161113_2313330.jpg)
El montaje:
(http://www.furgovw.org/galeria/fotos/gcab/img_20161113_2310080.jpg)
Yo me quedo por aquí, que tengo la del hidronic cascada y el principio de funcionamiento es el mismo... Aunque es algo en lo que da apuro tocar, ya que puede ser una bomba...
Enviado desde mi Aquaris X5 mediante Tapatalk
-Temperatura actual 20.02 :o ¿No me digas que te mide centésimas? .palmas
-Va tomando color y forma GO ;)
Parece que vas viento en popa! Y oye, le has sacado decimales al lm35? Los tiene? La verdad que es poco fiable ese sensor, si pudieras cambiar a otro seguro que te funciona mejor. Yo he hecho pruebas con un lm y según vas usándolo se va volviendo más errático...
Enviado desde mi Aquaris M5 mediante Tapatalk
Unas fotos de la la placa de cntrol ya soldada
Tiene 2 mosfet IRF540N que pueden desobra con la tension y corriente que nos pide el ventilador y la bomba, la bujia la controlare con un rele.
La original y la mia:, es una chapuzilla pero ya la he probado y funciona perfectmente, adenas, gracias al mosfet puedo controlar la velocidad del ventilador con el PWM del arduino.
(http://www.furgovw.org/galeria/fotos/gcab/img_20161114_1237030.jpg)
(http://www.furgovw.org/galeria/fotos/gcab/img_20161114_1233570.jpg)
(http://www.furgovw.org/galeria/fotos/gcab/img_20161114_1231310.jpg)
Al LM35 si que le voy a quitar los decimales porque bailan mucho, pero da suficientemente buenas medidas asique en principio usare este.
Moooooooooola
Yo tengo un a d3lc pero a 24voltios
Y recogí una airtronic d2 que solo vale para camiones Iveco,...por can bus
Bueno aqui el código: todavia no funciona perfectamente pero ya arranca, echando humareda jajaja ya pondre el nuevo cuando consiga que vaya perfecto!!
Me ha sido de gran ayuda lo hecho por barrigo en http://www.furgovw.org/index.php?topic=258432.15
#include <Wire.h>
#include <LiquidCrystal_I2C.h>//Recuerda descargar la libreria en electrocrea.com
#include <MsTimer2.h>
#include <IRremote.h> // use the library for IR
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);//Direccion de LCD
byte bat[8] = {
0b00000,
0b00000,
0b10001,
0b11111,
0b11111,
0b11111,
0b00000,
0b00000
};
byte term[8] = {
0b00100,
0b00100,
0b00100,
0b01110,
0b11111,
0b11111,
0b01110,
0b00000
};
////////////////////////////////7pins//////////////////
#define receptorPin 10 // pin pal receptor
#define ventiladorPin 9
#define bombaPin 8
#define bujiaPin 7
#define voltimetro A0
#define RESET 13
#define termometroPin A1 // pin pal sensor temp
int llamaPin = 2; //pin sensor llama
//////////////////////////////////////////////////////
//////////////7aldagai//////
int intentos = 0;
int tiempo_akt = 0;
int temp_akt = 10;
unsigned long Ahora = 0;
float temp = 0.00;
int mando;
int menuorain = 0;
int raw = 0;
int Vin = 5;
float Vout = 0;
float R1 = 1000;
float R2 = 0;
float buffer = 0;
unsigned long tiempo_final;
unsigned long ant = 0; //aktualizazion txek
float temperatura_final;
boolean piztuta = LOW;
boolean bomba = LOW;
boolean tiempo_b = LOW;
boolean temperatura_b = LOW;
unsigned long TiempoAnterior2 = 0;
float t = 0;
int sel = 50; //seleccion velocidad ventilador
int veces_bomba = 0;
int t_off = 14; //Cantidad de gasoil adecuado para arranque, ventilador 60%
int PWM_ventilador = 0;
/////////////////////////////////////
IRrecv irrecv(receptorPin); // create instance of 'irrecv'
decode_results results;
void setup() {
Serial.print("\nHOOOLA");
pinMode(ventiladorPin, OUTPUT);
///analoglWrite(ventiladorPin,0);
pinMode(bujiaPin, OUTPUT);
digitalWrite(bujiaPin, HIGH);
pinMode(bombaPin, OUTPUT);
digitalWrite(bombaPin, LOW);
lcd.begin(16, 2); // Indicamos medidas de LCD
lcd.createChar(0, bat);
lcd.createChar(1, term);
lcd.setBacklight(0);
ant = millis();
irrecv.enableIRIn(); // Start the receiver
Serial.begin(9600);
}
void loop() {
//actualizaciones continuas
if (irrecv.decode(&results))
{
mando = hartuIR();
irrecv.resume(); // receive the next value
if (piztuta == HIGH && mando == 10) {
itzali();
} else if (piztuta == LOW && mando == 10) {
///Sekuenzia encendido
lcd.setBacklight(1);
lcd.clear();//Elimina todos los simbolos del LCD
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("EBERSPACHER D3L");
lcd.setCursor(0, 1);
lcd.write((uint8_t)1);
lcd.print(temperatura());
Serial.print("\nHOOOLA");
delay(2000);
piztuta = HIGH;
selektmenu(mando);
} else if (piztuta == HIGH) {
selektmenu(mando);
// Serial.print(mando);
//Serial.print(" <--ditxo porel mando\n");
}
}
if (piztuta == HIGH){
if (millis() > (ant + 5000)) {
ant = millis();
txek();//comprobasionesencendido
}
}
}
/////////////////////////////////////////////////////////////////////////////////////7
/////////////////FUNTXZIOAK////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
void txek() {
//Serial.print("dentrodetxek\n");
// Serial.print(ant);
if (tiempo_b == HIGH) {
if (tiempo_final >= millis()) {
lcd.clear();
lcd.print("Faltan-> ");
lcd.print((tiempo_final - millis()) / 60000);
lcd.print("mins");
lcd.setCursor(0, 1);
lcd.write((uint8_t)1);
lcd.print(temperatura());
} else if (tiempo_final <= millis()) {
itzali();
}
llamakontrol();
Serial.print("dentrodetxektiempo\n");
}
if (temperatura_final) {
if (temperatura_b == HIGH) {
//regulador();
if (temperatura_final >= temperatura()) {
lcd.clear();
lcd.write((uint8_t)1);
lcd.print(" Actual->");
lcd.print(temperatura());
lcd.setCursor(0, 1);
lcd.write((uint8_t)1);
lcd.print(" Final-> ");
lcd.print(temperatura_final);
llamakontrol();
} else if (temperatura_final <= temperatura()) {
itzali();
}
} else if (temperatura_b == LOW) {
lcd.setBacklight(1);
lcd.clear();//Elimina todos los simbolos del LCD
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("EBERSPACHER D3L");
lcd.setCursor(0, 1);
lcd.write((uint8_t)1);
lcd.print(temperatura());
Serial.print("\nHOOOLA");
piztuta = HIGH;
temperatura_b = HIGH;
delay(2000);
piztu(100);
}
//Serial.print("dentrodetxektemp\n");
}
}
/////////////////////////////////////////////////////////////////////////////////////7
/////////////////FUNTXZIOAK////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
void selektmenu(int mandu) {
switch (menuorain)
{
case 0: empezarmenu(mandu) ; break;
case 1: empezar_temp(mandu); break;
case 2: empezar_tiempo(mandu); break;
case 3: empezarmenu2(mandu); break;
case 4: piztu(mandu) ; break;
case 5: ventiselekt(mandu) ; break;
case 6: datos(mandu) ; break;
}
}
void empezarmenu(int mandu)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("1-> Temperatura");
lcd.setCursor(0, 1);
lcd.print("2-> Tiempo");
Serial.print("\nPLAY-> empezar ya\n1-> empezar con temperatura\n2-> empezar con tiempo");
if (mandu == 10) {
empezar_ya();
} else if (mando == 1) {
menuorain = 1;
empezar_temp(100);
} else if (mando == 2) {
menuorain = 2;
empezar_tiempo(100);
} else if (mando == 15) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("3-> Ventilador");
lcd.setCursor(0, 1);
lcd.print("4-> Datos");
menuorain = 3;
}
}
void empezarmenu2(int mandu)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("3-> Ventilador");
lcd.setCursor(0, 1);
lcd.print("4-> Datos");
Serial.print("\n3-> ventilador\n4-> datos");
if (mandu == 3) {
ventiselekt(100);
menuorain = 5;
} else if (mando == 4) {
menuorain = 6;
datos(100);
} else if (mando == 14) {
menuorain = 0;
empezarmenu(100);
}
}
void empezar_ya() {
Serial.print("\nempezarya");
}
void datos(int mandu) {
Serial.print("\ndatos");
lcd.clear();
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.write((uint8_t)1);
lcd.print(temperatura());
lcd.print(" ");
lcd.write((uint8_t)0);
lcd.print(volt());
lcd.print("V");
lcd.setCursor(0, 1);
lcd.print("R");
lcd.print(llama());
if (mando == 14) {
lcd.clear();
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("1-> Temperatura");
lcd.setCursor(0, 1);
lcd.print("2-> Tiempo");
menuorain = 0;
}
}
void ventiselekt(int mandu) {
Serial.print("\nvwntiselekt");
if (mandu == 100) {
lcd.clear();//Elimina todos los simbolos del LCD
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("Elegir velocidad:");
lcd.setCursor(0, 1);
lcd.print("50");
Serial.print("\nElegir temperatura->>>");
} else {
if (mandu == 18) {
if (sel < 250) {
sel = sel + 10;
} else {
sel = 255;
}
Serial.print("\n ACTUAL->");
Serial.print(sel);
lcd.setCursor(0, 1);
lcd.print(sel);
} else if (mandu == 17) {
if (sel > 0) {
sel = sel - 10;
} else {
sel = 0;
}
Serial.print(sel);
lcd.setCursor(0, 1);
lcd.print(sel);
lcd.setCursor(6, 1);
} else if (mando == 16) {
Serial.print("\n ACTUAL->");
Serial.print("velozidad selekzionada --->>");
Serial.print(sel);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Velocidad:");
lcd.setCursor(0, 1);
lcd.print(sel);
delay(1000);
ventil(sel);
}
}
}
void empezar_temp(int mandu) {
//Serial.print("\nempezartemp");
menuorain = 1;
if (mandu == 100) {
lcd.clear();//Elimina todos los simbolos del LCD
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("Elegir temp:");
lcd.setCursor(0, 1);
lcd.print("10");
lcd.setCursor(6, 1);
lcd.print(temperatura());
Serial.print("\nElegir temperatura->>>");
} else {
if (mandu == 18) {
temp_akt = temp_akt + 1;
Serial.print("\n ACTUAL->");
Serial.print(temp_akt);
lcd.setCursor(0, 1);
lcd.print(temp_akt);
lcd.setCursor(6, 1);
t = temperatura();
lcd.print(t);
} else if (mandu == 17) {
temp_akt = temp_akt - 1;
Serial.print(temp_akt);
lcd.setCursor(0, 1);
lcd.print(temp_akt);
lcd.setCursor(6, 1);
t = temperatura();
lcd.print(t);
} else if (mando == 16) {
Serial.print("\n ACTUAL->");
temperatura_final = temp_akt;
Serial.print("Temperatura selekzionada --->>");
Serial.print(temperatura_final);
temperatura_b = HIGH;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temperatura:");
lcd.setCursor(0, 1);
lcd.print(temperatura_final);
delay(1000);
piztu(100);
}
}
}
void empezar_tiempo(int mandu) {
menuorain = 2;
if (mandu == 100) {
lcd.clear();//Elimina todos los simbolos del LCD
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("Elegir tiempo:");
lcd.setCursor(0, 1);
lcd.print("0 mins");
Serial.print("\nelegir tiempo en minutos");
} else {
if (mando == 18) {
tiempo_akt = tiempo_akt + 5;
lcd.setCursor(0, 1);
lcd.print(tiempo_akt);
lcd.print(" mins");
Serial.print("\n ACTUAL->");
Serial.print(tiempo_akt);
//empezar_tiempo();
} else if (mando == 17) {
tiempo_akt = tiempo_akt - 5;
lcd.setCursor(0, 1);
lcd.print(tiempo_akt);
lcd.print(" mins");
Serial.print("\n ACTUAL->");
Serial.print(tiempo_akt);
} else if (mando == 16) {
tiempo_b = HIGH;
tiempo_final = millis() + tiempo_akt * 60000;
Serial.print("Tiempo ofisssial--->>");
Serial.print(tiempo_akt);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Tiempo:");
lcd.setCursor(0, 1);
lcd.print(tiempo_akt);
lcd.print(" mins");
delay(1000);
piztu(100);
}
}
}
void piztu(int mandu)
{
//empieza sekuencia
//garbiketa
if (llama() > 1220) {
for (int s = 0; s <= 100; s++)
{
analogWrite(ventiladorPin, s); //enciendo el ventilador poco a poco hasta el 50% para limpiar la caldera
delay(20);
}
analogWrite(ventiladorPin, 100);
while (llama() < 1220) {
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("DEMASIAU CALIENTE");
delay(1000);
lcd.setCursor(0, 1); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print(llama());
lcd.print(">1270, 50");
delay (1000);
}
}
/////////////////////////sekuencia encendido
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("VENT ON");
//////////////////////////7
ventiladorf(40);
///////////////////////////
lcd.setCursor(0, 1);
lcd.print("BUJIA ON");
Serial.print("\n VENT ON");
Serial.print("\nBUJIA ON");
lcd.clear();
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("BUJIA ON");
digitalWrite(bujiaPin, LOW);
lcd.setCursor(0, 1);
///////////////////////////////////bujia calentando
for (int s = 0; s <= 15; s++)
{
lcd.print(s);
Serial.print("\n");
Serial.print(s);
delay(1000);
}
///////////////////////////////////////////////
lcd.clear();
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("BOMBA ON");
delay(100);
lcd.clear();
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("ESPERANDO LLAMA");
bomba = HIGH;
////////////////////////////
t_off=15;//bomaba mientras encendido
//////////////////////////
//unos pulsos para llenarlo
for (int s = 0; s <= 10; s++)
{
digitalWrite( bombaPin, 1);
delay(30);
digitalWrite( bombaPin, 0);
}
unsigned long startdenbora=millis();
unsigned long kount=millis();
while (llama() < 1200) { //esperandop a que se caliente
if (millis() > kount+300) {
kount=millis();
if (llama() < 1200 ) {
Serial.print("\nesperando llama=");
Serial.print(llama());
lcd.setCursor(0, 1); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print(llama());
lcd.print("<1380, 100");
}
//////////////////// control stasrt tiempo
if (millis() > startdenbora+30000) {
Serial.print("se ha pasau de tiempo");
itzali();
}
///////////////////
}
}
digitalWrite(bujiaPin, HIGH);
MsTimer2::set(100, bombaf);
MsTimer2::start();
Serial.print("\n BOMBA ON piztuakabau");
////////////////////////////
t_off=10;//bomaba despues de encendido
//////////////////////////
lcd.clear();
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("LLAMA DETECTADA");
delay(1000);
ventiladorf(255);//ventiladro atope
txek();
}
int ventiladorf(int vel){
if (PWM_ventilador != vel)
{
if(PWM_ventilador > vel)
{
for(int s = PWM_ventilador; s > vel; s--)
{
analogWrite(ventiladorPin,s);
delay(100);
}
}
else if(PWM_ventilador < vel)
{
for(int s = PWM_ventilador; s < vel; s++)
{
analogWrite(ventiladorPin,s);
delay(100);
}
}
}
PWM_ventilador=vel;
}
void regulador()
{
int diferencia = 0;
diferencia = temperatura_final - temperatura();
if (diferencia >= 21) {
t_off = 9;
}
else if (diferencia >= 19 && diferencia < 21) {
t_off = 11;
}
else if (diferencia >= 17 && diferencia < 19) {
t_off = 13;
}
else if (diferencia >= 15 && diferencia < 17) {
t_off = 15;
}
else if (diferencia >= 13 && diferencia < 15) {
t_off = 17;
}
else if (diferencia >= 11 && diferencia < 13) {
t_off = 19;
}
else if (diferencia >= 9 && diferencia < 11) {
t_off = 21;
}
else if (diferencia >= 7 && diferencia < 9) {
t_off = 23;
}
else if (diferencia >= 5 && diferencia < 7) {
t_off = 25;
}
else if (diferencia >= 3 && diferencia < 5) {
t_off = 27;
}
else if (diferencia < 3) {
t_off = 29;
}
seleccion();
}
void seleccion()
{
if (t_off < 30 && t_off >= 28)
{
t_off = 29;
PWM_ventilador = 80;
}
else if (t_off < 28 && t_off >= 26)
{
t_off = 27;
PWM_ventilador = 90;
}
else if (t_off < 26 && t_off >= 24)
{
t_off = 25;
PWM_ventilador = 100;
}
else if (t_off < 24 && t_off >= 22)
{
t_off = 23;
PWM_ventilador = 110;
}
else if (t_off < 22 && t_off >= 20)
{
t_off = 21;
PWM_ventilador = 120;
}
else if (t_off < 20 && t_off >= 18)
{
t_off = 19;
PWM_ventilador = 130;
}
else if (t_off < 18 && t_off >= 16)
{
t_off = 17;
PWM_ventilador = 142;
}
else if (t_off < 16 && t_off >= 14)
{
t_off = 15;
PWM_ventilador = 155;
}
else if (t_off < 14 && t_off >= 12)
{
t_off = 13;
PWM_ventilador = 170;
}
else if (t_off < 12 && t_off >= 10)
{
t_off = 11;
PWM_ventilador = 185;
}
else if (t_off < 10 && t_off >= 9)
{
t_off = 9;
PWM_ventilador = 200;
}
}
void itzali()
{
piztuta = LOW;
bomba = LOW;
tiempo_b = LOW;
temperatura_b = LOW;
MsTimer2::stop();
digitalWrite(bombaPin, 0);
digitalWrite(bujiaPin, 0);
lcd.clear();
lcd.print("APAGANDO");
lcd.setCursor(0, 1);
lcd.print("BOMBA");
delay(1000);
lcd.setCursor(0, 1);
lcd.print("BUJIA");
delay(1000);
int llamav = llama();
analogWrite(ventiladorPin, 150);
while (llamav > 1250) {
llamav = llama();
lcd.setCursor(0, 1);
lcd.print("VENTILADOR: ");
lcd.print(llamav);
delay(2000);
}
analogWrite(ventiladorPin, 150);
lcd.setCursor(0, 1);
lcd.print("VENTILADOR");
delay(1000);
lcd.setCursor(0, 1);
lcd.print("====AGURR====");
delay(1000);
Serial.print("\nAGURRRRR");
lcd.clear();
delay(1000);
lcd.setBacklight(0);
}
float llama()
{
raw = analogRead(llamaPin);
if (raw)
{
buffer = raw * Vin;
Vout = (buffer) / 1024.0;
buffer = (Vin / Vout) - 1;
R2 = R1 * buffer;
Serial.print("Vout: ");
Serial.println(Vout);
Serial.print("SENSOR LLAMA: ");
Serial.println(R2);
return R2;
}
}
void ventil(int potensia)
{
int s = 0;
while ( s <= potensia)
{
analogWrite(ventiladorPin, s); //enciendo el ventilador poco a poco hasta el 50% para limpiar la caldera
delay(20);
s++;
}
analogWrite(ventiladorPin, potensia);
}
float temperatura()
{
int temp_val = analogRead(termometroPin);
float mv = (temp_val / 1024.0) * 5000;
float cel = mv / 10;
return cel;
}
float volt()
{
float vout = 0.0;
float vin = 0.0;
float R1 = 100000.0; // resistance of R1 (100K) -see text!
float R2 = 10000.0; // resistance of R2 (10K) - see text!
int value = 0;
value = analogRead(voltimetro);
vout = (value * 5.0) / 1024.0; // see text
vin = vout / (R2 / (R1 + R2));
if (vin < 0.09) {
vin = 0.0; //statement to quash undesired reading !
}
return vin;
}
void bombaf() {
veces_bomba++;
if (bomba == HIGH)
{
bomba = LOW;
}
else if (veces_bomba >= t_off)
{
bomba = HIGH;
veces_bomba = 0;
}
digitalWrite( bombaPin, bomba);
if (bomba == HIGH){
// lcd.setCursor(15, 1);
// lcd.print("B");
Serial.print("\nbombA: ");
Serial.print(bomba);
Serial.print("\ntiempo: ");
Serial.print(millis());
}
}
void llamakontrol() {
int orain = 0;
orain = llama();
if (orain < 1200) {
//nollama
} else if (orain > 1200 && orain < 1800) {
//funciona bien le falta mas
} else if (orain > 1800 && orain < 2000) {
//bajar bomba
} else if (orain > 2100) {
//sobrecalentamiento
}
}
int hartuIR() // takes action based on IR code received
{
switch (results.value)
{
case 0xFFA25D: return (10); break; //on
case 0xFF629D: return (11); break; //mode
case 0xFFE21D: return (12); break; //mute
case 0xFF22DD: return (13); break; //play
case 0xFF02FD: return (14); break; //prev
case 0xFFC23D: return (15); break; //next
case 0xFFE01F: return (16); break; //eq
case 0xFFA857: return (17); break; //-
case 0xFF906F: return (18); break; //+
case 0xFF6897: return (0); break;
case 0xFF9867: return (19); break; //aleatrorio
case 0xFFB04F: return (20); break; //u/sd
case 0xFF30CF: return (1); break;
case 0xFF18E7: return (2); break;
case 0xFF7A85: return (3); break;
case 0xFF10EF: return (4); break;
case 0xFF38C7: return (5); break;
case 0xFF5AA5: return (6); break;
case 0xFF42BD: return (7); break;
case 0xFF4AB5: return (; break;
case 0xFF52AD: return (9); break;
default: return (1000);
}
delay(500);
}
Joder, flipo con vosotros. Sois unos cracks.
Ya esta todo montado y funcionando perfectamente. No echa nada de humo(la foto es de las pruebas) tiene dos modos de velocidad y control de temperatura, todo funciona perfecto pero me falta mejorar algunos aspectos de seguridad.
Abajo os dejo el código.
Ademas del control de la eberspacher, ya que estaba le he puesto dos medidores de tempretura, (interior y exterior) y tambien un voltimetro que aprobecho para controlar tambien la calefacción
(http://www.furgovw.org/galeria/fotos/gcab/img_20161209_1322100.jpg)
(http://www.furgovw.org/galeria/fotos/gcab/img_20161209_1210540.jpg)
(http://www.furgovw.org/galeria/fotos/gcab/img_20161128_1252470.jpg)
(http://www.furgovw.org/galeria/fotos/gcab/gy0.jpg)
CODIGO:>
//librerias
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <MsTimer2.h>
#include <RCSwitch.h>
//fin librerias
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);//Direccion de LCD
RCSwitch mySwitch = RCSwitch();
//DEFINES
byte bat[8] = {
0b00000,
0b00000,
0b10001,
0b11111,
0b11111,
0b11111,
0b00000,
0b00000
};
byte term[8] = {
0b00100,
0b00100,
0b00100,
0b01110,
0b11111,
0b11111,
0b01110,
0b00000
};
#define ventiladorPin 9
#define bombaPin 5
#define bujiaPin 7
#define voltimetro A0
#define termometroPin A1 // pin pal sensor temp
int llamaPin = 2; //pin sensor llama
//FIN DEFINES
//START VARIABLES
int intentos = 0;
int tiempo_akt = 0;
int temp_akt = 10;
unsigned long Ahora = 0;
float temp = 0.00;
int mando;
unsigned long tiempo_final;
unsigned long ant = 0; //aktualizazion txek
int temperatura_final;
boolean bomba = LOW;
unsigned long TiempoAnterior2 = 0;
int sel = 50; //seleccion velocidad ventilador
int veces_bomba = 0;
int t_off = 14; //Cantidad de gasoil adecuado para arranque, ventilador 60%
int PWM_ventilador = 0;
int estado=0;
/*
* 0->apagau
* 1->encendido menu 1
* 2->encendido menu 2
* 3->menu ventilador
* 4-menu datos
* 5->menu sel temp
* 6-Menusel tiempo
* 7->`piztu
* 8->espera tiempo
* 9->espera temp
* 10-> apagando
* 11-> apagado control temp
12->espera tiempo atope
13->espera temp atope
*
14->en marca motor
* on->1332531
* ok->1332540
* menos->1332675
* mas->1332684
* izk->1332995
*dtxa-> 1333004
*
*/
//FIN VARIABLES
void setup() {
Serial.print(F("\nHOOOLA"));
analogReference(INTERNAL);
////PIN
pinMode(ventiladorPin, OUTPUT);
///analoglWrite(ventiladorPin,0);
pinMode(bujiaPin, OUTPUT);
digitalWrite(bujiaPin, HIGH);
pinMode(bombaPin, OUTPUT);
digitalWrite(bombaPin, LOW);
///FINPIN
lcd.begin(16, 2); // Indicamos medidas de LCD
lcd.createChar(0, bat);
lcd.createChar(1, term);
lcd.setBacklight(0);
ant = millis();
mySwitch.enableReceive(0);
Serial.begin(9600);
}
void loop() {
if (mySwitch.available()) {
int value = mySwitch.getReceivedValue();
mando=hartuRC(value);
menus(mando);
mySwitch.resetAvailable();
mando=0;
}
if (estado>6){
if (millis() > (ant + 5000)) {
ant = millis();
txek(100);//comprobasionesencendido
}
}
}
/////////////////FUNTXZIOAK////////////////////////////////////////////
void txek(int mandu) {
if (volt()>13&&estado!=14){
estado=14;
lcd.setBacklight(1);
lcd.clear();//Elimina todos los simbolos del LCD
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("EBERSPACHER D3L");
lcd.setCursor(0, 1);
lcd.write((uint8_t)1);
lcd.print(temperatura());
}
if (mandu!=100){
if (mandu==6 && estado==8){
estado=12;
t_off=1;//bomaba despues de encendido
analogWrite(ventiladorPin,240);
} else if (mandu==5 && estado==12){
estado=8;
////////////////////////////
t_off=5;//bomaba despues de encendido
analogWrite(ventiladorPin,90);
//////////////////////////
} else if (mandu==6 && estado==9){
estado=13;
t_off=1;//bomaba despues de encendido
analogWrite(ventiladorPin,240);
} else if (mandu==5 && estado==13){
estado=9;
////////////////////////////
t_off=5;//bomaba despues de encendido
analogWrite(ventiladorPin,90);
//////////////////////////
} else if(mandu==3){
if(estado==8||estado==12){
tiempo_final--;
txek(100);
}else if(estado==9||estado==13){
temperatura_final--;
txek(100);
}
}else if(mandu=4){
if(estado==8||estado==12){
tiempo_final++;
txek(100);
}else if(estado==9||estado==13){
temperatura_final++;
txek(100);
}
}
}
if (estado == 8|| estado==12) {
if (tiempo_final >= millis()) {
lcd.clear();
lcd.print("Faltan-> ");
lcd.print((tiempo_final - millis()) / 60000);
lcd.print("mins");
lcd.setCursor(0, 1);
lcd.write((uint8_t)1);
lcd.print(temperatura());
lcd.print("L->");
lcd.print(llama());
} else if (tiempo_final <= millis()) {
itzali();
}
// llamakontrol();
Serial.print(F("dentrodetxektiempo\n"));
}
if (temperatura_final) {
if (estado == 9 || estado == 13) {
if (temperatura_final >= temperatura()) {
lcd.clear();
lcd.write((uint8_t)1);
lcd.print(" Actual->");
lcd.print(temperatura());
lcd.setCursor(0, 1);
lcd.write((uint8_t)1);
lcd.print(" Final-> ");
lcd.print(temperatura_final);
} else if (temperatura_final <= temperatura()) {
estado=11;
itzali();
}
} else if (estado == 11 && temperatura_final >= temperatura()) {
lcd.setBacklight(1);
lcd.clear();//Elimina todos los simbolos del LCD
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("EBERSPACHER D3L");
lcd.setCursor(0, 1);
lcd.write((uint8_t)1);
lcd.print(temperatura());
Serial.print(F("\nHOOOLA"));
estado = 9;
delay(2000);
piztu(100);
}
}
}
void menus(int mandu) {
/*
* 0->apagau
* 1->encendido menu 1
* 2->encendido menu 2
* 3->menu ventilador
* 4-menu datos
* 5->menu sel temp
* 6-Menusel tiempo
* 7->`piztu
* 8->espera tiempo
* 9->espera temp
* 10-> apagando
* 11-> apagado control temp
*
*/
if (mandu!=0)
{
Serial.print(mandu);
if (estado == 0 && mandu==1) {
lcd.setBacklight(1);
lcd.clear();//Elimina todos los simbolos del LCD
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("EBERSPACHER D3LC");
lcd.setCursor(0, 1);
lcd.write((uint8_t)1);
lcd.print(temperatura());
Serial.print(F("\nHOOOLA"));
delay(2000);
estado=1;
selektmenu(mando);
} else if (estado!=0 && mandu==1) {
//itzali();
} else {
selektmenu(mandu);
}
}
}
void selektmenu(int mandu) {
switch (estado)
{
case 1: empezarmenu(mandu) ; break;
case 2: empezarmenu2(mandu); break;
case 3: ventiselekt(mandu) ; break;
case 4: datos(mandu) ; break;
case 5: empezar_temp(mandu); break;
case 6: empezar_tiempo(mandu); break;
case 7: piztu(mandu) ; break;
case 8: txek(mandu) ; break;
case 9: txek(mandu) ; break;
case 12: txek(mandu) ; break;
case 13: txek(mandu) ; break;
}
}
void empezarmenu(int mandu)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("1-> Temperatura");
lcd.setCursor(0, 1);
lcd.print("2-> Tiempo");
Serial.print(F("\nPLAY-> empezar ya\n1-> empezar con temperatura\n2-> empezar con tiempo"));
if (mandu == 1) {
empezar_ya();
} else if (mando == 3) {
estado = 5;
empezar_temp(100);
} else if (mando == 4) {
estado = 6;
empezar_tiempo(100);
} else if (mando == 6) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("3-> Ventilador");
lcd.setCursor(0, 1);
lcd.print("4-> Datos");
estado = 2;
}
}
void empezarmenu2(int mandu)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("1-> Ventilador");
lcd.setCursor(0, 1);
lcd.print("2-> Datos");
Serial.print(F("\n3-> ventilador\n4-> datos"));
if (mandu == 3) {
ventiselekt(100);
estado = 3;
} else if (mando == 4) {
estado = 4;
datos(100);
} else if (mando == 5) {
estado = 1;
empezarmenu(100);
}
}
void empezar_ya() {
Serial.print(F("\nempezarya"));
}
void datos(int mandu) {
Serial.print(F("\ndatos"));
lcd.clear();
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.write((uint8_t)1);
lcd.print(temperatura());
lcd.print(" ");
lcd.write((uint8_t)0);
lcd.print(volt());
lcd.print("V");
lcd.setCursor(0, 1);
lcd.print("R");
lcd.print(llama());
if (mando == 5) {
lcd.clear();
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("1-> Temperatura");
lcd.setCursor(0, 1);
lcd.print("2-> Tiempo");
estado=1;
}
}
void ventiselekt(int mandu) {
Serial.print(F("\nvwntiselekt"));
if (mandu == 100) {
lcd.clear();//Elimina todos los simbolos del LCD
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea
lcd.print("Elegir velocidad:");
lcd.setCursor(0, 1);
lcd.print("50");
Serial.print(F("\nElegir temperatura->>>"));
} else {
if (mandu == 4) {
if (sel < 250) {
sel = sel + 10;
} else {
sel = 255;
}
Serial.print(F("\n ACTUAL->"));
Serial.print(sel);
lcd.setCursor(0, 1);
lcd.print(sel);
} else if (mandu == 3) {
if (sel > 0) {
sel = sel - 10;
} else {
sel = 0;
}
Serial.print(sel);
lcd.setCursor(0, 1);
lcd.print(sel);
lcd.setCursor(6, 1);
} else if (mando == 2) {
Serial.print(F("\n ACTUAL->"));
Serial.print(F("velozidad selekzionada --->>"));
Serial.print(sel);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Velocidad:");
lcd.setCursor(0, 1);
lcd.print(sel);
delay(1000);
ventil(sel);
}
}
}
void empezar_temp(int mandu) {
estado = 5;
if (mandu == 100) {
lcd.clear();//Elimina todos los simbolos del LCD
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("Elegir temp:");
lcd.setCursor(0, 1);
lcd.print("10");
lcd.setCursor(6, 1);
lcd.print(temperatura());
Serial.print(F("\nElegir temperatura->>>"));
} else {
if (mandu == 4) {
temp_akt++;
Serial.print(F("\n ACTUAL->"));
Serial.print(temp_akt);
lcd.setCursor(0, 1);
lcd.print(temp_akt);
lcd.setCursor(6, 1);
lcd.print(temperatura());
} else if (mandu == 3) {
temp_akt--;
Serial.print(temp_akt);
lcd.setCursor(0, 1);
lcd.print(temp_akt);
lcd.setCursor(6, 1);
lcd.print( temperatura());
} else if (mando == 2) {
Serial.print(F("\n ACTUAL->"));
temperatura_final = temp_akt;
Serial.print(F("Temperatura selekzionada --->>"));
Serial.print(temperatura_final);
estado=9;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temperatura:");
lcd.setCursor(0, 1);
lcd.print(temperatura_final);
estado = 9;
delay(1000);
piztu(100);
}
}
}
void empezar_tiempo(int mandu) {
if (mandu == 100) {
lcd.clear();//Elimina todos los simbolos del LCD
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("Elegir tiempo:");
lcd.setCursor(0, 1);
lcd.print("0 mins");
Serial.print(F("\nelegir tiempo en minutos"));
} else {
if (mando == 4) {
tiempo_akt = tiempo_akt + 5;
lcd.setCursor(0, 1);
lcd.print(tiempo_akt);
lcd.print(" mins");
Serial.print(F("\n ACTUAL->"));
Serial.print(tiempo_akt);
//empezar_tiempo();
} else if (mando == 3) {
tiempo_akt = tiempo_akt - 5;
lcd.setCursor(0, 1);
lcd.print(tiempo_akt);
lcd.print(" mins");
Serial.print(F("\n ACTUAL->"));
Serial.print(tiempo_akt);
} else if (mando == 2) {
tiempo_final = millis() + tiempo_akt * 60000;
Serial.print(F("Tiempo ofisssial--->>"));
Serial.print(tiempo_akt);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Tiempo:");
lcd.setCursor(0, 1);
lcd.print(tiempo_akt);
lcd.print(" mins");
estado=8;
delay(1000);
piztu(100);
}
}
}
void piztu(int mandu){
if (llama() > 1200) {
for (int s = 0; s <= 100; s++)
{
analogWrite(ventiladorPin, s); //enciendo el ventilador poco a poco hasta el 50% para limpiar la caldera
delay(20);
}
analogWrite(ventiladorPin, 100);
while (llama() > 1220) {
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("DEMASIAU CALIENTE");
delay(1000);
lcd.setCursor(0, 1); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print(llama());
lcd.print(">1220, 50");
delay (1000);
}
}
/////////////////////////sekuencia encendido
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("VENT ON");
//////////////////////////
PWM_ventilador=60;
analogWrite(ventiladorPin,PWM_ventilador);
t_off=1;
///////////////////////////
Serial.print("\n VENT ON");
Serial.print("\nBUJIA ON");
lcd.clear();
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("BUJIA ON");
digitalWrite(bujiaPin, LOW);
lcd.setCursor(0, 1);
///////////////////////////////////bujia calentando
for (int s = 0; s <= 30; s++)
{
lcd.clear();
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("BUJIA ON");
lcd.setCursor(0, 1);
lcd.print(s);
Serial.print(F("\n"));
Serial.print(s);
if (s>25){
bombaf();
lcd.print("B");
}
delay(1000);
}
///////////////////////////////////////////////
bombaf();
delay(20);
bombaf();
delay(20);
bombaf();
delay(20);
bombaf();
delay(20);
bombaf();
delay(20);
bombaf();
lcd.clear();
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("BOMBA ON");
delay(100);
//unsigned long startdenbora=millis();
unsigned long kount=millis();
MsTimer2::set(100, bombaf);
MsTimer2::start();
t_off=10;
kount=millis();
while (PWM_ventilador < 90) { //esperandop a que se caliente
if(millis() > kount+2000) {
kount=millis();
PWM_ventilador=PWM_ventilador+5;
t_off--;
analogWrite(ventiladorPin,PWM_ventilador);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("V>");
lcd.setCursor(3, 0);
lcd.print(PWM_ventilador);
lcd.setCursor(6, 0);
lcd.print("B->");
lcd.print(t_off);
lcd.setCursor(0, 1);
lcd.print("Llama->");
lcd.setCursor(9, 1);
lcd.print(llama());
Serial.print(llama());
}
}
Serial.print(F("\n BOMBA ON piztuakabau"));
digitalWrite(bujiaPin, HIGH);
////////////////////////////
t_off=5;//bomaba despues de encendido
PWM_ventilador=90;
analogWrite(ventiladorPin,PWM_ventilador);
//////////////////////////
while (PWM_ventilador < 240) { //esperandop a que se caliente
if(millis() > kount+4000) {
kount=millis();
PWM_ventilador=PWM_ventilador+30;
t_off--;
analogWrite(ventiladorPin,PWM_ventilador);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("V>");
lcd.setCursor(3, 0);
lcd.print(PWM_ventilador);
lcd.setCursor(6, 0);
lcd.print("B->");
lcd.print(t_off);
lcd.setCursor(0, 1);
lcd.print("Llama->");
lcd.setCursor(9, 1);
lcd.print(llama());
Serial.print(llama());
}
}
t_off=1;//bomaba despues de encendido
PWM_ventilador=240;
analogWrite(ventiladorPin,PWM_ventilador);
Serial.print(F("\n VENTILADOR ATOPE"));
float emaitzz=llama()+llama()+llama()+llama()+llama();
emaitzz=emaitzz/5;
Serial.print(F("\nEMAITZA DE LLAMA TOTAL===>"));
Serial.print(emaitzz);
if(emaitzz<1050){
Serial.print(F("\n============NO HAY LLAMA=============="));
lcd.clear();
lcd.print("NO HAY LLAMA!");
}else{
lcd.clear();
lcd.print("LLAMA DETECTADA");
}
txek(100);
}
void itzali(){
MsTimer2::stop();
digitalWrite(bombaPin, LOW);
digitalWrite(bujiaPin, HIGH);
lcd.clear();
lcd.print("APAGANDO");
lcd.setCursor(0, 1);
lcd.print("BOMBA");
delay(1000);
lcd.setCursor(0, 1);
lcd.print("BUJIA");
delay(1000);
int llamav = llama();
analogWrite(ventiladorPin, 150);
while (llamav > 1100) {
llamav = llama();
lcd.setCursor(0, 1);
lcd.print("VENTILADOR: ");
lcd.print(llamav);
delay(2000);
}
analogWrite(ventiladorPin, 150);
lcd.setCursor(0, 1);
lcd.print("VENTILADOR");
delay(1000);
estado=0;
lcd.setCursor(0, 1);
lcd.print("====AGURR====");
delay(1000);
Serial.print(F("\nAGURRRRR"));
lcd.clear();
delay(1000);
lcd.setBacklight(0);
}
float llama()
{
int raw = 0;
int Vin = 5.2;
float Vout = 0;
float R2 = 0;
float buffer = 0;
raw = analogRead(llamaPin);
if (raw)
{
buffer = raw * Vin;
Vout = (buffer) / 1024.0;
buffer = (Vin / Vout) - 1;
R2 = 1000 * buffer;
return R2;
}
}
void ventil(int potensia)
{
int s = 0;
while ( s <= potensia)
{
analogWrite(ventiladorPin, s); //enciendo el ventilador poco a poco hasta el 50% para limpiar la caldera
delay(20);
s++;
}
analogWrite(ventiladorPin, potensia);
}
void bombaf() {
veces_bomba++;
if (bomba == HIGH)
{
bomba = LOW;
}
else if (veces_bomba >= t_off)
{
bomba = HIGH;
veces_bomba = 0;
}
digitalWrite( bombaPin, bomba);
//if (bomba == HIGH){
//Serial.print("\nbombA: ");
//Serial.print(bomba);
//Serial.print("\ntiempo: ");
///Serial.print(millis());
//}
}
int temperatura()
{
int val = analogRead(termometroPin);
int tempC = val / 9.31;
return tempC;
}
float volt()
{
float vout = 0.0;
float vin = 0.0;
int value = 0;
value = analogRead(voltimetro);
vout = (value * 5.0) / 1024.0; // see text
vin = vout / (10000 / (100000 + 10000));
if (vin < 0.09) {
vin = 0.0; //statement to quash undesired reading !
}
return vin;
}
int hartuRC(int mandu) // takes action based on IR code received
{
switch (mandu) {
case 1332531:
return 1;
break;
case 1332540:
return 2;
break;
case 1332675:
return 3;//mwenos(1)
break;
case 1332684:
return 4;//mas(2)
break;
case 1332995:
return 5; //iz(3)
break;
case 1333004:
return 6; //dtxa(4)
break;
default:
return 101;
break;
}
delay(50);
}
Pinchado para seguimiento :)
Cita de: gcab en Diciembre 21, 2016, 10:15:41 am
Ya esta todo montado y funcionando perfectamente. No echa nada de humo(la foto es de las pruebas) tiene dos modos de velocidad y control de temperatura, todo funciona perfecto pero me falta mejorar algunos aspectos de seguridad.
Abajo os dejo el código.
Ademas del control de la eberspacher, ya que estaba le he puesto dos medidores de tempretura, (interior y exterior) y tambien un voltimetro que aprobecho para controlar tambien la calefacción
(http://www.furgovw.org/galeria/fotos/gcab/img_20161209_1322100.jpg)
(http://www.furgovw.org/galeria/fotos/gcab/img_20161209_1210540.jpg)
(http://www.furgovw.org/galeria/fotos/gcab/img_20161128_1252470.jpg)
(http://www.furgovw.org/galeria/fotos/gcab/gy0.jpg)
CODIGO:>
//librerias
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <MsTimer2.h>
#include <RCSwitch.h>
//fin librerias
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);//Direccion de LCD
RCSwitch mySwitch = RCSwitch();
//DEFINES
byte bat[8] = {
0b00000,
0b00000,
0b10001,
0b11111,
0b11111,
0b11111,
0b00000,
0b00000
};
byte term[8] = {
0b00100,
0b00100,
0b00100,
0b01110,
0b11111,
0b11111,
0b01110,
0b00000
};
#define ventiladorPin 9
#define bombaPin 5
#define bujiaPin 7
#define voltimetro A0
#define termometroPin A1 // pin pal sensor temp
int llamaPin = 2; //pin sensor llama
//FIN DEFINES
//START VARIABLES
int intentos = 0;
int tiempo_akt = 0;
int temp_akt = 10;
unsigned long Ahora = 0;
float temp = 0.00;
int mando;
unsigned long tiempo_final;
unsigned long ant = 0; //aktualizazion txek
int temperatura_final;
boolean bomba = LOW;
unsigned long TiempoAnterior2 = 0;
int sel = 50; //seleccion velocidad ventilador
int veces_bomba = 0;
int t_off = 14; //Cantidad de gasoil adecuado para arranque, ventilador 60%
int PWM_ventilador = 0;
int estado=0;
/*
* 0->apagau
* 1->encendido menu 1
* 2->encendido menu 2
* 3->menu ventilador
* 4-menu datos
* 5->menu sel temp
* 6-Menusel tiempo
* 7->`piztu
* 8->espera tiempo
* 9->espera temp
* 10-> apagando
* 11-> apagado control temp
12->espera tiempo atope
13->espera temp atope
*
14->en marca motor
* on->1332531
* ok->1332540
* menos->1332675
* mas->1332684
* izk->1332995
*dtxa-> 1333004
*
*/
//FIN VARIABLES
void setup() {
Serial.print(F("\nHOOOLA"));
analogReference(INTERNAL);
////PIN
pinMode(ventiladorPin, OUTPUT);
///analoglWrite(ventiladorPin,0);
pinMode(bujiaPin, OUTPUT);
digitalWrite(bujiaPin, HIGH);
pinMode(bombaPin, OUTPUT);
digitalWrite(bombaPin, LOW);
///FINPIN
lcd.begin(16, 2); // Indicamos medidas de LCD
lcd.createChar(0, bat);
lcd.createChar(1, term);
lcd.setBacklight(0);
ant = millis();
mySwitch.enableReceive(0);
Serial.begin(9600);
}
void loop() {
if (mySwitch.available()) {
int value = mySwitch.getReceivedValue();
mando=hartuRC(value);
menus(mando);
mySwitch.resetAvailable();
mando=0;
}
if (estado>6){
if (millis() > (ant + 5000)) {
ant = millis();
txek(100);//comprobasionesencendido
}
}
}
/////////////////FUNTXZIOAK////////////////////////////////////////////
void txek(int mandu) {
if (volt()>13&&estado!=14){
estado=14;
lcd.setBacklight(1);
lcd.clear();//Elimina todos los simbolos del LCD
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("EBERSPACHER D3L");
lcd.setCursor(0, 1);
lcd.write((uint8_t)1);
lcd.print(temperatura());
}
if (mandu!=100){
if (mandu==6 && estado==8){
estado=12;
t_off=1;//bomaba despues de encendido
analogWrite(ventiladorPin,240);
} else if (mandu==5 && estado==12){
estado=8;
////////////////////////////
t_off=5;//bomaba despues de encendido
analogWrite(ventiladorPin,90);
//////////////////////////
} else if (mandu==6 && estado==9){
estado=13;
t_off=1;//bomaba despues de encendido
analogWrite(ventiladorPin,240);
} else if (mandu==5 && estado==13){
estado=9;
////////////////////////////
t_off=5;//bomaba despues de encendido
analogWrite(ventiladorPin,90);
//////////////////////////
} else if(mandu==3){
if(estado==8||estado==12){
tiempo_final--;
txek(100);
}else if(estado==9||estado==13){
temperatura_final--;
txek(100);
}
}else if(mandu=4){
if(estado==8||estado==12){
tiempo_final++;
txek(100);
}else if(estado==9||estado==13){
temperatura_final++;
txek(100);
}
}
}
if (estado == 8|| estado==12) {
if (tiempo_final >= millis()) {
lcd.clear();
lcd.print("Faltan-> ");
lcd.print((tiempo_final - millis()) / 60000);
lcd.print("mins");
lcd.setCursor(0, 1);
lcd.write((uint8_t)1);
lcd.print(temperatura());
lcd.print("L->");
lcd.print(llama());
} else if (tiempo_final <= millis()) {
itzali();
}
// llamakontrol();
Serial.print(F("dentrodetxektiempo\n"));
}
if (temperatura_final) {
if (estado == 9 || estado == 13) {
if (temperatura_final >= temperatura()) {
lcd.clear();
lcd.write((uint8_t)1);
lcd.print(" Actual->");
lcd.print(temperatura());
lcd.setCursor(0, 1);
lcd.write((uint8_t)1);
lcd.print(" Final-> ");
lcd.print(temperatura_final);
} else if (temperatura_final <= temperatura()) {
estado=11;
itzali();
}
} else if (estado == 11 && temperatura_final >= temperatura()) {
lcd.setBacklight(1);
lcd.clear();//Elimina todos los simbolos del LCD
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("EBERSPACHER D3L");
lcd.setCursor(0, 1);
lcd.write((uint8_t)1);
lcd.print(temperatura());
Serial.print(F("\nHOOOLA"));
estado = 9;
delay(2000);
piztu(100);
}
}
}
void menus(int mandu) {
/*
* 0->apagau
* 1->encendido menu 1
* 2->encendido menu 2
* 3->menu ventilador
* 4-menu datos
* 5->menu sel temp
* 6-Menusel tiempo
* 7->`piztu
* 8->espera tiempo
* 9->espera temp
* 10-> apagando
* 11-> apagado control temp
*
*/
if (mandu!=0)
{
Serial.print(mandu);
if (estado == 0 && mandu==1) {
lcd.setBacklight(1);
lcd.clear();//Elimina todos los simbolos del LCD
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("EBERSPACHER D3LC");
lcd.setCursor(0, 1);
lcd.write((uint8_t)1);
lcd.print(temperatura());
Serial.print(F("\nHOOOLA"));
delay(2000);
estado=1;
selektmenu(mando);
} else if (estado!=0 && mandu==1) {
//itzali();
} else {
selektmenu(mandu);
}
}
}
void selektmenu(int mandu) {
switch (estado)
{
case 1: empezarmenu(mandu) ; break;
case 2: empezarmenu2(mandu); break;
case 3: ventiselekt(mandu) ; break;
case 4: datos(mandu) ; break;
case 5: empezar_temp(mandu); break;
case 6: empezar_tiempo(mandu); break;
case 7: piztu(mandu) ; break;
case 8: txek(mandu) ; break;
case 9: txek(mandu) ; break;
case 12: txek(mandu) ; break;
case 13: txek(mandu) ; break;
}
}
void empezarmenu(int mandu)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("1-> Temperatura");
lcd.setCursor(0, 1);
lcd.print("2-> Tiempo");
Serial.print(F("\nPLAY-> empezar ya\n1-> empezar con temperatura\n2-> empezar con tiempo"));
if (mandu == 1) {
empezar_ya();
} else if (mando == 3) {
estado = 5;
empezar_temp(100);
} else if (mando == 4) {
estado = 6;
empezar_tiempo(100);
} else if (mando == 6) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("3-> Ventilador");
lcd.setCursor(0, 1);
lcd.print("4-> Datos");
estado = 2;
}
}
void empezarmenu2(int mandu)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("1-> Ventilador");
lcd.setCursor(0, 1);
lcd.print("2-> Datos");
Serial.print(F("\n3-> ventilador\n4-> datos"));
if (mandu == 3) {
ventiselekt(100);
estado = 3;
} else if (mando == 4) {
estado = 4;
datos(100);
} else if (mando == 5) {
estado = 1;
empezarmenu(100);
}
}
void empezar_ya() {
Serial.print(F("\nempezarya"));
}
void datos(int mandu) {
Serial.print(F("\ndatos"));
lcd.clear();
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.write((uint8_t)1);
lcd.print(temperatura());
lcd.print(" ");
lcd.write((uint8_t)0);
lcd.print(volt());
lcd.print("V");
lcd.setCursor(0, 1);
lcd.print("R");
lcd.print(llama());
if (mando == 5) {
lcd.clear();
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("1-> Temperatura");
lcd.setCursor(0, 1);
lcd.print("2-> Tiempo");
estado=1;
}
}
void ventiselekt(int mandu) {
Serial.print(F("\nvwntiselekt"));
if (mandu == 100) {
lcd.clear();//Elimina todos los simbolos del LCD
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea
lcd.print("Elegir velocidad:");
lcd.setCursor(0, 1);
lcd.print("50");
Serial.print(F("\nElegir temperatura->>>"));
} else {
if (mandu == 4) {
if (sel < 250) {
sel = sel + 10;
} else {
sel = 255;
}
Serial.print(F("\n ACTUAL->"));
Serial.print(sel);
lcd.setCursor(0, 1);
lcd.print(sel);
} else if (mandu == 3) {
if (sel > 0) {
sel = sel - 10;
} else {
sel = 0;
}
Serial.print(sel);
lcd.setCursor(0, 1);
lcd.print(sel);
lcd.setCursor(6, 1);
} else if (mando == 2) {
Serial.print(F("\n ACTUAL->"));
Serial.print(F("velozidad selekzionada --->>"));
Serial.print(sel);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Velocidad:");
lcd.setCursor(0, 1);
lcd.print(sel);
delay(1000);
ventil(sel);
}
}
}
void empezar_temp(int mandu) {
estado = 5;
if (mandu == 100) {
lcd.clear();//Elimina todos los simbolos del LCD
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("Elegir temp:");
lcd.setCursor(0, 1);
lcd.print("10");
lcd.setCursor(6, 1);
lcd.print(temperatura());
Serial.print(F("\nElegir temperatura->>>"));
} else {
if (mandu == 4) {
temp_akt++;
Serial.print(F("\n ACTUAL->"));
Serial.print(temp_akt);
lcd.setCursor(0, 1);
lcd.print(temp_akt);
lcd.setCursor(6, 1);
lcd.print(temperatura());
} else if (mandu == 3) {
temp_akt--;
Serial.print(temp_akt);
lcd.setCursor(0, 1);
lcd.print(temp_akt);
lcd.setCursor(6, 1);
lcd.print( temperatura());
} else if (mando == 2) {
Serial.print(F("\n ACTUAL->"));
temperatura_final = temp_akt;
Serial.print(F("Temperatura selekzionada --->>"));
Serial.print(temperatura_final);
estado=9;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temperatura:");
lcd.setCursor(0, 1);
lcd.print(temperatura_final);
estado = 9;
delay(1000);
piztu(100);
}
}
}
void empezar_tiempo(int mandu) {
if (mandu == 100) {
lcd.clear();//Elimina todos los simbolos del LCD
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("Elegir tiempo:");
lcd.setCursor(0, 1);
lcd.print("0 mins");
Serial.print(F("\nelegir tiempo en minutos"));
} else {
if (mando == 4) {
tiempo_akt = tiempo_akt + 5;
lcd.setCursor(0, 1);
lcd.print(tiempo_akt);
lcd.print(" mins");
Serial.print(F("\n ACTUAL->"));
Serial.print(tiempo_akt);
//empezar_tiempo();
} else if (mando == 3) {
tiempo_akt = tiempo_akt - 5;
lcd.setCursor(0, 1);
lcd.print(tiempo_akt);
lcd.print(" mins");
Serial.print(F("\n ACTUAL->"));
Serial.print(tiempo_akt);
} else if (mando == 2) {
tiempo_final = millis() + tiempo_akt * 60000;
Serial.print(F("Tiempo ofisssial--->>"));
Serial.print(tiempo_akt);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Tiempo:");
lcd.setCursor(0, 1);
lcd.print(tiempo_akt);
lcd.print(" mins");
estado=8;
delay(1000);
piztu(100);
}
}
}
void piztu(int mandu){
if (llama() > 1200) {
for (int s = 0; s <= 100; s++)
{
analogWrite(ventiladorPin, s); //enciendo el ventilador poco a poco hasta el 50% para limpiar la caldera
delay(20);
}
analogWrite(ventiladorPin, 100);
while (llama() > 1220) {
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("DEMASIAU CALIENTE");
delay(1000);
lcd.setCursor(0, 1); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print(llama());
lcd.print(">1220, 50");
delay (1000);
}
}
/////////////////////////sekuencia encendido
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("VENT ON");
//////////////////////////
PWM_ventilador=60;
analogWrite(ventiladorPin,PWM_ventilador);
t_off=1;
///////////////////////////
Serial.print("\n VENT ON");
Serial.print("\nBUJIA ON");
lcd.clear();
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("BUJIA ON");
digitalWrite(bujiaPin, LOW);
lcd.setCursor(0, 1);
///////////////////////////////////bujia calentando
for (int s = 0; s <= 30; s++)
{
lcd.clear();
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("BUJIA ON");
lcd.setCursor(0, 1);
lcd.print(s);
Serial.print(F("\n"));
Serial.print(s);
if (s>25){
bombaf();
lcd.print("B");
}
delay(1000);
}
///////////////////////////////////////////////
bombaf();
delay(20);
bombaf();
delay(20);
bombaf();
delay(20);
bombaf();
delay(20);
bombaf();
delay(20);
bombaf();
lcd.clear();
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("BOMBA ON");
delay(100);
//unsigned long startdenbora=millis();
unsigned long kount=millis();
MsTimer2::set(100, bombaf);
MsTimer2::start();
t_off=10;
kount=millis();
while (PWM_ventilador < 90) { //esperandop a que se caliente
if(millis() > kount+2000) {
kount=millis();
PWM_ventilador=PWM_ventilador+5;
t_off--;
analogWrite(ventiladorPin,PWM_ventilador);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("V>");
lcd.setCursor(3, 0);
lcd.print(PWM_ventilador);
lcd.setCursor(6, 0);
lcd.print("B->");
lcd.print(t_off);
lcd.setCursor(0, 1);
lcd.print("Llama->");
lcd.setCursor(9, 1);
lcd.print(llama());
Serial.print(llama());
}
}
Serial.print(F("\n BOMBA ON piztuakabau"));
digitalWrite(bujiaPin, HIGH);
////////////////////////////
t_off=5;//bomaba despues de encendido
PWM_ventilador=90;
analogWrite(ventiladorPin,PWM_ventilador);
//////////////////////////
while (PWM_ventilador < 240) { //esperandop a que se caliente
if(millis() > kount+4000) {
kount=millis();
PWM_ventilador=PWM_ventilador+30;
t_off--;
analogWrite(ventiladorPin,PWM_ventilador);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("V>");
lcd.setCursor(3, 0);
lcd.print(PWM_ventilador);
lcd.setCursor(6, 0);
lcd.print("B->");
lcd.print(t_off);
lcd.setCursor(0, 1);
lcd.print("Llama->");
lcd.setCursor(9, 1);
lcd.print(llama());
Serial.print(llama());
}
}
t_off=1;//bomaba despues de encendido
PWM_ventilador=240;
analogWrite(ventiladorPin,PWM_ventilador);
Serial.print(F("\n VENTILADOR ATOPE"));
float emaitzz=llama()+llama()+llama()+llama()+llama();
emaitzz=emaitzz/5;
Serial.print(F("\nEMAITZA DE LLAMA TOTAL===>"));
Serial.print(emaitzz);
if(emaitzz<1050){
Serial.print(F("\n============NO HAY LLAMA=============="));
lcd.clear();
lcd.print("NO HAY LLAMA!");
}else{
lcd.clear();
lcd.print("LLAMA DETECTADA");
}
txek(100);
}
void itzali(){
MsTimer2::stop();
digitalWrite(bombaPin, LOW);
digitalWrite(bujiaPin, HIGH);
lcd.clear();
lcd.print("APAGANDO");
lcd.setCursor(0, 1);
lcd.print("BOMBA");
delay(1000);
lcd.setCursor(0, 1);
lcd.print("BUJIA");
delay(1000);
int llamav = llama();
analogWrite(ventiladorPin, 150);
while (llamav > 1100) {
llamav = llama();
lcd.setCursor(0, 1);
lcd.print("VENTILADOR: ");
lcd.print(llamav);
delay(2000);
}
analogWrite(ventiladorPin, 150);
lcd.setCursor(0, 1);
lcd.print("VENTILADOR");
delay(1000);
estado=0;
lcd.setCursor(0, 1);
lcd.print("====AGURR====");
delay(1000);
Serial.print(F("\nAGURRRRR"));
lcd.clear();
delay(1000);
lcd.setBacklight(0);
}
float llama()
{
int raw = 0;
int Vin = 5.2;
float Vout = 0;
float R2 = 0;
float buffer = 0;
raw = analogRead(llamaPin);
if (raw)
{
buffer = raw * Vin;
Vout = (buffer) / 1024.0;
buffer = (Vin / Vout) - 1;
R2 = 1000 * buffer;
return R2;
}
}
void ventil(int potensia)
{
int s = 0;
while ( s <= potensia)
{
analogWrite(ventiladorPin, s); //enciendo el ventilador poco a poco hasta el 50% para limpiar la caldera
delay(20);
s++;
}
analogWrite(ventiladorPin, potensia);
}
void bombaf() {
veces_bomba++;
if (bomba == HIGH)
{
bomba = LOW;
}
else if (veces_bomba >= t_off)
{
bomba = HIGH;
veces_bomba = 0;
}
digitalWrite( bombaPin, bomba);
//if (bomba == HIGH){
//Serial.print("\nbombA: ");
//Serial.print(bomba);
//Serial.print("\ntiempo: ");
///Serial.print(millis());
//}
}
int temperatura()
{
int val = analogRead(termometroPin);
int tempC = val / 9.31;
return tempC;
}
float volt()
{
float vout = 0.0;
float vin = 0.0;
int value = 0;
value = analogRead(voltimetro);
vout = (value * 5.0) / 1024.0; // see text
vin = vout / (10000 / (100000 + 10000));
if (vin < 0.09) {
vin = 0.0; //statement to quash undesired reading !
}
return vin;
}
int hartuRC(int mandu) // takes action based on IR code received
{
switch (mandu) {
case 1332531:
return 1;
break;
case 1332540:
return 2;
break;
case 1332675:
return 3;//mwenos(1)
break;
case 1332684:
return 4;//mas(2)
break;
case 1332995:
return 5; //iz(3)
break;
case 1333004:
return 6; //dtxa(4)
break;
default:
return 101;
break;
}
delay(50);
}
Ooooyeee, ¡¡qué crack!!
Me interesa mucho el esquema de montaje de componentes, que voy para dos inviernos sin calefacción ni agua caliente en la furgo ...
.ereselmejor .ereselmejor .ereselmejor .ereselmejor
A mi tambien me interesa el esquema, si pudieras compartirlo :D :D
Vaya crak con el código!!!!! .palmas
Como as solucionado el zumbido de la bobina del ventilador?
https://www.youtube.com/watch?v=kHZ0b0wFjaw&feature=youtu.be
Cita de: firewer88 en Diciembre 28, 2016, 09:54:37 am
Como as solucionado el zumbido de la bobina del ventilador?
https://www.youtube.com/watch?v=kHZ0b0wFjaw&feature=youtu.be
Ese ruido lo hacen todos los motores con el PWM, lo que hay que hacer es envontrar un valor en el que no pite y listo, el mio pitaba en 80, lo puse a 90 y ya no pita.
Aver, el esquema.
Me ha salido una buena txapuza asique aqui podeis ver como va la idea jajajaja
http://www.laziomatica.com/web/archives/category/arduino (http://www.laziomatica.com/web/archives/category/arduino)
Y aqui mi intento: jajaja yo no valgo pa esto
(https://www.furgovw.org/galeria/fotos/gcab/captura0.png)
(https://www.furgovw.org/galeria/fotos/gcab/captura20.png)
Cita de: gcab en Diciembre 28, 2016, 19:21:51 pm
Aver, el esquema.
Me ha salido una buena txapuza asique aqui podeis ver como va la idea jajajaja
http://www.laziomatica.com/web/archives/category/arduino (http://www.laziomatica.com/web/archives/category/arduino)
Y aqui mi intento: jajaja yo no valgo pa esto
(https://www.furgovw.org/galeria/fotos/gcab/captura0.png)
(https://www.furgovw.org/galeria/fotos/gcab/captura20.png)
Nos faltan saber los sensores y toda la parafernalia, como bujía y tal ...
¿El ventilador que pones es el que da aire al interior de la furgo o es el que mueve el aire para la combustión? ¿O en las de aire sólo existe un ventilador? Es que yo lo quier aplicar a un hydronic ...
Cita de: adric en Diciembre 29, 2016, 01:34:24 am
Nos faltan saber los sensores y toda la parafernalia, como bujía y tal ...
¿El ventilador que pones es el que da aire al interior de la furgo o es el que mueve el aire para la combustión? ¿O en las de aire sólo existe un ventilador? Es que yo lo quier aplicar a un hydronic ...
Mira, explico un poco todo lo que va conectado al arduino,
1- el sensor de llamade de serie de la eberspacher, leo su resistencia con el arduino, deapues la comparp con el grafico que subi del manual de eberspacher y consigo la temperatura de la caldera, esto me vale para saber cuando hay llama o esta sobrecalentado.
2- el ventilador de eberspacher, solo hay uno, el mismo para mover aire y para la camara de combustion, lo controlo con un mosfet siguiendo el esquema de arriba, le marco la velocidad por PWM evitando pasar por las velocidades en las que pita como dijo firewer88.
3- sensor de temperatura LM35, lo utilizo para medir ña temperatura dentro de la furgo.
4- control de la bomba de gasoil, tambien con un mosfet como en el esquema, las pulsaciones las he idoa ajustando a ojo, siempre intentando pasarme de aire antes que de combustible, para la d3lc las adecuadas son las de mi codigo, funciona perfectamenete.
5-control de la bujia, directamente le doy positibo de la bateria con un rele para arduino de los de ebay (1€) la tengo unos 30s encendida para quese ponga al rojo(creo que mi bateria anda un poco chunga?)
6- entrada del control remoto para arduino, no utilizo botones, asi puedo controlarla desde la cama, al principio era un mando infrarojonpero lo he cambiado por uno de radiofrecuencia que funciona mucho mejor.
7- un voltimetro, un cable saliendo ,de uno de los pines analogicos que mide la tension de la bateria, para saber cuando esta arrancada la furgo y para usar el arduino de voltimetro, sin mas
Creo que no se me olvida nada, porcierto yo tambien tengo un hidroniyc que no me enciende asique igual.....
Espero que os sea de ayuda!
Agur.
Los mosfet IRF540N los conectas directamente a arduino solo con una resistencia en el gate? de que valor? no tienes etapa de preamplificacion?
No se te ponen achicharrando?
Cita de: gcab en Diciembre 29, 2016, 10:12:01 am
Mira, explico un poco todo lo que va conectado al arduino,
1- el sensor de llamade de serie de la eberspacher, leo su resistencia con el arduino, deapues la comparp con el grafico que subi del manual de eberspacher y consigo la temperatura de la caldera, esto me vale para saber cuando hay llama o esta sobrecalentado.
2- el ventilador de eberspacher, solo hay uno, el mismo para mover aire y para la camara de combustion, lo controlo con un mosfet siguiendo el esquema de arriba, le marco la velocidad por PWM evitando pasar por las velocidades en las que pita como dijo firewer88.
3- sensor de temperatura LM35, lo utilizo para medir ña temperatura dentro de la furgo.
4- control de la bomba de gasoil, tambien con un mosfet como en el esquema, las pulsaciones las he idoa ajustando a ojo, siempre intentando pasarme de aire antes que de combustible, para la d3lc las adecuadas son las de mi codigo, funciona perfectamenete.
5-control de la bujia, directamente le doy positibo de la bateria con un rele para arduino de los de ebay (1€) la tengo unos 30s encendida para quese ponga al rojo(creo que mi bateria anda un poco chunga?)
6- entrada del control remoto para arduino, no utilizo botones, asi puedo controlarla desde la cama, al principio era un mando infrarojonpero lo he cambiado por uno de radiofrecuencia que funciona mucho mejor.
7- un voltimetro, un cable saliendo ,de uno de los pines analogicos que mide la tension de la bateria, para saber cuando esta arrancada la furgo y para usar el arduino de voltimetro, sin mas
Creo que no se me olvida nada, porcierto yo tambien tengo un hidroniyc que no me enciende asique igual.....
Espero que os sea de ayuda!
Agur.
Buena explicación, ¡eres un crack!
Ui, si tienes tiempo para ver si funciona con el hydronic, sería un tremendo puntazo ;D, porque yo tiempo para trastear últimamente poco tengo ... :'( ¡NECESITO DÍAS DE 36 HORAS! .malabares ¿Se podrán generar horas con Arduino? :roll:
Buuenass!
Actualizo con el código. que he estado probando bastantes dias, y ya todo perfecto, este es el código final y ningun problema por ahora, tampoco la tengo toda la noche puesta con el control de temperatura por si acaso pero por lo demas todo bien!
Espero que sea de ayuda para la gente que quiera trastear un poco, que lomio me ha costau!
//librerias
#include <Wire.h>
#include <DHT11.h>
#include <LiquidCrystal_I2C.h>
#include <MsTimer2.h>
#include <RCSwitch.h>
//fin librerias
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);//Direccion de LCD
RCSwitch mySwitch = RCSwitch();
//DEFINES
byte bat[8] = {
0b00000,
0b00000,
0b10001,
0b11111,
0b11111,
0b11111,
0b00000,
0b00000
};
byte term[8] = {
0b00100,
0b00100,
0b00100,
0b01110,
0b11111,
0b11111,
0b01110,
0b00000
};
#define ventiladorPin 9
#define bombaPin 5
#define bujiaPin 8
#define voltimetro A0
#define termometroPin 7 // pin pal sensor temp
int llamaPin = 2; //pin sensor llama
//FIN DEFINES
//START VARIABLES
int intentos = 0;
int tiempo_akt = 0;
int temp_akt = 10;
unsigned long Ahora = 0;
float temp = 0.00;
float humedad = 0.00;
int mando;
unsigned long tiempo_final;
unsigned long ant = 0; //aktualizazion txek
int temperatura_final;
boolean bomba = LOW;
unsigned long TiempoAnterior2 = 0;
int sel = 50; //seleccion velocidad ventilador
int veces_bomba = 0;
int t_off = 14; //Cantidad de gasoil adecuado para arranque, ventilador 60%
int PWM_ventilador = 0;
int estado=0;
DHT11 dht11(termometroPin);
/*
* 0->apagau
* 1->encendido menu 1
* 2->encendido menu 2
* 3->menu ventilador
* 4-menu datos
* 5->menu sel temp
* 6-Menusel tiempo
* 7->`piztu
* 8->espera tiempo
* 9->espera temp
* 10-> apagando
* 11-> apagado control temp
12->espera tiempo atope
13->espera temp atope
*
14->en marca motor
* on->1332531
* ok->1332540
* menos->1332675
* mas->1332684
* izk->1332995
*dtxa-> 1333004
*
*/
//FIN VARIABLES
void setup() {
Serial.print(F("\nHOOOLA"));
////PIN
pinMode(ventiladorPin, OUTPUT);
///analoglWrite(ventiladorPin,0);
pinMode(bujiaPin, OUTPUT);
digitalWrite(bujiaPin, HIGH);
pinMode(bombaPin, OUTPUT);
digitalWrite(bombaPin, LOW);
///FINPIN
lcd.begin(16, 2); // Indicamos medidas de LCD
lcd.createChar(0, bat);
lcd.createChar(1, term);
lcd.setBacklight(0);
ant = millis();
mySwitch.enableReceive(0);
Serial.begin(9600);
temperatura();
}
void loop() {
if (mySwitch.available()) {
int value = mySwitch.getReceivedValue();
mando=hartuRC(value);
menus(mando);
mySwitch.resetAvailable();
mando=0;
}
if (millis() > (ant + 5000)) {
ant = millis();
temperatura();
if (estado>6){
txek(100);//comprobasionesencendido
}
}
}
/////////////////FUNTXZIOAK////////////////////////////////////////////
void txek(int mandu) {
/*if (volt()>13&&estado!=14){
estado=14;
lcd.setBacklight(1);
lcd.clear();//Elimina todos los simbolos del LCD
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("EBERSPACHER D3L");
lcd.setCursor(0, 1);
lcd.write((uint8_t)1);
lcd.print(temp);
}
*/
if (mandu!=100){
if (mandu==6 && estado==8){
estado=12;
t_off=2;//bomaba despues de encendido
analogWrite(ventiladorPin,255);
} else if (mandu==5 && estado==12){
estado=8;
////////////////////////////
t_off=5;//bomaba despues de encendido
analogWrite(ventiladorPin,90);
//////////////////////////
} else if (mandu==6 && estado==9){
estado=13;
t_off=2;//bomaba despues de encendido
analogWrite(ventiladorPin,255);
} else if (mandu==5 && estado==13){
estado=9;
////////////////////////////
t_off=5;//bomaba despues de encendido
analogWrite(ventiladorPin,90);
//////////////////////////
} else if(mandu==3){
if(estado==8||estado==12){
tiempo_final--;
txek(100);
}else if(estado==9||estado==13){
temperatura_final--;
txek(100);
}
}else if(mandu=4){
if(estado==8||estado==12){
tiempo_final++;
txek(100);
}else if(estado==9||estado==13){
temperatura_final++;
txek(100);
}
}
}
if (estado == 8|| estado==12) {
if (tiempo_final >= millis()) {
lcd.clear();
lcd.print("Faltan-> ");
lcd.print((tiempo_final - millis()) / 60000);
lcd.print("mins");
lcd.setCursor(0, 1);
lcd.write((uint8_t)1);
lcd.print(temp);
lcd.print("L->");
lcd.print(llama());
} else if (tiempo_final <= millis()) {
itzali();
}
txekllama();
Serial.print(F("dentrodetxektiempo\n"));
}
if (temperatura_final) {
if (estado == 9 || estado == 13) {
if (temperatura_final >= temp) {
lcd.clear();
lcd.write((uint8_t)1);
lcd.print(" Orain->");
lcd.print(temp);
lcd.setCursor(0, 1);
lcd.write((uint8_t)1);
lcd.print(" Helmuga-> ");
lcd.print(temperatura_final);
} else if (temperatura_final <= temp) {
estado=11;
itzali();
}
txekllama();
} else if (estado == 11 && temperatura_final >= temp) {
lcd.setBacklight(1);
lcd.clear();//Elimina todos los simbolos del LCD
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("EBERSPACHER D3L");
lcd.setCursor(0, 1);
lcd.write((uint8_t)1);
lcd.print(temp);
Serial.print(F("\nHOOOLA"));
estado = 9;
delay(2000);
piztu(100);
}
}
}
void menus(int mandu) {
/*
* 0->apagau
* 1->encendido menu 1
* 2->encendido menu 2
* 3->menu ventilador
* 4-menu datos
* 5->menu sel temp
* 6-Menusel tiempo
* 7->`piztu
* 8->espera tiempo
* 9->espera temp
* 10-> apagando
* 11-> apagado control temp
*
*/
if (mandu!=0)
{
Serial.print(mandu);
if (estado == 0 && mandu==1) {
lcd.setBacklight(1);
lcd.clear();//Elimina todos los simbolos del LCD
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("EBERSPACHER D3LC");
lcd.setCursor(0, 1);
lcd.write((uint8_t)1);
lcd.print(temp);
Serial.print(F("\nHOOOLA"));
delay(2000);
estado=1;
selektmenu(mando);
} else if (estado!=0 && mandu==1) {
itzali();
} else {
selektmenu(mandu);
}
}
}
void selektmenu(int mandu) {
switch (estado)
{
case 1: empezarmenu(mandu) ; break;
case 2: empezarmenu2(mandu); break;
case 3: ventiselekt(mandu) ; break;
case 4: datos(mandu) ; break;
case 5: empezar_temp(mandu); break;
case 6: empezar_tiempo(mandu); break;
case 7: piztu(mandu) ; break;
case 8: txek(mandu) ; break;
case 9: txek(mandu) ; break;
case 12: txek(mandu) ; break;
case 13: txek(mandu) ; break;
}
}
void empezarmenu(int mandu)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("1-> Tenperatura");
lcd.setCursor(0, 1);
lcd.print("2-> Denbora");
Serial.print(F("\nPLAY-> empezar ya\n1-> empezar con temperatura\n2-> empezar con tiempo"));
if (mandu == 1) {
empezar_ya();
} else if (mando == 3) {
estado = 5;
empezar_temp(100);
} else if (mando == 4) {
estado = 6;
empezar_tiempo(100);
} else if (mando == 6) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("1-> Aire");
lcd.setCursor(0, 1);
lcd.print("2-> Datuak");
estado = 2;
}
}
void empezarmenu2(int mandu)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("1-> Aire");
lcd.setCursor(0, 1);
lcd.print("2-> Datuak");
Serial.print(F("\n3-> ventilador\n4-> datos"));
if (mandu == 3) {
ventiselekt(100);
estado = 3;
} else if (mando == 4) {
estado = 4;
datos(100);
} else if (mando == 5) {
estado = 1;
empezarmenu(100);
}
}
void empezar_ya() {
Serial.print(F("\nempezarya"));
}
void datos(int mandu) {
Serial.print(F("\ndatos"));
lcd.clear();
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.write((uint8_t)1);
lcd.print(temp);
lcd.print(" ");
lcd.write((uint8_t)0);
lcd.print(volt());
lcd.print("V");
lcd.setCursor(0, 1);
lcd.print("R");
lcd.print(llama());
lcd.print(" H");
lcd.print(humedad);
if (mando == 5) {
lcd.clear();
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("1-> Tenperatura");
lcd.setCursor(0, 1);
lcd.print("2-> Denbora");
estado=1;
}
}
void ventiselekt(int mandu) {
if (mando == 5) {
lcd.clear();
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("1-> Tenperatura");
lcd.setCursor(0, 1);
lcd.print("2-> Denbora");
estado=1;
}
Serial.print(F("\nvwntiselekt"));
if (mandu == 100) {
lcd.clear();//Elimina todos los simbolos del LCD
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea
lcd.print("Abiadura aukeratu:");
lcd.setCursor(0, 1);
lcd.print("50");
Serial.print(F("\nElegir temperatura->>>"));
} else {
if (mandu == 4) {
if (sel < 250) {
sel = sel + 10;
} else {
sel = 255;
}
Serial.print(F("\n ACTUAL->"));
Serial.print(sel);
lcd.setCursor(0, 1);
lcd.print(sel);
} else if (mandu == 3) {
if (sel > 0) {
sel = sel - 10;
} else {
sel = 0;
}
Serial.print(sel);
lcd.setCursor(0, 1);
lcd.print(sel);
lcd.setCursor(6, 1);
} else if (mando == 2) {
Serial.print(F("\n ACTUAL->"));
Serial.print(F("velozidad selekzionada --->>"));
Serial.print(sel);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Abiadura:");
lcd.setCursor(0, 1);
lcd.print(sel);
delay(1000);
ventil(sel);
}
}
}
void empezar_temp(int mandu) {
estado = 5;
if (mando == 5) {
lcd.clear();
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("1-> Tenperatura");
lcd.setCursor(0, 1);
lcd.print("2-> Denbora");
estado=1;
}
if (mandu == 100) {
lcd.clear();//Elimina todos los simbolos del LCD
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("Tenp aukeratu:");
lcd.setCursor(0, 1);
lcd.print("10");
lcd.setCursor(6, 1);
lcd.print(temp);
Serial.print(F("\nElegir temperatura->>>"));
} else {
if (mandu == 4) {
temp_akt++;
Serial.print(F("\n ACTUAL->"));
Serial.print(temp_akt);
lcd.setCursor(0, 1);
lcd.print(temp_akt);
lcd.setCursor(6, 1);
lcd.print(temp);
} else if (mandu == 3) {
temp_akt--;
Serial.print(temp_akt);
lcd.setCursor(0, 1);
lcd.print(temp_akt);
lcd.setCursor(6, 1);
lcd.print( temp);
} else if (mando == 2) {
Serial.print(F("\n ACTUAL->"));
temperatura_final = temp_akt;
Serial.print(F("Temperatura selekzionada --->>"));
Serial.print(temperatura_final);
estado=9;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Tenperatura:");
lcd.setCursor(0, 1);
lcd.print(temperatura_final);
estado = 9;
delay(1000);
piztu(100);
}
}
}
void empezar_tiempo(int mandu) {
estado=6;
if (mando == 5) {
lcd.clear();
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("1-> Tenperatura");
lcd.setCursor(0, 1);
lcd.print("2-> Denbora");
estado=1;
}
if (mandu == 100) {
lcd.clear();//Elimina todos los simbolos del LCD
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("Denbora aukeratu:");
lcd.setCursor(0, 1);
lcd.print("0 min");
Serial.print(F("\nelegir tiempo en minutos"));
} else {
if (mando == 4) {
tiempo_akt = tiempo_akt + 5;
lcd.setCursor(0, 1);
lcd.print(tiempo_akt);
lcd.print(" min");
Serial.print(F("\n ACTUAL->"));
Serial.print(tiempo_akt);
//empezar_tiempo();
} else if (mando == 3) {
tiempo_akt = tiempo_akt - 5;
lcd.setCursor(0, 1);
lcd.print(tiempo_akt);
lcd.print(" min");
Serial.print(F("\n ACTUAL->"));
Serial.print(tiempo_akt);
} else if (mando == 2) {
tiempo_final = millis() + tiempo_akt * 60000;
Serial.print(F("Tiempo ofisssial--->>"));
Serial.print(tiempo_akt);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Denbora:");
lcd.setCursor(0, 1);
lcd.print(tiempo_akt);
lcd.print(" min");
estado=8;
delay(1000);
piztu(100);
}
}
}
void piztu(int mandu){
if (intentos< 2) {
intentos++;
}
if (llama() > 1200) {
for (int s = 0; s <= 100; s++)
{
analogWrite(ventiladorPin, s); //enciendo el ventilador poco a poco hasta el 50% para limpiar la caldera
delay(20);
}
analogWrite(ventiladorPin, 100);
while (llama() > 1220) {
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("OSO BEROA");
delay(1000);
lcd.setCursor(0, 1); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print(llama());
lcd.print(">1220, 50");
delay (1000);
}
}
/////////////////////////sekuencia encendido
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("VENT ON");
//////////////////////////
PWM_ventilador=60;
analogWrite(ventiladorPin,PWM_ventilador);
t_off=0;
///////////////////////////
Serial.print("\n VENT ON");
Serial.print("\nBUJIA ON");
lcd.clear();
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("BUJIA ON");
digitalWrite(bujiaPin, LOW);
lcd.setCursor(0, 1);
///////////////////////////////////bujia calentando
for (int s = 30; s >= 0; s--)
{
lcd.clear();
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("BUJIA ON");
lcd.setCursor(0, 1);
lcd.print(s);
Serial.print(F("\n"));
Serial.print(s);
//if (s>25){
//bombaf();
//lcd.print("B");
//}
delay(1000);
}
///////////////////////////////////////////////
bombaf();
delay(100);
bombaf();
delay(100);
bombaf();
delay(100);
bombaf();
delay(100);
bombaf();
delay(100);
bombaf();
lcd.clear();
lcd.setCursor(0, 0); //Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("BOMBA ON");
delay(100);
//unsigned long startdenbora=millis();
unsigned long kount=millis();
MsTimer2::set(100, bombaf);
MsTimer2::start();
t_off=10;
kount=millis();
while (PWM_ventilador < 90) { //esperandop a que se caliente
if(millis() > kount+2000) {
kount=millis();
PWM_ventilador=PWM_ventilador+5;
t_off--;
analogWrite(ventiladorPin,PWM_ventilador);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("V>");
lcd.setCursor(3, 0);
lcd.print(PWM_ventilador);
lcd.setCursor(6, 0);
lcd.print("B->");
lcd.print(t_off);
lcd.setCursor(0, 1);
lcd.print("Llama->");
lcd.setCursor(9, 1);
lcd.print(llama());
Serial.print(llama());
}
}
Serial.print(F("\n BOMBA ON piztuakabau"));
digitalWrite(bujiaPin, HIGH);
////////////////////////////
t_off=5;//bomaba despues de encendido
PWM_ventilador=90;
analogWrite(ventiladorPin,PWM_ventilador);
//////////////////////////
while (PWM_ventilador < 240) { //esperandop a que se caliente
if(millis() > kount+4000) {
kount=millis();
PWM_ventilador=PWM_ventilador+30;
t_off--;
analogWrite(ventiladorPin,PWM_ventilador);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("V>");
lcd.setCursor(3, 0);
lcd.print(PWM_ventilador);
lcd.setCursor(6, 0);
lcd.print("B->");
lcd.print(t_off);
lcd.setCursor(0, 1);
lcd.print("Llama->");
lcd.setCursor(9, 1);
lcd.print(llama());
Serial.print(llama());
}
}
t_off=2;//bomaba despues de encendido
PWM_ventilador=255;
analogWrite(ventiladorPin,PWM_ventilador);
Serial.print(F("\n VENTILADOR ATOPE"));
float emaitzz=llama()+llama()+llama()+llama()+llama();
emaitzz=emaitzz/5;
Serial.print(F("\nEMAITZA DE LLAMA TOTAL===>"));
Serial.print(emaitzz);
if(emaitzz<950){
Serial.print(F("\n============NO HAY LLAMA=============="));
lcd.clear();
lcd.print("Ez da detektatu");
// MsTimer2::stop();
// piztu(100);
}else{
lcd.clear();
lcd.print("===DETEKTATUTA===");
}
txek(100);
}
}
void itzali(){
MsTimer2::stop();
digitalWrite(bombaPin, LOW);
digitalWrite(bujiaPin, HIGH);
lcd.clear();
// lcd.print("APAGANDO");
// lcd.setCursor(0, 1);
//lcd.print("BOMBA");
//delay(1000);
// lcd.setCursor(0, 1);
//lcd.print("BUJIA");
// delay(1000);
int llamav = llama();
analogWrite(ventiladorPin, 150);
while (llamav > 950) {
llamav = llama();
lcd.setCursor(0, 1);
lcd.print("VENTILADOR: ");
lcd.print(llamav);
delay(2000);
}
analogWrite(ventiladorPin,0);
// lcd.setCursor(0, 1);
//lcd.print("VENTILADOR");
// delay(1000);
estado=0;
lcd.setCursor(0, 1);
lcd.print("======AGUR======");
delay(1000);
Serial.print(F("\nAGURRRRR"));
lcd.clear();
delay(1000);
lcd.setBacklight(0);
}
float llama()
{
int raw = 0;
int Vin = 5.2;
float Vout = 0;
float R1 = 1000;
float R2 = 0;
float buffer = 0;
raw = analogRead(llamaPin);
if (raw)
{
buffer = raw * Vin;
Vout = (buffer) / 1024.0;
buffer = (Vin / Vout) - 1;
R2 = R1 * buffer;
Serial.print(F("SENSOR LLAMA: "));
Serial.print(R2);
return R2;
}
}
void ventil(int potensia)
{
int s = 0;
while ( s <= potensia)
{
analogWrite(ventiladorPin, s); //enciendo el ventilador poco a poco hasta el 50% para limpiar la caldera
delay(20);
s++;
}
analogWrite(ventiladorPin, potensia);
}
void bombaf() {
veces_bomba++;
if (bomba == HIGH)
{
bomba = LOW;
}
else if (veces_bomba >= t_off)
{
bomba = HIGH;
veces_bomba = 0;
}
digitalWrite( bombaPin, bomba);
//if (bomba == HIGH){
//Serial.print("\nbombA: ");
//Serial.print(bomba);
//Serial.print("\ntiempo: ");
///Serial.print(millis());
//}
}
void temperatura()
{
int err;
err=dht11.read(humedad, temp);
}
float volt()
{
float vout = 0.0;
float vin = 0.0;
float R1 = 100000.0; // resistance of R1 (100K) -see text!
float R2 = 10000.0; // resistance of R2 (10K) - see text!
int value = 0;
value = analogRead(voltimetro);
vout = (value * 5.0) / 1024.0; // see text
vin = vout / (R2 / (R1 + R2));
if (vin < 0.09) {
vin = 0.0; //statement to quash undesired reading !
}
return vin;
}
void txekllama(){
float emaitzz=llama()+llama()+llama()+llama()+llama();
emaitzz=emaitzz/5;
if(emaitzz>1300){
lcd.setCursor(1, 0);
lcd.print("OSO BEROA");
lcd.setCursor(0, 1);
lcd.print(emaitz);
lcd.print(">1300");
t_off=3;//bomaba despues de encendido
PWM_ventilador=255;
analogWrite(ventiladorPin,PWM_ventilador);
delay(1000);
}
Serial.print(F("\nEMAITZA DE LLAMA TOTAL===>"));
Serial.print(emaitzz);
if(emaitzz<950&&intentos<2&&(millis()-kount)>1000){
Serial.print(kount);
Serial.print(F("\n============NO HAY LLAMA=============="));
lcd.clear();
lcd.print("Ez da detektatu");
MsTimer2::stop();
intentos++;
piztu(100);
}else if(emaitz<950&&intentos>2){
itzali();
}
int hartuRC(int mandu) // takes action based on IR code received
{
switch (mandu) {
case 1332531:
return 1;
break;
case 1332540:
return 2;
break;
case 1332675:
return 3;//mwenos(1)
break;
case 1332684:
return 4;//mas(2)
break;
case 1332995:
return 5; //iz(3)
break;
case 1333004:
return 6; //dtxa(4)
break;
default:
return 101;
break;
}
delay(50);
}
Agurr!
Habrá que probarlo en cuanto disponga de tiempo...
Eres un crack!
Enviado desde mi Aquaris X5 mediante Tapatalk
Qué bueno!! .ereselmejor
menudo jefe :o
Me sumo al hilo...vaya cómo pilotas, Gcab!!! .ereselmejor .ereselmejor .ereselmejor
Por cierto, nos puedes informar de cómo sigue funcionando tu calefa? La has usado ya de noche?
Saludos!!!
Hola, a todos, yo también tengo una d3lc con la centralita jodida, quiero hacer lo del Arduino y no lo tengo claro del todo, podrías pasarme información o ponerla aquí.
Me parece un gran trabajo y un puntazo
Gracias
Nadie que pueda ayudarme??