Master Universitario en Profesor de Educación Secundaria Obligatoria, Bachillerato, Formación Profesional y Enseñanza de Idiomas.
Universidad de Salamanca
Asignatura: Innovación Docente en la Especialidad de Tecnología.
Curso: 2020/2021
Autor: Álvaro Lozano Murciego
CONTEXTO
La actividad se enmarca como un proyecto a desarrollar a lo largo de varias sesiones en la asignatura de Tecnología de 4ºESO de Aplicadas. Se parte de unos conocimientos mínimos previos de electrónica y se podrá enseñar programación con Arduino y temas más avanzados relacionados con la conexión con servicios de Internet.
Se encuentra enmarcado en el Bloque Robótica y Control.
ENUNCIADO
El objetivo de este proyecto es el desarrollo de un contenedor "inteligente" que presente las siguientes características:
Se pueda abrir su tapa sin contacto y sin esfuerzo: Se accionará con un sensor de ultrasonidos cuando la distancia con un obstáculo sea menor que cierto valor.
Monitorice y muestre el nivel de llenado y lo publique en un sitio web: el porcentaje de llenado deberá estar accesible tanto de forma online como localmente en el propio dispositivo.
MATERIALES NECESARIOS Y REQUISITOS PREVIOS
Para llevar a cabo el siguiente proyecto serán necesarios los siguientes materiales:
1 x Cubo de basura comercial: shorturl.at/AHIW5. La idea principal es modificarlo para hacerlo "inteligente" con distintos sensores. Este apartado es libre.
1 x Sensor de ultrasonidos HC-SR04: Tendrá la función de sensor de distancia para aproximar el porcentaje del contenedor, en este caso el sensor apuntará hacia el interior del contendor para tal fin.
1 x Sensor de distancia Time of Flight (ToF): Se trata de un sensor de distancia más preciso que el de ultrasonidos y sin tanto rango de apertura. Este sensor será el empleado para accionar la apertura de la tapa del contenedor si se detecta una distancia menor a un umbral definido.
1 x MicroServo 9g : Este actuador será el encargado de abrir la tapa del contenedor.
1 x M5Stick C Plus: En este caso se empleará este dispositivo como microcontrolador. Este dispositivo esta basado en el microcontrolador ESP32 (de la empresa Espressiff) y forma parte de la empresa M5Stack, empresa de hardware electrónico educativo. La diferencia fundamental con Arduino UNO (ATMega328p) consiste en que el microcontrolador ESP32 posee conexión WiFi y Bluetooth BLE, un factor que lo hace perfecto para Internet de las Cosas (IoT) a la vez de su bajo coste, unos 5 euros un ESP32. Por lo demás, es posible utilizar el Core de Arduino (el lenguaje de programación Arduino y sus bibliotecas) con este microcontrolador. Para instalar esta placa en el IDE de Arduino es sumamente sencillo, basta seguir los pasos que se indican AQUI. Una vez instalado ya podemos seleccionar la placa en el IDE de Arduino. Una vez explicado qué es el ESP32, podemos abordar el M5Stick C Plus, dispositivo con distintos periféricos (Pantalla LED, Micrófono, Acelerómetro, etc.) Esto es muy útil ya que permite realizar muchas prácticas con el mismo dispositivo, sin embargo puede quedarse algo corto en cuanto a pines disponibles, M5Stack posee más dispositivos como el M5Stack Core Basic.
N x Cableado: Serán necesarios varios cables y jumpers para el prototipo en la protoboard y posteriormente para instalar el cableado en la papelera.
Pegamento termofusible: Necesario para fijar toda la parte de cableado y la caja en la parte de la tapa del contenedor.
Además de estos materiales, será necesario contar con el siguiente software/cuentas:
Arduino IDE y con placa ESP32 instalada: Seguir los pasos descritosAQUI.
Cuenta en ThingSpeak: Será necesario crear una cuenta en https://thingspeak.com/ aquí podremos crear hasta 4 "channels" o canales donde podremos publicar la información del sensor. Con crear un solo canal será necesario. Posteriormente en el código se detallarán los pasos a seguir.
ThingSpeak Arduino: Será necesario instalar la biblioteca de ThingSpeak para Arduino en el IDE desde el gestor de bibliotecas.
M5Stick C Plus: Instalar la biblioteca con este nombre desde el gestor de bibliotecas.
DESCRIPCIÓN DE LOS MECANISMOS DEL PROTOTIPO Y DEL FUNCIONAMIENTO
La idea principal del proyecto consiste en conseguir desarrollar un programa que se accione un motor para poder abrir la tapadera durante unos segundos y posteriormente pasar a cerrarla. Por tanto, deberemos realizar un mecanismo con el que abrir la tapa como se muestra a continuación:
Por otro lado, el programa del microcontrolador también deberá medir la distancia desde la parte superior del contenedor de tal forma que se pueda aproximar el volumen de llenado del contenedor.
La información de llenado se enviará a ThingSpeak a través de una petición HTTP utilizando la biblioteca de Arduino para tal servicio. En ThingSpeak será necesario configurar un canal en el que recibir los datos y mostrar una visualización de éstos en una gráfica:
El presente proyecto tiene por objeto la realización de una
vivienda inteligente utilizando Arduino. El proyecto consiste en una vivienda
con sensor de luz y de temperatura además de un display que va indicando la
situación de la vivienda cada cierto tiempo.
Este proyecto está pensado para realizarlo en clase en
grupos de alumnos de 3º de E.S.O.
FUNCIONAMIENTO
La vivienda que creamos detecta, mediante sensores la luz y
la temperatura a la que se encuentra, a través de la placa colocada en el
tejado. Si tapamos el foto sensor (como si fuera de noche) las luces de la
vivienda se encienden. La luz de la calefacción aparece encendida, pero si
apretamos el sensor de temperatura para aumentar la misma (como si hiciera
calor en el exterior) esta se apagaría.
El display nos marca en todo momento la temperatura a la que
se encuentra, alternando con la información acerca de las luces (si están
apagadas o encendidas).
MARCO LEGISLATIVO
Según el Real Decreto 52/2007, de 17 de mayo, por el que se
estable el currículo de Educación Secundaria Obligatoria en la Comunidad de
Castilla y León, con este proyecto se cumplen los siguientes objetivos,
contenidos y criterios de evaluación:
Objetivos:
1. Valorar y utilizar el proyecto técnico como instrumento
de resolución ordenada de necesidades.
2. Elaborar un plan de trabajo y realizar las operaciones
técnicas previstas con criterios de seguridad y valorando las condiciones del
entorno.
5. Emplear el ordenador como herramienta de trabajo con el
objeto de comunicar, localizar y manejar información de diversas fuentes. Conocer
y aplicar la terminología y procedimientos básicos de los programas de edición
de texto y presentaciones.
13. Utilizar adecuadamente las magnitudes básicas
eléctricas.
14. Valorar los efectos de la energía eléctrica y su
capacidad de conversión en otras manifestaciones energéticas.
15. Identificar y utilizar correctamente los elementos
fundamentales de un circuito eléctrico de corriente continua y comprender su
función dentro de él.
20. Valorar de forma critica el impacto del uso de la
energía eléctrica sobre el medio ambiente.
Contenidos:
Bloque 5. Electricidad y electrónica.
–Circuito
eléctrico de corriente continua: magnitudes eléctricas básicas. Simbología. Ley
de Ohm. Circuito en serie, paralelo, mixto.
– Corriente
continua y corriente alterna.
– Montajes
eléctricos sencillos: circuitos mixtos. Inversor del sentido de giro.
– Maquinas
eléctricas básicas: dinamos, motores y alternadores. Generación y
transformación de la corriente eléctrica.
– Introducción
a la electrónica básica. Componentes pasivos: condensadores y resistencias.
Componentes activos: diodos y transistores. Descripción de componentes y
montajes básicos.
– Análisis de
circuitos eléctricos y electrónicos característicos mediante programas de
simulación.
Criterios de evaluación:
1. Realizar un proyecto técnico, analizando el contexto,
proponiendo soluciones alternativas y desarrollando la más adecuada.
3. Realizar las operaciones técnicas previstas en el
proyecto técnico incorporando criterios de economía, sostenibilidad y
seguridad, valorando las condiciones del entorno de trabajo.
4. Utilizar las tecnologías de la información y la
comunicación para elaborar, desarrollar, publicar y difundir un proyecto
técnico.
5. Instalar programas y realizar tareas básicas de
mantenimiento informático. Utilizar y compartir recursos en redes locales.
12. Diseñar, simular y realizar montajes de circuitos
eléctricos sencillos en corriente continua, empleando pilas, interruptores,
resistencias, bombillas, motores y electroimanes, como respuesta a un fin
predeterminado.
13. Describir las partes y el funcionamiento de las maquinas
eléctricas básicas.
14. Describir y utilizar el electromagnetismo en
aplicaciones tecnológicas sencillas.
15. Utilizar correctamente las magnitudes eléctricas
básicas, sus instrumentos de medida y su simbología.
17. Emplear Internet como medio activo de comunicación
intergrupal y publicación de información.
24. Identificar automatismos en sistemas técnicos cotidianos
y describir la función que realizan.
26. Identificar los elementos básicos de un sistema de
control.
ELEMENTOS UTILIZADOS
Arduino Uno
Arduino es una plataforma de electrónica abierta para la
creación de prototipos basada en software y hardware flexibles y fáciles de
usar. Se creó para artistas, diseñadores, aficionados y cualquiera interesado
en crear entornos u objetos interactivos.
Protoboard
Resistencias
LEDs
Foto resistor
Sensor temperatura
Display
FOTOGRAFÍAS DE LA CASA INTELIGENTE
CÓDIGO UTILIZADO
/*Proyecto Arduino Casa
Inteligente
Laura Lavandera Mayo
Elena Vega Rodríguez
Paula Salicio Geanini
Elementos que vamos a
utilizar:
1 TMP36 sensor de temperatura
3 LEDs amarillos
1 LED rojo
1 fotorresistor (sensor
de luz)
1 Display
4 resistencias de 220
ohmios
1 resistencia de 10000
ohmios
1 resistencia variable de
10000 ohmios
*/
#include<LiquidCrystal.h>
//incluimos libreria LiquidCrystal para poder usar el display
LiquidCrystal
lcd(12,11,9,8,7,6); /*iniciamos la libreria con los numeros de los pines que va
utilizar el display*/
const int
sensorTemperatura=A0; /*establecemos una constante entera, el sensor de
temperatura va a la entrada analogica A0*/
const int sensorLuz=A1;
/*establecemos una constante entera, el sensor de luz va a la entrada analogica
A1*/
const int pin1=2; //los
led van a la salida digitales 2,3,4 y 5
const int pin2=3;
const int pin3=4;
const int pinChimenea=5;
float valorTemperatura=0;
//establecemos varialbes de tipo float para hacer calculos
float voltaje=0;
float temperatura=0;
float valorSensorLuz=0;
float valorLuz=0;
float sensorLow=1023;
float sensorHigh=0;
void setup() //funcion
setup, establecemos las condiciones iniciales
{
Serial.begin(9600); //Establecemos conexion
con el puerto Serial
while(millis()<5000) //hacemos una calibración del sensor de la
luz para su correcto funcionamiento
valorSensorLuz=analogRead(sensorLuz); //la
variable valorSensorLuz recibe el valor leido por el sensor de la luz
if(valorSensorLuz>sensorHigh) //si el
valor obtenido es mayor que 0
{
sensorHigh=valorSensorLuz; //establecemos el
valor de la variable sensorHigh como el valor leido por el sensor
}
if(valorSensorLuz<sensorLow) //si el
valor leido es menor que 1023
{
sensorLow=valorSensorLuz; //establecemos
el valor de la variable sensorLow como el valor leido por el sensor
}
}
lcd.begin(16,2); //establecemos que el display va a tener 16
caracteres y 2 filas para escribir
lcd.clear();
//limpiamos el contenido que pueda tener el display
lcd.setCursor(0,0); //establecemos la primera linea donde
empezariamos a escribir
lcd.print("Proyecto "); //escribimos en la primera linea la cadena de
texto Proyecto
lcd.setCursor(0,1); //establecemos la segundo linea donde
empezariamos a escribir
lcd.print("Casa inteligente"); //escribimos en la segunda linea una cadena
de texto
delay(3000); /*Establecemos un retraso de 3
segundos para que se pueda leer bien el texto
del display*/
}
void loop() //funcion
loop, que corresponde con un bucle infinito
{
int
valorTemperatura=analogRead(sensorTemperatura); //la variable entera
valorTemperatura lee el valor del sensor de tempeatura
float voltaje=(valorTemperatura/1024.0)*5.0;
//hacemos una conversion para convertir el valor leido a grados celsius
float temperatura=(voltaje-0.5)*100;
lcd.clear();//limpiamos el contenido que
pueda tener el display
lcd.setCursor(0,0);//establecemos la primera
linea donde empezariamos a escribir
lcd.print("La
temperatura");//escribimos en la primera linea
lcd.setCursor(0,1);//establecemos la segunda
linea donde empezariamos a escribir
lcd.print("es ");//escribimos en la
segunda linea una cadena de texto
int tempeInt=(int)temperatura; //hacemos un
casting para convertir un float a entero, para facilitar la lectura de la
temperatura
lcd.print(tempeInt,DEC); //escribimos en la
la temperatura en base decimal
lcd.print(" C"); //escribimos una C
que representa los grados celsius
delay(5000); //establecemos un retraso de 5
segundos para que se pueda leer bien el display
Serial.print("Temperatura: ");
//Tambien escribimos en el puerto serial la tempeatura
Serial.print(temperatura);
Serial.println();
valorSensorLuz=analogRead(sensorLuz); //la
variable valorSensorLuz recoge el valor leido por el sensor de la luz
Serial.print("valor luz: ");
//Escribimos en el puerto serial el valor leido
Serial.print(valorSensorLuz);
Serial.println();
if(valorSensorLuz<800.0) //si el valor
obtenido por el sensor de la luz es menor a 800, es decir hay poca luz
{
for(int i=2;i<=4;i++)
{
digitalWrite(i,HIGH); //encedemos los
leds del techo
}
lcd.clear();//limpiamos el contenido que
pueda tener el display
lcd.setCursor(0,0);//establecemos la
primera linea donde empezariamos a escribir
lcd.print("Luces de
casa");//Escribimos en el display que se han encendido las luces de la
casa
lcd.setCursor(0,1);
lcd.print("encendidas ");
delay(1000); //Establecemos un retraso de 1
segundo para que podamos leer el display
}
else //si el valor de la luz es mayor o igual
a 800
{
for(int i=2;i<=4;i++)
{
digitalWrite(i,LOW); //los leds del
techo permaneceran apagados
}
lcd.clear();//limpiamos el contenido que
pueda tener el display
lcd.setCursor(0,0);//establecemos la
primera linea donde empezariamos a escribir
lcd.print("Luces de
casa");//Escribimos en el display que se han apagado las luces de la casa
lcd.setCursor(0,1);
lcd.print("apagadas ");
delay(1000); //Establecemos un retraso de 1
segundo para que podamos leer el display
}
if(temperatura<=24.0) //Si la temperatura
es menor a 24
{
digitalWrite(5, HIGH); //encedemos el led
de la chimenea
Serial.println("Temperatura menor a
24"); //imprimimos por el puerto serial que la temperatura es menor a 24
delay(1000);
lcd.clear(); //limpiamos el contenido que
pueda tener el display
lcd.setCursor(0,0);//establecemos la
primera linea donde empezariamos a escribir
lcd.print("La
temperatura");//Escribimos en el display la temperatura que hay ahora
lcd.setCursor(0,1);
lcd.print("ahora es ");
int tempeInt=(int)temperatura; //hacemos
un casting para convertir un float a entero, para facilitar la lectura de la
temperatura
lcd.print(tempeInt,DEC); //escribimos en
la la temperatura en base decimal
//lcd.print(temperatura,DEC);
lcd.print(" C"); //escribimos
una C que representa los grados celsius
delay(5000); //retraso de 5 segundos para
leer bien el display
}
else //si la temperatura es mayor a 24ºC
{
digitalWrite(5, LOW); //apagamos el
led de la chimenea y mostramos la temperatura actual