Taller en sistemas discretos¶
Parte 1 : Fundamentos de Arduino¶
Página oficial : arduino.cc
Contenidos¶
- Introduccion
- Arduino MEGA2560
- Variables en Arduino
- Operadores típicos en Arduino
- Estructura de un programa en Arduino
- Comandos más usados en Arduino
- 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¶
Arduino MEGA¶
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¶
¿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; |
- Verificar la tabla ASCII.
B
indica notacion binaria.- Hay otros dos nombre equivalentes
word
=unsigned int
yshort
=int
. - 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(){...}
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¶
Ejemplo 1.1 - 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¶
Declaración SWITCH¶
- Permite tener diferentes acciones dependiendo de los valores de un variable.
- Es similar a tener multiples
if
yelse 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¶
Parte 2 : Introducción a sensores¶
Contenidos¶
- Introducción
- Sensores analógicos
- Sensores digitales
- 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)¶
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)¶

¿Cómo funciona un micro suiche?¶
display(IFrame(
"https://www.youtube-nocookie.com/embed/JmUinwXsQc4?controls=0",
width="100%",
height="450px"))
¿Qué tipos de sensores de temperatura son estos?¶
PT100$^1$ | DHT11$^2$ | Termostato$^3$ |
---|---|---|
![]() |
![]() |
![]() |
- Sensor analógico, resistencia dependiente de la temperatura PT100.
- Sensor especializado de temperatura DHT11.
- Sensor binario, suiche bimetálico.
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.
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);
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:
$$\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}$$