miliamperios.com

Bootstrap Framework 3.3.6

Más de una docena de componentes reutilizables construidos para proporcionar iconografía, menús desplegables, grupos de entrada, navegación, alertas, y mucho más ...

Fundado el 19 de Octubre de 2004. Todo sobre construcción clásica, nuevas tecnologias en materiales y herramientas.

Moderador: Moderadores

#1367415
Pongo codigo que esta de prueba, funciona en automatico a falta de probar mas funciones .
Este código lo podéis ir probando y/o modificando a gusto :roll: de cada cual
dejo también vídeo de la primera prueba

https://youtu.be/QGjV9KkgQqg

Código: Seleccionar todo

// version en pruebas de vacuometro V.1.0.2  24/03/2017
// codigo basado en el de rcmodelistas.com
// modificado para  Arduino uno con shiel lcdkeypad
// jjboullosa. Miliamperios.com




#include <LiquidCrystal.h>
#include <Wire.h>
#include <SFE_BMP180.h>
#include <LCDKeypad.h>



LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

int key =0;
int lcd_key     = 0;
int adc_key_in  = 0;
int cuenta=0;
#define btnAutoPin 1       // orden botones lcdkey
#define btnStopPin 4
#define btnUpPin  3
#define btnDwPin 2
#define btnProgPin 0

#define btnNONE  5

int read_LCD_buttons()  // para leer los botones
  
  { adc_key_in = analogRead(0);      // Leemos A0
    // Mis botones dan:  0, 145, 329,507,743
    // Y ahora los comparamos con un margen comodo
    if (adc_key_in > 900)  return btnNONE;     // Ningun boton pulsado 
    if (adc_key_in < 50)   return btnProgPin; 
    if (adc_key_in < 144)  return btnUpPin;
    if (adc_key_in < 329)  return btnDwPin;
    if (adc_key_in < 504)  return btnStopPin;
    if (adc_key_in < 741)  return btnAutoPin;
 
   return btnNONE;  // Por si todo falla
  }

int val_sensor = 0;
int val_pin = 0;
float vol_sensor = 0;
float consigna = 0.0;
float delta;
int histeresis = 20;



// Variables de estado
byte compresor =0;
byte m_auto =0;
byte m_stop = 1;

// Salidas
int CompresorPin = 3;


// Analogicas
//int SensorPin = 0;

String str;
char buffer[32];

                      //Se declara una instancia de la librería
SFE_BMP180 pressure;

                    //Se declaran las variables. Es necesario tomar en cuenta una presión inicial
                    //esta será la presión que se tome en cuenta en el cálculo de la diferencia de altura
double PresionBase;


//Leeremos presión y temperatura. Calcularemos la diferencia de altura
double Presion = 0;
double PresionF = 0;
double Altura = 0;
double Temperatura = 0;

char status;
 

void actualizarPrg() {           //swich para cambio de manual a automatico PRG
   switch(cuenta){ 
               
            case 0:            
  digitalWrite(CompresorPin,LOW);
 
  lcd.setCursor(8,1);
  lcd.print("   ");  
  
            break;
            
            case 1:
  digitalWrite(CompresorPin,HIGH);
  lcd.setCursor(8,1);
  lcd.print("PRG");  
  
  break;

        
}
}


void setup() {
  
  SensorStart();
  
   Serial.begin(9600);
   //Se inicia el sensor y se hace una lectura inicial
 

lcd.begin(16, 2);
   lcd.clear();
  lcd.setCursor(0,0); 
 //Mostramos version

  lcd.print(" VACUO 0.1 ");
   lcd.setCursor(0,1); 
  lcd.print(" Miliamperios");
  
  //Salidas digitales
  pinMode(CompresorPin,OUTPUT);
  
 //digitalWrite(CompresorPin,HIGH);
 
  delay(5000);
  lcd.clear();
  //Se inicia el sensor y se hace una lectura inicial
  
}


void loop() {
               


   LeeInterruptores();  
   LeePulsadores();     
   ReadSensor();           //Se hace lectura del sensor mbp180
   LeeSensorPresion();
   CalculaSalida();  
   
   MuestraDatosSonda();
   MuestraConsigna();
   MuestraHisteresis();
   MuestraActuador();
   MuestraEstado();
 
  
} 


