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.

microtus


adric

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




























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

Freview

A mi tambien me interesa el esquema, si pudieras compartirlo  :D :D

amikoj

Diciembre 28, 2016, 00:38:59 am #18 Ultima modificación: Diciembre 28, 2016, 18:46:14 pm por amikoj
Vaya crak con el código!!!!! .palmas
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.

Freview

Diciembre 28, 2016, 09:54:37 am #19 Ultima modificación: Diciembre 28, 2016, 11:59:08 am por firewer88
Como as solucionado el zumbido de la bobina del ventilador?

https://www.youtube.com/watch?v=kHZ0b0wFjaw&feature=youtu.be

gcab

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.

gcab

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

Y aqui mi intento: jajaja yo no valgo pa esto




adric

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

Y aqui mi intento: jajaja yo no valgo pa esto





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

gcab

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.

Freview

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?

adric

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:
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.

gcab

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!

adric

Habrá que probarlo en cuanto disponga de tiempo...
Eres un crack!

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.

raguti

Abril 13, 2017, 23:53:27 pm #28 Ultima modificación: Abril 14, 2017, 12:04:13 pm por raguti
Qué bueno!! .ereselmejor

eltoni