Вы находитесь на странице: 1из 14

UNIVERSIDAD SANTIAGO DE CALI

FACULTAD INGENIERIAS
PROGRAMA DE INGENIERIA ELECTRONICA
CONTROLES II
Profesor: MSc. JAVIER A. MURILLO M.

5. RECEPCION DE SEALES A TRAVS MATLAB MEDIANTE UNA
INTERFAZ CON EL MICROCONTROLADOR ARDUINO UNO.

5.1 MICROCONTROLADOR ARDUINO

En estas clases siguientes intentaremos una forma de acercarnos al diseo y desarrollo
de proyectos basados en Arduino. Dado que tenemos los conocimientos adecuados en
electrnica y programacin, para hacerlo fcil, se he pensado en que nos centremos en
los aspectos ms bsicos de las caractersticas y la programacin de Arduino.

Otro de los objetivos de estas clases es organizar un poco la gran cantidad de
informacin sobre este tema existente en la red. Para ello casi toda la informacin se ha
obtenido a travs de la fuente http://www.arduino.cc o de manuales basados en ella
pero algo ms estructurados.

Por ltimo, las clases estn pensadas como soporte para la realizacin de nuestro
proyecto final que es el control de un brazo mecnico.

Qu es ARDUINO?
Arduino es una plataforma de
prototipos electrnica de cdigo
abierto (open-source) basada en
hardware y software flexibles y
fciles de usar. Est pensado para
artistas, diseadores, como hobby y
para cualquiera interesado en crear
objetos o entornos interactivos.




UNIVERSIDAD SANTIAGO DE CALI
FACULTAD INGENIERIAS
PROGRAMA DE INGENIERIA ELECTRONICA
CONTROLES II
Profesor: MSc. JAVIER A. MURILLO M.

Arduino puede sentir el entorno mediante la recepcin de entradas desde una variedad
de sensores y puede afectar a su alrededor mediante el control de luces, motores y otros
artefactos. El microcontrolador de la placa se programa usando el Arduino
Programming Language (basado en Wiring1) y el Arduino Development Environment
(basado en Processing2). Los proyectos de Arduino pueden ser autnomos o se pueden
comunicar con software en ejecucin en un ordenador, en nuestro caso Matlab y
Simulink.

Hay muchos otros microcontroladores y plataformas microcontroladoras disponibles
para computacin fsica. Parallax Basic Stamp, Netmedia's BX-24, Phidgets, MIT's
Handyboard, y muchas otras ofertas de funcionalidad similar. Todas estas herramientas
toman los desordenados detalles de la programacin de microcontrolador y la encierran
en un paquete fcil de usar. Arduino tambin simplica el proceso de trabajo con
microcontroladores, pero ofrece algunas ventajas para profesores, estudiantes y
aficionados interesados sobre otros sistemas:
Barato
Multiplataforma
Entorno de programacin simple y claro
Cdigo abierto y software extensible
Cdigo abierto y hardware extensible

Hay mltiples versiones de la placa Arduino. La mayora usan el ATmega168 de
Atmel, mientras que las placas ms antiguas usan el ATmega8. En nuestro caso nos
dedicaremos exclusivamente al trabjo con Arduino Uno.
Arduino Uno es una tarjeta basada en el microcontrolador ATmega328 (datasheet).
Tiene 14 entradas/salidas digitales, de las cuales 6 pueden ser utilizadas como salidas
PWM, 6 entradas anlogas, un cristal oscilador de 16Mhz, conexin USB, conector de
alimentacin, conector ICSP y botn de reset. Contiene todo lo necesario para hacer
funcionar al microcontrolador, simplemente se conecta al PC con un cable USB o se
alimenta con una fuente AC/DC o una batera de 9VDC.

UNIVERSIDAD SANTIAGO DE CALI
FACULTAD INGENIERIAS
PROGRAMA DE INGENIERIA ELECTRONICA
CONTROLES II
Profesor: MSc. JAVIER A. MURILLO M.

La nueva Arduino UNO. Adicional a todas las caractersticas de su predecesora
Arduino Duemilanove, UNO ahora utiliza un microcontrolador ATMega8U2 en vez
del chip FTDI. Esto permite mayores velocidades de transmisin por su puerto USB y
no requiere drivers para Linux o MAC (archivo inf es necesario para Windows)
adems ahora cuenta con la capacidad de ser reconocido por el PC como un teclado,
mouse, joystick, etc.