void LeeInterruptores(){    

 lcd_key=read_LCD_buttons();
  
  if (lcd_key == btnStopPin){
    m_stop = 1;
    setCompresor(0);
    
    }

  if (lcd_key == btnAutoPin){
    m_auto = 1; 
    m_stop=0;     
      setCompresor(1);
      }
  

    
  MuestraEstado();
}

void LeePulsadores(){
 lcd_key = read_LCD_buttons();

  if( m_stop == 1 || m_auto == 1){
    // Pulsador UP    
    if (lcd_key == btnUpPin){
      //Subimos consigna
      consigna += 0.01;
      if (consigna > 0){
        consigna = 0;
        }
      MuestraConsigna();
      } 
      
    // Pulsador DOWN    
    if (lcd_key == btnDwPin){
      //Bajamos consigna
      consigna -= 0.01;
      if (consigna < -1){
        consigna = -1;
        }

  
      MuestraConsigna();
     }
      
    //Pulsador PROG   
     
     if (lcd_key == btnProgPin){
     
       cuenta++;
       
        if (cuenta >= 2) {
           cuenta = 0;  
                 
        } 
      actualizarPrg();
} 
  }
}   
void LeeSensorPresion(){
  
   status = pressure.startPressure(3);
 
  //Calculamos Presion
  
PresionF= (Presion/1000)*-1;
 
  delay(110);
}

void CalculaSalida(){
  
  if(m_auto == 1 && m_stop == 0){
    delta = abs(1) * ((float)histeresis/1000);
    if (PresionF < (consigna - delta)){
      setCompresor(1);
      }
    if( PresionF > (consigna + delta)){
      setCompresor(0);
      }
    }
}
  
void MuestraDatosSonda() {

    //Sensor
    lcd.setCursor(0,0);
    lcd.print("P");
    if (PresionF < 0){
      lcd.setCursor(1,0);
      lcd.print(dtostrf(PresionF,2,3,buffer));
      }
    else{
      lcd.setCursor(2,0);
      lcd.print(dtostrf(PresionF,2,3,buffer));
      }
    delay(20);
    
    MuestraConsigna();
    MuestraHisteresis();  
    
    //Estado
    MuestraEstado();
    MuestraActuador();

}

void MuestraConsigna(){
  //Consigna
  lcd.setCursor(0,1);
  lcd.print("C ");
  if (consigna < 0){
    lcd.setCursor(1,1);
    lcd.print(dtostrf(consigna,2,3,buffer));
    }
  else{
    lcd.setCursor(2,1);
    lcd.print(dtostrf(consigna,2,3,buffer));
    }
  delay(20);
}

void MuestraHisteresis(){
 //Histeresis
 lcd.setCursor(12,1);
 lcd.print("H");
  if(histeresis < 10){
    str = "";
    str+=(histeresis);
    str+=("%");     
    }
  else{
    str = "";
    str+=(histeresis);
    str+=("%");
    }
  lcd.setCursor(13,1);  
   lcd.print(str) ;
  
  delay(20);
}  

void MuestraActuador(){

    if(compresor == 0){
      lcd.setCursor(13,0); 
      lcd.print("OFF");
      }
    else{
      lcd.setCursor(13,0); 
      lcd.print(" ON");
      }
    delay(20);
}

void MuestraEstado(){

  if(m_stop == 1){
    lcd.setCursor(8,0); 
    lcd.print("STOP");
  }
  else { 
    if (m_auto == 1){
      lcd.setCursor(8,0); 
        lcd.print("AUTO");  
        }
      else{
        lcd.setCursor(8,0); 
        lcd.print("MANU");
        }
}
  delay(20);
  }



void setCompresor(byte estado){

Serial.print("estado =");
Serial.println(estado);
  
  if(estado == 1 && m_stop == 0){
    compresor = 1;
    
    
    
    digitalWrite(CompresorPin,HIGH);
    }
  else{
    compresor = 0;
    digitalWrite(CompresorPin,LOW);
     
    }
  delay(10);
  MuestraActuador();
}


  void SensorStart() {

  //Secuencia de inicio del sensor

  if (pressure.begin())
    Serial.println("BMP180 init success");
  else

  {
    Serial.println("BMP180 init fail (disconnected?)\n\n");
    while (1);
  }

  //Se inicia la lectura de temperatura
  status = pressure.startTemperature();
  if (status != 0)  {
    delay(status);
    //Se lee una temperatura inicial
    status = pressure.getTemperature(Temperatura);
    if (status != 0)    {
      //Se inicia la lectura de Presiones
      status = pressure.startPressure(3);
      if (status != 0)      {
        delay(status);
        //Se lee la presión inicial incidente sobre el sensor en la primera ejecución
        status = pressure.getPressure(PresionBase, Temperatura);
      }
    }
  }
}


