Está en la página 1de 14

Práctica 5. Adquisición de datos.

Objetivo: Comprender el funcionamiento de los sistemas de adquisición de datos empleando tarjetas Arduino
Uno en Matlab.

Material requerido:
1 tarjeta Arduino Uno o Mega
1 cable usb tipo A a usb tipo B
1 servomotor
1 zumbador piezoeléctrico
1 led
1 potenciómetro 10 k
1 pulsador
1 fotocelda
Resistencias 270, 330, 470, 1k
Cables para conexión

1. Sistemas de adquisición de datos, DAQ.


La adquisición de datos se inicia con el fenómeno físico o la propiedad física de un objeto que se desea medir.
Esta propiedad física o fenómeno podría ser el cambio de temperatura o la temperatura de una habitación, la
intensidad o cambio de intensidad de una fuente de luz, la presión dentro de una cámara, la fuerza aplicada a un
objeto, o muchas otras cosas. Un sistema eficaz de adquisición de datos puede medir todos estos diferentes
propiedades o fenómenos. En la figura 1 se muestra la arquitectura general de un sistema de adquisición de datos.

Figura 1. Estructura de un sistema de adquisición de datos

Un sensor convierte una propiedad física o fenómeno en una señal eléctrica correspondiente medible, tal como
tensión, corriente, cambio en los valores de resistencia o condensador, etc. El término transductor es sinónimo de
sensores en sistemas de adquisición de datos. Hay transductores específicos para diferentes aplicaciones, como la
medición de la temperatura, la presión, o flujo de fluidos. El acondicionamiento de señales suele ser necesario si
la señal del transductor no es adecuada para el hardware DAQ que se utiliza. La señal puede ser amplificada o
atenuada, o puede requerir de filtrado, multiplexado o demultiplexado, muestreo simultáneo de señales, retención,
puede requerir de puente de impedancias, suministro adecuado de tensión o excitación al sensor, aislamiento,
linealización, etc. Este tratamiento de la señal normalmente lo realiza un pequeño módulo acoplado al transductor.

Las tarjetas DAQ son por lo general las interfaces entre la señal y un PC. Podría ser en forma de módulos que
pueden ser conectados a la computadora de los puertos, paralelo, serie, USB, etc., o tarjetas conectadas mediante
ranuras como PCI, ISA en la placa madre. Por lo general, el espacio en la parte posterior de una tarjeta PCI es
demasiado pequeño para todas las conexiones necesarias, de modo que se requiere una caja de conexión externa.
Las tarjetas DAQ a menudo contienen múltiples componentes como multiplexores, ADC, DAC, TTL-IO,
temporizadores de alta velocidad, memoria RAM. Estos son accesibles a través de un bus por un
microcontrolador, que puede ejecutar pequeños programas

El driver software habitualmente es suministrado por los proveedores, y permite que el sistema operativo pueda
reconocer al hardware DAQ y permitir el acceso de los programas a las señales de obtenidas por el hardware
DAQ. Un buen driver ofrece un nivel de acceso alto y bajo.

2. Tarjeta Arduino Uno


Arduino es una plataforma de electrónica abierta para la creación de prototipos basada en software y hardware
flexibles y fáciles de usar. Se creó para artistas, diseñadores, aficionados y cualquiera interesado en crear entornos
u objetos interactivos. Dicha plataforma consiste en un soporte hardware formado por una placa que proporciona
la alimentación, el oscilador, y la carga del programa en microcontroladores de la serie 8 bit de Atmel y soporte
software formado por un entorno de desarrollo basado en Wiring, que es un framework abierto para la
programación de microcontroladores; y un lenguaje llamado Processing, usado para el aprendizaje, realización
de prototipos y productos.

La tarjeta Arduino Uno, mostrada en la figura 2, presenta14 entradas/salidas digitales, de las que 6 pueden ser
utilizadas para generar señales PWM, y otras 6 analógicas. La figura 3 muestra su arquitectura interna. Sus
características principales son:

- Corriente máxima por pin: 40mA


- Memoria Flash: 32KB
- EEPROM: 1KB
- Velocidad del reloj: 16Mhz
- Tensión de funcionamiento: 5V
- Tensión de entrada recomendado: 7 - 12V
- Tensión de entrada límite: 6 - 20V