5.2 INSTALAR EL SOFTWARE ARDUINO.

Esta seccin explica como instalar el software Arduino en un computador que ejecute
Windows. Estos son los pasos para instalar los controladores o drivers de Arduino
UNO.
Lo primero que debemos hacer es descargar el entorno de desarrollo y los drivers
del Arduino, lo puedes bajar de la pgina http://arduino.cc/es/Main/Software.
Conecta la board y espera a que windows inicie el proceso de instalacin, despus
de unos minutos este fallar.
Haz Click en Menu Inicio, posiciona el mouse en equipo y presiona click derecho,
eligiendo la opcin de propiedades.
Ahora elije la opcin de administrador de dispositivos, mira debajo de los puertos
(COM & LPT) o en otros dispositivos, debe aparecer Arduino UNO.
Da Click derecho en "Arduino UNO " y elije la opcin de actualizar software del
controlador.
Despus elije la opcin buscar software de controlador en el equipo y selecciona la
carpeta donde descargaste Arduino UNO o superior.
Busca la carpeta drivers y seleccinala (slo la carpeta drivers no la FTDI QUE SE
ENCUENTRA INTERNA), sigue la instalacin de manera normal.
Ahora ya est listo el PC para trabajar con la board Arduino UNO.


UNIVERSIDAD SANTIAGO DE CALI
FACULTAD INGENIERIAS
PROGRAMA DE INGENIERIA ELECTRONICA
CONTROLES II
Profesor: MSc. JAVIER A. MURILLO M.

5.3 INICIANDONOS EN ARDUINO.

Esquema:



En la figura, podemos observar resaltadas las partes que es necesario conocer para el
correcto conexionado de la tarjeta.

1. Lnea de comunicaciones pines 0 y 1 no se usan. Entradas/salidas digitales pines del
2 al 13.
2. Botn reset de la tarjeta (Permite el re-inicio de la misma).
3. Lnea de Entradas analgicas (De la A0 a la A5).
4. Lnea de alimentacin. En estos pines podemos encontrar Vin, GND, 5V, 3.3V y
reset.
5. Plug de alimentacin de la tarjeta (Para voltajes entre 7 a 12 volts mximo).
6. Regulador de voltaje.
7. Conector USB.

Una vez instalado el paquete programa con sus drivers, en Windows 7, vamos a
ejecutar la aplicacin y despus seleccionaremos el tipo de placa que tenemos y el
puerto COM por el que se van a enviar los datos, para ello hacemos doble click sobre
el fichero con nombre arduino y se abrir la aplicacin. Nos encontraremos con una
ventana como la mostrada en la pgina siguiente.

UNIVERSIDAD SANTIAGO DE CALI
FACULTAD INGENIERIAS
PROGRAMA DE INGENIERIA ELECTRONICA
CONTROLES II
Profesor: MSc. JAVIER A. MURILLO M.

Como se puede ver, en la parte superior hay
una serie de mens, si pinchamos en tools
podemos ver que tenemos disponibles las
opciones "Board" y "Serial Port", en board
seleccionamos nuestro tipo de placa y en serial
port el puerto de comunicaciones donde se
encuentra nuestro Arduino, puedes comprobar
como se ha instalado si buscas en el
Administrador de Dispositivos de Windows en
la pestaa "Puertos (COM yLPT)" el
dispositivo con nombre "USB Serial Port
(COMx)".


Ahora nos podramos preguntar el por que de que se llame "USB serial Port" y por que
transferir archivos por puerto COM si nuestro Arduino est conectado por USB, la
respuesta es fcil, el arduino en realidad se comunica por puerto COM y en su placa lo
que tiene es un convertidor de puerto Serie a USB para que as podamos usarlo por
USB que es mucho mas cmodo y esta ms extendido que el COM.

Una vez que tenemos nuestro Arduino
conectado y configurado podemos cargar
un programa de ejemplo para comprobar
su funcionamiento, en el paquete que nos
hemos descargado tenemos una serie de
ejemplo que podemos subir. Para esto
pulsamos en el botn File -> Examples -
> 1.Basics -> Blink con esto cargamos

un pequeo cdigo que har que un led conectado a la salida 13 se encienda y se
apague con una frecuencia de un segundo.


UNIVERSIDAD SANTIAGO DE CALI
FACULTAD INGENIERIAS
PROGRAMA DE INGENIERIA ELECTRONICA
CONTROLES II
Profesor: MSc. JAVIER A. MURILLO M.