void ReadSensor() {
  //En este método se hacen las lecturas de presión y temperatura y se calcula la altura

  //Se inicia la lectura de temperatura
  status = pressure.startTemperature();
  if (status != 0)
  {
    delay(status);
    //Se realiza la lectura de temperatura
    status = pressure.getTemperature(Temperatura);
    if (status != 0)
    {
      //Se inicia la lectura de presión
      status = pressure.startPressure(3);
      if (status != 0)
      {
        delay(status);
        //Se lleva a cabo la lectura de presión,
        //considerando la temperatura que afecta el desempeño del sensor

        status = pressure.getPressure(Presion, Temperatura);
        if (status != 0)
        {
          //Se hace el cálculo de la altura en base a la presión leída en el Setup
          Altura = pressure.altitude(Presion, PresionBase);
        }
        else Serial.println("error en la lectura de Presion\n");
      }
      else Serial.println("error iniciando la lectura de Presion\n");
    }
    else Serial.println("error en la lectura de temperatura\n");
  }
  else Serial.println("error iniciando la lectura de temperatura\n");
  }









Última edición por juan jose boullosa el Vie, 24 Mar 2017 19:13, editado 4 veces en total.
#1367467
gracias , pero mi nivel es bajo... :roll:

he cambiado sigo en consigna , estaba equivocado.
El programa original tenia una función el botón PROG , que era pasar a modo manual de vació, no lo veo claro pero como digais, tenia pensado poner en este botón la información de numero de paradas totales y tiempo de trabajo, con mas tiempo puedo poner lo todo.

de momento funciona bastante bien , probé con bolsa simulando trabajo y hace un arranque cada 3 minutos a una presion de -0,520 claro que tengo de calderin un bote de mermelada.... :lol: :lol:
Tengo problemas con la bomba de vació al rato arranca cuando le da la gana , esta estropeada. :?

antes de todo esto me pongo con el esquema de conexiones


otra cosa , que puede generar confusion es que los reles como estos tien 3 coneciones de salida , es por que conectando por ejemplo la 1 y la 2 esta el circuito abierto ( sin paso de corrinte) , lo activa el arduino, la 2 y la 3 el circuito esta cerrado(pasa conrriente) lo apaga el arduino.

saludos
Adjuntos
EsquemaVacuometro.png
ESQUEMA CONEXIONES
#1367511
Hola he probado el código y va de lujo, yo le he cambiado la salida del relé por la 13 y le he cambiado el valor para que con la pulsación Up y down suba 50 en vez de 10. He estado probando y va muy bien, ahora me toca integrarlo todo en una cajita curiosa
#1367514
he añadido el modo manual del boton PRG , asi lo podemos manejar sin automatico, ahora le pondre tambien un cronometro y contador de paradas.
Me alegro que funcione bien ,pongo codigo nuevo , mas tarde , ojear as versiones :mrgreen:
buena idea lo del incremento, una vez miras el codigo , se entiende bastante :shock:
Mi bomba no funciona bien , tengo que cambiarla, al segundo atranque intenta arrancar pero no lo hace, ya me consigue un amigo una nueva :D

https://youtu.be/bId2FNFYK54

saludos
#1367518
Os estoy vigilandoooo. Jajaja.

Muy interesante. Ahora que estoy casi decidido a hacer unas alas esto es muy pero que muy interesante. Lo del aspirador no es muy efectivo, verdad Juan? He visto un video tuyo en internet que junto a las explicaciones de tu blog, las de Miguel en el hilo que tiene activo ahora mismo de su nuevo modelo, y algún otro ya me tienen casi a punto de lanzarme.
#1367521
Enhorabuena, yo estoy haciendo una bomba por el método de la jeringuilla y me estoy planteando el arduino, gracias a vosotros.Por cierto, lo de que se pare el compresor ¿puede ser que entre el protector de arranque continuo?, en el mio tarda unos 2 min entre arranque y arranque... creo que es por el condensador.
#1367522
hola , animate es mas facil de lo que parece, y siempre ira mejorando con las actualizaciones y ayuda de los demas compañeros.
lo de la bomba algo asi me parecio , se corta ella sola .
por cierto , es normal tarde en arrancar , o es que esta estropeado?
lobde la aspiradora ya no daba para mas :roll:
un saludo
Avatar de Usuario
Por sukoi
#1367528
el fallo de arranque o la parada repentina podria deberse a un protector termico interno, de laminillas bimetalicas que se usa para proteger el motor.
¿ al 'reciclar' la bomba le quitaste el aceite interno ? llevan una cierta cantidad de aceite dentro del recipiente que le sirve tanto para evacuar el calor hacia la carcasa como para mantener bien engrasado el equipo ....
el condensador solo sirve para crear un desfase en el bobinado y poder funcionar el motor ( es un motor de tipo 'jaula ardilla' y la corriente de alimentacion es monofasica )


Saludos
#1367530
me bas dejao ko, no tengo ni idea, me lo preparo un amigo, me dara otro, pero si se puede arreglar mejor

saludos
Adjuntos
IMG_20170222_193303.jpg
Avatar de Usuario
Por Lytium
#1368314
Hola juan, como va ese compresor ya has conseguido solucionar el problema que tenía, yo he integrado el vacuostato en mi bomba y lo he tenido un par de horas funcionando y parece que todo funciona bien, voy a empezar usarlo en unas alas del dlg para ver que tal se porta.
photo5994508949522589646.jpg
Un saludo.
#1368316
Hola, me alegro que te funcione bien, ya veo que te ha quedado muy bien , tiene un buen calderin.
Este sabado me trae un amigo un compresor , por lo que probe en vacuometro me va tambien bien, en cuanto tenga el compresor me pongo a enfibrar unas alas nuevas , primero hare pruebas :roll: , , en cuanto teste el funcionamiento me pondre con la modificacion.
Tambien , estuve documentandome sobre unos menus profesionales pero eso ya es pa otra :mrgreen:

saludos
#1368553
Pues ya me llegaron los componentes y he montado el vacuostato, ¡Que momento¡¡¡, y funciona ( a pesar de mis manitas...je je ).En un principio conectaba al revés , es decir encendia cuando debia apagar :shock: , cambié las salidas del relé y sin problema...Muchas gracias por el curro, la verdad es que ahorra muchos quebraderos de cabeza.
.Cuando me bajé las librerias de los componentes, no las encontraba al final las encontré para que funcionara bien y fueran las mismas que las detalladas en el programa sin cambiar nada.
.Ahora toca hacer pruebas, ántes de meter la pata con carbono y kevlar ( que no es barato),...
#1368554
Enhorabuena​ buena Aguado, como ves no es tan dificil, si yo puedo to el nundo puede, so un poco de paciencia y voila, yi ya yengo compresor nuevo , lo instalare esta semana y al tajo.
en cuanto tenga tiempo pondre una mejoras a modo de datos d tiempo​ y arrancafas para valorar so se necesita un calderin mayor .
Tambien estoy estudiando una version mas pequeña y barata aún arduino nano, sobre 8€, una pantalla mas grande , 7€, un adaptador de pantalla, 5€ un potenciómetro para mover los menus 3€ u un boton 2€
los precios varían, pero vaya asequible....realmete casi el mismo precio pero mas pantalla y mas simple :roll:

saludos y adarle al laminadoooo
#1368625
Porcierto Aguado , que material has usado , el mismo que detallamos arriba del hilo o similar??
a veces al materila similar lleva digerentes librerias o el pin de salida al rele es distinto, facil de averiguar, sobre todo para que los indecisos se atrevan..
saludos
#1368656
Pues utilicé los que ponia al principio del post,como no soy socio de Amazon los pedí por ebay y no tardó mucho..cuatro o cinco dias.Las librerias las originales del programa y no toqué nada...menos mal.
.Lo que si, es curioso que a mí también se me fastidió el sensor de presión, meteria alguna gamba, y la pantalla se quedaba con cuadrados blancos .Creia que se me habia fastidiado el invento :? , pero probando la placa y el key pad con otros progamas funcionaban bien, luego era el sensor, menos mal que pedí dos por lo que comentasteis..
#1368657
si falla el sensor no funciona nada, yo lo conecte al reves al montarlo despues de comprobar todo, es facil equivocarse en los cables , aun utilizando los colores correctos.

tambien habia pedido solo uno :?

