Vacuostato con Arduino

¿Eres un manitas y te gusta enredar con el rcmodelismo? Cuentanos cómo lo haces.

Moderador: Moderadores

Reglas del Foro

Cualquier punto de vista u opinión expresados en este foro son propios de su autor y no representan necesariamente los de RCModelistas.es

Administrador
Administrador
Mensajes: 2657
Registrado: 05 Feb 2009, 13:16
Ubicación: Almuñécar - La Herradura
NotaPublicado: 10 Abr 2009, 12:51
Recientemente a algunos nos ha entrado la fiebre de experimentar con composites. He conseguido un pequeño compresor prodecente de un congelador viejo y quiero montar con él una bomba de vacío. Me ha surgido el mismo problema que a todo el que empieza con esto: el vacuostato. Es dificil encontrar uno mecánico a buen precio y los digitales son carillos, sobre todo como para invertir para hacer un par de alas al año.

Buscando lo mas económico que encontré es un sensor de vacío en Farnell. Sale por unos 22€ mas iva. Tan sólo habría que diseñar un pequeño controlador todo/nada. En la red hay multitud de sitios donde podemos encontrar diseños sencillos, pues es un circuito muy usado.

Pero como lo mío es la programación decidí hacer un controlador digital utilizando una placa arduino. Es un circuito que se puede encontrar a buen precio y es muy sencillo de programar. En una tarde ya lo tengo funcionando.

Como todavía no me ha llegado el sensor para hacer las pruebas utilizo el generador de numeros aleatorios para simular el funcionamiento del sensor. La parte de control ya la tengo solucionada.



Conforme vaya avanzando iré subiendo más fotos. Y en cuanto esté operativo todo lo necesario para el que quiera fabricarse uno.

Un saludo.
Rubén Castro
Club Aeromodelismo Granada
Citar

NotaPublicado: 11 Abr 2009, 01:20
Pues ahora solo falta verlo todo montado y funcionando, me ha gustado ese LCD personalizado para el foro. :D
Citar

RCModelista
RCModelista
Karma: 0
Mensajes: 553
Registrado: 29 Mar 2009, 20:03
Ubicación: Ronda (Malaga)
NotaPublicado: 12 Abr 2009, 20:40
La verdad es que me quedo alucinado con vuestros artilugios, yo en este tema como en muchos otros estoy bastante pez.
A ver si me podeis explicar para que sirve un chisme de estos (vacuostato)

Un saludete
Jorge Gil
Club de Aeromodelismo Serrania de Ronda
Killo Team Member
Citar

Administrador
Administrador
Mensajes: 2657
Registrado: 05 Feb 2009, 13:16
Ubicación: Almuñécar - La Herradura
NotaPublicado: 12 Abr 2009, 20:53
Es un circuito que arranca y para la bomba de vacío para mantener una presión estable, previamente configurada.

Para curar alas enfibradas usando el método del vacío se meten en una bolsa de plástico, se sella y se le aplica vacío, para extraer el epoxi sobrante y darle un acabado a espejo. Esa bolsa normalmente tiene pérdidas porque es imposible sellarla completamente. Por eso necesitamos un controlador que nos recupere el vacío que se pierde poniendo de nuevo en marcha la bomba el tiempo necesario para llegar al vacío óptimo.
Rubén Castro
Club Aeromodelismo Granada
Citar

RCModelista
RCModelista
Karma: 0
Mensajes: 553
Registrado: 29 Mar 2009, 20:03
Ubicación: Ronda (Malaga)
NotaPublicado: 12 Abr 2009, 21:12
Muchas gracias, me a quedado muy claro.
No estaria de mas que los expertos en este tema abrierais un post explicando paso a paso el proceso para hacer alas con este tipo de materiales.

Un saludete
Jorge Gil
Club de Aeromodelismo Serrania de Ronda
Killo Team Member
Citar