Como eso es muy sencillo y poco atractivo, lo podemos modificar ligeramente para
que cuando el led del terminal illa 13 este encendido, el del terminal 12 este apagado y
justo lo contrario as conseguimos que parpadee uno si y uno no, copie, analice y
ejecute el cdigo siguiente:
void setup() {
pinMode(13, OUTPUT); // Inicializa pin 13 como salida
pinMode(12, OUTPUT); // Inicializa pin 12 como salida
}
void loop() {
digitalWrite(13, HIGH); // LED on
digitalWrite(12, LOW); // LED off
delay(1000); // Tiempo de espera
digitalWrite(13, LOW); // LED off
digitalWrite(12, HIGH); // LED on
delay(1000); // Tiempo de espera
}

PRACTICAS PROPUESTAS (ENTRADAS/SALIDAS DIGITALES)
PRACTICA No. 1 (Secuencia de 3 LEDs)
int LED1 = 4; //Se asigna a una variable el pin
int LED2 = 5;
int LED3 = 6;
void setup() //Funcin donde se definen como funcionaran los pines o comunicaciones
{
pinMode(LED1,OUTPUT);
pinMode(LED2,OUTPUT);
pinMode(LED3,OUTPUT);
}
void loop() //Funcin donde se ejecuta el programa
{
digitalWrite(LED1,1);
delay(100);
digitalWrite(LED1,0);
digitalWrite(LED2,1);
delay(100);
digitalWrite(LED2,0);
digitalWrite(LED3,1);
delay(100);
digitalWrite(LED3,0);
}

UNIVERSIDAD SANTIAGO DE CALI
FACULTAD INGENIERIAS
PROGRAMA DE INGENIERIA ELECTRONICA
CONTROLES II
Profesor: MSc. JAVIER A. MURILLO M.

PRACTICA No. 2 (ENTRADAS ANALGICAS)

La tarjeta Arduino UNO posee 6 entradas analgicas, que pueden ser ledas a partir de
una tensin de entrada de 0 volts hasta 5 volts. La resolucin del convertidor
analgico/digital es de 8 bits.

La resolucin del convertidor puede ser modificada a travs de la tensin de referencia
denominada Vref en el placa Arduino.

int valor; //Inicializacin de la variable
que representara el valor del
potencimetro
int led=4; //Asignacin del pin
void setup()
{
Serial.begin(9600);
pinMode(led,OUTPUT);
}
void loop()
{
valor=analogRead(A0);
Serial.println(valor,DEC);
delay(400);
if(valor < 500)
digitalWrite(led,0);
if(valor >= 500)
digitalWrite(led,1);
}



PRACTICA No. 3 (Control de Luminosidad Por Ancho de Pulsos)

En las prcticas anteriores se ha aprendido a leer valores digitales y analgicos, asignar
variables e imprimir valores con Arduino. En esta prctica trata de leer un valor analgico y
este convertirlo a una salida PWM con el fin de controlar la intensidad luminosa de un led.

int pwm; //Variable para el valor del PWM
int led=5; //Pin 5
int valor; //Variable para la lectura analogica
void setup()
{

UNIVERSIDAD SANTIAGO DE CALI
FACULTAD INGENIERIAS
PROGRAMA DE INGENIERIA ELECTRONICA
CONTROLES II
Profesor: MSc. JAVIER A. MURILLO M.

Serial.begin(9600); //Comunicacion serial arduino
pinMode(led,OUTPUT); //asignacion de salida al pin led(5)
}
void loop()
{
valor=analogRead(A0); //Lectura analogica
pwm=(valor*255)/1023; //Conversion de bits a PWM
Serial.print("Analogico - ");
Serial.println(valor,DEC); //Impresion del valor analogico
delay(100);
Serial.println();
Serial.print("PWM - ");
Serial.println(pwm,DEC); //impresion del valor PWM
delay(200);
analogWrite(led,pwm); //enviar PWM a pin led
}

PRACTICA No. 4 (Manejo de Motores CC)
Existen varios tipos de motores (servos, Motores de
paso..), el motor que usaremos ser un motor DC. Son
los motores que encontramos en juguetes, DVD's, etc.
Al aplicarle un voltaje el motor gira y al quitarlo se
detiene. Para cambiar la direccin solo hay que
cambiar su polaridad. Para controlarlo necesitamos
ms componentes: un transistor de potencia TIP120 y
un Diodo 1N4002.


En este montaje untilizamos el pin digital PWM (modulacin de Ancho de Pulso).
Necesitamos una fuente de alimentacin externa, en este montaje una pila de 9 Voltios.
El diodo nos sirve de proteccin para el Arduino que se alimenta con 5 Voltios,
dejando que la corriente de 9 Voltios slo circule para alimentar al motor. En cambio la
Tierra debe estar conectada a la Tierra del Arduino, pues si no el circuito se
desestabiliza. Esto es una regla en todos los montajes: las tierras o masas deben estar
siempre conectadas.


UNIVERSIDAD SANTIAGO DE CALI
FACULTAD INGENIERIAS
PROGRAMA DE INGENIERIA ELECTRONICA
CONTROLES II
Profesor: MSc. JAVIER A. MURILLO M.

El transistor adems est protegiendo el Arduino, funcionando como interruptor para
este circuito. Tambin se utiliza una resistencia para protegerlo.
Para enviar un pulso al motor se utiliza la instruccin analogWrite(pin, pulso); Los
valores sern de 0 a 255, ya que PWM es una "simulacin" de analgico, en la que O
es 0 Voltios y 255, 5 Voltios.

En este programa enviamos un pulso al Motor que lo hace es ir de velocidad o a las
mximas revolucin:


int pulso = 0; // variable donde almacenamos el valor del pulso
int pinMotor = 4; // Pin 4 que puede generar PWM
void setup()
{ // No tenemos que declarar que es una salida analgica
}
void loop()
{
for(pulso = 0 ; pulso <= 255; pulso ++) // ciclo para ir subiendo el voltaje desde 0 a 5
{
analogWrite(pinMotor, pulso); // enviamos el pulso al motor va PWM
delay(15);
}
delay(600);
}

UNIVERSIDAD SANTIAGO DE CALI
FACULTAD INGENIERIAS
PROGRAMA DE INGENIERIA ELECTRONICA
CONTROLES II
Profesor: MSc. JAVIER A. MURILLO M.


5.4 MATLAB COMO RECEPTOR DE DATOS.

Para su instalacin, usted puede descargar el cdigo de control Arduino-Matlab de
https://javalmuusc.wikispaces.com .

Esto le permite controlar su placa Arduino a travs de USB desde una sesin de
MATLAB, en Windows y crear un objeto de MATLAB.

MATLAB es un paquete de apoyo para Arduino (tambin conocido como ARDUINO
IO). Este paquete permite el uso de un Arduino conectado a la computadora para llevar
a cabo tareas de entrada analgica y digital y de salida de MATLAB.

Asegrese de que la tarjeta se conecte al computador a travs del puerto USB y el
puerto corresponda. No abra el puerto para que Matlab lo pueda utilizar.

>> c: \ arduinoIO
>>Install_arduino
>> Savepath
>> A = arduino ('COM?'); //? Es el puerto a utilizar

Desde MATLAB, lanzar la orden a=arduino("puerto"), donde "puerto" es el
Puerto COM al que est conectado a Arduino, por ejemplo, "COM5" o "COM8" en
Windows.

A continuacin, utilizaremos los comandos a.pinMode, (para cambiar el modo de cada
pin entre la entrada y salida) a.digitalRead, a.digitalWrite, a.analogRead, y
a.analogWrite, para realizar la entrada digital, salida digital, entrada analgica y salida
analgica. Un ejemplo es:


UNIVERSIDAD SANTIAGO DE CALI
FACULTAD INGENIERIAS
PROGRAMA DE INGENIERIA ELECTRONICA
CONTROLES II
Profesor: MSc. JAVIER A. MURILLO M.

No olvide utilizar el comando a.delete para eliminar Arduino, (y liberar el nmero serie
del puerto), cuando la sesin ha terminado.


PRACTICA No. 1 (Lector analgico con potencimetros)
Uno de los ejemplos ms bsicos consiste en leer datos de un sensor conectado al
Arduino y transmitirlos al PC mediante comunicacin serie.
El objetivo ser pues leer una seal analgica de dos (extensible fcilmente a ms)
sensores (en este caso potencimetros) y transmitirla a Matlab, a fin de poder trabajar
con ella.
En primer lugar, vamos a preparar el
Arduino. Conectamos los potencimetros
entre los pines de +5V y Gnd (neutro) y
sus pines centrales (que por tanto
presentarn un voltaje entre +5V y 0V) a
las entradas analgicas A0 y A1 del
Arduino, como se muestra a la derecha.
Por supuesto, cualquier otro sensor
analgico sirve exactamente igual para
este ejemplo.

