Taller en sistemas conectados¶
Parte 1: MEF en Arduino¶
Para implementar MEF en Arduino debemos estudiar un concepto clave y es el tiempo relativo.
Tiempo relativo¶
El concepto de tiempo relativo no permite sabe cuanto tiempo a pasado desde un evento anterior a través de una sustracción.
- Permite el procesamiento de tiempo
- Permite tener multiples tareas en un microcontrolador
- Mejora el rendimiento de del microcontrolador
Tiempo relativo con un reloj¶
- ¿ Para poder responder a la siguiente pregunta que necesito saber ?
- ¿ Cuantos minutos han pasado desde que inicio la clase ?
- Necesito saber el tiempo "absoluto" actual.
- Necesito saber el tiempo "absoluto" del inicio de la clase (el evento).
Tiempo relativo con Arduino¶
En Arduino existen dos funciones que están relacionadas con el tiempo:
millis()
que retorna el tiempo en milisegundos que el Arduino lleva encendido.micros()
que retorna el tiempo en microsegundos que el Arduino lleva encendido.
Estás funciones nos permiten tener encuenta retardo sin frenar la ejecución del código. Para usar el tiempo relativo necesitamos $3$ variables:
unsigned long tini;
Tiempo de inicio, esta variable se actualiza cuando ocurre el inicio del evento para el cual queremos contar tiempo.unsigned long tact;
Tiempo actual, esta variable se actualiza en cada ciclo de ejecución (en elloop()
)unsigned long trel;
Diferencia de tiempo entre el tiempo actual y el tiempo de inicio, esta variable se actualiza a discresión de las necesidades del programa.
Ejemplo de Parpadeo con tiempo relativo¶
Estructura de un código MEF en Arduino¶
/* 1: Declaración de libreria */ #include <SFEMP3Shield.h>
/* 2.1: Definición de ESTADOS */ #define SOFF 0
/* 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(){...
/* 8.1: Se define dentro de loop
la MEF en un Switch Case */ switch(state){}
}
MEF de seguridad de la bateria¶
Hacer un MEF que el "LED Rojo" apagada mientras haya bateria en el sistema, en caso de faltar bateria, el "LED Rojo" parpadeará con el siguiente patrón : 2 segundos encendido y 1 segundo apagado.
Estación Meteorológica¶
Se tiene la siguiente maqueta, que simulará una estación meteorológica, que posee diferentes protocolos de comunicación que permiten robustez y adaptabilidad.
Se desea contruir un sistema inalambrico de monitoreo de temperatura y humedad, resistente a diferentes situaciones.
Arquitectura de un sistema IOT¶
Arquitectura de la maqueta¶
Códigos de ejemplo¶
display(IFrame(
"https://isa.requestcatcher.com/",
frameborder="0",
width="100%",
height="450px"))
Dashboard en ubidots¶
display(IFrame(
"https://stem.ubidots.com/app/dashboards/public/dashboard/w6eBcObiKIIZT2QVpUCny-MpLgiaxeTU5Ug7eS7KXDk?nonavbar=true&embed=true",
frameborder="0",
width="800px",
height="450px"))
Creación de una cuenta academica¶
Para la creación de una cuenta academica en Ubidots hacerlo en Ubidots STEM.