buenisimo informe final

Download Buenisimo Informe Final

If you can't read please download the document

Upload: kristhian-munoz-moya

Post on 09-Dec-2015

39 views

Category:

Documents


0 download

DESCRIPTION

informe arduino

TRANSCRIPT

  • 3

    Santiago Sur Automatizacin y Control Industrial

    Proyecto de Control

    Gua final

    Matlab y Arduino

    Nombre Alumno (s): Nicols Castillo Acosta

    Jonathan Corona Valenzuela

    Nombre Profesor: Hernn Pimentel Torrejn

    Fecha: 25 de julio de 2013

  • 4

    Contenido 1. Informacin General ............................................................................................................................. 5

    2. Caractersticas Tcnicas de arduino ...................................................................................................... 6

    2.1. Alimentacin ...................................................................................................................................... 6

    2.2. Pines de alimentacin ........................................................................................................................ 6

    2.3. Ancho de pulso (PWM) ...................................................................................................................... 7

    2.4. Entradas analgicas ........................................................................................................................... 7

    2.5. Software de Programacin ................................................................................................................ 7

    2.6. Caractersticas fsicas compatibilidad del Shield ............................................................................... 7

    2.7. Descarga del IDE de Arduino .............................................................................................................. 8

    2.8. Conectar la placa ................................................................................................................................ 8

    2.9. Instalacin de drivers ......................................................................................................................... 8

    2.10. Ejecutar placa Arduino ..................................................................................................................... 8

    2.11. Abrir el ejemplo blink ....................................................................................................................... 9

    2.12. Seleccin de placa ............................................................................................................................ 9

    2.13. Seleccionar puerto serie .................................................................................................................. 9

    2.14. Cargar el programa a la placa .......................................................................................................... 9

    2.15. Encender y Apagar un LED ............................................................................................................. 10

    2.16. Conectar una pantalla LCD 16x2 a la placa de desarrollo Arduino. ............................................... 11

    2.17. Ultrasnico ..................................................................................................................................... 12

    2.18. Control dual ................................................................................................................................... 13

    3. Comunicacin Serial entre Arduino y Simulink (Matlab) .................................................................. 14

    3.1. Experiencia Visualizar Potencimetro Simulink .............................................................................. 18

    3.2. Recepcin de datos en Simulink ...................................................................................................... 20

    3.3. Conexin interna .............................................................................................................................. 22

    4. Tiempo Continuo y Tiempo discreto .................................................................................................. 22

    5. Interfaz grafica .................................................................................................................................... 25

    6. Control PID .......................................................................................................................................... 43

    7. Control lgica difusa ........................................................................................................................... 52

    7.2. Control lgica difusa simulink .......................................................................................................... 62

    Anexo ...................................................................................................................................................... 67

  • 5

    1. Informacin General

    El Arduino mega es una placa microcontrolador basada ATmeg1280. Tiene 54 entradas/salidas

    digitales (de las cuales 14 proporcionan salida PWM), 16 entradas digitales, 4 UARTS (puertos

    serie por hardware), un cristal oscilador de 16MHz,

    conexiones USB, entrada de corriente, conectores ICSP y botn de reset. Contiene todo lo

    necesario para hacer funcionar el microcontrolador; simplemente conectarlo al ordenador con

    el cable USB o alimentarlo al ordenador con el cable USB o alimentarlo con un transformador

    o batera para empezar.

    figura 1.1

    figura1.2

    14 Salidas

    PWM

    16 Entradas

    Digitales

    16 Entradas

    Analgicas

    USB

    Alimentacin

    nn

    Reset

    tt Alimentacin

    Comunicacin

    Cable USB

  • 6

    2. Caractersticas Tcnicas de arduino

    2.1. Alimentacin

    Arduino mega puede ser alimentado mediante el puerto USB o con una fuente externa de

    poder. La alimentacin es seleccionada de manera automtica. Cuando se trabaja con una

    fuente externa de poder se debe utilizar un convertidor AC/DC y regular dicho voltaje en el

    rango opertico de la placa. De igual manera se puede alimentar el micro mediante el uso de

    bateras. Preferiblemente el voltaje debe estar en el rango de los 7v hasta los 12v.

    2.2. Pines de alimentacin

    Arduino mega posee algunos pines para la alimentacin del circuito aparta del adaptador para

    la alimentacin:

    VIN: A travs de este pin es posible proporcionar alimentacin a la placa.

    5V: Podemos obtener un voltaje de 5V y una corriente de 40mA desde este pin.

    3.3V: Podemos obtener un voltaje de 3.3V y una corriente de 50mA desde este pin.

    GND: El tierra (ground) de la placa (0V).

    NOTA: Al alimentar la placa Arduino corrobore que el voltaje de entrada est dentro del rango

    recomendado entre 7 y 12 voltios. Si utiliza ms de 12V, el regulador de voltaje se puede

    sobrecalentar y daar la placa.

    Memoria: El Atmega2560 tiene 256 KB de memoria flash para almacenar cdigo (de los cuales

    8 KB se utiliza para el gestor de arranque), 8 KB de SRAM y 4 KB de EEPROM (que puede

    ser ledo y escrito con la librera EEPROM).

    Micro controlador Atmega2560

    Voltaje de funcionamiento

    Interno

    5V

    Voltaje de Entrada

    (recomendado)

    7-12V

    Voltaje de Entrada (Lmites) 6-20V

    Digital pines I / O 54 (de los cuales 14 proporcionan una salida

    PWM)

    Pines de entrada analgica 16

    Corriente DC mxima por Pin en

    5v

    40 mA.

    Corriente DC mxima por Pin en

    3,3v

    50 mA.

    Memoria Flash 256 KB de los cuales 8 KB utilizadas por

    gestor de arranque

    SRAM 8 KB

    EEPROM 4 KB

    Velocidad de 16 MHz

  • 7

    Cada uno de los 54 pines digitales de la placa Arduino Mega se puede utilizar como entrada o

    de salida, mediante las funciones pinMode (), digitalWrite (), y digitalRead (). Ellos operan a 5

    voltios. Cada pin puede proporcionar o recibir un mximo de 40 mA. Y tiene una resistencia

    interna de pull-up (desconectado por defecto) de 20 a 50 k.

    2.3. Ancho de pulso (PWM)

    A travs del software de programacin, cualquier pin digital puede ser utilizado como PWM,

    pero por defecto la placa Arduino viene pre-programada para trabajar con este sistema en los

    pines 2 al 13 y 44 al 46, con una frecuencia de trabajo de 498 Hz, aproximadamente 0,5KHz.

    Figura 2.3.1.

    Como se sabe, en ocasiones el trabajo de motores de corriente continua modulados a travs de

    ancho de pulso a bajas frecuencia, puede provocar sonidos audibles o perceptibles al odo

    humano. Dado esto, la placa Arduino viene equipada con una funcin que permite modificar la

    frecuencia de trabajo de algunos pines PWM; mediante 3 Timers incluidos en la placa.

    2.4. Entradas analgicas

    La placa Arduino Mega2560 tiene 16 entradas analgicas, cada una proporciona 10 bits de

    resolucin (es decir 1024 valores diferentes). Por defecto miden desde Gnd a 5 voltios, aunque

    es posible cambiar el extremo superior de su rango, mediante los pines AREF y

    analogReference () funcin.

    2.5. Software de Programacin

    El Arduino Mega se puede programar con el software de Arduino el cual se puede descargar

    desde la pgina http://arduino.cc/en/Main/Software.

    El Atmega2560 en el Arduino Mega viene pre-quemado con un gestor de arranque que le

    permite cargar nuevo cdigo a la misma, sin el uso de un programador de hardware externo. Se

    comunica con el protocolo original STK500 Tambin puede pasar por alto el gestor de arranque

    y el programa del microcontrolador a travs de la ICSP (programacin In-Circuit Serial).

    2.6. Caractersticas fsicas compatibilidad del Shield

    El largo y ancho de la placa Arduino Mega2560 es de 4 y 2,1 pulgadas respectivamente, con el

    conector USB y conector de alimentacin se extiende ms all de la dimensin anterior. Tres

    orificios de los tornillos permiten que la tarjeta sea sujeta a una superficie o caja. Obsrvese

    que la distancia entre los pines digitales 7 y 8 es de 160 milsimas de pulgada (0,16 "),

    diferente al resto de los pines, para dar a conocer al usuario, el cambio de

    timer que utiliza el puerto de salida.

  • 8

    2.7. Descarga del IDE de Arduino

    Descarga la ltima versin de la pgina de descarga http://arduino.cc/es/Main/Software cuando

    la descarga finalice, descomprime el fichero. Asegrate de mantener la estructura de

    directorios. Haz doble click en la carpeta arduino-0019 para abrirla. Deberas ver una serie de

    ficheros y carpetas ah dentro.

    2.8. Conectar la placa

    Conecta la placa Arduino a tu ordenador usando el cable USB. El LED verde indicador de la

    alimentacin (nombrado como PWR en la placa) debera quedar encendido a partir de ese

    momento.

    2.9. Instalacin de drivers

    Cuando conectas la placa, Windows debera inicializar la instalacin de los drivers (siempre y

    cuando no hayas utilizado ese ordenador con una placa Arduino anteriormente).

    En Windows Vista y Windows 7, los drivers deberan descargarse e instalarse

    automticamente.

    En Windows XP, se abrir el dilogo de instalacin de Nuevo Hardware:

    Cuando te pregunten: Puede Windows conectarse a Windows Update para buscar

    el software? Selecciona No, no esta vez. Haz click en Siguiente.

    Selecciona Instalar desde una lista o localizacin especfica (Avanzado) haz click

    en Siguiente.

    Asegrate que Buscar los mejores drivers en estas localizaciones est seleccionado;

    deselecciona Buscar en medios removibles; selecciona Incluye esta localizacin en la

    bsqueda y navega al directorio drivers/FTDI USB Drivers dentro de la carpeta de

    Arduino que has descomprimido previamente.

    El asistente de instalacin buscar los drivers y te anunciar que encontr un "USB

    Serial Converter" (se traduce por Conversor USB-Serie). Haz click en Finalizar.

    El asistente de instalacin de hardware volver a iniciarse. Repite los mismos pasos que

    antes y selecciona la misma carpeta de instalacin de los drivers. Esta vez el sistema

    encontrar un "USB Serial Port" (o Puerto USB-Serie).

    Puedes comprobar que los drivers se han instalado correctamente abriendo la carpeta del

    Administrador del Dispositivos, en el grupo Dispositivos del panel de control del sistema.

    Busca "USB Serial Port" (o Puerto USB-Serie) en la seccin de puertos; esa es tu placa

    Arduino

    2.10. Ejecutar placa Arduino

    Haz doble click en la aplicacin Arduino.

  • 9

    2.11. Abrir el ejemplo blink

    Abre el programa de ejemplo para hacer parpadear un LED ("LED blink"): File >

    ExampleDigital > Blink.

    Figura 2.11.1

    2.12. Seleccin de placa

    Necesitars seleccionar el tipo de placa de tu Arduino en el men Tools > Board. Para las

    nuevas placas Arduino con el chip ATmega 328 (comprueba el texto escrito en el chip de la

    placa), selecciona la opcin Arduino Mega (ATmega1280) del men desplegable.

    2.13. Seleccionar puerto serie

    Selecciona el dispositivo serie de la placa Arduino en el men Tools | Serial Port

    (Herramientas | Puertos Serie). Lo ms probable es que sea COM3 o mayor

    (COM1 y COM2 se reservan, por regla general para puertos serie de hardware). Para asegurarte

    de cul es, puedes desconectar la placa y volver a mirar el men; el puerto de la placa habr

    desaparecido de la lista. Reconecta la placa y selecciona el puerto apropiado.

    2.14. Cargar el programa a la placa

    Ahora simplemente pulsa sobre el botn "Upload" en el Entorno Arduino. Espera unos pocos

    segundos - deberas ver parpadear los led RX y TX de la placa. Si el volcado del cdigo es

    exitoso vers aparecer el mensaje "Done uploading" en la barra de estado.

    Unos pocos segundos despus de finalizar el volcado del programa deberas ver cmo el led de

    la placa conectado al pin 13 (L) comienza a parpadear (con un color naranja). Si ocurre esto ya

    tienes tu Arduino listo y funcionando.

  • 10

    2.15. Encender y Apagar un LED

    Al implementar el conexionado de la imagen; se deber cargar el siguiente cdigo, el cual

    permitir encender y apagar un LED.

    Abra el software de programacin Arduino y pegue el siguiente cdigo, luego crguelo al

    Arduino con el botn de carga.

    Figura 2.15.1

    /* Inicia una seccin de comentarios

    -----------------------------------

    Encender y apagar un LED

    -----------------------------------

    El LED enciende y apaga de manera infinita mientras el Arduino se encuentre con suministro

    elctrico

    */ Cierra la seccin de comentarios

    int led = 2; //se declara el pin 2 como LED,

    void setup () {

    pinMode (led, OUTPUT); }// Se configura el pin 2, como salida

    void loop () {

    digitalWrite (led, HIGH); // Activa el pin 2, se enva la seal HIGH, y entrega 5v.

    // Se enciende el LED

    delay (1000); // Se debe esperar 1000ms o 1 segundo

    digitalWrite (led, LOW); // Desactiva el pin 2, enva la seal LOW//

    // Entrega 0v y posterior a esto se apaga el LED

    delay (1000); // Se esperan 1000ms o 1 segundo// El ciclo se reiniciara

    }

  • 11

    2.16. Conectar una pantalla LCD 16x2 a la placa de desarrollo Arduino.

    Las pantallas de cristal lquido LCD o display LCD para mensajes (Liquid Cristal

    Display) tienen la capacidad de mostrar cualquier carcter alfanumrico, permitiendo

    representar la informacin que genera cualquier equipo electrnico de una forma simple y

    econmica.

    Para estos casos, Arduino dispone de una librera LiquidCrystal.h que permite utilizar y

    manipular de forma sencilla pantallas LCD de diferentes tamaos y formatos.

    Anlogamente se podr comparar una pantalla LCD con una matriz de la siguiente forma:

    1 Potencimetro de 4,7 K.

    1 Display LCD 16x2 (16 columnas y 2 filas)

    Dependiendo del fabricante, en ocasiones la disposicin de los pines de salida de la pantalla

    LCD puede variar, remplace el conexionado de los pines segn la disposicin de estos,

    refirindose al datasheet del LCD adquirido y la siguiente referencia:

    LCD RS pin al pin digital nmero 52 de la placa Arduino

    LCD Enable pin al pin digital nmero 50 de la placa Arduino

    LCD R/W pin al pin Gnd Arduino

    LCD DB4 pin al pin digital nmero 48 de la placa Arduino

    LCD DB5 pin al pin digital nmero 46 de la placa Arduino

    LCD DB6 pin al pin digital nmero 44 de la placa Arduino

    LCD DB7 pin al pin digital nmero 42 de la placa Arduino

    LCD Vcc pin a alimentacin 5v.

    LCD GND pin al Gnd del Arduino

    Adicionalmente se deber conectar un potencimetro en cuyos extremos deber conectar +Vcc

    a 5v y Gnd correspondientemente. La pata interior del potencimetro se deber conectar el pin

    V0 del LCD. El potencimetro permitir modificar el contraste de la pantalla LCD Por ltimo

    se proceder a conectar la conexin USB de la placa de desarrollo, el usuario abrir el software

    de desarrollo de Arduino y se proceder a carga el siguiente cdigo.

    Figura 2.16.1

    // Incluir la siguiente librera para controlar LCD

    #Include

    // Inicializar la librera segn los pines de conexin en la //placa de desarrollo

    LiquidCrystal lcd (52, 50, 48, 46, 44, 42);

  • 12

    void setup () {

    // Se configura el LCD para utilizar 16 columnas y 2 filas

    lcd.begin (16, 2);

    // Posicionar el cursor en la posicin 0,0, eso es extremo superior izquierdo

    lcd.setCursor (0, 1);

    // Se imprime por la pantalla LCD, el mensaje

    lcd.print ("Gua Inacap!");

    }

    void loop () {

    // posicionar el cursor en la posicin 0,1, eso es extremo inferior izquierdo

    lcd.setCursor (0, 1);

    // Se imprime el nmero de segundo desde el ultimo reinicio del Arduino

    lcd.print (millis ()/1000);

    }

    2.17. Ultrasnico

    Mdulo de alcance ultrasnico HC - SR04 ofrece 2 cm - 400 cm sin contacto funcin de

    medicin, la precisin que van puede llegar a 3 mm. Los mdulos incluye transmisores

    ultrasnicos, el receptor y el circuito de control.

    5 Voltios (VCC), Tigger Entrada de pulsos (Trigonometra), Echo de salida de pulsos (Echo), 0

    Voltios (GND)

    Figura 2.17.1

    #include

    Ultrasonic ultrasonic(12,11); // (Trig PIN,Echo PIN)

    void setup() {

    Serial.begin(9600);

    }

    void loop()

    {

    Serial.print(ultrasonic.Ranging(CM)); // CM or INC

    Serial.println(" cm" );

    delay(100);

    }

  • 13

    2.18. Control dual

    Controlador de motor dual de 4.8V- 46V y 2A, que es la versin revisada del DF-MDV1.0. Su

    rendimiento ha sido altamente mejorado. Puede soportar una mayor corriente debido a que

    cuenta con una mayor disipacin de calor. Es fcil de controlar, ya que usa el chip de control de

    motor L298N de LGS de alta potencia. Este chip permite el control directo de 2 motores DC

    bidireccionales, e incorpora diodos cortos de alta velocidad para su proteccin. Salida de

    corriente de hasta 2A. El controlador usa un diseo broad-brush que reduce la resistencia que

    producen los cables.

    Figura 2.18.1

    int ENA = 5 ; / / conectarse al puerto de Arduino 5 (salida PWM)

    int IN1 = 2 ; / / conectarse a la Arduino puerto 2

    int IN2 = 3 ; / / conectarse al puerto de Arduino 3

    int ENB = 6 ; / / conectarse a Arduino de puerto 6 (salida PWM)

    int IN3 = 4 ; / / conectarse al puerto de Arduino 4

    int IN4 = 7 ; / / conectarse al puerto de Arduino 7

    digitalWrite ( IN1 , BAJA ) ;

    digitalWrite ( IN2 , HIGH ) ; / / establecer directon de Motora

    digitalWrite ( IN3 , HIGH ) ;

    digitalWrite ( IN4 , BAJA ) ; / / establecer directon de motorB } void loop ( ) {

    analogWrite ( ENA , 255 ) ; / / iniciar la conduccin motora

    analogWrite ( ENB , 255 ) ; / / empezar a conducir motorB

  • 14

    3. Comunicacin Serial entre Arduino y Simulink (Matlab)

    Para poder realizar la comunicacin serial es necesario realizar el siguiente paso

    Abrir el software Matlab, iniciar el entorno Simulink.

    Figura 3.0.1

    Se debe crear un nuevo proyecto, guardar y dar una direccin con nombre a eleccin.

    Figura 3.0.2

    Posteriormente se van a utilizar las Herramientas que nos proporciona el toolbox de simulink

    llamando instrument control.

    Figura 3.0.3

  • 15

    El bloque que vamos a utilizar nos permitir realizar la comunicacin serial los cuales

    los vamos configurar de la siguiente forma:

    Figura 3.0.4

    Seleccionar Add to untitled para copiar el bloque al archivo de simulink:

    Figura 3.0.5

    Realice los mismo paso con los bloques Display yScope

    Figura 3.0.6

  • 16

    Realice el siguiente esquema :

    Figura 3.0.7

    Configurar los Bloques Serial Receive con la, entrada de datos, el tipo de dato a entregar y el

    tiempo de medicin:

    Figura 3.0.8

    Configurar el parmetro del bloque Serial Configuration con los valores que se visualiza en

    la figura 3.0.9.

    Figura 3.0.9

  • 17

    La otra opcin es generada al momento de configurar el bloque Serial Receive se crea el

    bloque Serial Configuration

    Figura 3.0.10

  • 18

    3.1. Experiencia Visualizar Potencimetro Simulink

    Para realizar esta experiencia es necesario realizar los pasos anteriores del matlab el cual no

    permitir realizar la visualizacin en el Simulink, Adems los materiales que se necesitara para

    esto ser:

    1.- Potencimetro 10k

    1.- Arduino (Mega, Uno, etc)

    1.- Cable de comunicacin

    Haber Realizado el paso anterior del Simulink.

    El siguiente paso es seguir la conexin que muestra en la imagen:

    Figura 3.1.1

    El segundo paso es realizar el script del y cargarlo en el arduino con la opcin que muestra en

    la imagen:

    Figura 3.1.2

    El script que vamos a cargar ser el siguiente:

  • 19

    int sensorPin = A0;

    // Selecciona el pin para conectar el potenciometro

    int sensorValue = 0;

    //Declara una variable, para almaccenar el valor del potenciometro

    void setup() {

    Serial.begin(9600); }

    //Establecer la velocidad de datos para la trasmision de datos en serie

    void loop() {

    sensorValue = analogRead(sensorPin);

    //lee el valor del sensor y lo almacena en la variable sensorvalue

    sensorValue=map(sensorValue,0,1023,0,255);

    //Escalar la seal para formato uint8

    Serial.write(sensorValue);

    //Enviar el dato escalado al puerto serial.

    delay(20);} //Esperamos 1000ms o 1 segundo.

    Figura 3.1.3

    Al momento de tener los pasos realiza podemos comenzar la simulacin con la cual tenemos

    como resultados en la imagen:

    Figura 3.1.4

  • 20

    3.2. Recepcin de datos en Simulink

    Para realizar esta experiencia es necesario realizar los pasos anteriores del matlab el cual no

    permitir realizar la visualizacin en el Simulink, Adems los materiales que se necesitara para

    esto ser:

    1.- led

    1.- Arduino (Mega, Uno, etc)

    1.- Cable de comunicacin

    Haber Realizado el paso anterior del Simulink

    El siguiente paso es seguir la conexin que muestra en la imagen:

    Figura 3.2.1

    El segundo paso es realizar el script y cargarlo en el arduino con la opcin que muestra en la

    figura 3.2.2.

    Figura 3.2.2

    El script que vamos a cargar ser el siguiente:

    int led = 7;

    int val;

    void setup(){

    pinMode(led, OUTPUT);

    Serial.begin(9600); }

    void loop() {

    //potenciometro serial

    if(Serial.available()){

    val=Serial.read();

    delay(20);}

    analogWrite(led,val);

    Serial.write(val);

    delay(20);}

    El paso a seguir es realizar el esquema en simulink y cargar el script al arduino:

  • 21

    :

    Figura 3.2.3

    El resultado de la experiencia es la siguiente:

    Figura 3.2.4

  • 22

    3.3. Conexin interna

    En la siguiente figura podemos apresiar el conexionado de los diferentes componentes

    que posee la maqueta, adems de la distribucin de los pines:

    Figura 3.3.1

    4. Tiempo Continuo y Tiempo discreto

    En el caso de este proyecto el primer paso que debemos realizar es comprender en espacio en

    que se trabaja, con esto podremos realizar un sistema de control en tiempo real y as realizar

    una respuesta ms ptima.

    Para eso Simulink tiene herramienta que nos permite configurar los parmetros del sistema de

    control, por eso necesario entender que los sistema en tiempo real se entiendo por cualquier

    sistema que se comporte a la dimensin a que nos rodea, de esta forma Simulink, trabaja en

    varios espacios de tiempo, dependiendo el requerimiento a obtener, y los utilizados son Tiempo

    continuo o Tiempo discreto.

    La seales en tiempo continuo se comporta con valores para todos los nmeros reales, en

    contrario la seales en tiempo en el tiempo nada mas toma valores en los espacio y son creadas

    en el eje del tiempo.

    Figura 4.1

  • 23

    Para poder comenzar a desarrollar la simulacin y tener una respuesta mas ptima se necesita

    configurar el tiempo de sampleo lo cual se seguirn los siguientes pasos lo cuales entrar a la

    opcin de simulink simulation:

    .

    Figura 4.2

    Buscar la opcin configuracin Parmetros as nos proporcionara la ventana de configuracin

    de la simulacin:

    Figura 4.3

    El usuario deber realizar cambios, de tal forma que, la configuracin final sea exactamente

    como se muestra en la siguiente imagen.

    Figura 4.4

  • 24

    En detalle, los valores que se debern configura son los siguientes:

    Start time: 0.0 Este valor indica que el tiempo de muestreo y procesamiento inicia de la

    simulacin

    Stop time: inf Este valor indica que la simulacin terminara slo cuando el usuario de la

    orden de finalizacin de simulacin mediante el botn de STOP

    Type: Fixed-step Este valor indica que el tiempo de trabajo de la simulacin, ser Tiempo

    Discreto.

    Solver: ode5 (Dormand-Prince)

    Fixed-step size: 1e-3 Este valor indica cada cuanto tiempo realizara el muestre de los valores.

    Una vez ya realizado la configuracin de los valores apropiados, el usuario debe confirmar y

    comenzar a desarrollar la simulacin.

  • 25

    5. Interfaz grafica Para iniciar nuestro proyecto, lo podemos hacer de dos maneras:

    Ejecutando la siguiente instruccin en la ventana de comandos: >>guide

    Haciendo un click en el icono de muestra la figura 5.0.1.

    Figura 5.0.1

    Aparecer la opcin de diseo.

    Figura 5.0.2

    Se presentan las siguientes opciones:

    1. Blank GUIDE (default): la opcin de interfaz grfica de usuario de blanco (viene

    predeterminada), nos presenta un formulario nuevo, en el cual podemos disear nuestro

    programa.

    2. GUI with uicontrols: esta opcin presenta un ejemplo en el cual se calcula la masa,

    dada la densidad y el volumen, en alguno de los dos sistemas de unidades. Podemos

    ejecutar este ejemplo y obtener resultados.

    3. GUI with Axes and Menu: esta opcin es otro ejemplo el cual contiene el men File

    con las opciones Open, Print y Close. En el formulario tiene un popup men, un push

    button y un objeto Axes, podemos ejecutar el programa eligiendo alguna de las seis

    opciones que se encuentra en el men desplegable y haciendo click en el botn de

    comando.

    4. Modal question dialog: con esta opcin se muestra en la pantalla un cuadrado de

    dialogo comn, el cual consta de una pequea imagen, una etiqueta y dos botones yes y

    no, dependiendo del botn que se presione, el guide retorna al texto seleccionado (la

    cadena de caracteres YES o NO).

  • 26

    Seleccionamos la primera opcin, blank GUIDE, el cual se muestra en la figura 5.3.

    Figura 5.0.3

    Cada uno de los elementos de GUI, tiene un conjunto de opciones que podemos

    acceder con click derecho, como se muestra en la figura 5.4.

    Figura 5.0.4

    La opcin property inspector nos permite personalizar cada elemento.

  • 27

    Figura 5.0.5

    Al hacer click derecho en el elemento ubicado en el rea de diseo, una de las opciones ms

    importantes es view callbacks, la cual, al ejecutarla, abre el archivo .m asociado a nuestro

    diseo y nos posiciona en la parte del programa que corresponde a la subrutina que se ejecutara

    cuando se realice una determinada accin sobre el elemento que estamos editando. Por

    ejemplo:

    al ejecutar view callbacks >> callbacks en el push button, nos ubicaremos en la parte del

    programa:

    function pushbutton1_Callback(hObject, eventdata, handles) %hObject handle to pushbutton1 (see GCBO) %eventdata reserved-to be defined in a future version of MATLAB %handles structure with handles and user data (see GUIDATA)

    5.1. Funcionamiento y aplicacin

    Control Valor de estilo Descripcin

    Check box checkbox Indica el estado de una opcin o atributo

    Editable Text edit Caja para editar texto

    Pop-up menu popupmenu Provee una lista de opciones

    List Box listbox Muestra una lista deslizable

    Push Button pushbutton Invoca un evento inmediatamente

    Radio Button radio Indica una opcin que puede ser seleccionada

    Toggle Button togglebutton Solo dos estados, on o off

    Slider slider Usado para representar un rango de valores

    Static Text text Muestra un string de texto en una caja

    Panel button Agrupa botones como un grupo

    Button Group Permite exclusividad de seleccin con los radio button

  • 28

    Una aplicacin de GUIDE consta de dos archivos: .m y .fig. El archivo .m es el que contiene el

    cdigo con las correspondencias de los botones de control de la interfaz y el archivo .fig

    contiene los elementos grficos o diseo.

    Cada vez que se adicione un nuevo elemento en la interfaz grfica, se genera automticamente

    el cdigo en el archivo .m.

    Para ejecutar una interfaz grfica, si hemos guardado con el nombre curso.fig, simplemente

    ejecutamos en la ventana de comandos >>curso o haciendo click en el m-file (.m) y

    seleccionando la opcin RUN.

    5.2. Foto de presentacin con botn.

    En este ejemple se basa en la presentacin de un proyecto en el cual el botn abrir otra

    guide. Se insertara un botn (botton), dos fotos (Axes) y dos cuadro de texto (static text). El

    cual se muestra en la figura 5.2.1.

    Figura 5.2.1

    Para cambiar el nombre al botn o a un cuadro de texto debemos hacer doble click derecho al

    cual desea cambiar el nombre y se abrir la opcin property inspector. Como se muestra en la

    figura 5.2.2.

    Figura 5.2.2

    Al ejecutar el programa le pedir guardar en este caso lo guardaremos con el nombre final sin

    ninguna extensin ya que solo se guardara con formato .m y .fig, ya guardado se abrir el .m

  • 29

    seleccionamos la herramienta show functions>>final_openingFcn en el cual se muestra en la

    figura 5.2.3.

    Figura 5.2.3

    Escribimos el siguiente cdigo:

    % --- Executes just before final is made visible.

    function final_OpeningFcn(hObject, eventdata, handles, varargin)

    axes(handles.axes1) % En este cdigo definimos que trabajaremos en el cuadrado de axes1.

    a=imread('imagen.JPG'); % En este cdigo guardamos nuestra foto en la variable a en el cual

    debe contener una imagen con formato .JPG y esta imagen debe estar ubicada en la misma

    direccin donde se encuentra guardada la guide.

    image(a) % En este codigo llamamos nuestra foto y la ubicamos en nuestro axes1.

    axis off % En este cdigo desactivamos la barra milimetrada de axes1.

    axes(handles.axes2)

    b=imread('inacap.JPG');

    image(b)

    axis off

    % This function has no output args, see OutputFcn.

    % hObject handle to figure

    % eventdata reserved - to be defined in a future version of MATLAB

    % handles structure with handles and user data (see GUIDATA)

    % varargin command line arguments to final (see VARARGIN)

    % Choose default command line output for final

    handles.output = hObject;

    % Update handles structure

    guidata(hObject, handles);

    % UIWAIT makes final wait for user response (see UIRESUME)

    % uiwait(handles.figure1);

    Luego nos vamos a la configuracin del botn en el cual nos dirigimos a la herramienta show

    functions>>pushbutton1_callback.

  • 30

    Como se muestra en la figura 5.2.4.

    Figura 5.2.5

    Escribimos el siguiente cdigo:

    % --- Executes on button press in pushbutton1.

    function pushbutton1_Callback(hObject, eventdata, handles)

    portada; % En este cdigo llamamos a la otra guide creada en este caso la llamamos portada, es

    importante acotar que para ejecutar el botn ya debe estar creada la otra guide llamada

    portada.

    close('final') % en este cdigo cerramos la guide final para que cuando se abra portada no

    quede abierta la ventana de final.

    % hObject handle to pushbutton1 (see GCBO)

    % eventdata reserved - to be defined in a future version of MATLAB

    % handles structure with handles and user data (see GUIDATA)

    5.3. Programa pasar guide a otra guide

  • 31

    En este ejemplo se pasara de una GUIDE a otra GUIDE mediante un botn, con el ejemplo

    foto de presentacin con botn ya creado se le aadir otra guide nueva.

    En este caso se insertara tres fotos (Axes), dos botones (botton) y un cuadro de texto (static

    text), El cual se muestra en la figura 5.3.1.

    Figura 5.3.1. Nos dirigimos a la configuracin en el formato .m en el cual seleccionamos la

    herramienta show functions>>final_openingFcn.

    Escribimos el siguiente cdigo:

    % --- Executes just before portada is made visible.

    function portada_OpeningFcn(hObject, eventdata, handles, varargin)

    axes(handles.axes3)

    b=imread('inacap.JPG');

    image(b)

    axis off

    axes(handles.axes1)

    b=imread('pid.JPG');

    image(b)

    axis off

    axes(handles.axes2)

    b=imread('logic.JPG');

    image(b)

    axis off

    % This function has no output args, see OutputFcn.

    % hObject handle to figure

    % eventdata reserved - to be defined in a future version of MATLAB

    % handles structure with handles and user data (see GUIDATA)

    % varargin command line arguments to portada (see VARARGIN)

    % Choose default command line output for portada

    handles.output = hObject;

    % Update handles structure

    guidata(hObject, handles);

  • 32

    % UIWAIT makes portada wait for user response (see UIRESUME)

    % uiwait(handles.figure1);

    Luego seleccionamos show functions>>pushbutton1_callback. Escribimos el

    siguiente cdigo:

    % --- Executes on button press in pushbutton1.

    function pushbutton1_Callback(hObject, eventdata, handles)

    control_pid;

    close('portada')

    % hObject handle to pushbutton1 (see GCBO)

    % eventdata reserved - to be defined in a future version of MATLAB

    % handles structure with handles and user data (see GUIDATA)

    Luego seleccionamos show functions>>pushbutton1_callback. Escribimos el

    siguiente cdigo:

    % --- Executes on button press in pushbutton2.

    function pushbutton2_Callback(hObject, eventdata, handles)

    control_fuzzy;

    close('portada')

    % hObject handle to pushbutton2 (see GCBO)

    % eventdata reserved - to be defined in a future version of MATLAB

    % handles structure with handles and user data (see GUIDATA)

    5.4. Grafica de Simulink a la GUIDE

    En este ejemplo se graficara una respuesta que arrojara scope de simulink y lo transportara a la

    GUIDE.

    En este caso se insertara una foto (Axes), un boton (botton) y un cuadro de texto (static text),

    El cual se muestra en la figura 5.4.1.

  • 33

    Figura 5.4.1.

    Para que tenga una respuesta se realizara un ejemplo en Simulink, con un sine wave y un scope,

    como se muestra en la figura 5.4.2.

    Figura 5.4.2.

    Para visualizar la respuesta en nuestra GUIDE se debe modificar el scope para ello debemos

    abrir el scope y seleccionar la herramienta Parameters>>History luego seleccionar sabe data to

    workspace modificamos el variable name y se insertara un nombre nuevo y en formant

    seleccionamos array con estos pasos crearemos la variable para ser llamada en nuestra guide y

    guardamos nuestro simulink, como se muestra en la figura 5.4.3.

  • 34

    Figura 5.4.4

    Luego nos vamos a nuestra guide y nos dirigimos al archivo .m seleccionamos la

    herramienta show functions>>grafica_openingFcn. Escribimos el siguiente

    cdigo:

    % --- Executes just before grafica is made visible. function grafica_OpeningFcn(hObject, eventdata, handles, varargin)

    find_system('Name','graficasimulink'); % en este cdigo definiremos que simulink abriremos y

    lo guardara en la base de datos de la guide. open_system('graficasimulink'); % en este cdigo abrimos nuestro Simulink.

    set_param(gcs,'SimulationCommand','Start'); % en este cdigo dar inicio a la simulacin de

    nuestro Simulink llamado.

    % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to grafica (see VARARGIN) % Choose default command line output for grafica handles.output = hObject; % Update handles structure guidata(hObject, handles); % UIWAIT makes grafica wait for user response (see UIRESUME) % uiwait(handles.figure1);

  • 35

    axes(handles.axes1)% axes1 corresponde al nombre Tag que le puse al grafico o a la

    function axes donde se visualizara el grafico.

    a=evalin ('base','variable'); % recuerda que Variable es el nombre que le puse al grafico en el

    simulink.

    plot(a(:,1),a(:,2)) %tenia escrigo en mayscula Plot y es plot para q funciones

    5.5. Sumar en Simulink

    En este ejemplo se sumara en simulink y los valores de cada constante sern modificados en la

    GUIDE.

    En este caso se insertara un boton (push botton) y un cuadro de texto (static text) y dos editor

    texto (edit text), El cual se muestra en la figura 5.5.1.

    Figura 5.5.1

    Para que tenga una respuesta se realizara un ejemplo en Simulink, con dos constant, un add y

    un display, como se muestra en la figura 5.5.2.

  • 36

    Figura 5.5.2

    Luego nos vamos a nuestra guide y modificamos nuestro edit text,

    haciendo doble click en los los edit text y cambiamos de nombre el tag de cada bloque. Como

    se muestra en la figura 5.5.3.

    Figura 5.5.3 Nos dirigimos al archivo .m seleccionamos la herramienta show

    functions>>sumar_simulink_openingFcn. Escribimos el siguiente cdigo:

    % --- Executes just before sumar_simulink is made visible. function sumar_simulink_OpeningFcn(hObject, eventdata, handles, varargin) find_system('Name','qwe'); open_system('qwe'); set_param(gcs,'SimulationCommand','Start'); % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin unrecognized PropertyName/PropertyValue pairs from the % command line (see VARARGIN) % Choose default command line output for sumar_simulink handles.output = hObject; % Update handles structure guidata(hObject, handles); % UIWAIT makes sumar_simulink wait for user response (see UIRESUME) % uiwait(handles.figure1);

  • 37

    Seleccionamos la herramienta show functions>>val_a_callback. Escribimos el

    siguiente cdigo:

    function val_a_Callback(hObject, eventdata, handles) val_a=get(handles.val_a,'String'); set_param('qwe/Constant','Value',val_a); % hObject handle to val_a (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of val_a as text % str2double(get(hObject,'String')) returns contents of val_a as a double

    Seleccionamos la herramienta show functions>>val_b_callback. Escribimos el

    siguiente cdigo:

    function val_b_Callback(hObject, eventdata, handles) val_b=get(handles.val_b,'String'); set_param('qwe/Constant1','Value',val_b); % hObject handle to val_b (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of val_b as text % str2double(get(hObject,'String')) returns contents of val_b as a double

    5.6. Programa SUMA

    En este ejemplo, se insertara un botn (push button), dos cuadro de texto (static text) y cuatro

    editor de texto (edit text). El cual se muestra en la figura 5.6.1.

    Figura 5.6.1

    Haciendo doble click en cada componente, configuramos las propiedades de cada bloque.

  • 38

    En uno de los cuadro de textos lo dejamos en blanco para ingresar la respuesta en el otro le

    escribimos la suma es:. Como se muestra en la siguiente figura 5.6.2.

    Figura 5.6.2

    Ya guardado se abrir el archivo .m seleccionamos la herramienta show

    functions>>edit1_callback. Escribimos el siguiente cdigo:

    function edit1_Callback(hObject, eventdata, handles)

    Val=get(hObject,'string'); % con este cdigo almacenamos el valor ingresado.

    NewVal= str2double(Val); % con este cdigo lo transformamos a formato double.

    handles.edit1=NewVal; % con este cdigo lo almacenamos en el identificador.

    guidata(hObject,handles); % con este cdigo guardamos el dato de la aplicacin.

    % hObject handle to edit1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of edit1 as text % str2double(get(hObject,'String')) returns contents of edit1 as a double

    Seleccionamos la herramienta show functions>>edit2_callback. Escribimos el siguiente cdigo:

    function edit2_Callback(hObject, eventdata, handles)

    Val=get(hObject,'string'); % con este cdigo almacenamos el valor ingresado.

    NewVal= str2double(Val); % con este cdigo lo transformamos a formato double.

    handles.edit2=NewVal; % con este cdigo lo almacenamos en el identificador.

    guidata(hObject,handles); % con este cdigo guardamos el dato de la aplicacin.

    % hObject handle to edit2 (see GCBO)

    % eventdata reserved - to be defined in a future version of MATLAB

  • 39

    % handles structure with handles and user data (see GUIDATA)

    % Hints: get(hObject,'String') returns contents of edit2 as text

    % str2double(get(hObject,'String')) returns contents of edit2 as a double

    Seleccionamos la herramienta show functions>>pushbutton1_callback.

    Escribimos el siguiente cdigo:

    % --- Executes on button press in pushbutton1. function pushbutton1_Callback(hObject, eventdata, handles)

    A=handles.edit1;

    B=handles.edit2;

    suma=A+B;

    set(handles.text2,'string',suma);

    % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

    5.7. Crear mens en una guide

    En este ejemplo crearemos un men en nuestra interface grfica GUIDE, como se muestra en la

    figura 5.7.1.

    Figura 5.7.1.

    Para realizar el men debemos seleccionar la herramienta Men editor, aparecer el cuadro

    Men editor seleccionar new Men para la configuracin como se muestra en la figura 5.7.2.

  • 40

    Figura 5.7.2

    Ingresamos tres nuevos mens y dos submens y direccionamos cada submen con el comando

    callback, como se muestra en la figura 5.7.3.

    Figura 5.7.3

    Ingresamos el siguiente cdigo para cada submen y men los cdigos son los

    siguientes:

  • 41

    % -------------------------------------------------------------------- function abrir_pp_Callback(hObject, eventdata, handles) winopen('final.pptx') % hObject handle to abrir_pp (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

    % -------------------------------------------------------------------- function abrir_pdff_Callback(hObject, eventdata, handles) winopen('carta.pdf') % hObject handle to abrir_pdff (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

    % -------------------------------------------------------------------- function abrir_imagen_Callback(hObject, eventdata, handles) winopen('jonathan.jpg') % hObject handle to abrir_imagen (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

    5.8. Cerrar ventanas y preguntar

    En este ejemplo servir para cuando por equivocacin cerramos nuestra guide ya que por ende

    nos preguntara si deseamos salir de nuestra guide. Como se muestra en la figura 5.8.1.

    Figura 5.8.1

    Para nuestra configuracin en nuestra guide nos dirigimos a view callbacks>>closeRequestFcn

    como se muestra en la figura 5.8.2.

  • 42

    Figura 5.8.2

    El cdigo ser el siguiente:

    % --- Executes when user attempts to close figure1.

    function figure1_CloseRequestFcn(hObject, eventdata, handles)

    opc=questdlg('Desea salir del programa?',... 'salir','si','no','no');

    if strcmp(opc,'no') return; end % hObject handle to figure1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hint: delete(hObject) closes the figure delete(hObject);

  • 43

    6. Control PID Para poder realizar la comunicacin serial es necesario realizar el siguiente paso

    Abrir el software Matlab, iniciar el entorno Simulink.

    Figura 6.0.1

    Se debe crear un nuevo proyecto, guardar y dar una direccin con nombre a eleccin.

    Figura 6.0.2

    Posteriormente se van a utilizar las Herramientas que nos proporciona el toolbox de simulink

    llamando instrument control.

    Figura 6.0.3

  • 44

    El bloque que vamos a utilizar nos permitir realizar la comunicacin serial los cuales

    los vamos configurar de la siguiente forma:

    Figura 6.0.4

    Seleccionar Add to untitled para copiar el bloque al archivo de simulink:

    Figura 6.0.5

    Configurar los Bloques Serial Receive con la, entrada de datos, el tipo de dato a entregar y el

    tiempo de medicin:

  • 45

    Figura 6.0.6

    En la ventana de configuracion del bloque Serial Receive no permite varias opciones las

    cuales son:

    Communication port: esta opcion nos permite determinar el puerto com que esta

    instalado el arduino y poder sincronizar simulink arduino.

    Data size: nos permite determinar el tamao del vector de entrada , por lo genera se envia

    solo un dato

    Data Type: esta opcion permite determinar el formato del vector de entrada en este caso

    usaremos el formato uint8 .

    Configurar el parmetro del bloque Serial Configuration con los valores que visualizan en la

    figura 6.0.7.

  • 46

    Figura 6.0.8

    Este el bloque Serial Configuration se determinar los siguientes parametros:

    Communication port: esta opcion nos permite determinar el puerto com que esta

    instalado el arduino y poder sincronizar simulink arduino.

    Baud rate: 9600, la velocidad con que se va a comunicar con el otro dispositivo, en ambos

    debe ser la misma.

    Timeout: 20 Segundos.

    La otra opcin es generada al momento de configurar el bloque Serial Receive se crea el

    bloque Serial Configuration

  • 47

    Figura 6.0.9

    La configuracion de la salida de simulink hacia el arduino se determina con el bloque Serial Send

    Lo cual se configura:

    Communication port: esta opcion nos permite determinar el puerto com que esta instalado el

    arduino y poder sincronizar simulink arduino.

    Figura 6.0.10

  • 48

    Figura 6.0.11

    En este bloque nos permite cambiar el formato de el valor entrante lo cual cambiaremos solo

    un parametro el cual es:

    Output data Type: en el caso de proyecto vamos a utilizar el formato double.

    Figura 6.0.12

    En este bloque nos permite cambiar el tiemplo de muestreo del valor de entrada:

  • 49

    Sample time: en el caso de proyecto vamos a utilizar el tiempo de sampleo 0.001.

    Figura 6.0.13

    El bloque sum nos permite sumar todo los valores entradas el cual vamos a utilizar para sumar

    todos lo valores de entrada.

    Figura 6.0.14

    El bloque function nos permite desarrollar funciones aritmetica el cual vamos a utilizar la

    opcion round para los valores de entrada.

    El siguiente paso a realizar es incorporar los bloques Display yScope

  • 50

    Figura 6.0.15

    Adems se necesita los bloques:

    Estos bloque se encuentran en la sub- librera llamada commonly Used Blocks :

    Mux,Constant,Gain y Sum

    Estos bloque se encuentran en la sub- librera llamada Continuos :

    Derivative,integrator,Saturation Sum

    Estos bloque se encuentran en la sub- librera llamada Discrete : Zero-Order Hold

    Figura 6.0.16

    Para poder seguir el modelo que muestra la imagen:

  • 51

    Figura 6.0.17

  • 52

    7. Control lgica difusa

    7.1. Logica difusa en Matlab

    Para poder comprender el sistema de control difuso hay que tener en cuenta qu modelo

    utilizar, generalmente se emplean dos modelos: Mandani o el modelo de Sugeno. La principal

    diferencia entre ambos se basa en el consecuente de las reglas difusas que conforman la base de

    reglas del sistema.

    Para poder realizar la lgica difusa se deber abrir Matlab y en la ventana de comandos se

    deber escribir >>fuzzy para poder acceder al toolbox fuzzy

    Figura 7.1.1

    Luego de presionar enter se abrir un cuadro en el cual se muestra en la figura 7.1.2

    Figura 7.1.2

  • 53

    Para poder elegir el tipo de modelo a utilizar mandani o sugeno se debe seleccionar file>>New

    FIS>>mandani o sugeno, como se muestra en la figura 7.1.3. En este caso se utilizara el tipo

    mandani.

    Figura 7.1.3

    Luego del paso anterior se deber ingresar las variables a utilizar ya sea de entrada o salida.

    Seleccionando el comando Edit>>Add Variable>>Input u Output, como se muestra en la

    figura 7.1.4. En este caso se utilizara dos entradas y una salida.

  • 54

    Figura 7.1.4

    Al seleccionar Input se agregara una entrada al sistema y se cambiaran los nombres de cada

    variable en Name, como se muestra en la figura 7.1.5.

    Figura 7.1.5

    Las funciones de pertenencias tanto como para las de entradas como las de salidas se modifican

    haciendo doble click en la variable a modificar y luego seleccionando el comando Edit>>Add

    MFs como se muestra en la figura 7.1.6.

    Figura 7.1.6

  • 55

    Para poder modificar el rango de trabajo de la variable se modificara Range, para poder

    cambiar el nombre de la funcin de membrecas se modificara Name, para elegir su espacio a

    utilizar se modificara Params y para poder modificar el tipo de funcin de membreca se

    modificara type. En la variable (d/dtError) se cambiara el rango de trabajo de -100 a 100 y se

    modificaran las funciones de membrecas las cuales son:

    Negativa trapmf [-190 -190 -20 0], Zero trimf [-20 0 20] y Positiva trapmf [0 20 109 190].

    Como se muestra en la figura 7.1.7.

    Figura 7.1.8

    En la variable (Error) se cambiara el rango de trabajo de -50 a 50 y se modificara las funciones

    de membrecas las cuales son:

    Dembajo trapmf [-50 -50 -34.79 -25], muybajo trimf [-33.33 -25 -16.66], bajo trimf [-25 -16.66

    -8.34], mediobajo trimf [-16.66 -8.34 0], medio trimf [-8.34 0 8.34], medioalto trimf [0 8.34

    16.66], alto trimf [8.34 16.66 25], muyalto trimf [16.66 25 33.34] y dembajo trimf [25 33.34 50

    50]. Como se muestra en la figura 7.1.9.

  • 56

    Figura 7.1.10

    En la variable (motor) se modificara el rango de trabajo de 0 a 223 y se cambiara las funciones

    de membrecas las cuales son:

    Dembajo trapmf [-1.199 -1.199 25.8 46.08], muybajo trimf [22 40 62.48], bajo trimf [58.75

    78.31 98.03], mediobajo trimf [78.31 98.03 117.5], medio trimf [98.03 117.5 137], medioalto

    trimf [117.5 137 156.8], alto trimf [137 156.8 176.3], muyalto trimf [156.8 176.3 195.9] y

    dembajo trimf [176.3 195.9 258.5 258.5]. Como se muestra en la figura 7.1.11.

    Figura 7.1.11

    Teniendo las variables con las funciones de membrecas creadas se dirige a las reglas

    lingsticas para poder ingresar reglas se debe ir al comando Edit>>Rules como se muestra

    en la figura 7.1.12.

    Figura 7.1.12

    Al hacer click en Rules se desplegara una ventana donde se ingresar nuevas reglas como se

    muestra en la figura 7.1.13.

  • 57

    Figura 7.1.13

    En la figura 7.1.14 podremos eliminar, agregar y cambiar las reglas. Para poder agregar una

    regla solo se debera seleccionar en la primera variable una de las opciones que se requiera y

    luego se selecciona en la segunda variable una de las opciones que se requiera y por ltimo en

    la variable de salida se selecciona la opcin que se requiera en el sistema de salida, y hacer

    click en el botn add rule.

    Para poder eliminar una regla solo basta con pinchar la regla y luego el botn delete rule.

    Para poder modificar una regla debemos seleccionar la regla a modificar y luego seleccionar las

    nuevas opciones para cada variable y presionar el botn change rule.

    Para cambiar el tipo de conexin (and o or) solo basta con pinchar en la tabla de conexiones el

    tipo de conexin a utilizar en este caso se utilizara la conexin and.

  • 58

    Figura 7.1.14

    En este caso se agregara las siguientes reglas:

    1. If (d/dtError is positiva) and (Error is dembajo) then (motor is demalto)

    2. If (d/dtError is positiva) and (Error is muybajo) then (motor is demalto)

    3. If (d/dtError is positiva) and (Error is bajo) then (motor is demalto)

    4. If (d/dtError is positiva) and (Error is mediobajo) then (motor is medio)

    5. If (d/dtError is positiva) and (Error is medio) then (motor is muybajo)

    6. If (d/dtError is positiva) and (Error is medioalto) then (motor is dembajo)

    7. If (d/dtError is positiva) and (Error is alto) then (motor is dembajo)

    8. If (d/dtError is positiva) and (Error is muyalto) then (motor is dembajo)

    9. If (d/dtError is positiva) and (Error is demalto) then (motor is dembajo)

    10. If (d/dtError is negativa) and (Error is demalto) then (motor is dembajo)

    11. If (d/dtError is negativa) and (Error is muyalto) then (motor is dembajo)

    12. If (d/dtError is negativa) and (Error is alto) then (motor is dembajo)

    13. If (d/dtError is negativa) and (Error is medioalto) then (motor is dembajo)

  • 59

    14. If (d/dtError is negativa) and (Error is medio) then (motor is muybajo)

    15. If (d/dtError is negativa) and (Error is mediobajo) then (motor is medioalto)

    16. If (d/dtError is negativa) and (Error is bajo) then (motor is alto)

    17. If (d/dtError is negativa) and (Error is muybajo) then (motor is demalto)

    18. If (d/dtError is negativa) and (Error is dembajo) then (motor is demalto)

    19. If (d/dtError is zero) and (Error is dembajo) then (motor is demalto)

    20. If (d/dtError is zero) and (Error is muybajo) then (motor is demalto)

    21. If (d/dtError is zero) and (Error is bajo) then (motor is alto)

    22. If (d/dtError is zero) and (Error is mediobajo) then (motor is demalto)

    23. If (d/dtError is zero) and (Error is medio) then (motor is muybajo)

    24. If (d/dtError is zero) and (Error is medioalto) then (motor is dembajo)

    25. If (d/dtError is zero) and (Error is alto) then (motor is dembajo)

    26. If (d/dtError is zero) and (Error is demalto) then (motor is dembajo)

    27. If (d/dtError is zero) and (Error is muyalto) then (motor is dembajo)

    Para simular las respuestas, lo realizamos con el comando View>>Rules. Al hacer click en

    rules se abrir la ventana de simulacin de las reglas. Como se muestra en la figura.

    Y para poder ver la grafica Surface se seleccionara el comando Surface. Al precionar el

    comando View>>Surface. Al hacer click en Surface se abrir la ventana de grafica en 3D de

    las reglas. Como se muestra en la figura 7.1.15.

    Figura 7.1.16

    En el Surface se ver la grfica mediante las entradas y la salida. Como se muestra en la figura

    7.1.17

  • 60

    Figura 7.1.17

    Ya creado el programa fuzzy se guardara con el comando File>>Export>>To File al

    seleccionar To File se desplegara la ventana para guardar donde desee. Como se muestra en la

    figura 7.1.18.

    Figura 7.1.18

    Para poder abrir un documento .fig se debe ir al comando Importar>>From File al

    seleccionar From File se abrir una ventana para buscar el programa donde se guardo. Como se

    muestra en la figura 7.1.19.

  • 61

    Figura 7.1.19

    Y por ltimo para cargar un archivo .fig a el bloque de simulink se debe exportar el documento

    para crear la variable en Matlab y ser utilizado en simulink, para ello se debe ir al comando

    File>>Export>>From Worspace.. Al presionar el comando From Worspace se abrir una

    ventana el cual dara el nombre de la variable .fig, al presionar OK se creara la variable .fig.

    Como se observa en la figura 7.1.20.

    Figura 7.1.21

    Ya creada la variable en Matlab podr ser llamado con el bloque de simulink (Fuzzy Logic

    Controller), al hacer doble click en el bloque se abrir una ventana el cual deberemos escribir el

    nombre de la variable .fig, al precionar OK se cargara la variable creada(.fig) en el

    bloque(Fuzzy Logic Controller). Como se muestra en la figura 7.1.22.

  • 62

    Figura 7.1.23

    7.2. Control lgica difusa simulink

    Para poder realizar la comunicacin serial es necesario realizar el siguiente paso

    Abrir el software Matlab, iniciar el entorno Simulink, abrindolo del icono o escribiendo

    directamente en la ventana de comandos >>simulink. Como se muestra en la figura 7.2.1.

    Figura 7.2.1

    Se debe crear un nuevo proyecto, guardar y dar una direccin con nombre a eleccin.

    Posteriormente se van a utilizar las Herramientas que nos proporciona el toolbox de simulink

    llamando instrument control. El bloque que vamos a utilizar nos permitir realizar la

    comunicacin serial los cuales son serial send, serial Receive y serial Configuration. Para

  • 63

    aadirlos a la hoja se deber hacer click derecho seleccionar Add to untitled. Como se muestra

    en la figura 7.2.2.

    Figura 7.2.2

    Para la configuracin del bloque Serial Receive se debe hacer doble click para abrir la

    ventana de configuracion. Como se muestra en la figura 7.2.3.

    Figura 7.2.3

    En la ventana de configuracion del bloque Serial Receive permite varias opciones las cuales

    son:

    Communication port: esta opcion nos permite determinar el puerto com que esta instalado el arduino y poder sincronizar simulink arduino.

  • 64

    Data size: nos permite determinar el tamao del vector de entrada, se selecciona cuantos datos son entregados.

    Data Type: esta opcion permite determinar el formato del vector.

    En este caso se configurara un parmetro de la siguiente forma:

    Communication Port: se deber seleccionar el puerto que esta instalado de Arduino.

    Para la configuracin del bloque Serial Configuration se debe hacer doble click para abrir la

    ventana de configuracion. Como se muestra en la figura 7.2.4.

    Figura 7.2.4

    En el bloque Serial Configuration se determinan los siguientes parametros:

    Communication port: esta opcion nos permite determinar el puerto com que esta instalado el arduino y poder sincronizar simulink arduino.

    Baud rate: 9600, la velocidad con que se va a comunicar con el otro dispositivo, en

    ambos debe ser la misma.

    Timeout: 20 Segundos

    Para la configuracin del bloque Serial send se debe hacer doble click para abrir la ventana

    de configuracion. Como se muestra en la figura 7.2.5.

  • 65

    Figura 7.2.5

    En el bloque Serial send se determina el siguiente parametro:

    Communication port: esta opcion nos permite determinar el puerto com que esta instalado el arduino.

    Con estos tres bloques se podra hacer la comunicacin serial.

    En el programa a seguir sera el que se muestra en la figura 7.2.6.

    Figura 7.2.6

    Componentes:

    1-Serial configuration

    1-Serial receive

    1-Sum

    1-discrete derivative

    3-mux

    1-fuzzy logic controller

    1-zero-order hold

    1-data type conversion

    1-serial send

    1-scope

    1-to workspace

    1-constant

    3-display

  • 66

    En el bloque serial configuration sera configurado con el tiempo de transmicion de datos, y el

    tipo de datos que entregara y el puerto serial com(serial receive y serial send).

    Con el bloque serial receive sera para recibir los datos del arduino serialmente.

    En el bloque sum se configurara para resivir las seales de entrada, sera sumados y restado.

    Para encontrar el resultado del Error.

    Con el bloque scope servir para graficar las variables en tiempo real.

    Con el bloque to workspace servir para graficar despus de la simulacin y obtener la foto de

    nuestra grfica.

    Con el bloque constant servira para modificar el valor de referencia.

    En el bloque discrete derivative sera configura solo la opcion Output data type: int8 que servir

    para cambiar el tipo de unidad de la variable. Que servir como entrada a fuzzy que se

    denomina derivada del erro.

    En el bloque mux servir para separar las variables y enviarla a fuzzy.

    Con el bloque fuzzy logic controller se cargara el archivo .fig.

    En el bloque zero-order hold se configurara el tiempo que se ha configurado. Sample time

    (-1 for inherited): 0.01 para dar el mismo tiempo de entrada a la salida del fuzzy.

    Con el bloque data type conversion se configurara de la siguiente forma Output data type: uint8

    que sirve para cambiar de unidar la variable de salida ya que serial send est configurado para

    recibir uint8.

    Con el bloque serial send servira para enviar los datos serialmente a Arduino.

    Con el bloque display sera utilizado para visualizar el nivel actual, el valor de referencia, el

    Error y el PWM del motor.

  • 67

    Anexo

    Transmisin Serial

    La placa Arduino posee pines especficos para la transmisin de datos a travs de puerto serie,

    en total cuatro puertos.

    Puerto serie: pines 0 (RX) y 1 (TX)

    Puerto serie 1: pines 19 (RX) y 18 (TX)

    Puerto serie 2: pines 17 (RX) y 16 (TX)

    Puerto serie 3: pines 15 (RX) y 14 (TX)

    Los puertos (RX) se utilizan para recibir datos; mientras que los pines (TX) se utilizan para el

    envo de estos, mediante tecnologa TTL. Los pines 0 y 1 estn tambin conectados a los pines

    correspondientes del ATmega16U2 USB-a-chip de serie TTL.

    El Atmega2560 ofrece cuatro puertos de comunicacin serial por hardware USART para TTL

    (5V) a travs del puerto USB; uno de ellos es utilizado por el software de Arduino, en el uso de

    un monitor (pantalla), para enviar y recibir datos en forma de texto.

    Compatibilidad del Shield

    El Arduino Mega2560 est diseado para ser compatible con la mayora de los Shield

    diseados para el Arduino Uno, Diecimila o Duemilanove. Pines digitales 0 a 13 (y los pines

    adyacentes AREF y GND), entradas analgicas de 0 a 5, la cabecera de alimentacin y de

    cabecera ICSP estn todos en puntos equivalentes. Adems, el principal USART (puerto serie)

    se encuentra en los mismos pines (0 y 1), al igual que las interrupciones externas 0 y 1 (pines 2

    y 3, respectivamente). SPI est disponible a travs de la cabecera de ICSP tanto en el Arduino

    Mega2560 y Duemilanove / Diecimila.

    Manual de programacin

    Comando de programacion

    PinMode

    Configura el pin especificado para comportarse como una entrada o una salida.

    pinMode(pin, modo)

    pin: el numero del pin que se desea configurar

    modo: INPUT (Entrada) o OUTPUT (Salida)

    DigitalRead

    Lee el valor de un pin digital especificado, HIGH o LOW.

    digitalRead(pin)

    pin: el nmero de pin digital que quieres leer (int)

    DigitalWrite

    http://arduino.cc/es/Reference/Constantshttp://arduino.cc/es/Reference/Constantshttp://arduino.cc/es/Reference/Constantshttp://arduino.cc/es/Reference/Constants
  • 68

    Escribe un valor HIGH o LOW hacia un pin digital.

    digitalWrite(pin, valor)

    pin: el nmero de pin

    valor: HIGH o LOW

    AnalogRead

    Lee el valor de tensin en el pin analgico especificado. La placa Arduino posee 6 canales (8

    canalaes en el Mini y Nano y 16 en el Mega)conectados a un conversor analgico digital de 10

    bits.

    analogRead(pin)

    pin: Indica el nmero del pin de la entrada analgica que deseamos leer (0 a 5 en la mayora de

    las placas, de 0 a 7 en las Mini y Nano y de 0 a 15 en las Mega)

    int (0 a 1023)

    AnalogWrite

    Escribe un valor analgico (PWM) en un pin. Puede ser usado para controlar la luminosidad de

    un LED o la velocidad de un motor.

    La funcin analogWrite no tienen ninguna relacin con los pines de entrada analgicos ni con

    la funcin analogRead.

    analogWrite(pin, valor)

    pin: Es el pin en el cual se quiere generar la seal PWM.

    valor: El ciclo de trabajo deseado comprendido entre 0 (siempre apagado) y 255 (siempre

    encendido).

    Delay

    Pausa el programa por un tiempo determinado (en milisegundos) especificado por un

    parmetro. Hay 1000 milisegundos en un segundo.

    delay(ms)

    ms: el nmero de milisegundos que se desea pausar el programa (unsigned long)

    Serial.begin

    Establece la velocidad de datos en bits por segundo (baudios) para la transmisin de datos en

    serie. Para comunicarse con el computador, utilice una de estas velocidades: 300, 1200, 2400,

    4800, 9600, 14400, 19200, 28800, 38400, 57600 o 115200.

    Serial.begin(speed)

    speed: Velocidad en bits por segundo (baudios) - long

    Serial.println

    http://arduino.cc/es/Reference/Constantshttp://arduino.cc/es/Reference/Constantshttp://arduino.cc/es/Reference/Constantshttp://arduino.cc/es/Reference/Constantshttp://arduino.cc/es/Tutorial/PWM
  • 69

    Imprime los datos al puerto serie como texto ASCII seguido de un retorno de carro (ASCII 13,

    o '\r') y un carcter de avance de lnea (ASCII 10, o '\n'). Este comando tiene la misma forma

    que Serial.print ().

    Serial.println(val)

    Serial.println(val, format)

    val: el valor a imprimir - de cualquier tipo

    format: especifica el nmero de la base (para nmeros enteros) o el nmero de posiciones

    decimales (para nmeros de coma flotante o tipo "float")

    Serial.Avaible

    Devuelve el nmero de bytes (caracteres) disponibles para ser leidos por el puerto serie. Se

    refiere a datos ya recibidos y disponibles en el buffer de recepcin del puerto (que tiene una

    capacidad de 128 bytes).

    Serial.available()

    Serial.Read

    Lee los datos entrantes del puerto serie.

    Serial.read()

    Inicio

    Cdigo:

    http://arduino.cc/es/Serial/Print
  • 70

    function varargout = proyecto(varargin)

    % PROYECTO MATLAB code for proyecto.fig

    % PROYECTO, by itself, creates a new PROYECTO or raises the existing

    % singleton*.

    %

    % H = PROYECTO returns the handle to a new PROYECTO or the handle to

    % the existing singleton*.

    %

    % PROYECTO('CALLBACK',hObject,eventData,handles,...) calls the local

    % function named CALLBACK in PROYECTO.M with the given input arguments.

    %

    % PROYECTO('Property','Value',...) creates a new PROYECTO or raises the

    % existing singleton*. Starting from the left, property value pairs are

    % applied to the GUI before proyecto_OpeningFcn gets called. An

    % unrecognized property name or invalid value makes property application

    % stop. All inputs are passed to proyecto_OpeningFcn via varargin.

    %

    % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one

    % instance to run (singleton)".

    %

    % See also: GUIDE, GUIDATA, GUIHANDLES

    % Edit the above text to modify the response to help proyecto

    % Last Modified by GUIDE v2.5 16-Jul-2013 00:01:07

    % Begin initialization code - DO NOT EDIT

    gui_Singleton = 1;

    gui_State = struct('gui_Name', mfilename, ...

    'gui_Singleton', gui_Singleton, ...

    'gui_OpeningFcn', @proyecto_OpeningFcn, ...

    'gui_OutputFcn', @proyecto_OutputFcn, ...

    'gui_LayoutFcn', [] , ...

    'gui_Callback', []);

    if nargin && ischar(varargin{1})

    gui_State.gui_Callback = str2func(varargin{1});

    end

    if nargout

    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});

    else

    gui_mainfcn(gui_State, varargin{:});

    end

    % End initialization code - DO NOT EDIT

    % --- Executes just before proyecto is made visible.

    function proyecto_OpeningFcn(hObject, eventdata, handles, varargin)

    axes(handles.axes1)

    a=imread('imagen.JPG');

    image(a)

    axis off

    axes(handles.axes2)

    b=imread('inacap.JPG');

    image(b)

    axis off

    % This function has no output args, see OutputFcn.

    % hObject handle to figure

  • 71

    % eventdata reserved - to be defined in a future version of MATLAB

    % handles structure with handles and user data (see GUIDATA)

    % varargin command line arguments to proyecto (see VARARGIN)

    % Choose default command line output for proyecto

    handles.output = hObject;

    % Update handles structure

    guidata(hObject, handles);

    % UIWAIT makes proyecto wait for user response (see UIRESUME)

    % uiwait(handles.figure1);

    % --- Outputs from this function are returned to the command line.

    function varargout = proyecto_OutputFcn(hObject, eventdata, handles)

    % varargout cell array for returning output args (see VARARGOUT);

    % hObject handle to figure

    % eventdata reserved - to be defined in a future version of MATLAB

    % handles structure with handles and user data (see GUIDATA)

    % Get default command line output from handles structure

    varargout{1} = handles.output;

    % --- Executes on button press in pushbutton1.

    function pushbutton1_Callback(hObject, eventdata, handles)

    portada;

    close('proyecto')

    % hObject handle to pushbutton1 (see GCBO)

    % eventdata reserved - to be defined in a future version of MATLAB

    % handles structure with handles and user data (see GUIDATA)

    Portada

    Cdigo:

    function varargout = portada(varargin)

    % PORTADA MATLAB code for portada.fig

  • 72

    % PORTADA, by itself, creates a new PORTADA or raises the existing

    % singleton*.

    %

    % H = PORTADA returns the handle to a new PORTADA or the handle to

    % the existing singleton*.

    %

    % PORTADA('CALLBACK',hObject,eventData,handles,...) calls the local

    % function named CALLBACK in PORTADA.M with the given input arguments.

    %

    % PORTADA('Property','Value',...) creates a new PORTADA or raises the

    % existing singleton*. Starting from the left, property value pairs are

    % applied to the GUI before portada_OpeningFcn gets called. An

    % unrecognized property name or invalid value makes property application

    % stop. All inputs are passed to portada_OpeningFcn via varargin.

    %

    % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one

    % instance to run (singleton)".

    %

    % See also: GUIDE, GUIDATA, GUIHANDLES

    % Edit the above text to modify the response to help portada

    % Last Modified by GUIDE v2.5 27-Jun-2013 20:13:11

    % Begin initialization code - DO NOT EDIT

    gui_Singleton = 1;

    gui_State = struct('gui_Name', mfilename, ...

    'gui_Singleton', gui_Singleton, ...

    'gui_OpeningFcn', @portada_OpeningFcn, ...

    'gui_OutputFcn', @portada_OutputFcn, ...

    'gui_LayoutFcn', [] , ...

    'gui_Callback', []);

    if nargin && ischar(varargin{1})

    gui_State.gui_Callback = str2func(varargin{1});

    end

    if nargout

    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});

    else

    gui_mainfcn(gui_State, varargin{:});

    end

    % End initialization code - DO NOT EDIT

    % --- Executes just before portada is made visible.

    function portada_OpeningFcn(hObject, eventdata, handles, varargin)

    axes(handles.axes3)

    b=imread('inacap.JPG');

    image(b)

    axis off

    axes(handles.axes1)

    b=imread('pid.JPG');

    image(b)

    axis off

    axes(handles.axes2)

    b=imread('logic.JPG');

    image(b)

  • 73

    axis off

    % This function has no output args, see OutputFcn.

    % hObject handle to figure

    % eventdata reserved - to be defined in a future version of MATLAB

    % handles structure with handles and user data (see GUIDATA)

    % varargin command line arguments to portada (see VARARGIN)

    % Choose default command line output for portada

    handles.output = hObject;

    % Update handles structure

    guidata(hObject, handles);

    % UIWAIT makes portada wait for user response (see UIRESUME)

    % uiwait(handles.figure1);

    % --- Outputs from this function are returned to the command line.

    function varargout = portada_OutputFcn(hObject, eventdata, handles)

    % varargout cell array for returning output args (see VARARGOUT);

    % hObject handle to figure

    % eventdata reserved - to be defined in a future version of MATLAB

    % handles structure with handles and user data (see GUIDATA)

    % Get default command line output from handles structure

    varargout{1} = handles.output;

    % --- Executes on button press in pushbutton1.

    function pushbutton1_Callback(hObject, eventdata, handles)

    control_pid;

    close('portada')

    % hObject handle to pushbutton1 (see GCBO)

    % eventdata reserved - to be defined in a future version of MATLAB

    % handles structure with handles and user data (see GUIDATA)

    % --- Executes on button press in pushbutton2.

    function pushbutton2_Callback(hObject, eventdata, handles)

    control_fuzzy;

    close('portada')

    % hObject handle to pushbutton2 (see GCBO)

    % eventdata reserved - to be defined in a future version of MATLAB

    % handles structure with handles and user data (see GUIDATA)

    % --- Executes during object deletion, before destroying properties.

    function axes1_DeleteFcn(hObject, eventdata, handles)

    % hObject handle to axes1 (see GCBO)

    % eventdata reserved - to be defined in a future version of MATLAB

    % handles structure with handles and user data (see GUIDATA)

    % --- Executes when user attempts to close figure1.

    function figure1_CloseRequestFcn(hObject, eventdata, handles)

    % hObject handle to figure1 (see GCBO)

    % eventdata reserved - to be defined in a future version of MATLAB

    % handles structure with handles and user data (see GUIDATA)

    % Hint: delete(hObject) closes the figure

    delete(hObject);

  • 74

    Control PID

    Codigo:

    function varargout = control_pid(varargin)

    %CONTROL_PID M-file for control_pid.fig

    % CONTROL_PID, by itself, creates a new CONTROL_PID or raises the existing

    % singleton*.

    %

    % H = CONTROL_PID returns the handle to a new CONTROL_PID or the handle to

    % the existing singleton*.

    %

    % CONTROL_PID('Property','Value',...) creates a new CONTROL_PID using the

    % given property value pairs. Unrecognized properties are passed via

    % varargin to control_pid_OpeningFcn. This calling syntax produces a

    % warning when there is an existing singleton*.

    %

    % CONTROL_PID('CALLBACK') and CONTROL_PID('CALLBACK',hObject,...) call the

    % local function named CALLBACK in CONTROL_PID.M with the given input

    % arguments.

    %

    % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one

    % instance to run (singleton)".

    %

    % See also: GUIDE, GUIDATA, GUIHANDLES

    % Edit the above text to modify the response to help control_pid

    % Last Modified by GUIDE v2.5 15-Jul-2013 19:46:04

    % Begin initialization code - DO NOT EDIT

    gui_Singleton = 1;

    gui_State = struct('gui_Name', mfilename, ...

    'gui_Singleton', gui_Singleton, ...

    'gui_OpeningFcn', @control_pid_OpeningFcn, ...

    'gui_OutputFcn', @control_pid_OutputFcn, ...

    'gui_LayoutFcn', [], ...

    'gui_Callback', []);

    if nargin && ischar(varargin{1})

    gui_State.gui_Callback = str2func(varargin{1});

    end

    if nargout

    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});

  • 75

    else

    gui_mainfcn(gui_State, varargin{:});

    end

    % End initialization code - DO NOT EDIT

    % --- Executes just before control_pid is made visible.

    function control_pid_OpeningFcn(hObject, eventdata, handles, varargin)

    axes(handles.axes3)

    b=imread('inacap.JPG');

    image(b)

    axis off

    find_system('Name','proyecto_PID');

    open_system('proyecto_PID');

    % This function has no output args, see OutputFcn.

    % hObject handle to figure

    % eventdata reserved - to be defined in a future version of MATLAB

    % handles structure with handles and user data (see GUIDATA)

    % varargin unrecognized PropertyName/PropertyValue pairs from the

    % command line (see VARARGIN)

    % Choose default command line output for control_pid

    handles.output = hObject;

    % Update handles structure

    guidata(hObject, handles);

    % UIWAIT makes control_pid wait for user response (see UIRESUME)

    % uiwait(handles.figure1);

    % --- Outputs from this function are returned to the command line.

    function varargout = control_pid_OutputFcn(hObject, eventdata, handles)

    % varargout cell array for returning output args (see VARARGOUT);

    % hObject handle to figure

    % eventdata reserved - to be defined in a future version of MATLAB

    % handles structure with handles and user data (see GUIDATA)

    % Get default command line output from handles structure

    varargout{1} = handles.output;

    % --- Executes on slider movement.

    function setpoint_Callback(hObject, eventdata, handles)

    v=get(handles.setpoint,'value');

    set(handles.datossetpoint,'string',fix(v));

    set(handles.datossetpoint1,'string',fix(v));

    datossetpoint=get(handles.datossetpoint,'String');

    set_param('proyecto_PID/Constant','Value',datossetpoint);

    v=get(handles.datossetpoint,'value');

    set(handles.datossetpoint1,'string',fix(v));

    a=get(handles.datossetpoint,'string');

    a=str2double(a);

    if a50 ||isnan(a)

    errordlg('valor fuera de rango, elija una valor entre 0 a 50','ERROR');

    return

    end

    set(handles.datossetpoint1,'string',a);

    % hObject handle to setpoint (see GCBO)

  • 76

    % eventdata reserved - to be defined in a future version of MATLAB

    % handles structure with handles and user data (see GUIDATA)

    % Hints: get(hObject,'Value') returns position of slider

    % get(hObject,'Min') and get(hObject,'Max') to determine range of slider

    % --- Executes during object creation, after setting all properties.

    function setpoint_CreateFcn(hObject, eventdata, handles)

    % hObject handle to setpoint (see GCBO)

    % eventdata reserved - to be defined in a future version of MATLAB

    % handles empty - handles not created until after all CreateFcns called

    % Hint: slider controls usually have a light gray background.

    if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

    set(hObject,'BackgroundColor',[.9 .9 .9]);

    end

    function datossetpoint_Callback(hObject, eventdata, handles)

    a=get(handles.datossetpoint,'string');

    a=str2double(a);

    if a50 ||isnan(a)

    errordlg('valor fuera de rango, elija una valor entre 0 a 50','ERROR');

    else

    datossetpoint=get(handles.datossetpoint,'String');

    set_param('proyecto_PID/Constant','Value',datossetpoint);

    v=get(handles.datossetpoint,'value');

    set(handles.datossetpoint1,'string',fix(v));

    set(handles.datossetpoint1,'string',a);

    return

    end

    % hObject handle to datossetpoint (see GCBO)

    % eventdata reserved - to be defined in a future version of MATLAB

    % handles structure with handles and user data (see GUIDATA)

    % Hints: get(hObject,'String') returns contents of datossetpoint as text

    % str2double(get(hObject,'String')) returns contents of datossetpoint as a double

    % --- Executes during object creation, after setting all properties.

    function datossetpoint_CreateFcn(hObject, eventdata, handles)

    % hObject handle to datossetpoint (see GCBO)

    % eventdata reserved - to be defined in a future version of MATLAB

    % handles empty - handles not created until after all CreateFcns called

    % Hint: edit controls usually have a white background on Windows.

    % See ISPC and COMPUTER.

    if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

    set(hObject,'BackgroundColor','white');

    end

    % --- Executes on button press in pushbutton1.

    function pushbutton1_Callback(hObject, eventdata, handles)

    % hObject handle to pushbutton1 (see GCBO)

    % eventdata reserved - to be defined in a future version of MATLAB

    % handles structure with handles and user data (see GUIDATA)

    % --- Executes on button press in pushbutton2.

    function pushbutton2_Callback(hObject, eventdata, handles)

    % hObject handle to pushbutton2 (see GCBO)

  • 77

    % eventdata reserved - to be defined in a future version of MATLAB

    % handles structure with handles and user data (see GUIDATA)

    function edit2_Callback(hObject, eventdata, handles)

    % hObject handle to edit2 (see GCBO)

    % eventdata reserved - to be defined in a future version of MATLAB

    % handles structure with handles and user data (see GUIDATA)

    % Hints: get(hObject,'String') returns contents of edit2 as text

    % str2double(get(hObject,'String')) returns contents of edit2 as a double

    % --- Executes during object creation, after setting all properties.

    function edit2_CreateFcn(hObject, eventdata, handles)

    % hObject handle to edit2 (see GCBO)

    % eventdata reserved - to be defined in a future version of MATLAB

    % handles empty - handles not created until after all CreateFcns called

    % Hint: edit controls usually have a white background on Windows.

    % See ISPC and COMPUTER.

    if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

    set(hObject,'BackgroundColor','white');

    end

    function datossetpoint1_Callback(hObject, eventdata, handles)

    % hObject handle to datossetpoint1 (see GCBO)

    % eventdata reserved - to be defined in a future version of MATLAB

    % handles structure with handles and user data (see GUIDATA)

    % Hints: get(hObject,'String') returns contents of datossetpoint1 as text

    % str2double(get(hObject,'String')) returns contents of datossetpoint1 as a double

    % --- Executes during object creation, after setting all