Figura 2. Tarjeta Arduino Uno


Figura 3. Conexiones de la placa Arduino Uno.

3. Configuración de Arduino Uno en Matlab.


En primer lugar, se deben descargar los drivers que realizan la conexión Arduino/Matlab posible. Se pueden
descargar desde en menú de la ventana de comandos de Matlab GetAdd-Ons->Get Hardware Support.
Existen drivers tanto para Matlab como para Simulink. Se descargarán e instalarán las bibliotecas Matlab Support
Package for Arduino Hardware y Simulink Support Package for Arduino Hardware.

Conectar la tarjeta Arduino y observar si es detectada desde el entorno de Matlab, en su caso para realizar la
conexión en el entorno de programación de Matlab habrá que declarar una variable con el nombre de Arduino y
el puerto en el que se encuentra esté conectado, por ejemplo: a=arduino(‘COM3’), si está en otro puerto
pues COM4 o COM5 según proceda y se realizará en unos pocos segundos la conexión. Si todo resulta correcto
debe observarse una respuesta en la ventana de comandos similar a:
a =
arduino with properties:
Port: 'COM3'
Board: 'Uno'
AvailablePins: {'D2-D13', 'A0-A5'}
AvailableDigitalPins: {'D2-D13', 'A0-A5'}
AvailablePWMPins: {'D3', 'D5-D6', 'D9-D11'}
AvailableAnalogPins: {'A0-A5'}
AvailableI2CBusIDs: [0]
Libraries: {'I2C', 'SPI', 'Servo'}
Arduino en Matlab posee también funciones propias que podemos ver en el archivo Arduino.m que se ha
descargado con los drivers desde la web de Mathworks. Para la programación en Matlab, la diferencia es que
tenemos que referirnos en sus funciones propias al objeto Arduino que hemos declarado como “a” anteriormente.
El comando methods(a) permite ver un listado de funciones disponibles que dependen de la versión de tarjeta:

>> methods(a)
Methods for class arduino:
addon readDigitalPin shiftRegister writePWMVoltage
configurePin readVoltage spidev
device rotaryEncoder ultrasonic
i2cdev scanI2CBus writeDigitalPin
playTone servo writePWMDutyCycle
Methods of arduino inherited from handle.

La programación de Arduino se supone que es divertida, pero puede llegar a ser frustrante y tomar mucho tiempo
para tareas como trazar datos de sensores o incorporar matemáticas avanzadas, procesamiento de señales o rutinas
de control en sus proyectos.

Matlab y Simulink abordan varios desafíos con la programación Arduino tradicional. Los productos soportan dos
flujos de trabajo principales:

 Leer, escribir y analizar datos de los sensores Arduino


 Desarrollar algoritmos que se ejecutan independientemente en el dispositivo Arduino

El paquete de soporte de Matlab para Arduino le permite escribir programas de Matlab que leen y escriben datos
en su Arduino y en dispositivos conectados tales como escudos de motor Adafruit, I2C y dispositivos SPI. Debido
a que Matlab es un lenguaje de alto nivel interpretado, la programación con él es más fácil que con C / C ++ y
otros lenguajes compilados, y puede ver los resultados de las instrucciones de E/S inmediatamente sin
compilación. Matlab incluye miles de funciones incorporadas de matemáticas, ingeniería y trazado que puede
utilizar para analizar y visualizar rápidamente los datos recopilados de su Arduino.

Con el paquete de soporte de Matlab para Arduino, el Arduino está conectado a una computadora que ejecuta
Matlab. El procesamiento se realiza en el equipo con Matlab.

Con el paquete de soporte de Matlab para Arduino, el Arduino está conectado a una computadora que ejecuta
Matlab. El procesamiento se realiza en el equipo con Matlab.

Ventajas de utilizar Matlab para la programación de Arduino:

 Leer y escribir datos de sensores de forma interactiva sin esperar a que el código compile
 Analiza los datos de tus sensores usando miles de funciones pre-construidas para procesamiento de señales,
aprendizaje automático, modelado matemático y más
 Visualice rápidamente sus datos utilizando la amplia gama de tipos de trama de Matlab