NotaPublicado: 12 Abr 2009, 21:22
En este foro esta "Loki" (Fernando) que ha hecho alas y fuses de fibra con moldes, asi que a ver si lee esto y nos abre un hilo con el tema, creo que tiene fotos de todo el proceso (yo tengo el resultado del proceso :P ), la verdad es que teniendo buenos materiales y conociendo la tecnica se consiguen resultados asombrosos. ;)
Citar

Administrador
Administrador
Mensajes: 2657
Registrado: 05 Feb 2009, 13:16
Ubicación: Almuñécar - La Herradura
NotaPublicado: 20 Abr 2009, 20:32
Ya he montado el circuito en una placa de prototipos de arduino y estoy terminando de pulir el sofware de control. Por el momento el controlador funciona tal y como esperaba. Sólo me queda comprar la "fontanería" y probarlo con la bomba.

Este es el esquema de las entradas/salidas digitales que tenemos que conectar al Arduino:

Imagen


Y este el esquema del sensor de presión:

Imagen

Lista de componentes:

R1,R2,R3,R4,R5: 1K
R6: 10K
C1: 15nF
C2: 220nF
D1: 1N1004
Q1: BC547
RELE: PANASONIC EW - ALE14B05 - http://es.farnell.com/jsp/search/produc ... KU=3727180
SENSOR: SENSORTECHNICS ASDX015D44D - http://es.farnell.com/jsp/search/produc ... ku=4197653
Rubén Castro
Club Aeromodelismo Granada
Citar

Administrador
Administrador
Mensajes: 2657
Registrado: 05 Feb 2009, 13:16
Ubicación: Almuñécar - La Herradura
NotaPublicado: 23 Abr 2009, 20:58
Por si queréis ir bicheando os pongo el código del controlador. En mi caso estoy usando un LCD con un interface serie, para utilizar únicamente un pin digital para mostrar la información. La he pedido en BricoGeek, junto con el arduino y una placa de prototipos. En menos de 24 horas tenía el pedido en casa.

Pantalla:
http://www.bricogeek.com/shop/87-pantal ... negro.html

Arduino:
http://www.bricogeek.com/shop/10-arduin ... e-usb.html

Placa de prototipos:
http://www.bricogeek.com/shop/132-ardui ... o-pcb.html

Esta es la versión preliminar del controlador:

NOTA IMPORTANTE: El controlador todavía no está totalmente testeado. Lo he publicado con fines educativos. No me hago responsable si lo usáis directamente para hacer alas al vacío y al final os quedan como un churro.

Código: Seleccionar todo
#include <WString.h>
#include <MiSLCD.h>

#define numRows 2
#define numCols 16

MiSLCD lcd = MiSLCD(numRows, numCols);

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

int pulsador_up = 0;
int pulsador_dw = 0;
int pulsador_pr = 0;

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

// Salidas
int CompresorPin = 7;

// Entradas
// Digitales
int AutoPin = 2;
int StopPin = 3;
int UpPin = 5;
int DwPin = 4;
int ProgPin = 6;
// Analogicas
int SensorPin = 0;

String str;
char buffer[32];

void setup()
{
  //Inicializacion de la pantalla
  lcd.init();
 
  //Mostramos version
  lcd.clear();
  lcd.print(" VACUOSTATO 0.1 ",0,0);
  lcd.print("rcmodelistas.es ",1,0);
 
  //Salidas digitales
  pinMode(CompresorPin,OUTPUT);
 
  //Entradas digitales
  pinMode(AutoPin,INPUT);
  pinMode(StopPin,INPUT);
  pinMode(UpPin,INPUT);
  pinMode(DwPin,INPUT);
  pinMode(ProgPin,INPUT);
 
  delay(5000);
  lcd.clear();
}

void loop()
{
  LeeInterruptores();
  LeePulsadores();
  LeeSensorPresion();
  CalculaSalida();
  MuestraDatosSonda();
}

