Vous êtes sur la page 1sur 8

Universidad Nacional de Colombia. Departamento de Energía Eléctrica y Automática.

Instrumentación

Comunicación Arduino-Matlab parte 2:


Adquisición de datos
Arduino, dentro de sus muchas cualidades, tiene la facilidad de comunicación mediante
protocolos serial, los cuales se están convirtiendo poco a poco en un estándar, debido a
que la mayoría de dispositivos los usan. Gran número de aplicaciones requieren de
comunicación entre el arduino y otros dispositivos tales como un computador, por esto es
de suma importancia conocer un poco acerca del funcionamiento de esta.
La presente guía pretende dar un acercamiento de una forma práctica y sencilla a la
comunicación serial, sin embargo si se desea ahondar más en el tema el siguiente link
corresponde al enlace oficial de Arduino dónde se explica el funcionamiento de
esta http://arduino.cc/en/Reference/Serial .

Sensor ultrasonido HC-SR04


Este sensor es uno de los más usados en el mundo del Arduino, debido a la gran cantidad
de aplicaciones que tiene, sumado a una resolución y rango muy aceptables para el
precio.
Característica:
Las características de este sensor son:

Alimentación +5v DC
Rango (efectivo) 2cm a 250cm
Resolución 0.3cm
Cuadro 1: Características del sensor
Funcionamiento:
El característico par de ojos del sensor, no es más que un generador (Trigger) y receptor
de ultrasonidos (Echo). El funcionamiento es simple, se activa el generador de ultrasonido,
la onda viaja por el espacio hasta colisionar con un obstáculo, la onda rebota y se desplaza
en dirección opuesta hacia el sensor, es percibida por el receptor, el cual, al ser excitado
envía un impulso, finalmente la medida que se realiza es del tiempo diferencial entre el
momento en que se envía la onda y el momento en que esta regresa.
Universidad Nacional de Colombia. Departamento de Energía Eléctrica y Automática.
Instrumentación

Adicionalmente, la velocidad del sonido se considera constante, por lo tanto, conociendo


la velocidad y el tiempo, es fácil hallar el desplazamiento haciendo uso de la ecuación
cinemática del movimiento rectilíneo uniforme.
𝑋 =𝑣∗𝑡
Donde X es el desplazamiento, v es la velocidad del sonido (343.2m/s en condiciones
normales) y t es la mitad del tiempo medido, ya que el tiempo medido considera el
desplazamiento de ida y regreso.

Montaje electrónico

Figura 1: Montaje electrónico.

Materiales:
1. Arduino UNO R3
2. Cables de fácil conexión macho-hembra x 4
3. HC-SR04
Universidad Nacional de Colombia. Departamento de Energía Eléctrica y Automática.
Instrumentación

Conexión:
Debido a la alta popularidad que obtuvo la placa se han desarrollado gran variedad de
sensores y accesorios que siguen con la siguen la política de Arduino de tener un precio
económico y una fácil implementación, además de un rendimiento aceptable para la
fabricación de prototipos e incluso para proyectos de pequeña o mediana escala
industrial.
La conexión en realmente sencilla, esto se debe al hecho de que este modelo de sensor
ultrasonido fue específicamente diseñado para Arduino:

 Vcc: Voltaje de alimentación, este va conectado al pin 5v del Arduino pues este es
el valor de su voltaje de funcionamiento.
 GND: Tierra, este va conectado a cualquier pin GND del Arduino. Esta es la
referencia con la que se obtiene la diferencia de potencial de 5v.
 Trig: Señal de salida, se conecta a cualquier pin digital, pero para evitar cambios
en la programación en este caso se conectará al pin 4.
 Echo: Señal de entrada, se conecta a cualquier pin digital, pero para evitar
cambios en la programación en este caso se conectará al pin 2.

Programación Arduino
Declaración de Variables:
Como ya me mencionó en la guía anterior arduino necesita que cada variable sea
previamente declarada, por cuestión de orden se suele hacer al comienzo del código, para
este caso solo necesitaremos las variables para nuestros pines (Ech y Trig) una variable
que almacene el tiempo, en este caso, de tipo long para tratar de ser lo más preciso
posible y finalmente una variable, del tipo entero (int) para la distancia.