El paquete de soporte de Simulink para Arduino permite desarrollar algoritmos en Simulink, un entorno de
diagrama de bloques para modelar sistemas dinámicos y desarrollar algoritmos, y ejecutarlos independientemente
en su Arduino. El paquete de soporte amplía Simulink con bloques para configurar sensores Arduino y leer y
escribir datos de ellos. Después de crear su modelo Simulink, puede simularlo, ajustar los parámetros del algoritmo
hasta que lo reciba correctamente y descargar el algoritmo completado para la ejecución independiente en el
dispositivo. Con el bloque de funciones Matlab, puede incorporar el código Matlab en su modelo Simulink.
Con el paquete de soporte de Simulink para Arduino, desarrolla el algoritmo en Simulink y lo despliega en el
Arduino mediante la generación automática de código. El procesamiento se realiza en el Arduino.
Beneficios del uso de Simulink para la programación de Arduino:

 Desarrollar y simular algoritmos en Simulink y utilizar la generación automática de código para ejecutarlos
en el dispositivo
 Incorporar procesamiento de señales, diseño de control, lógica de estado y otras rutinas avanzadas de
matemáticas y ingeniería en sus proyectos de hardware
 Interactivamente afinar y optimizar los parámetros a medida que su algoritmo se ejecuta en el dispositivo
 Modificar fácilmente algoritmos para ejecutar en otras plataformas de hardware comercial y de bajo costo

Ejercicio 1.
Este ejemplo muestra cómo utilizar Matlab® Support Package para Arduino® Hardware para realizar operaciones
básicas en el hardware, tales como encender y apagar un LED, parpadear LEDs y reproducir sonido en un altavoz.
1. Conecte un LED al pin digital 11 en el hardware de Arduino a través de una resistencia de 1KOhm.

2. Crear un objeto arduino


a = arduino();
Si tiene más de una tarjeta Arduino conectada, especifique el tipo de puerto y placa.
a = arduino('com23', 'uno');
3. Encender y apagar el LED
Escribe el valor 1 o verdadero en el pin digital 13 enciende el LED incorporado y escribe un valor de 0 o
false lo apaga. Ejecute el siguiente comando en el indicador MATLAB para apagar y encender el LED.
writeDigitalPin (a, 'D13', 0);
pause (2);
writeDigitalPin (a, 'D13', 1);
4. Configure el LED para que parpadee en un período de 1 segundo.
for i = 1:10
writeDigitalPin (a, 'D13', 0);
pause (0.5);
writeDigitalPin (a, 'D13', 1);
pause (0.5);
end
5. Iluminar y atenuar el LED
Envíe señales de pulso de ancho especificado a los pines PWM del hardware de Arduino. Las señales
PWM pueden iluminar los LED conectados al pin. El ciclo de trabajo del pulso controla el brillo del LED.
Calcule la cantidad que el LED ilumina y oscurece dividiendo el ciclo de trabajo máximo y mínimo para
el pin por el número de iteraciones.
brightness_step = (1 - 0) / 20;
for i = 1:20
writePWMDutyCycle (a, 'D11', i * brightness_step);
pause (0.1);
end
for i = 1:20
writePWMDutyCycle (a, 'D11', 1-i * brightness_step);
pause (0.1);
end

También puede iluminar y atenuar las luces cambiando el voltaje de la señal PWM. Calcule la cantidad
que el LED ilumina y oscurece dividiendo la tensión máxima y mínima para el pin por el número de
iteraciones.
brightness_step = (5-0) / 20;
for i = 1:20
writePWMVoltage (a, 'D11', i * brightness_step);
pause (0.1);
end
for i = 1:20
writePWMVoltage (a, 'D11', 5-i * brightness_step);
pause (0.1);
end

6. Control de un LED mediante un potenciómetro


El potenciómetro cambia el valor de tensión leído del pin analógico 0 que se puede usar para ajustar el
nivel de voltaje en el pin PWM para controlar el brillo del LED conectado. Conecte un potenciómetro al
hardware Arduino con la pata intermedia conectada al pin analógico 0 y los otros dos conectados a 5V y
GND.

time = 200;
while time > 0
voltage = readVoltage (a, 'A0');
writePWMVoltage (a, 'D11', voltage);
time = time - 1;
pause (0.1);
end

Mientras el código está funcionando, puede girar la perilla del potenciómetro para ver cómo afecta el brillo
del LED.

7. Control de un altavoz piezoeléctrico con un pulsador


Esta parte del ejemplo muestra cómo reproducir un tono controlado por un pulsador conectado a un pin
digital en el hardware de Arduino. También puede configurar un pin digital para el modo pullup y utilizar
la resistencia pullup incorporada.
Conecte un altavoz piezo al pin digital 11 y conecte un pulsador al pin digital 12.

Para reproducir un tono en el altavoz, puede utilizar el método playTone para especificar la frecuencia y
la duración del sonido. En segundo lugar, el estado de un pulsador se puede detectar leyendo el valor del
pin digital conectado. Para que el pulsador funcione, hay que conectar una resistencia de pullup al pin
digital correspondiente en la tarjeta Arduino. Puede utilizar la resistencia de pullup integrada configurando
el modo de pin digital para activarlo. Si se ha pulsado el botón, lo que significa que el valor de lectura es
0, se emite un pitido en el altavoz. Ejecute el siguiente comando en el indicador MATLAB para reproducir
un sonido en el altavoz cuando se pulsa el botón pulsador.
configurePin (a, 'D12', 'pullup');
time = 200;
while time > 0
speaker_status = readDigitalPin (a, 'D12');
if speaker_status == 0
playTone (a, 'D11', 1200, 1);
else % Cambia la duración a cero para silenciar el altavoz
playTone (a, 'D11', 1200, 0);
end
time = time - 1;
pause (0.1);
end
8. Limpiar
Una vez que la conexión ya no es necesaria, borre el objeto arduino.
clear a
4. Control de servomotores
El servomotor es un dispositivo electromecánico que consiste en un motor eléctrico, un juego de engranes y una
tarjeta de control, todo dentro de una carcasa de plástico. Un servo tiene la capacidad de ser controlado en
posición. Es capaz de ubicarse en cualquier posición dentro de un rango de operación generalmente de 180º pero
puede ser fácilmente modificado para tener un giro libre de 360º. Los servos se suelen utilizar en robótica,
automática y modelismo (vehículos por radio-control, RC) debido a su gran precisión en el posicionamiento.

Figura 4. Servomotor industrial

Los servomotores funcionan por medio de modulación de ancho de pulso (PWM) Todos los servos disponen de
tres cables, dos para alimentación Vcc y Gnd (4.8 a 6 [V]) y un tercero para aplicar el tren de pulsos de control,
que hace que el circuito de control diferencial interno ponga el servo en la posición indicada.

La frecuencia usada para mandar la secuencia de pulsos al servomotor es de 50 Hz esto significa que cada ciclo
dura 20 ms, Las duraciones de cada pulso se interpretan como comandos de posicionamiento del motor, mientras
que los espacios entre cada pulso son despreciados.

Figura 5. Respuesta a diferentes anchos de pulso PWM

Dado que existen algunas pequeñas diferencias entre las distintas marcas de servos, en la tabla 1 están indicados
las características técnicas de varias marcas que comercializan este producto.

Partes de un servomotor
En general, los servos suelen estar compuestos por 4 elementos fundamentales:
a. Motor de corriente continua (DC)
Es el elemento que le brinda movilidad al servo. Cuando se aplica un potencial a sus dos terminales, este motor
gira en un sentido a su velocidad máxima. Si el voltaje aplicado sus dos terminales es inverso, el sentido de giro
también se invierte.
b. Engranajes reductores
Tren de engranajes que se encarga de reducir la alta velocidad de giro del motor para acrecentar su capacidad de
torque (o par-motor).
c. Sensor de desplazamiento
Suele ser un potenciómetro colocado en el eje de salida del servo que se utiliza para conocer la posición angular
del motor.
d. Circuito de control
Es una placa electrónica que implementa una estrategia de control de la posición por realimentación. Para ello,
este circuito compara la señal de entrada de referencia (posición deseada) con la posición actual medida por el
potenciómetro. La diferencia entre la posición actual y la deseada es amplificada y utilizada para mover el
motor en la dirección necesaria para reducir el error.

Tabla 1. Características de servomotores de diferentes marcas

Figura 6. Partes de un servomotor

Clasificación de servomotores según el tipo de señal.


