Download - Buenisimo Informe Final
-
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