Abstract: Este trabajo describe la implementación de Arduino y Matlab en conjunto. Se debe instalar una librería en Matl...
UCSM - Campus Universitario Edificio R. FCIFF - EPIMMEM – Ing. Mecatrónica. Control Mecatrónico III – Ing. Marcelo J.Q.C. Julio 6, 2017. Umacollo - Cercado | Arequipa
Diseño Y Control de Mecanismo Barra y Bola de Pivote Central con Control Clásico PID M. Díaz, O. Alpaca, D. Medina
Universidad Católica de Santa María, PERU (e-mail:
[email protected] [email protected],,
[email protected] [email protected],,
[email protected] [email protected])) Abstract: Este trabajo describe la implementación de Arduino y Matlab en conjunto. Se debe instalar una librería en Matlab y código característico de la librería en el Arduino, los cuales son de naturaleza Open-Source, para implementar la comunicación entre ambas plataformas de desarrollo. Se implementa como DAQ la salida directa de posición a través del monitor serial del entorno de desarrollo de Arduino. Finalmente, se combinó los datos como de entrada, tiempo y salida en Ident de Matlab para encontrar la respuesta de la planta, curva de estabilización y función de transferencia en base a estos resultados obtenidos anteriormente para poder implementar un control PI D estable. Keywords: Matlab, Arduino, Ident, PID, barra-bola, pivote central.
1. INTRODUCCIÓN El objetivo es controlar la posición de la esfera sobre la barra. El giro de la esfera, debido a la gravedad, está confinado a un canal situado en la parte superior de la barra que además cumple con la función de ser el elemento que soporta el sensor que mide la posición de la esfera. El sistema barra-esfera se puede ver como la abstracción que duplica el trabajo diario de un mesero con una charola o ciertos juegos en donde en una pequeña superficie, con n depresiones, se trata de posicionar n balines en las depresiones.
Cabe precisar que en ambos extremos se restringieron mecánicamente para que la esfera no salga de la barra. Esta restricción fue aproximadamente a 4 cm de cada extremo debido a que el sensor utilizado no media bien cuando la bola estaba a menos de 4 cm del sensor. 3. PLANOS 3.1. Planos
En este proyecto se muestra el diseño de dicho sistema, el funcionamiento del proyecto y los códigos respectivos para el control. 2. DESCRIPCION DEL PROYECTO El proyecto desarrollado es un sistema barra - esfera en donde la posición de una esfera sobre una barra es controlada por la inclinación de la barra. La barra se inclinaba por la acción de un servomotor, el cual tenía acoplado a su eje la barra; dicho servomotor se encontraba en el centro de la barra. Así se controla la inclinación de la barra por medio del actuador (servomotor) e indirectamente se controla la posición de la esfera.
Fig. 2. Planos 3D
Fig. 3. Vista Frontal Fig. 1. Esquema principal del mecanismo.
Fig. 4. Vista Frontal
UCSM - FCIFF - EPIMMEM – Ing. Mecatrónica. Control Mecatrónico III Julio 6, 2017. Arequipa
3.2. PROPIEDADES FISICAS Largo (cm)
Ancho (cm)
Alto (cm)
Material
Brazo
40.0
4.0
1.5
Aluminio
Apoyos
13.5
4.0
1.5
Aluminio
Cuerpo
15
2.5
30.0
Aluminio
Portador del servomotor
3.5
3.5
9.0
Aluminio
Eje
11.0
1.0
1.0
Acero
Cuadro 1. Dimensiones reales 4. FUNCIONAMIENTO DEL PROYECTO 4.1. Diagrama de Flujo
Fig. 5. Diagrama de flujo 4.2. Código en Arduino long distancia; long tiempo; int pin=11; int triger = 3; int echo = 5; int vcc = 2; int gnd = 4; float error=0; float c=0; float errora=0; float k = 1; float Kp=3;//3 float Ki=0.03;//0.01; float Kd=30;//30;
float P=0; int P_1=0; float pi=0; float PD=0; float PD_1=0; int PID=0; int sp=18; int num=0; void setup () { Serial.begin(9600); //SERVO pinMode (pin, OUTPUT); //ULTRASONICO pinMode (triger, OUTPUT); pinMode (echo, INPUT); //Alimentación ultrasónico pinMode (vcc, OUTPUT); pinMode(gnd,OUTPUT); digitalWrite(vcc,HIGH); digitalWrite(gnd,LOW);} void pulso (int duracion) { //Funcionamiento Servo duracion=constrain(duracion,1000,2000); digitalWrite(pin,HIGH); delayMicroseconds(duracion); digitalWrite(pin,LOW); delayMicroseconds(20000 - duracion);} void loop () { //ULTRASONICO digitalWrite(triger,LOW); delayMicroseconds(5); digitalWrite(triger,HIGH); delayMicroseconds(10); tiempo=pulseIn (echo, HIGH); distancia= int(0.017*tiempo); distancia = constrain(distancia,4,40); Serial.println(distancia); c = error-errora; delay(10); //CONTROLADOR PROPORCIONAL errora=error; error=distancia-sp; P=Kp*error; //Rango de error if (abs(error)>2) { //CONTROLADOR INTEGRAL pi=pi+Ki*error;} else{pi=0;} //CONTROLADOR DERIVATIVO PD=Kd*c; ///CONTROLADOR PID PID = k*(P+PD+pi); //PID = 0; //1540 represeta a la barra posicionada a 90 grados int y = 1540 + PID; //Restriccion por parametros de funcionamiento del y = constrain(y,1000,2000); //Condicion de funcionamiento if (abs(error)