PID
1. Introducción
El procesamiento digital de imágenes es un campo fascinante que forma parte de nuestra vida
diaria. En sus inicios el procesamiento de imágenes estaba restringido a campos de
investigación de ciencias de la computación, matemáticas y astronomía. Lo que constituía una
labor tardada, impredecible y cara, se ha convertido en una disciplina en si misma, con la
ayuda de microprocesadores baratos, dispositivos de gran memoria y componentes de
procesamiento de señales; volviéndose así una herramienta invaluable en diversas
aplicaciones, tales como robótica control industrial, telecomunicaciones, medicina, etc.
3. Herramientas a usar
MATLAB
MATLAB (abreviatura de MATrix LABoratory, "laboratorio de matrices") es una herramienta de
software matemático que ofrece un entorno de desarrollo integrado (IDE) con un lenguaje de
programación propio (lenguaje M). Está disponible para las plataformas Unix, Windows, Mac
OS X y GNU/Linux .
ARDUINO
Arduino (anteriormente conocido como Genuino a nivel internacional hasta octubre 2016), es
una compañía open source y open hardware, así como un proyecto y comunidad internacional
que diseña y manufactura placas de desarrollo de hardware para construir dispositivos
digitales y dispositivos interactivos que puedan sensar y controlar objetos del mundo real.
PUENTE H
Módulo L298N Driver Puente H L298. Módulo puente H L298N es una tarjeta para el control de
motores de corriente directa, motores a pasos, solenoides y en general cualquier otra carga
inductiva. Puede manejar cargas de 2 Amperios constantes.
4. Parte teórica
MOVER MOTOR PASO A PASO CON ARDUINO
Cuando circula corriente por una o más bobinas del estator se crea un campo magnético creando
los polos Norte-Sur. Luego el rotor se equilibrará magnéticamente orientando sus polos Norte-Sur
hacia los polos Sur-Norte del estator. Cuando el estator vuelva a cambiar la orientación de sus
polos a través de un nuevo impulso recibido hacia sus bobinas, el rotor volverá a moverse para
equilibrarse magnéticamente. Si se mantiene esta situación, obtendremos un movimiento giratorio
permanente del eje. El ángulo de paso depende de la relación entre el nombre de polos
magnéticos del estator y el nombre de polos magnéticos del rotor.
Hay dos tipos de motores paso a paso: los unipolares y los bipolares.
Los bipolares se componen de 2 bobinas y los unipolares de 4 bobinas. Para diferenciarlos
físicamente basta con observar el número de terminales de cada motor. Los bipolares siempre
tienen 4 terminales, dos para cada bobina, y los unipolares normalmente tienen 6 terminales, dos
para cada bobina y los otro dos son los comunes de estas. Hay motores unipolares con 5
terminales en que los dos comunes están unidos internamente.
Secuencia para controlar motores paso a paso Bipolares
Un motor paso a paso bipolar necesita invertir la corriente que circula por sus bobinas en una
secuencia determinada para provocar el movimiento del eje.
● El segundo bloque de control (integral) tiene como propósito disminuir y eliminar el error en estado
estacionario, provocado por el modo proporcional. El control integral actúa cuando hay una desviación
entre la variable y el punto de consigna, integrando esta desviación en el tiempo y sumándola a la
acción proporcional.
● El tercer bloque de control (Derivativo) considera la tendencia del error y permite una repercusión
rápida de la variable después de presentarse una perturbación en el proceso
5. Desarrollo
Programación con Matlab y Arduino:
Im_green_bin = bwareaopen(Im_green,75);
Rombo = strel('disk',5);
Im_green_bin = imerode(Im_green_bin,Rombo);
%figure(2)
%imshow(Im_green_bin)
%hold on %Sobrescribe en la imagen
Im_etiqueta = logical(Im_green_bin);
Parametro_obj =regionprops(Im_etiqueta,'Centroid');
Posicion=(Parametro_obj(1).Centroid(1)*50)/((x(2)x(1))/2);
fwrite(Arduino_Serial,Posicion,'uint8');
%Envia la posición
flushoutput(Arduino_Serial);
%text(Parametro_obj(1).Centroid(1),Parametro_obj(1).Centroid(2),'+
',%'color','r','FontSize',12)
%gtext();
%agrega un texto donde se dio click en la imagen
end
flushinput(Arduino_Serial); %Limpia el buffer de
salida
end
Arduino (controlador )
#include <LiquidCrystal_I2C.h>
#include <Stepper.h>
void setup() {
Serial.begin(9600);
for (int i = 8; i < 12; i++) {
pinMode(i, OUTPUT);
}
//se define la velocidad a la que responde el motor
myStepper.setSpeed(velocidad);
lcd.init();
lcd.clear();
lcd.backlight();
}
void loop() {
if (Serial.available()) {
//el dato entrante es el setpoint
if(setpoint_in == true){
Setpoint = Serial.read();
//solo entra a la primera vez cuando se inicia el
programa
setpoint_in = false;
Serial.flush();
}
else{
Matlab = Serial.read(); //se obtiene la muestra
/************** PID ********************/
//consigna - sensado = error
error = (Setpoint - Matlab);
float deltaTime = (millis() - lastProcess)/1000.0;
lastProcess = millis();
//Proporcional
P = error * kp;
//Integral
//la accion I actua mientras exista el error
datoAnt = Matlab;
// Suma todo
Pasos = P + I + D;
/*************** ACTUADOR ***************/
lcd.clear();
lcd.setCursor(10, 1); lcd.print(Pasos);
/**** Limitador de pasos ***********/
if (Pasos > 10) {
Pasos = 10;
}
if (Pasos < -10) {
Pasos = -10;
}
/***********************************/
Paso = posicion - Pasos;
posicion = Pasos;
myStepper.step(-Paso);
lcd.setCursor(0, 1); lcd.print(Setpoint);
lcd.setCursor(0, 0); lcd.print(Matlab);
lcd.setCursor(10, 0);
lcd.print(Paso);
Serial.flush();
}
Serial.println(go);
}
}
Conclusiones
- https://la.mathworks.com/products/image/features.html
- https://www.calculadoraconversor.com/conversor-de-colores/
- https://la.mathworks.com/videos/computer-vision-with-matlab-for-object-
detection-and-tracking-
82036.html?elqsid=1529706447302&potential_use=Student
- https://jjchop.wordpress.com/2012/06/15/comunicar-matlab-con-
arduino/
Anexo DATASHEET
ANEXO IMÁGENES