A continuacin, hemos de programar el Arduino, para que recoja la informacin de A0
y A1 y la enve via serie; el formato del envo consiste en: valor de A0, coma, valor de
A1 y retorno de carro + lnea nueva (debido a que se usa la funcin Serial.println() al
final)
Configuracin de Arduino:
// definir variables
int out1 = 0;

UNIVERSIDAD SANTIAGO DE CALI
FACULTAD INGENIERIAS
PROGRAMA DE INGENIERIA ELECTRONICA
CONTROLES II
Profesor: MSc. JAVIER A. MURILLO M.

int out2 = 0;

void setup() {
// inicializar puerto serie
Serial.begin(9600);
}

void loop() {
// leer pines
out1 = analogRead(A0);
out2 = analogRead(A1);
// enviar
Serial.print(out1);
Serial.print(",");
Serial.println(out2);
// esperar
delay(20);
Configuracin de Matlab:

El siguiente paso es preparar la medida, ajustando dos parmetros: el tiempo total de
medida, y la velocidad de capturas por segundo. ste ltimo parmetro hay que
estimarlo, pero haremos que que el programa nos devuelva el valor real, con lo que si
ste se aleja de lo estimado ser inmediato corregirlo.

% parmetros de medidas
tmax = 10; % tiempo de captura en s
rate = 33; % resultado experimental (comprobar)
% preparar la figura
f = figure('Name','Captura');
a = axes('XLim',[0 tmax],'YLim',[0 5.1]);
l1 = line(nan,nan,'Color','r','LineWidth',2);
l2 = line(nan,nan,'Color','b','LineWidth',2);

xlabel('Tiempo (s)')
ylabel('Voltaje (V)')
title('Captura de voltaje en tiempo real con Arduino')
grid on
hold on
% inicializar
v1 = zeros(1,tmax*rate);
v2 = zeros(1,tmax*rate);
i = 1;
t = 0;

% ejecutar bucle cronometrado
tic
while t<tmax
t = toc;
% leer del puerto serie
a = fscanf(s,'%d,%d')';

UNIVERSIDAD SANTIAGO DE CALI
FACULTAD INGENIERIAS
PROGRAMA DE INGENIERIA ELECTRONICA
CONTROLES II
Profesor: MSc. JAVIER A. MURILLO M.

v1(i)=a(1)*5/1024;
v2(i)=a(2)*5/1024;
% dibujar en la figura
x = linspace(0,i/rate,i);
set(l1,'YData',v1(1:i),'XData',x);
set(l2,'YData',v2(1:i),'XData',x);
drawnow
% seguir
i = i+1;
end
% resultado del cronometro
clc;
fprintf('%g s de captura a %g cap/s \n',t,i/t);
savefigure('captura_multi','s',[4.5 3],'po','-dpdf')

%% Limpiar la escena del crimen
fclose(s);
delete(s);
clear s;



PRACTICA No. 2 (Lector analgico infrarrojo)
Con el fin de poder leer un sensor infrarrojo del tipo diodo (aunque realmente es un
transistor con una base fotosensible) de manera digital, usted debe realizar el siguiente
montaje para ser ledo a travs de matlab.
El diodo LED de infrarrojos (el de la izquierda)
est en serie con una resistencia de 100 ohms, y
la luz es recibida mediante rebote por el sensor
de la derecha. El puerto analgico convierte el
voltaje en el punto medio en un valor de 10 bits
(0-1024).

Si en el emisor se sustituye la resistencia por
una de 50 ohms conseguiremos que detecte
objetos ms lejanos.






UNIVERSIDAD SANTIAGO DE CALI
FACULTAD INGENIERIAS
PROGRAMA DE INGENIERIA ELECTRONICA
CONTROLES II
Profesor: MSc. JAVIER A. MURILLO M.


PRACTICA No. 3 (Receptor mltiple)

Desarrolle un mdulo de Adquisicin de datos
que maneje por lo menos tres entradas
analgicas, a una de las cuales est conectado
un sensor de temperatura ambiente, la otra
conectada a un sensor de luminosidad y la
ltima conectada a un detector de presencia. La
seales deben ser detectadas a travs de matlab.

Вам также может понравиться