Proyetofinallevitador
Proyetofinallevitador
Proyetofinallevitador
Este proyecto involucra diseo, desarrollo y aplicacin del curso de Sistemas de Control
Digital.
El sistema de control de levitacin neumtica consiste en suspender un cuerpo rgido
en el aire dentro de un entorno abierto o cerrado sin que exista de por medio una fuerza
fsica aplicada directamente sobre el cuerpo se denomina levitacin, misma que es
resultado de la existencia de una fuerza que contrarresta el peso del objeto del cuerpo
u objeto levitante.
El reto de este proyecto se centra en suspender al objeto en el aire por un tiempo dado
y en una posicin determinada.
Mdulo del censado: para monitorear la esfera dentro del ducto es necesario utilizar
un sensor de posicin. En este proyecto se emplea un sensor ultrasnico, el cual est
constituido por un trasmisor y un receptor de ondas ultrasnicas. Cuando el emisor de
ondas enva una secuencia de ellas se registra el tiempo exacto de envo, por otra parte
cuando chocan y son reflejadas por el objeto levitante son captadas por el receptor,
registrando el tiempo de llegada. A partir de clculos matemticos es posible obtener la
distancia entre el sensor y el cuerpo rgido u objeto levitante (ver Fig. 1).
Fd
mb
Fg
2
= 2
= (1)
= + (2)
es el peso de la esfera y es la fuerza de arrastre que acta sobre ella. Dichas
fuerzas estn dadas por:
= (3)
1
= ( )2 (4)
2
1
= + ( )2 (5)
2
Para una esfera, la ecuacin (5) toma la forma:
3 ( )2
= + (6)
8
es el radio de la esfera y su densidad.
(, )
= (7)
= (8)
En donde es la posicin de la esfera, es la posicin del sensor y es su
constante de tiempo que se obtiene experimentalmente.
void setup() {
Serial.begin(9600); // Establece la velocidad de datos del puerto serie
pinMode(trigPin, OUTPUT); // Establece pin como salida
pinMode(echoPin, INPUT); // Establece pin como entrada
digitalWrite(trigPin, LOW); // Pone el pin a un estado logico bajo
tiempoAnterior=0;
}
void loop() {
unsigned long tiempoActual;
tiempoActual = millis();
dT=(double)(tiempoActual - tiempoAnterior) ; //Tiempo de muestreo en milisegundos
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duracion = pulseIn(echoPin, HIGH ); //Devuelve la longitud del pulso del pin Echo en us
long distancia = (duracion*0.017);
distancia=45-distancia;
error=ref-distancia;
errorDer=error-errorAnt;
errorSuma += (ki*error);
double U=kp*error+(errorSuma)+kd*errorDer;
if (U>255){
U=255;
}
if (U<0){
U=0;
}
Serial.print(distancia);
Serial.print(',');
Serial.println(ref);
analogWrite(9,floor(U));
errorAnt=error;
tiempoAnterior=tiempoActual;
}
}
CONCLUSIONES Y RECOMENDACIONES