Taller en sistemas discretos¶

Parte 1 : Fundamentos de Arduino¶

Página oficial : arduino.cc

Contenidos¶

  1. Introduccion
  2. Arduino MEGA2560
  3. Variables en Arduino
  4. Operadores típicos en Arduino
  5. Estructura de un programa en Arduino
  6. Comandos más usados en Arduino
  7. Statements más comunes en Arduino

¿Qué es Arduino?¶

Arduino es una plataforma electrónica de código abierto basada en hardware y software fáciles de usar. Está pensada para cualquiera que haga proyectos interactivos.

Algunas placas de desarrollo¶

Arduino UNO¶

No description has been provided for this image

Arduino MEGA¶

No description has been provided for this image

Características del Arduino MEGA¶

Característica Valor
Microcontrolador ATMEGA 2560
Alimentación Jack 7-12V o USB
Corriente máxima por pin digital I/O 40 mA
Corriente máxima por pin de alimentación de 3.3V 50 mA
Número de pines digitales I/O 54 pines
Entradas analógicas 16 pines
Salidas PWM (pseudo analógicas)$^1$ 15 pines
Frecuencia del reloj interno 16 MHz
Memoria Flash 256 kB
Memoria SRAM 8 kB
Memoria EEPROM 4 kB
Comunicaciones USB-Serial + I2C + SPI

$^1$Incluidas en los pines digitales

Arduino MKR1000¶

No description has been provided for this image

¿Qué lenguage de programación se usa en Arduino?¶

Arduino es un "sabor" de C++ donde sus principales diferencias son el almacenamiento en memoria.

Diferencias Memoria Instrucciones
Computador 2GB 32-bit / 64-bit
Arduino UNO 2kB 8-bit

Variables en Arduino¶

Nombre Tamaño Rango sin signo unsigned Rango con signo Ejemplo
boolean 1 bit false / true ~no aplica~ boolean state = false ;
char 8 bits 0 ... 255 -128 ... 127 char myChar = 65;$^1$
byte 8 bits 0 ... 255 ~no aplica~ byte myByte = B00000111;$^2$
int$^3$ 16 bits 0 ... 65 535 -32 768 ... 32 767 int counter = 0;
long 32 bits 0 ... 4 294 967 295 -2 147 483 848 ... 2 147 483 847 long number = 20000;
float$^4$ 32 bits ~no aplica~ -3.4028235e+38 ... 3.4028235e+38 float temperature = 37.5;
  1. Verificar la tabla ASCII.
  2. B indica notacion binaria.
  3. Hay otros dos nombre equivalentes word = unsigned int y short = int.
  4. Revisar la documentación de arduino para el tipo de dato float aquí.

Operadores aritmeticos¶

Símbolo Descripción
= Asignación
+ Adición
- Sustracción
* Multiplicación
/ División
% Módulo

Operadores de comparación¶

Símbolo Descripción
== Igual a ($x$ es igual a $y$?)
!= Diferente de ($x$ es diferente de $y$?)
< Menor que
> Mayor que
<= Menor o igual que
>= Mayor o igual que

Operadores booleanos¶

Símbolo Descripción
&& Operador Y
\|\| Operador O
! Negación

Acumuladores¶

Símbolo Descripción Ejemplo Equivalente
++ Incremento y = x++; y = x+1;
-- Decremento y = x--; y = x-1;
+= Asignación con suma y += x; y = y+x;
-= Asignación con resta y -= x; y = y-x;
*= Asignación con multiplicación y *= x; y = y*x;
/= Asignación con división y /= x; y = y/x;

Estructura de un programa en Arduino¶

/* 1:  Declaración de libreria      */  #include <SFEMP3Shield.h>
/* 2:  Definición de etiquetas      */  #define LEDPIN 3
/* 3:  Declaración de constantes    */  const unsigned int contMax = 10;
/* 4:  Declaración de variables     */  float temperature = 0;
/* 5:  Declaración de subrutinas    */  void readSensor(){
                                            int y = analogRead(1);
                                            temperature = 100.0*y/1023.0;
                                        }
/* 6:  Declaración de funciones     */  int sum(int x, int y){
                                            return x + y;
                                        }
/* 7:  Subrutina de configuración   */  void setup(){...}
/* 8:  Subrutina de ejecución inf.  */  void loop(){...}

Arduino IDE¶

Para descargar el software ir a la página oficial (descargar la versión Legacy 1.8.X)

No description has been provided for this image

Botones¶

Botones Atajo Descripción
Ctrl+R Verificar (compilar) el código
Ctrl+U Subir el código al microcontrolador
Ctrl+N Nuevo
Ctrl+O Abrir
Ctrl+S Guardar
Ctrl+Shift+M Monitor Serial

Comandos comúnmente utilizados¶

  • pinMode
  • digitalWrite
  • digitalRead
  • delay

Ejemplo 1.1 - Parpadeo¶

💾 Código arduino para el parpadeo