void LeeInterruptores(){
 
  val_pin = digitalRead(StopPin);
  if (val_pin == LOW){
    m_stop = 0;
    }
  else{
    m_stop = 1;
    setCompresor(0);
    }
   
  val_pin = digitalRead(AutoPin);
  if (val_pin == LOW){
    if(m_auto == 1){
      m_auto = 0;
      setCompresor(0);
      }
    }
  else{
    m_auto = 1;
    }
  MuestraEstado();
}

void LeePulsadores(){

  if( m_stop == 1 || m_auto == 1){
    // Pulsador UP
    val_pin = digitalRead(UpPin);
    if (val_pin == LOW){
      //Subimos consigna
      consigna += 0.01;
      if (consigna > 0){
        consigna = 0;
        }
      MuestraConsigna();
      }
    // Pulsador DOWN
    val_pin = digitalRead(DwPin);
    if (val_pin == LOW){
      //Bajamos consigna
      consigna -= 0.01;
      if (consigna < -1){
        consigna = -1;
        }
      MuestraConsigna();
      }
    //Pulsador PROG
    val_pin = digitalRead(ProgPin);
    if (val_pin == LOW){
      //Cambiamos modo de programacion
      }
    }
  else{
    if (m_auto == 0){
      // Pulsador DOWN
      val_pin = digitalRead(DwPin);
      if (val_pin == LOW){
        setCompresor(1);
        }
      else{
        setCompresor(0);
        }
      }
    }
}
 
void LeeSensorPresion(){
 
  val_sensor = analogRead(SensorPin);
  //Calculamos presion
  vol_sensor = map(val_sensor,0,1023,0,5000);
  presion = ((vol_sensor - 2500.0) / 2000.0) * (-1) ;
  delay(110);
}

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

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

}

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

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


void MuestraActuador(){

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

void MuestraEstado(){

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

void setCompresor(byte estado){

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


Como podéis comprobar necesitareis dos bibliotecas:
WString:
http://arduino.cc/en/uploads/Tutorial/String.zip

MiSLCD: Es una variación personal de la biblioteca SerLCD de sparkfun, mas que nada para personalizar los mensajes de bienvenida. No obstante podéis usar directamente la original.
http://www.sparkfun.com/datasheets/LCD/SerLCD-v2.zip

Cuando tenga otro ratico os pongo el manual de uso.
Rubén Castro
Club Aeromodelismo Granada
Citar

Administrador
Administrador
Mensajes: 2657
Registrado: 05 Feb 2009, 13:16
Ubicación: Almuñécar - La Herradura
NotaPublicado: 23 Abr 2009, 21:16
Por cierto, he de agradecer a Esco la ayuda prestada con el diseño del circuito. Yo soy más de software y sin su ayuda supongo que habría frito más de un componente.

Y otro apunte más. Si usáis la misma pantalla que yo acordaos de desconectarla siempre cuando programéis el arduino por USB. La placa usa el mismo puerto serie para la programación y para comunicarse con la pantalla, y en el proceso si la pantalla está conectada recibe los datos que le manda el PC. Si tenéis mala suerte podéis quedaros a cuadros cuando de repente las letras del display aparezcan en chino. Tuve que rebuscar los datasheet originales del LCD para dejarla de nuevo en cristiano.

Saludos.
Rubén Castro
Club Aeromodelismo Granada
Citar

En prácticas
En prácticas
Karma: 0
Mensajes: 18
Registrado: 18 Abr 2009, 15:29
NotaPublicado: 24 Abr 2009, 10:18
Hola. Yo también soy de bichear con microcontroladores (fundamentalmente PIC) y hay muchas cosas que se pueden hacer para esto del aeromodelismo. ¿por cuanto te ha salido la placa Arduino?
Citar

Administrador
Administrador
Mensajes: 2657
Registrado: 05 Feb 2009, 13:16
Ubicación: Almuñécar - La Herradura
NotaPublicado: 24 Abr 2009, 15:55
La placa de Arduino 27.84€

Puedes ver cuaquier precio siguiendo los enlaces que he puesto de los componentes.

Un saludo.
Rubén Castro
Club Aeromodelismo Granada
Citar

Volver a Ingenios, técnicas y trucos de construccion

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado