Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
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.
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:
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:
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.
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.
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
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.
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.
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.
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.
a = arduino ();
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.
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.
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')
Para correr este modelo en el hardware independientemente de Simulink presione el botón “Deploy to hardware”
en la barra de herramientas del editor
Si tiene problemas para crear el modelo como se describe arriba, puede usar el modelo Servo Control.
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.
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
https://wechoosethemoon.es/2011/07/21/arduino-matlab-simulink-controlador-pid/