Laboratorio 1 - Electronica Avanzada

22
Universidad Nacional Tecnológica del Cono Sur Facultad de Ingeniería Electrónica y Telecomunicaciones LABORATORIO 1: Aplicación de MATLAB para Robótica Industrial CURSO : Taller de Electrónica Avanzada Laboratorio Nº 1 ALUMNO : ROQUE GONZALES, ELVIS JOEL CODIGO : 2008100024 PROFESOR : Sánchez Márquez SEMESTRE ACADEMICO : 2013-II

Transcript of Laboratorio 1 - Electronica Avanzada

Page 1: Laboratorio 1 - Electronica Avanzada

Universidad Nacional Tecnológica del Cono Sur

Facultad de Ingeniería Electrónica y Telecomunicaciones

LABORATORIO 1: Aplicación de MATLAB para Robótica Industrial

CURSO: Taller de Electrónica Avanzada

Laboratorio Nº 1

ALUMNO :ROQUE GONZALES, ELVIS JOEL

CODIGO : 2008100024

PROFESOR : Sánchez Márquez

SEMESTRE ACADEMICO : 2013-II

NOTA :

Page 2: Laboratorio 1 - Electronica Avanzada

Marco teórico

MATLAB es una utilidad matemática, originalmente concebida para realizar cálculos numéricos con vectores y matrices (de ahí el nombre, “MATrixLABoratory”), aunque en las sucesivas versiones ha ido incorporando multitud de aplicaciones nuevas. Matlab es un lenguaje de alto nivel orientado al desarrollo de cálculos técnicos. Integra cálculo, visualización y programación en un entorno interactivo de fácil manejo. Los problemas y las soluciones se expresan en la notación matemática habitual.El elemento básico de información es una matriz a la que no hace faltaasignar dimensiones con anterioridad. Por tanto, pueden abordarse problemasque requieren una formulación vectorial o matricial de un modo más fácil queen un lenguaje tipo FORTRAN o C.

Operaciones básicas y variables:

Matlab distingue entre mayúsculas y minúsculas. Entonces A y a pueden ser nombres apropiados para dos variables distintas. El nombre de toda variable debe comenzar por una letra. X, x, X1 o media son nombres válidos de variables.+, -, *, /, ˆ son los símbolos que denotan las operaciones suma, diferencia, producto, cociente y potencia. Las operaciones se van realizando por orden de prioridad, primero las potencias, después las multiplicaciones y divisionesy, finalmente, las sumas y restas. Las operaciones de igual prioridad se llevan a cabo de izquierda a derecha.

Manipulación de matrices en Matlab:

Para introducir los elementos de una matriz A, se escribe entre corchetes los elementos de cada fila separados por un espacio (o por una coma), mientras que las filas se separan con punto y coma.

Ejemplo. La matriz

se introduce en Matlab como sigue

>>A = [2 -1 0; 3 2 1];

Para referirse al elemento de la fila i y columna j de una matriz A, escribiremos A (i, j), como es usual en la teoría de matrices. También se puede necesitar referir a alguna submatriz de A. Por ejemplo, si necesitamos la fila i de A, escribiremos A (i, :). Del mismo modo, la columna j de A se denota en Matlab por A (i: j). La submatriz de A formada por las filas 2 y 3 y las columnas 1 y 2 de A se denota por

A =

Page 3: Laboratorio 1 - Electronica Avanzada

A ([2 3], [1 2]). Cuando las filas (o las columnas) que forman la submatriz son consecutivas hay una forma más simple de denotarla

>>A (1:4, [2 4])

Es la forma de referirse a la submatriz de A formada por las cuatro primeras filas y por las columnas 2 y 4. Ciertas matrices muy simples, entre ellas la matriz unidad y la matriz nula, no necesitan ser introducidas elemento a elemento ya que Matlab dispone de funciones que nos permitirán referirnos a ellas de forma muy fácil.

1. Matriz unidad: eye (4) es la matriz unidad de orden 4.

2. Matriz nula: zeros (3,4) es la matriz nula 3 × 4.