Declaración IF¶

  • Se usa en conjunto con operadores de comparación o funciones que retornen un booleano.
  • Verificar si la condición se cumple, de cumplirse, ejecuta las acciones deseadas y luego continua con el programa.

Sintaxis¶

if (condition) { //Do something here
}
else if (othercondition){ //Do something else if the first condition wasn’t met but the othercondition was met
}
else { //Do something here in other case
}

Ejemplo 1.2 - Declaración IF con entrada externa¶

💾 Código arduino para la declaración if

Declaración SWITCH¶

  • Permite tener diferentes acciones dependiendo de los valores de un variable.
  • Es similar a tener multiples if y else if para la misma variable con diferentes valores.
  • Cada caso es un posible valor para la variable puede tener y se termina con break.

Sintaxis¶

switch ( var ){
   case 0: 
      //Do something here if var is equal to zero
      break;
   case 1:
      //Do something here if var is equal to one
      break;
   case 2:
      //Do something here if var is equal to two
   break;
}

Ejemplo 1.3 - Declaración SWITCH¶

💾 Código arduino para la declaración switch

Parte 2 : Introducción a sensores¶

Contenidos¶

  1. Introducción
  2. Sensores analógicos
  3. Sensores digitales
  4. Sensores especializados

¿Que diferencias hay entre estos sensores?

Sensores analógicos¶

  • Generalmente poseen una salida en voltaje. $0V - 5V$
  • Requieren un conversor analógicos - digital (ADC)
  • Los arduinos tienen integrados un ADC de 10 bits

$$2^{10\text{ bits}} = 1024\text{ valores} \qquad \text{(incluyendo el 0 hasta 1023)}$$

  • Se usa la función analogRead(PIN) para su adquisición

Potentiometer (ejemplo sensor analógico)¶

Foto-resistencia (ejemplo sensor analógico)¶

LDR: Light Depedent Resistor

Sensores digitales - binarios¶

  • Funcionan como un suiche
  • Poseen un 1 bit de información lo que les permite tener solo dos estados:
Nivel Voltaje Función
HIGH 5V ON
LOW 0V OFF

  • Se usa la función digitalRead(PIN) para la adquisición de la información

Suiche (ejemplo sensor binario)¶

No description has been provided for this image

¿Cómo funciona un micro suiche?¶

display(IFrame(
    "https://www.youtube-nocookie.com/embed/JmUinwXsQc4?controls=0",
    width="100%",
    height="450px"))

Sensores especializados¶

  • Son sensores digitales que usan señales pulsadas
  • La informacion esta codificada en un flujo de 1 bit
  • Se usan librerias en Arduino para cada sensor
  • Usualmente el sensor tiene un microprocesador que gestiona el protocolo

Protocolos utilizados¶

  • One-wire
  • UART
  • I2C
  • SPI

¿Qué tipos de sensores de temperatura son estos?¶

PT100$^1$ DHT11$^2$ Termostato$^3$
No description has been provided for this image No description has been provided for this image No description has been provided for this image
  1. Sensor analógico, resistencia dependiente de la temperatura PT100.
  2. Sensor especializado de temperatura DHT11.
  3. Sensor binario, suiche bimetálico.

Ejemplos de sensores en Arduino¶

Lectura de sensor analógico - fotoresistencia¶

  • 💾 Lectura en bits de Fotoresistencia
  • 💾 Lectura en voltios de Fotoresistencia

Lectura de sensor especializado - DHT11¶

  • 💾 Lectura de temperatura y humedad DHT11

Parte 3: Máquinas de Estados Finitos¶

También llamados "Automatas" de estados finitos.

Modela el comportamiento de un sistema con un número limitado de modos o estados

Las MEF desde la auto-regulación¶

La máquina de estados finitos o MEF, también llamada autómata finito, está relacionada con el órgano de control del sistema. A diferencia de lo que se puede pensar, la MEF es una abstracción de las decisiones que el control tomará para satisfacer todas las necesidades o requerimientos en el proceso. Las MEF son representadas por diagramas y pueden ser programadas en cualquier lenguaje de programación.

Secador de manos¶

Ejemplo de un sistema "autonomo"

display(IFrame(
    "https://www.youtube-nocookie.com/embed/wZmwFvlBzyE?controls=0",
    width="100%",
    height="450px"))

Secador de manos¶

Antes de pensar en la MEF que controla el secador, responde las siguientes preguntas:

  • ¿Tiene sensores y actuadores el secador?
  • ¿Cuál es el sensor?
  • ¿Cuál es el actuador?

Efectivamente el secador tiene un sensor, un detector de presencia para sabe si hay o no una mano que quiere ser secada y tiene un actuador, un ventilador que genera un flujo fuerte de aire, secando así las manos.

Construcción de la MEF de control¶

Diagrama de flujo de materia¶

Descripción del proceso¶

El proceso del secador inicia cuando una persona acerca la mano a la zona de secado. Si se detecta un objeto en la zona de secado, el secador generará un flujo de aire que terminará secando el objeto.

Requerimientos del secador¶

  • Para su correcto funcionamiento, el secador debe tener un sensor que detecte la presencia de un objeto a ser secado, y de un ventilador para generar el secado
  • El sensor será denominado S, y responderá a la pregunta ¿estoy detectando presencia? con verdadero (1) o falso (0)
  • El actuador será denominado V, y esperará una respuesta verdadera (1) o falsa (0) a la pregunta ¿debo ventilar?

Reglas de control¶

Una vez tenemos los requerimientos del sistema podemos proceder al paso a paso, en donde los escribiremos usando la estructura SIEEE (o IFTTT).

  • Si el sensor detecta presencia entonces ventilar.
  • Si no detecta presencia el sensor entonces no ventilar.

Estos pasos pueden escribirse también de la siguiente forma:

  • Si S entonces V.
  • Si no S entonces no V.

MEF del control del secador¶

Anátomia de una MEF¶

Elemento Representación Descripción
Estado Círculo Define el comportamiento de la máquina y genera la orden a cada actuador.
Transición Flecha Son los cambios de estado generados por la expresión que la acompaña.
Expresión Ecuación Booleana También llamadas condiciones, son las reglas que se deben cumplir para generar la transición.
Transición Inicial Flecha que no proviene de un estado Toda MEF tiene un estado inicial que se indica con esta flecha.
Evento No se representa Cambios en las variables que hacen parte de las expresiones de la MEF

Las acciones de una MEF¶

Las acciones pueden ser ubicadas:

  • En el estado (dentro del círculo) generando una salida persistente.
  • En la transición (en la flecha) generando una salida transitoria.
sourcefile = 'secador-mef2.gv'
gv = open(sourcefile)
dot = Source(gv.read(),format="svg",filename = sourcefile)
dot.render(sourcefile,view=False);

Adicional a los elementos clásico de las MEF, las MEF híbridas tienen los siguientes elementos:

Elemento Descripción
Contador Son registros que varían de forma ascendente o descendente dependiendo del interés del diseño. La variación es transitoria, por lo que se genera en la transición.
Temporizador Estos nos permiten conocer el tiempo y tomar decisiones basados en él.
Time-out Son temporizadores que evitan que el proceso permanezca en un estado en caso de fallo de la transición principal.

Si volvemos a ver el vídeo del secado de manos, podemos notar que el ventilador no se apaga inmediatamente luego de que se quita la mano. Por lo que podemos pensar que el control usa temporizadores. Un MEF con un temporizador (T) se vería como sigue:

Si leemos la MEF, diremos:

  • El secador empieza en "Espera" con el ventilador apagado.
  • Si detecta un objeto con el sensor (S=1 o simplemente S), entonces empieza a "Secar" encendiendo el ventilador (V=1).
  • Si está "Secando" y deja de detectar el objeto (S=0 o también !S), entonces inicializa un temporizador en cero (/T=0) y continúa con el ventilador encendido (V=1) esperando "Parar".
  • Si está esperando "Parar" y se cumple el tiempo en el temporizador de más de 2 segundos (T > 2), entonces apaga el ventilador (V=0) y queda a la "Espera".

Para entender mejor la anatomia de las MEF, podemos ver el siguiente vídeo:

display(IFrame(
    "https://www.youtube-nocookie.com/embed/5KoRMjeFCZo?controls=0",
    width="100%",
    height="450px"))

Definición formal de Automata¶

Un automata (máquina) de estados finitos esta definido por una tupla de 5 elementos:

$$M = (S,I,f,S_0,F)$$

donde:

  • $S$ es el conjunto de estados finitos.
  • $I$ es el conjunto de expresiones de entrada.
  • $f:S\times I->S$ es la función de transición entre cada par estado-expresión hacia el siguiente estado.
  • $S_0 \subset S$ es el estado inicial (solo uno).
  • $F\subseteq S$ es el conjunto de estados finales.

Ejemplo de la definición formal¶

Tomemos la siguiente definición:

$$\begin{align} S &= \left\{1,2,3,4\right\} \\ I &= \left\{a,b\right\} \\ f &= \left\{(1,a,2),(1,b,4),(2,a,3),(2,b,4),(3,a,3),(3,b,3),(4,a,2),(4,b,4)\right\} \\ S_0 &= \left\{1\right\} \\ F &= \left\{4\right\} \end{align}$$

Que resulta en:

No description has been provided for this image

Ejercicio: Torniquete¶

¿Cómo sería la MEF de un torniqute?

Ejercicio: Torniquete¶

Construir la definición formal a partir de la MEF

No description has been provided for this image

$$\begin{align} S = &\left\{Bloqueado,Desbloqueado\right\} \\ I = &\left\{Mover,Moneda\right\} \\ f = &\left\{\right. (Bloqueado,Mover,Bloqueado), \\ &(Bloqueado,Moneda,Desbloqueado), \\ &(Desbloqueado,Moneda,Desbloqueado), \\ &(Desbloqueado,Mover,Bloqueado)\left. \right\} \\ S_0 = &\left\{Bloqueado\right\} \\ F = &\left\{\right\} \end{align}$$