Existen dos tipos de servos: analógicos y digitales. Ambos tipos de servos son iguales a nivel de usuario: tienen
la misma estructura (motor DC, engranajes reductores, potenciómetro y placa de control) y se controlan con las
mismas señales PWM. La principal diferencia entre ellos radica en la adición de un microprocesador en el
circuito de control de los servos digitales [3]. Este microprocesador se encarga de procesar la señal PWM de
entrada y de controlar el motor mediante pulsos con una frecuencia 10 veces superior a los servos analógicos.
Clasificación según el tipo de movimiento

Motores rotativos Motores lineales Motores Angulares

Figura 7. Clasificación de servomotores de acuerdo al tipo de movimiento.

Ejercicio 1. Control de servomotor con Matlab.


Este ejemplo muestra cómo usar el paquete de soporte MATLAB® para hardware Arduino® para controlar un
servomotor.

1. Conecte un servo motor como se muestra en la figura.

2. Crear objeto servo y calibrar el motor

a = arduino ();

O bien, puede especificarlo explícitamente al crear el objeto Arduino.

a = arduino ('com22', 'uno', 'Libraries', 'Servo');


s = servo (a, 'D3')
s =
Servo with properties:
Pins: D3
MinPulseDuration: 5.44e-04 (s)
MaxPulseDuration: 2.40e-03 (s)
3. Verifique los valores del rango de ancho de pulso de la hoja de datos del servo motor para calibrar el motor
para que gire en el rango esperado. Este ejemplo usa 700  10-6 y 2300  10-6 para que el motor se mueva de
0 a 180 grados.

clear s;
s= servo(a,'D3','MinPulseDuration',700*10^-6,'MaxPulseDuration',2300*10^-6)
s =
Servo with properties:
Pins: D4
MinPulseDuration: 7.00e-04 (s)
MaxPulseDuration: 2.30e-03 (s)

4. Cambie la posición del eje del servomotor de 0 (mínimo) a 1 (máximo) con incrementos de 0,2, es decir, 36
grados. Visualice la posición actual cada vez que cambie la posición.

for angulo = 0: 0.2: 1


writePosition (s, angulo);
current_pos = readPosition (s);
current_pos = current_pos * 180;
fprintf ('La posición actual del motor es % d grados \n', current_pos);
pause (2);
end

Ejercicio 2. Control de servomotor con Simulink


El paquete de soporte de Simulink para hardware Arduino permite crear y ejecutar modelos Simulink® en la
placa Arduino. Se incluye una biblioteca de bloques Simulink para configurar y acceder a sensores, actuadores e
interfaces de comunicación Arduino.

En un servomotor estándar, la posición del eje puede ajustarse con precisión, generalmente entre 0 y 180
grados. Los servomotores se utilizan en muchas aplicaciones y productos industriales, militares y de consumo.

Tarea 1: configurar el modelo para el hardware Arduino admitido


En esta tarea, configurará el modelo para la placa Arduino.

