Comunicación Serial Matlab - Arduino
Short Description
Download Comunicación Serial Matlab - Arduino...
Description
Comunicación Serial Matlab - Arduino El objetivo de esta entrada es proporcionar una guía para establecer comunicación mediante el puerto serial entre Matlab y la placa Arduino, graficando los valores que habrán de leerse y además guardando en un archivo de datos los valores recogi recogidos dos u obteni obtenidos dos durant durante e la lectur lectura, a, los cuales cuales podría podrían n servir servir para para un poster posterior ior análi análisis sis.. ara ara ello ello sólo sólo necesitaremos obviamente disponer de una placa Arduino y el soft!are correspondiente, además de Matlab. rimeramente cargaremos en nuestra placa Arduino Arduino el código que se muestra enseguida, el cual como puede apreciarse es muy sencillo, lo "nico que se hace es leer un valor del pin analógico A# del arduino e imprimirlo con la instrucción $%erial.println$. El valor que estaremos leyendo en A# puede provenir de cualquier sensor analógico que nosotros dispongamos o bien el que nos interese para un fin determinado, e inclusive podemos hacer uso de un potenciómetro que simplemente cambiará su valor a capricho nuestro.
01 02 03 04 0# 0$ 0%
/* Com Comunica icación Seri erial Matlab Ardu rduino Sketch Arduino @Jorge e !o" Santo" */ int &al'
0( 0) 10 11 12
&oid "etu+,Serial.begin+)$00,'
13 14 1# 1$ 1%
&oid loo+,&alanalogead+A0,' Serial.rintln+&al,' dela+100,'
&osotros haremos uso de un potenciómetro para variar la lectura que habremos de tomar. 'ecordemos que el valor que obtendremos del pin analógico será un n"mero entero entre # y (#)*. +a coneión del potenciómetro a la placa Arduino se asume que es algo de trámite para vosotros. -na ve que hemos cargado el código anterior en nuestra placa, cerramos el entorno de desarrollo de Arduino para evitar conflictos con el puerto serial, puesto que si lo mantenemos abierto, Matlab nos enviará un mensaje de error cuando intentemos ejecutar la comunicación serial. /onsiderando lo anterior, ahora abriremos Matlab y crearemos un nuevo $script$ al cual le asignaremos un nombre a conveniencia propia, y en este escribiremos las siguientes instrucciones0
01 02 03 04 0# 0$ 0% 0( 0) 10 11 12
clear all'clc' dele delete te+i +in" n"tr tri ind nd++-5 5or ort t6 6- -C7 C7M1 M11 1, ,,' ,' "er "eria ial l"e "eri rial al+ +C7 C7M1 M11 16 68a 8aud uda ate te6 6)$ )$00 00,' ,' oen+"erial,' igur igure+ e+9a 9ame me6 6:r; :r;ic ica a de &alor &alore" e" obte obtenid nido" o", , titl title+ e+! !A A A9A A9A!7 !7:? :?CA CA C79 C79 A A>? >?97 97, ,' ' label+Mue"tra,' label+oltaBe de Salida,' &alero"+161000,'
13 or i1D1000 14 lim+E0 #.1F,' 1# lim+EiG100 iH10F,' 1$ lectura"can+"erial6Id,' 1% &al+i,lectura*+#/1023,' 1( hold on 1) lot+i6&al+i,6,' 20 drano 21 end 22 23 dlmrite+alore"K7btenido".dat6 &al6 delimiter6 Ln6 reci"ion6 I.2, 24 2# clo"e+"erial,' 2$ delete+"erial,' 2% clear all' Ahora veamos una breve descripción de cada una de las instrucciones dadas en el $script$ de Matlab que hemos creado. /omenamos borrando variables y limpiando la pantalla del $command !indo!$ para evitar cualquier tipo de incoveniente, para ello usamos $clear all$ y $clc$. +uego proseguimos a buscar si eiste alg"n objeto creado en Matlab asociado al puerto serial que usaremos y en caso de haberlo lo borramos para evitar que Matlab aborte la operación, para ello usaremos la instrucción de la primera línea del código mostrado enseguida. /on la segunda línea inicialiamos el puerto serial al cual le hemos llamado $pserial$, indicamos el puerto serial que usaremos en este caso $/1M(($ 2este valor variará dependiendo de cada usuario3 y definimos los bps a los que se ejecutará la coneión o comunicación serial, en este caso 45## bps, tal como se definió en el s6etch del Arduino. 7inalmente con $fopen$ abriremos el puerto serial que hemos inicialiado.
1 2 3
delete+in"trind+-5ort6-C7M11,,' "erial"erial+C7M1168audate6)$00,' oen+"erial,'
osteriormente definimos una serie de param8tros estáticos que contendrá el objeto $figure$ en el cual graficaremos los datos leídos, tales como título y e tíquetas en los ejes, las siguientes cuatro lineas muestran la parte de código implicada.
1 2 3 4
igure+9ame6:r;ica de &alore" obtenido", title+!A A9A!7:?CA C79 A>?97,' label+Mue"tra,' label+oltaBe de Salida,'
Ahora creamos un vector de ceros llamado $val$ de dimensión ((### y en el cual guardaremos todos los datos que obtengamos de la lectura que habremos de realiar.
1
&alero"+161000,'
Enseguida creamos un ciclo $for$ que se ejecutará desde ( hasta (###. 9efinimos los límites superior e inferior de la gráfica mostrada con $lim$ y $ylim$, nótese que el valor para $y$ permanece estático de # a :.( 2valores en volts3, mientras que el valor de los límites de $$ dependen de la ejecución del ciclo. Ahora creamos una variable llamada $lectura$ la cual tomará el valor entero 2eso nos indica el ;alor analógico3 a uno proporcional de # a : 2>oltaje de %alida3. /on $hold on$ nos aseguramos que los valores graficados en cada ciclo se mantegan, y evidente con $plot$ graficamos los vectores $i$ y $ val2i3$ usando como símbolo una $$. 7inalmente el comando $dra!no!$ 2literalmente3 nos permite ir graficando los valores tan pronto como se vayan leyendo del puerto serial.
1 2
or i1D1000 lim+E0 #.1F,'
3 4 # $ % ( )
lim+EiG100 iH10F,' lectura"can+"erial6Id,' &al+i,lectura*+#/1023,' hold on lot+i6&al+i,6,' drano end
%iguiendo con el código, con la línea que se muestra enseguida escribimos en un fichero con etensión ?.dat los valores que hemos guardado en el vector $val$ durante la ejecución de todo el ciclo. -samos saltos de línea como separadores 2@n3 y además guardamos los datos en modo de coma flotante con precisión de dos lugares decimales 2=,'
5= 5D 5@
5?
&oid loo+,
5E
-
C$
//llamamo" la uncion calculari"tancia+, guardamo" "u
CB
//retorno en una &ariable
C5
int di"tancia calculari"tancia+trig6 echo6 true,'
CC C%
Serial.rintln+di"tancia,'
C= CD
dela+200,'
C@ C? int calculari"tancia+int trig5in6 int echo5in6 bool metric,
CE %$ %B
//e&uel&e la di"tancia detectada or el "en"or en centimetro" o //en ulgada"
%5 %C
int duracion'
%%
int medida'
%= %D
//
View more...
Comments