3. ones(n, m) es la matriz n × m cuyos elementos son todos iguales a 1.

4. rand(n, m) es una matriz n × m de números aleatorios distribuidos uniformemente en el intervalo (0,1). Rand (n, m) es una matriz de números aleatorios como antes, pero ahora están distribuidos normalmente.

5. det(A) nos da el determinante de una matriz cuadrada A.

6. rank(A) es el rango de la matriz A.

7. A’ es la matriz traspuesta y conjugada de A.

8. inv(A) es la matriz inversa de la matriz cuadrada y regular A.

9. sin(A) es la matriz (sen(a ij)), donde A = (a ij). Análogamente ocurre

con las otras funciones de Matlab que hemos descrito en una sección anterior.

10. diag(A) es una matriz columna con los elementos de la diagonal principal de A.

11. size(A) nos da las dimensiones de la matriz A.

Los símbolos +, * y ˆ se reservan para las operaciones matriciales suma, producto y potencia.

Ejemplos.

a) Determinar el cuadrado de la matriz cuadrada A:

>> Aˆ2

b) Determinar el producto de las matrices A y B (recordar que el producto sólo es posible si el número de columnas de A es igual al de filas de B:

>> A*B

c) Sumar las matrices A y B (que deberían tener la misma dimensión):

Page 4: Laboratorio 1 - Electronica Avanzada

Procesamiento digital de imágenes en Matlab:

Tipos de imágenes (según tipo de datos de sus elementos):

El tipo de dato matriz, que contendrá una imagen puede ser de varios tipos (según el tipo de dato de cada pixel):• Double: Doble precisión, números en punto flotante que varían en un rango aproximado de -10308 a 10308 (8 bytes por elemento)• uint8: Enteros de 8 bits en el rango de [0,255] (1 byte por elemento)• uint16: Enteros de 16 bits en el rango de [0, 65535] (2 bytes por elemento)• uint32: Enteros de 32 bits en el rango de [0, 4294967295] (4 bytes por elemento).• int8: Enteros de 8 bits en el rango de [-128, 127] (1 byte por elemento)• int16: Enteros de 16 bits en el rango de [-32768, 32767] (2 bytes por elemento).• int32: Enteros de 32 bits en el rango de [- 2147483648,2147483647] (4 bytes por elemento).• Logical. Los valores son 0 ó 1 (1 bit por elemento).

Vectores en Matlab:

Definición de un vector:

Vector fila: elementos separados con comas (,) o con espacios. Vector columna: elementos separados con punto y coma (;). Fila a columna y viceversa: con la transpuesta (´).

El operador (:) es utilizado para especificar rangos, su forma de empleo es muy simple y sus beneficios inmensos.

Gráficas en Matlab mediante vectores:

Funciones de la forma y = f(x)

Para hacer gráficas de funciones de una variable con MATLAB, primero se tiene que crear una tabla de valores de la variable para después dibujar la función. Por ejemplo, si se quiere dibujar la gráfica de la función.

y = sen(x):

Primero se crea una tabla de valores para x

>>x=0:pi/100:2*pi;

Con este comando se forma una tabla (el vector x) con 200 valores entre 0 y 2(pi/4). Otra forma de conseguir el mismo resultado sería utilizar el comando

>>x=linspace (0,2*pi, 200);

Page 5: Laboratorio 1 - Electronica Avanzada

Ahora se calcula los valores de y

>> y = sin(x); y por último se dibuja.

>>plot(x, y)

Realmente lo que se ha hecho es dibujar 200 puntos de la función en el intervalo [0; 2*pi/4], y posteriormente el programa los ha unido mediante segmentos. Si el número de puntos es lo suficientemente grande, como en este caso, no se aprecian los vértices.

Un ejemplo más complicado es cuando se realiza la gráfica de la función y = x .e− x2.

Se Definen los valores para los que se quiere hacer la gráfica

>>x=-3:.01:3;

Es decir, se dibuja la gráfica en el intervalo [¡3; 3] con un paso de longitud 0.01.