1. Crear el modelo Simulink que se muestra en la siguiente figura (abrir desde el prompt del espacio de trabajo
de Matlab: openExample('Arduino/ServoControlExample')

Figura 8. Calibración de un servomotor con Simulink


2. Haga clic en Simulation> Model Configuration Parameters para abrir el cuadro de diálogo Parámetros de
configuración.
3. Seleccione el panel Implementación de hardware y seleccione su hardware Arduino requerido de la lista de
parámetros de la placa de Hardware. No cambie ninguna otra configuración.
4. Haga clic en Aceptar.

Tarea 2: Conexión del servomotor a la tarjeta Arduino


Conecte el servomotor como se muestra en la figura.

1. Conecte el cable de alimentación (generalmente rojo) al pin de 5V.


2. Conecte el cable de tierra (generalmente negro) al pin de tierra.
3. Conecte el cable de señal (generalmente naranja) al pin digital
4. Consulte la asignación de pines en los bloques Arduino en la documentación para conocer los números de
pin admitidos

Para correr este modelo en el hardware independientemente de Simulink presione el botón “Deploy to hardware”
en la barra de herramientas del editor

Tarea 3 - Establecer la posición del servomotor a través de una fuente interna


En esta tarea, se configurará la posición del eje del servomotor con una fuente interna. El ángulo del eje variará
entre 0 y 180 grados, arriba y abajo.

1. Abra el modelo Servo Control.


2. Observe el bloque de escritura servo estándar. El bloque establece el nuevo ángulo del eje del servomotor
cada 0.01 segundos.
3. En su modelo Simulink, haga clic en Simulación> Parámetros de configuración del modelo para abrir el
cuadro de diálogo Parámetros de configuración.
4. Seleccione el panel Implementación de hardware y seleccione su hardware Arduino requerido de la lista de
parámetros de la placa de Hardware. No cambie ninguna otra configuración.
5. En su modelo Simulink, haga clic en el botón Implementar en hardware en la barra de herramientas.
6. Cuando el modelo comience a funcionar en la placa Arduino, observe la posición del eje del motor
barriendo entre 0 y 180 grados.

Ejercicio 3. Control de la posición del servomotor a través de un potenciómetro


Conecte los terminales del potenciómetro externo a los pines de 5 V y GND en su placa Arduino. Conecte el
terminal del medio al pin de entrada analógica 0. A medida que gira el potenciómetro, su resistencia cambia.
Como resultado, la tensión en el pin de entrada analógica también cambia. Su tarea es establecer el ángulo del
servomotor proporcional a este voltaje.

Figura 7. Control de un servomotor a través de un potenciómetro.

1. En MATLAB®, seleccione INICIO> Nuevo> Modelo Simulink.


2. Ingrese al LibraryBrowser en el indicador MATLAB®. Esto abre el navegador de la biblioteca Simulink.
3. En el navegador de la biblioteca Simulink, vaya al paquete de soporte de Simulink para hardware Arduino>
Común.
4. Arrastre el bloque de Entrada analógica al modelo. Haga doble clic en el bloque y establezca el número de
Pin en 0 y el tiempo de muestra en 0.01 segundos.
5. Arrastre el bloque de escritura servo estándar al modelo. Haga doble clic en el bloque y establezca el
número Pin en 4.
6. Conecte los bloques de entrada analógica y servo estándar.
7. En la biblioteca Simulink Math Operations, arrastre el bloque Gain al modelo y suéltelo en la línea que
conecta la entrada analógica y el bloque Servo Write estándar. Haga doble clic en el bloque de ganancia y
establezca su valor en 0.1760 (desplazamiento máximo del servomotor en grados dividido por la resolución
digital de entrada analógica, es decir, 180/1023).
8. En su modelo Simulink, haga clic en Simulación> Parámetros de configuración del modelo para abrir el
cuadro de diálogo Parámetros de configuración.
9. Seleccione el panel Implementación de hardware y seleccione su hardware Arduino requerido de la lista de
parámetros de la placa de Hardware. No cambie ninguna otra configuración.
10. Haga clic en Aceptar.
11. En su modelo Simulink, haga clic en el botón Implementar en hardware en la barra de herramientas. El
modelo ahora se implementará en el hardware Arduino.
12. Cuando el modelo comience a funcionar en la placa Arduino, observe que el eje del motor esté barriendo
entre 0 y 180 grados.

Si tiene problemas para crear el modelo como se describe arriba, puede usar el modelo Servo Control.

Ejercicio 4. Control de la posición del servomotor a través de una fotocelda


En esta tarea, creará un modelo que establece la posición del servomotor según la intensidad de luz detectada
por una fotocélula. En una habitación oscura, el eje del motor debe colocarse a 0 grados, mientras que en una
habitación brillante debe colocarse a 180 grados.

Use una fotocélula y una resistencia en lugar del potenciómetro que usó en la Tarea 4. Conecte un extremo de la
fotocélula al pin de 5V en la placa Arduino. Luego, conecte un extremo de la resistencia al pin GND en la placa.
Conecte los otros extremos de la fotocelda y la resistencia entre sí y luego a la entrada analógica pin 0 en la
placa.

Figura 8. Control de un servomotor a través de una fotocelda

Otras cosas para probar


Experimente con otros bloques en la biblioteca de bloques Arduino. Por ejemplo:

 Use el bloque de entrada digital para ajustar la posición del eje del motor dependiendo de la señal o señales
de control externo.
 Use el bloque Servo Lectura Estándar para leer la posición del eje del motor y compararlo con la posición

Revise el proyecto Arduino + Matlab/Simulink: controlador PID:

https://wechoosethemoon.es/2011/07/21/arduino-matlab-simulink-controlador-pid/

También podría gustarte