saludos
#1368760
instale la bomba nueva , despues de las problemillas , si arranca mas de una vez por minuto ,no se arrancaba , puse conexiones de aire mas estancas para probar y la tube funcionanfo casi una hora , perfecto, arrancaba cada minuto, con bolsa de vacio ira mucho mejor sobre 1 cada 4 min

hare otro test con bolsa ,de por lo menos 2 horas a ver como va.
el biton de prog lo cambiare pronto, ya que no aporta nada
#1369277
por fin lonouse a trabajar, unas alas de Milvus en fibra de vidrio, lo inicie alas 10 de la mañana ycomo eataba el el patio por si molestaba el ruido ,con una temperatura​ de entre 11° y 17°se tiro mas de 20 horas en vacio, aunque como le fui a entrenar :lol: lo aoague ahira alas 15h, total casi 30 horas de funcionamiento continuo, si percances , motor de compresor frio, conpensaba cada 1'30 minutos, ,...sin quejarse como un buen robot :mrgreen:
la consigna la ajuste a -0,630


https://youtu.be/Vx1ow5acN2w
saludos
Adjuntos
IMG_20170422_150009.jpg
IMG_20170422_150129.jpg
IMG_20170422_150124.jpg
IMG_20170422_150316.jpg
#1369351
Gracias, par mi ha sido un gran paso , dede el vacio con aspirdora a a este vacuometro el acabado un muchisimo mejor, el proximo de carbono :mrgreen:


saludos
#1369548
Despues de hacer tres trabajos, el rele ha fallado( no apagaba el compresor,aunque la luz piloto deo rele decia que si , pero no sonaba el clic deninterrptor) :? suerte estaba al lafo y me di cuenta por el olor del aceite caliente del compresor, como mibrele tiene doa salidas, la cambie de salida y solucionado, pero habra que buscar un rele de calidad, arrancaba cada 1:30 minutos , supongo que si aumento la histieresis al 30 % paliara la cadencia de arranque, aunque buscare rele mejor .

saludos
Avatar de Usuario
Por sukoi
#1369554
otra solucion posible seria usar un rele 'esclavo' , usar el de la placa para mandar al segundo rele y este segundo ponerlo de mas potencia, y externo para que sufra los arcos de arranque de motor y sea mas facil de sustituir


saludos
#1369555
tendriad que hacerme un esquema :roll: , de momebto provare a poner uno normal de tienda ee electronica, sin nada de electronica .
tengo uno de 10A 250v.
habria que pensar en un sistema de seguridad por si acaso, si hubiese problemas parar todo y avisar


saludos
Adjuntos
IMG_20170426_164746.jpg
#1369556
ok,a ver si te entendí, con otro rele (controlo la presion minima) si se pasa corta el rele segundo que controla la histieresis, asi si se queda encendido el motor del compreseor al llegar a un vacio peligroso(prej.-0,500 corta el motor totalmente.
el rele 1 está normalmete encendido
el rele 2 eata normalmentw apagado


saludos
#1369581
Creo que no es esa la idea. El relé del vacuostato controla la bobina de arranque de un segundo relé, que este si, controla más potencia.

Ten en cuenta que la potencia que soporta un relé, normalmente se indica para carga resistiva; el motor es carga inductiva y por seguridad debiera ser del doble de potencia. Además en el arranque el pico es bastante generoso, así que... al precio que están los relés en los almacenes de electricidad, pon un pequeño contactor que valen poco dinero.

Otra cosa importante es poner un filtro antiparasitario en la bobina del relé, aunque un simple varistor cumple el cometido.

Ánimo !
Javier L.
#1369617
Hola, lo del relé ya me lo temía, y he estado pensando qué tal vez un relé de estado sólido funcionaría mejor, el mecánico el problema es que los contactos se queman, y un sensor de temperatura en el motor con un relé que lo desconecte estaría de lujo.
#1369621
holq ,no conozco ese tipo de reles, el sensor de temperatura creo no iria bien , si lodjas co.o yo fuera de casa el motor no calienta, pero habra que estudiar el tema, he ouesto el rele asecas , a ver cuantas alas aguanta :roll:
pon esquema​ de la idea :D

saludos
#1369624
ok, probare este , de todas formas es mejor dejar otro a modo de vigilante para parar el vacio si hay problemas :mrgreen:

saludos y gracias

¡Elija que Addons deben funcionar, utilice sólo lo que realmente necesita!