Se Define la función:

>>y=x.*exp (-x. ^2);

Y por último, se escribe el comando para que ejecute el dibujo.

>>plot(x, y)

Page 6: Laboratorio 1 - Electronica Avanzada

El aspecto de la gráfica se puede modificar utilizando algunos comandos:

- Cuadrícula. Si se quiere que aparezca una cuadrícula sobre el dibujo, se usa el comando

>>grid on.

El aspecto del dibujo sería ahora como el de la imagen. Para desactivar la cuadrícula se escribe:

>>grid off.

Page 7: Laboratorio 1 - Electronica Avanzada

Desarrollo del laboratorio:

1. Escribir un código en MATLAB usando la estructura condicional if:

Uso de la estructura condicional if para el reconocimiento de vocales mediante MATLAB:

Archivo grabar.m

Fs=44100; %Se asigna la frecuencia de muestreo a 44.1 KHz. y = wavrecord (44000, fs); %Se hace uso del comando wavrecord para efectuar la grabación.

Sound (y, fs); %El comando sound sirve para reproducir la grabación

Wavwrite (y, fs,'audio'); %Se guarda el archivo de audio grabado como “audio”.

Función normalizar

Function [sonidoN] = normalizar (sonido) %Llamada a la función “normalizar”.

Maximo = max (abs (sonido)); %Comando que obtiene el valor maximo absoluto del archivo.

n= length (sonido); %Comando que calcula la longitud del archivo.

SonidoN = zeros (1, n); %Comando que establece una matriz de ceros con longitud n.

For i = 1:1: n %Inicio de la estructura condicional For.

SonidoN (i) = sonido (i)/maximo; %Secuencia de la estructura condicional For.

End %Fin de la estructura condicional For.

End %Fin de la función “normalizar”.

Archivo Reconocer.m

v1 = wavread ('a'); %Se guarda el archivo previamente grabado como ‘a’ en el archivo v1.

v2 = wavread ('e'); %Se guarda el archivo previamente grabado como ‘e’ en el archivo v2.

v3 = wavread ('i'); %Se guarda el archivo previamente grabado como ‘i’ en el archivo v3.

v4 = wavread ('o'); %Se guarda el archivo previamente grabado como ‘o’ en el archivo v4.

v5 = wavread ('u'); %Se guarda el archivo previamente grabado como ‘u’ en el archivo v5.

Vocala = normalizar (v1); %Se normaliza el archivo v1 y se guarda como “Vocala”. Vocale = normalizar (v2); %Se normaliza el archivo v2 y se guarda como “Vocale”.

Vocali = normalizar (v3); %Se normaliza el archivo v3 y se guarda como “Vocali”.

Vocalo = normalizar (v4); %Se normaliza el archivo v4 y se guarda como “Vocalo”.

Vocalu = normalizar (v5); %Se normaliza el archivo v5 y se guarda como “Vocalu”.

Transvocala = abs ((fft (Vocala))); %Valor absoluto de Transformada de Fourier de ‘Vocala’.

Transvocale = abs ((fft (Vocale))); %Valor absoluto de Transformada de Fourier de ‘Vocale’.

Transvocali = abs ((fft (Vocali))); %Valor absoluto de Transformada de Fourier de ‘Vocali’.

Page 8: Laboratorio 1 - Electronica Avanzada

Transvocalo = abs ((fft (Vocalo))); %Valor absoluto de Transformada de Fourier de ‘Vocalo’.

Transvocalu = abs ((fft (Vocalu))); %Valor absoluto de Transformada de Fourier de ‘Vocalu’.

Archivo reconocimiento.m

Reconocer; %Se llama al archivo reconocer.m

voz_usuario = wavread ('audio'); %Se guarda el archivo ‘audio’ como voz_usuario.

Usuario = normalizar (voz_usuario); %Se normaliza ‘voz_usuario’ como ‘Usuario’.

Transusuario = abs ((fft (Usuario))); %Valor absoluto de Transformada de Fourier de ‘Usuario’.