int Ech=2; //Echo


int Trig=4; //Trigger
long tiempo;
int distancia;

Cuadro 1: Declaración de variables.


Universidad Nacional de Colombia. Departamento de Energía Eléctrica y Automática.
Instrumentación

Setup:
Tal como se mencionó en la guía anterior, el void setup es la primera función que se
ejecuta en el programa, además, esta, se ejecuta solo una vez, aquí se definen los estados
de las E/S y necesarias para trabajar este sensor y se establece la comunicación serial
necesaria para transmitir los datos al computador.
Setup:
Esta función se invoca una sola vez, justo al iniciar el programa, aquí se definen los
estados de las E/S (Entradas o Salidas Digitales), se establece la comunicación serial y se le
puede asignar un valor inicial a las E/S.

void setup() {

pinMode(Trig,OUTPUT);
pinMode(Ech,INPUT);
Serial.begin(9600);

Cuadro 2: Setup.

El pin Ech será una entrada puesto que es el receptor, mientras que el pin Trig debe ser
una salida que es la señal que hará que se genere la onda ultrasónica.
Loop:
Esta es la función principal donde se programa el corazón del código, funciona como un
ciclo infinito, que para esta práctica dividiremos en tres etapas:

 Etapa 1: Durante esta etapa se genera la señal, es necesario entonces poner en


alto el pin Trig por un pequeño instante y regresarlo a bajo para evitar
interferencias entre las diferentes ondas que se van a generar.

 Etapa 2: Se mide el tiempo y se halla entonces la distancia mediante el


procedimiento explicado en la sección del funcionamiento del sensor.
Nota: El valor utilizado para la velocidad está en [cm/us] para que la distancia
quede en cm.

 Etapa 3: Mediante el comando Serial.prinln se envía la variable distancia, por


medio de comunicación serial, y finalmente se usa un delay el cual como fin
únicamente evitar la saturación de datos para el análisis visual, en casos prácticos
Universidad Nacional de Colombia. Departamento de Energía Eléctrica y Automática.
Instrumentación

es importante evitar el uso de esta función de retardo, puesto que genera una
suspensión total del proceso, lo cual puede llegar a ser desastroso.

void loop() {
//Etapa 1
digitalWrite(Trig,HIGH);
delayMicroseconds(10);
digitalWrite(Trig,LOW);

//Etapa 2
tiempo=(pulseIn(Ech,HIGH)/2);
distancia = float(tiempo*0.0343);

//Etapa 3
Serial.println(distancia);
delay(100);

Cuadro 3: Loop.

Prueba de funcionamiento
A este punto el montaje electrónico, la programación y la comunicación ya deberían estar
casi listas, así que antes de continuar con la programación en MATLAB es importante
verificar que si se allá realizado el procedimiento de forma adecuada. Para esto se deben
seguir los siguientes pasos:
1. Abrir el software de Arduino y copiar el código de la sesión anterior.
2. Dar click en el botón Verificar. En caso tal de que no genere ningún error
continuar con el paso siguiente, de lo contrario corroborar que la sintaxis sea
correcta.
3. Conectar la placa Arduino al computador mediante el cable USB.
4. Verificar que la comunicación serial este activada. Para esto dar clic en
Herramientas>>Puerto en caso tal de que no esté seleccionado el puerto COM,
seleccionarlo dando click en él.
5. Dar click en el botón Subir.
6. Abrir el monitor serial de Arduino. Para esto dar click en Herramientas>>Monitor
serie.
7. Una vez abierto el monitor serial deberían empezar a aparecer los valores
correspondientes a la distancia en centímetros.
Nota: En caso tal de que no funcione verificar tanto el montaje electrónico como la
programación.
Universidad Nacional de Colombia. Departamento de Energía Eléctrica y Automática.
Instrumentación

Programación MATLAB
A modo de resumen, el programa de Arduino básicamente, genera una señal que activa el
emisor del ultrasonido, mide cuánto tarda el receptor en ser excitado y calcula la distancia
entre el sensor y el objeto sobre el cual colisiona la onda basado en este tiempo,
finalmente envía esta distancia por comunicación serial. Ahora vamos a realizar un
programa complementario que reciba esta información, la almacene y la grafique en
tiempo real, lo cual es muy útil para el monitoreo y análisis.

% INSTRUMENTACIÓN:
% Introducción a la adquisición de señales con MATLAB y ARDUINO

% El siguiente código es una función que permite mostrar y almacenar un


% valor enviado por comunicación serial desde un ARDUINO, mediante el
% software MATLAB, esta función está inicialmente diseñada para trabajar
% con un sensor ultrasonido HC-SR04, cuya señal se encuentra adquirida,
% procesada y enviada mediante el montaje y programación de los archivos
% “HC_SR04_MATLAB.jpg” y “HC-SRO4_MATLAB.ino”. Se solicita por favor no
% modificar el nombre de ningún archivo pues dicha acción puede generar
% fallos en el funcionamiento de estos.

% REFERENCIA:
%https://geekelectronica.com/recepcion-de-datos-por-puerto-serial-y-graficacion-
en-matlab/

function SIGNAL = ARDUINO(CANTIDAD,PUERTO)


% La función tiene como entradas (CANTIDAD,PUERTO) que corresponden al número
% de muestras que voy a tomar y el puerto COM en que se encuetra
% conectado el ARDUINO,y como salida (SIGNAL) que
% corresponde a señal enviada por el ARDUINO.

clc
close all
%INICIAR COMUNICACIÓN
delete(instrfind({'port'},{PUERTO}));%Borrar puerto COM
SERIAL = serial(PUERTO);%Se crea un nuevo puerto COM
SERIAL.BaudRate = 9600;% Se define la velocidad en baudios
warning('off','MATLAB:serial:fscanf:unsuccessfulREAD');
fopen(SERIAL);% Se abre el puerto
Universidad Nacional de Colombia. Departamento de Energía Eléctrica y Automática.
Instrumentación

%DISEÑO DE LA GRÁFICA
figure('Name','DISTANCIA')
title('DISTANCIA (HC-SR04)');
xlabel('Número de Muestras');
ylabel('Distancia (cm)');
grid off;
hold on;

%TOMA DE DATOS
contador = 1;
SIGNAL = zeros(1,CANTIDAD);
while contador<=CANTIDAD
ylim([0 50]);
xlim([contador-10 contador+10]);
a=fscanf(SERIAL,'%d');
SIGNAL(contador) = a;
plot(SIGNAL);
drawnow
contador = contador +1;
end

%FIN DE LA CONEXIÓN
fclose(SERIAL);
delete(SERIAL);

end

Cuadro 3: Código MATLAB.

Finalmente, para comprobar el funcionamiento se va a realizar el siguiente procedimiento:


1. Comprobar el puerto: para esto en software de Arduino dar clic en
Herramientas>>Puerto y ver a que puerto corresponde la conexión. Por ejemplo,
COM6.
2. Establecer directorio: dar clic sobre Browser for folder ubicado en la parte
izquierda de MATLAB y seleccionar la carpeta donde se almacenó el archivo
ADQUISICION.m.
3. Probar funcionamiento: escribir en el workspace el comando
DISTANCIA=ADQUISICION(100,’COM6’);, se usa COM6 pues es el del ejemplo, sin
embargo, debe ir el nombre del puerto observado en el paso 1.
Universidad Nacional de Colombia. Departamento de Energía Eléctrica y Automática.
Instrumentación

4. Gráfica: inmediatamente se abrirá una figura en la cual se empezará a graficar la


distancia en centímetros, sin embargo, el eje x no corresponde al tiempo, sino
solamente al intervalo entre envío y envío.
5. Almacenamiento: De la forma en que se ejecutó el código los valores de la
distancia quedarán almacenados dentro de la variable Distancia.

Vous aimerez peut-être aussi