Arduino reemplazando ECU de Eberspacher

Iniciado por gcab, Noviembre 13, 2016, 20:16:23 pm

Tema anterior - Siguiente tema

0 Usuarios y 1 Visitante están viendo este tema.

gcab

Noviembre 13, 2016, 20:16:23 pm Ultima modificación: Noviembre 15, 2016, 15:35:14 pm por gcab
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.



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.





Aqui unas pruebas alimentando la calefa con una fuente de alimentacion de ordenador.



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




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!!


arkaizt

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.
Oldie Motel*****
*Peugeot J5 2.5TD Euramobil 1991*
Presentacion y "restauracion" de la nueva bicheja!!

http://www.furgovw.org/index.php?topic=283082.0

gcab

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.


amikoj

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!
Mis bricos e información importante recopilada:
http://www.furgovw.org/index.php?topic=27289.msg3602910#msg3602910

"Per pacienco kaj fervoro sukcesas ĉiu laboro"
Con paciencia y fervor se termina toda labor
L. Zamenhof

Por favor, Mensajes privados sólo para asuntos personales. No responderé Mensaj. priv. sobre temas del foro.

Pequeño Iván


-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  ;)

gcab

UNAS FOTOS:
Una vez la calefaccion este funcionando en el modo temperatura:


El selector de modo



El montaje:


adric

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

Mi Iveco Daily (en proceso): http://www.furgovw.org/index.php?topic=286997
Scenic 2 Camper edition: http://www.furgovw.org/index.php?topic=300731.0

En el mundo hay tres clases de personas: las que saben contar y las que no.
Badum ... "espera un momento" ... tsssss.

Pequeño Iván


-Temperatura actual 20.02  :o ¿No me digas que te mide centésimas?   .palmas

-Va tomando color y forma GO  ;)

arkaizt

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

Oldie Motel*****
*Peugeot J5 2.5TD Euramobil 1991*
Presentacion y "restauracion" de la nueva bicheja!!

http://www.furgovw.org/index.php?topic=283082.0

gcab

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.








Al LM35 si que le voy a quitar los decimales porque bailan mucho, pero da suficientemente buenas medidas asique en principio usare este.

Acv636

Moooooooooola

Yo tengo un a d3lc pero a 24voltios

Y recogí una airtronic d2 que solo vale para camiones Iveco,...por can bus

gcab

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);











}


Guille_iomtt

Joder, flipo con vosotros. Sois unos cracks.
Somiar amb la llibertat, es lliurar el plaer de viatjar.

gcab

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




























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);

}