Error (1) = mean (abs (Transvocala - Transusuario)); %Se calcula la diferencia en ‘Error’.

Error (2) = mean (abs (Transvocale - Transusuario)); %Se calcula la diferencia en ‘Error’.

Error (3) = mean (abs (Transvocali - Transusuario)); %Se calcula la diferencia en ‘Error’.

Error (4) = mean (abs (Transvocalo - Transusuario)); %Se calcula la diferencia en ‘Error’.

Error (5) = mean (abs (Transvocalu - Transusuario)); %Se calcula la diferencia en ‘Error’.

min_error = min (error); %Se obtiene el error mínimo

If min_error == error (1) %Estructura condicional if que compara el error mínimo con error(1).

Disp ('la vocal es a'); %Si resulta correcto la comparación se lee 'la vocal es a'.

End %Fin de estructura condicional if.

If min_error == error (2) %Estructura condicional if que compara el error mínimo con error(1).

Disp ('la vocal es e'); %Si resulta correcto la comparación se lee 'la vocal es e'.

End %Fin de estructura condicional if.

If min_error == error (3) %Estructura condicional if que compara el error mínimo con error(1).

Disp ('la vocal es i'); %Si resulta correcto la comparación se lee 'la vocal es i'.

End %Fin de estructura condicional if.

If min_error == error (4) %Estructura condicional if que compara el error mínimo con error(1).

Disp ('la vocal es o'); %Si resulta correcto la comparación se lee 'la vocal es o'.

End %Fin de estructura condicional if.

If min_error == error (5) %Estructura condicional if que compara el error mínimo con error(1).

Disp ('la vocal es u'); %Si resulta correcto la comparación se lee 'la vocal es u'.

End %Fin de estructura condicional if.

Page 9: Laboratorio 1 - Electronica Avanzada

2. Escribir un código en MATLAB usando la estructura condicional FOR:

Uso de la estructura condicional for para el control de motores servo mediante MATLAB y un PIC 16F628A.

%Programa del microcontrolador:

Include "modedefs.bas"; Utiliza la librería “modedefs.bas”.

'Declaración de variables; Motor var byte; Variable Motor cuyo tamaño es de un byte.

Pos var byte; Variable pos cuyo tamaño es de un byte.

Cont var byte; Variable cont cuyo tamaño es de un byte.

'Seteo de puertos; Trisb =%00000001; Se configura el bit 8 del puerto B como entrada y el resto como salida.

Portb =%00000000; Se envía el pulso 0 a través del puerto B.

'Programa principal; inicio: ; Inicio del programa

serin portb.0, T2400, Motor, pos; La función detiene el programa hasta recibir los dato serial.

For cont= 1 to 20 step 1; Inicia conteo, adicionando paso a paso.

Pulsout Motor, pos; pause 25 '10nextgoto inicio; Regreso a inicio.

%Programa en MATLAB:

Abrirpuerto.m

Clc; Elimina todas las variables.Disp ('BEGIN'); Despliega el mensaje “BEGIN”

SerPIC = serial ('COM1'); Se usará el Puerto serial COM1 por lo tanto se almacena en SerPIC

Set (SerPIC,'BaudRate', 2400); Se establece la tasa de baudios a un promedio de 2400.

Set (SerPIC,'DataBits', 8); Se establece los bits de datos a 8.

Set (SerPIC,'Parity','none'); Se establece ningún bit de paridad.

Set (SerPIC,'StopBits', 1); Se establece el bit de parada como 1.

Set (SerPIC,'FlowControl','none'); Se establece ningún control de flujo.

Fopen (SerPIC); Se abre el Puerto serial COM1.

Page 10: Laboratorio 1 - Electronica Avanzada

Enviardatos.m

Fprintf (SerPIC,'%c', [char (1) char (180)]); pause (0.8)Fprintf (SerPIC,'%c', [char (2) char (135)]); pause (0.8)Fprintf (SerPIC,'%c', [char (3) char (150)]); pause (0.8)

For s=1:1:4Fprintf (SerPIC,'%c', [char (3) char (190)]); pause (0.8)Fprintf (SerPIC,'%c', [char (1) char (214)]); pause (0.8)Fprintf (SerPIC,'%c', [char (2) char (135)]); pause (0.8)Fprintf (SerPIC,'%c', [char (1) char (180)]); pause (0.8)Fprintf (SerPIC,'%c', [char (3) char (70)]); pause (0.8)Fprintf (SerPIC,'%c', [char (1) char (208)]); pause (0.8)Fprintf (SerPIC,'%c', [char (2) char (154)]); pause (0.8)Fprintf (SerPIC,'%c',[char(1) char(180)]);pause(0.8)End Fprintf (SerPIC,'%c',[char(1) char(180)]);pause(0.8)Fprintf (SerPIC,'%c',[char(2) char(135)]);pause(0.8)Fprintf (SerPIC,'%c',[char(3) char(150)]);pause(0.8)

3. Escribir un código en MATLAB usando la estructura condicional WHILE:

Uso de la estructura condicional WHILE para generar una señal digital sin retorno a cero (UNRZ):

Function UNRZ (h)Clf;n=1;l=length (h);H (l+1) =1;

While n<=length (h)-1;    t=n-1:0.001: n;If h (n) == 0

     If h (n+1) ==0         y= (t>n);     Else        y= (t==n);

Page 11: Laboratorio 1 - Electronica Avanzada

     End    d=plot (t, y); Grid on;    Title ('Line code UNIPOLAR NRZ');    Set (d,'LineWidth', 2.5);    Hold on;    Axis ([0 length (h)-1 -1.5 1.5]);    Disp ('zero');

Else     If h (n+1) ==0        y= (t<n)-0*(t==n);     Else        y= (t<n) +1*(t==n);     End    d=plot (t, y); Grid on;    Title ('Line code UNIPOLAR NRZ');    Set (d,'LineWidth', 2.5);    Hold on;    Axis ([0 length (h)-1 -1.5 1.5]);    Disp ('one');

Endn=n+1;%pause;

End

Page 12: Laboratorio 1 - Electronica Avanzada

4. Dibujar en Matlab el mecanismo que se ilustra en la siguiente figura, donde h = 5cm, L1 = 40cm, L2 = 80cm.

%Programa en MATLAB:

function [T] = mov(h,L1,L2,alfa) %Trabajamos con 4 variables figure(1); %Figura a utilizaraltura=L1/sqrt(1+(cotd(alfa))^2); %Hallando altura del punto de

interseccion entre las rectas L1 y L2.distancia1=altura*cotd(alfa)+h;%Distancia desde el punto de intersección

de las rectas h con L1 y L1 con L2.distancia2=distancia1+sqrt(L2^2-altura^2); %Distancia desde el punto de interseccion de las rectas h con L1 y L1 con L2.B = linspace(h,distancia1,50);E = linspace(distancia1,distancia2,50); for i = 1:h; A(i) = i; T(i) = 0; plot(A,T) drawnow; %La función drawnow ejecuta una pausa en cada intervalo de

tiempo. pause(0.7);%Intervalo de tiempo de pausaend i=h;for c = 1:50; A(i+c) = B(c); T(i+c) = (altura*(B(c)-i))/(distancia1-i); plot(A,T); drawnow; %La función drawnow ejecuta una pausa cada intervalo de tiempo. pause(0.7); %Intervalo de tiempo de pausaend for f = 1:50; A(i+c+f) = E(f); T(i+c+f) = (altura*(E(f)-distancia2))/(distancia1-distancia2); plot(A,T); drawnow; %La función drawnow ejecuta una pausa en cada intervalo de tiempo. pause(0.7); %Intervalo de tiempo de pausaend end

Gráfica de la función:

Page 13: Laboratorio 1 - Electronica Avanzada

5. Dibujar en Matlab el mecanismo de la figura anterior de tal manera que se genere movimiento en esta.

Page 14: Laboratorio 1 - Electronica Avanzada

function [T] = movimiento(h,L1,L2,alfa) %Trabajamos con 4 variables figure(1); %Figura a utilizaraltura=L1/sqrt(1+(cotd(alfa))^2);%Hallando altura del punto de interseccion entre las rectas L1 y L2.distancia1=altura*cotd(alfa)+h; %Distancia desde el punto de interseccion de las rectas h con L1 y L1 con L2.distancia2=distancia1+sqrt(L2^2-altura^2); %Distancia desde el punto de interseccion de las rectas h con L1 y L1 con L2.B = linspace(h,distancia1,50);E = linspace(distancia1,distancia2,50); for i = 1:h; A(i) = i; T(i) = 0; plot(A,T) drawnow; %La función drawnow ejecuta una pausa en cada intervalo de tiempo. pause(0.1); %Intervalo de tiempo de pausaend for c = 1:50; A(i+c) = B(c); T(i+c) = (altura*(B(c)-i))/(distancia1-i); plot(A,T); drawnow; %La función drawnow ejecuta una pausa en cada intervalo de tiempo. pause(0.1); %Intervalo de tiempo de pausaend for f = 1:50; A(i+c+f) = E(f); T(i+c+f) = (altura*(E(f)-distancia2))/(distancia1-distancia2); plot(A,T); drawnow; %La función drawnow ejecuta una pausa en cada intervalo de tiempo. pause(0.1); %Intervalo de tiempo de pausaend for i = 1:h+10; A(i) = i; T(i) = 0; plot(A,T) drawnow; %La función drawnow ejecuta una pausa en cada intervalo de tiempo. pause(0.1); %Intervalo de tiempo de pausaend for c = 1:50; A(i+c) = B(c); T(i+c) = (altura*(B(c)-i-15))/(distancia1-i); plot(A,T); drawnow; %La función drawnow ejecuta una pausa en cada intervalo de tiempo. pause(0.1); %Intervalo de tiempo de pausaend

Page 15: Laboratorio 1 - Electronica Avanzada

for f = 1:50; A(i+c+f) = E(f); T(i+c+f) = (altura*(E(f)-distancia2+6))/(distancia1-distancia2); plot(A,T); drawnow; %La función drawnow ejecuta una pausa en cada intervalo de tiempo. pause(0.1); %Intervalo de tiempo de pausaend end

Gráfica de la función:

Conclusiones:

Page 16: Laboratorio 1 - Electronica Avanzada

- MATLAB es una herramienta matemática, el cual realiza cálculos numéricos con vectores y matrices, es un lenguaje de alto nivel orientado al desarrollo de cálculos técnicos. Integra cálculo, visualización y programación en un entorno interactivo de fácil manejo. Los problemas y las soluciones se expresan en la notación matemática habitual.

- Para hacer gráficas de funciones de una variable con MATLAB, primero se tiene que crear una tabla de valores de la variable para después dibujar la función.

- Una de las funciones más importantes en Matlab es la función Plot. La sintaxis básica de la función es escribir el siguiente comando en la ventana de comandos del Matlab o en un archivo-m. plot(x, y). Este comando ploteará los elementos del vector x en el eje horizontal de una figura, y los elementos del vector y en el eje vertical de la figura. Por defecto, cada vez que se use el comando plot, se borrará la figura que estaba, quedando solo la nueva.

- Cuando se pretende que el programa, una vez llegado a un cierto punto, tome un camino concreto en determinados casos y otro diferente si las condiciones de ejecución difieren, se utiliza el conjunto de instrucciones:if, else y elseif.

- La estructura condicional For, su uso principal se orienta a los vectores, pudiendo modificar, agregar, eliminar o consultar datos que se encuentren según el índice. Por esto último, una condición mínima del vector es que debe ser ordenado, porque si se intenta leer un dato inexistente, esto genera un error en Matlab.

- La estructura mientras que (while) es aquella en la que el número de repeticiones de bucle no se conoce por anticipado, y el cuerpo del buque se repite mientras se cumple una determinada condición.