miércoles, 25 de enero de 2023

Aula domotizada



Datos:

Alumno: Carlos Álvarez López
Asignatura: Innovación Docente de la Especialidad de Tecnología.
Master: Máster Universitario en Profesor de Educación Secundaria Obligatoria y Bachillerato, Formación Profesional y Enseñanza de Idiomas. 
Centro: Universidad de Salamanca.
Curso: 2022/2023.


Propuesta planteada:

Se propone la domotización de un aula de tecnología. Permitiendo a los docentes el control automatizado de los parámetros básicos del mismo, como son la iluminación, la calefacción, la deshumidificación del ambiente y la apertura de las ventanas.

Para la visualización de los datos, así como para la modificación en tiempo real de los valores de temperatura, humedad y luminosidad se ha desarrollado una aplicación Android mediante el lenguaje JAVA y el IDE Android Studio. Dicha aplicación, utilizará un protocolo de comunicación propio para conectarse con Arduino, así como una base de datos Firebase (Google) para almacenar los datos recibidos del aula. Generando así un histórico de datos.




Para la conexión de la placa de desarrollo con el dispositivo móvil se ha utilizado un módulo bluetooth HC-05, el cual permite la comunicación tanto en modo slave como en modo máster. En el caso actual, mediante comandos AT, se ha establecido en modo slave. Adicionalmente se le ha establecido una velocidad de comunicación mayor, un nombre de dispositivo personalizado así como una contraseña de acceso. 

En cuanto a los sensores utilizados, se utilizará un sensor DHT11 para la lectura de los parámetros de humedad y temperatura. Por otro lado se ha utilizado un LDR para captar la iluminancia del aula, se ha utilizado una conversión para pasar los valores analógicos leídos a unidades del Sistema Internacional (lux). Así como una aplicación Android para modificar los valores máximos y mínimos.

Como actuadores se ha utilizado un servomotor para la apertura y cierre de las ventanas. Un led RGB para simular la luz de clase. Un led rojo para simular la calefacción (se debería utilizar un relé para controlar una electroválvula que abra el paso de agua caliente a los radiadores). Y un led verde para simular un deshumidificador (debería de ser un relé que activara la alimentación del dispositivo deshumidificador). Así como una aplicación Android de desarrollo propio para la monitorización de datos en tiempo real. 

Contexto:

Esta actividad se enmarcaría en las asignaturas optativas de tecnología tanto de primero como de segundo de bachillerato. Al tratarse de una solución bastante compleja, para la implementación en el aula no se solicitaría a los alumnos el desarrollo de una aplicación en Android propia. Si no que se les propondría utilizar alguna de las aplicaciones genéricas ya disponibles en la Play Store. 


Esquema de conexión:




Código:

El código de la aplicación Android así como el de Arduino se puede puede encontrar en el siguiente enlace: https://github.com/carlos-alv/arduino



Vídeo demostrativo:






Control de temperatura y humedad para sistemas de calefacción/ventilación

 

Datos

Alumna: Estefanía González Taboada
Asignatura: Innovación Docente de la Especialidad de Tecnología
Titulación: Máster Universitario en Profesor de Educación Secundaria Obligatoria y Bachillerato, Formación Profesional y Enseñanza de Idiomas.
Centro: Universidad de Salamanca
Curso: 2022/23

 

Proyecto



Descripción

Este proyecto se basa en un aparato capaz de medir la temperatura y la humedad del ambiente mostrando dichos datos a través de la pantalla LCD. Esta función podría ser aplicada en cualquier sistema de calefacción o ventilación como medida para controlar la temperatura y aclimatar la zona deseada de manera eficiente.

Cuando la temperatura sea “óptima”, el indicador LED verde se encenderá. En este caso, se ha seleccionado que el LED verde indique como temperatura "óptima" una temperatura ambiente igual o superior a 25 grados.

Cuando la temperatura sea “baja”, es decir, inferior a 25 grados se mantendrá encendido el LED de color azul para indicar esa temperatura baja.

Estas temperaturas son programables, es decir, podría cambiarse los valores para que los indicadores lumínicos dieran el aviso a mayor o menor temperatura de la indicada.

En cuanto a su utilidad en base a la enseñanza este proyecto podría utilizarse como una introducción a Arduino dentro de la asignatura de tecnología y digitalización de cualquier curso de la ESO, añadiendo mayor o menor complejidad en relación al curso que sea. Por ejemplo, si es un 1º o 2º curso se podría simplificar o facilitar el código a los alumnos y priorizar que sean capaces de identificar las piezas, los circuitos y realizar los montajes, mientras que si es un 3º o una optativa de 4º curso podríamos centrarnos en explicar como funciona ese código para que pudieran llegar ellos mismos a la solución o realizar modificaciones. 

 

Componentes

1 Placa de Arduino ELEGOO UNO R3
1 Cable USB de alimentación
1 Placa prototipado
1 LCD 16 X 2
1 LED Verde
1 LED Azul
1 Potenciómetro
2 Resistencias 220
1 Sensor de temperatura [TMP36]

 

Esquemas TINKERCAD


Código

#include <LiquidCrystal.h>
#include <dht_nonblocking.h>
#define DHT_SENSOR_TYPE DHT_TYPE_11

static const int DHT_SENSOR_PIN = 2;
DHT_nonblocking dht_sensor(DHT_SENSOR_PIN, DHT_SENSOR_TYPE);

// initialize the LCD library with the numbers of the interface pins
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

void setup()
{
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
}

/*
 * Poll for a measurement, keeping the state machine alive.  Returns
 * true if a measurement is available.
 */
static bool measure_environment(float *temperature, float *humidity)
{
  static unsigned long measurement_timestamp = millis();

  /* Measure once every four seconds. */
  if (millis() - measurement_timestamp > 1000ul)
  {
    if (dht_sensor.measure(temperature, humidity) == true)
    {
      measurement_timestamp = millis();
      return (true);
    }
  }

  return (false);
}

void loop()
{
  float temperature;
  float humidity;

  /* Measure temperature and humidity.  If the functions returns
     true, then a measurement is available. */
  if (measure_environment(&temperature, &humidity) == true)
  {
    lcd.setCursor(0, 0);
    lcd.print("T = ");
    lcd.print(temperature, 1);
    lcd.print("C");
    lcd.setCursor(0, 1);
    lcd.print("H = ");
    lcd.print(humidity, 1);

    if (temperature > 25.0)
    {
      digitalWrite(5, HIGH);
      digitalWrite(4, LOW);
    }
    else
    {
      digitalWrite(5, LOW);
      digitalWrite(4, HIGH);
    }
  }
}

CAJITA DE MÚSICA ILUMINADA


 Datos

Alumno: Jesús Rivas Perretta    
Asignatura: Innovación Docente de la Especialidad de Tecnología
Titulación: Máster Universitario en Profesor de Educación Secundaria Obligatoria y Bachillerato, Formación Profesional y Enseñanza de Idiomas.
Centro: Universidad de Salamanca
Curso: 2022/23
 

Descripción del proyecto

El siguiente prototipo consiste en una caja de música electrónica que lleva grabado en memoria el tema principal de la popular canción de Juego de Tronos. 
Para la reproducción de la música utilizará un zumbador que por medio de la función tone() reproduce las notas una a una asignando valores de frecuencia (Hz) y duración (ms).
Un pulsador asignado a un pin con el modo de resistencia Pullup actúa como botón para iniciar la reproducción, y un conjunto de leds de colores se iluminarán al mismo tiempo que suena cada una de las notas cuando la foto resistencia detecte que el nivel de luz del entorno es bajo, manteniéndose apagadas cuando haya luz.
 
 
 
 Componentes
 Placa Arduino Uno R3.
1 Piezo.
1 Resistencia 1 KΩ.
1 Fotorresistencia.
1 Pulsador.
8 Leds de colores.
8 Resistencias de 220 Ω.
 
 
 
 Esquema
 El esquema de conexiones de la placa es el siguiente:
 

 
Código
El código utilizado para la reproducción de la música y el encendido de los leds no utiliza librerías externas. Es el que se muestra a continuación:

int Contador = 0;


void setup() {
  // put your setup code here, to run once:


 
  Serial.begin(9600);



pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);

pinMode(7, INPUT_PULLUP);

}




void loop() {
 

int Boton = digitalRead(7);



if (Boton == LOW) {

for (int i = 0; i < 4; i++){
// Sol
tone (8, 392, 500);
if (analogRead(A0) < 750){
  digitalWrite(2, HIGH);}
digitalWrite(5, LOW);
delay(500);
// Do
tone (8, 262, 500);
if (analogRead(A0) < 750){
  digitalWrite(3, HIGH);}
digitalWrite(2, LOW);
delay(500);
// Mi
tone (8, 330, 250);
if (analogRead(A0) < 750){
  digitalWrite(4, HIGH);}
digitalWrite(3, LOW);
delay(250);
// Fa
tone (8, 350, 250);
if (analogRead(A0) < 750){
  digitalWrite(5, HIGH);}
digitalWrite(4, LOW);
delay(250);
}



// Sol
tone (8, 392, 1000);
if (analogRead(A0) < 750){
  digitalWrite(2, HIGH);
  digitalWrite(9, HIGH);}
digitalWrite(5, LOW);
delay(1000);

// Do
tone (8, 262, 1000);
if (analogRead(A0) < 750){
  digitalWrite(3, HIGH);
  digitalWrite(10, HIGH);}
digitalWrite(2, LOW);
digitalWrite(9, LOW);
delay(1000);

// Mi
tone (8, 330, 250);
if (analogRead(A0) < 750){
  digitalWrite(4, HIGH);
  digitalWrite(11, HIGH);}
digitalWrite(3, LOW);
digitalWrite(10, LOW);
delay(250);
// Fa
tone (8, 350, 250);
if (analogRead(A0) < 750){
  digitalWrite(5, HIGH);
  digitalWrite(12, HIGH);}
digitalWrite(4, LOW);
digitalWrite(11, LOW);
delay(250);
// Sol
tone (8, 392, 1000);
if (analogRead(A0) < 750){
  digitalWrite(2, HIGH);
  digitalWrite(9, HIGH);}
digitalWrite(5, LOW);
digitalWrite(12, LOW);
delay(1000);
// Do
tone (8, 262, 1000);
if (analogRead(A0) < 750){
  digitalWrite(3, HIGH);
  digitalWrite(10, HIGH);}
digitalWrite(2, LOW);
digitalWrite(9, LOW);
delay(1000);
// Re
tone (8, 293, 250);
if (analogRead(A0) < 750){
  digitalWrite(4, HIGH);
  digitalWrite(11, HIGH);}
digitalWrite(3, LOW);
digitalWrite(10, LOW);
delay(250);
// Mi
tone (8, 330, 250);
if (analogRead(A0) < 750){
  digitalWrite(5, HIGH);
  digitalWrite(12, HIGH);}
digitalWrite(4, LOW);
digitalWrite(11, LOW);
delay(250);
// Re
tone(8, 293, 1500);
if (analogRead(A0) < 750){
  digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);
  digitalWrite(4, HIGH);
  digitalWrite(5, HIGH);
  digitalWrite(9, HIGH);
  digitalWrite(10, HIGH);
  digitalWrite(11, HIGH);
  digitalWrite(12, HIGH);
  delay(2000);
  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  digitalWrite(12, LOW);
  }
}


}



 


             












 
                                                                                                          



 

martes, 24 de enero de 2023

MÁQUINA EXPENDEDORA CON ARDUINO

 

Datos

Alumno: Mariam Amrhar Martín

Asignatura: Innovación Docente de la Especialidad de Tecnología

Titulación: Máster Universitario en Profesor de Educación Secundaria Obligatoria y Bachillerato, Formación Profesional y Enseñanza de Idiomas.

Centro: Universidad de Salamanca

Curso: 2022/23



Contexto

El proyecto está destinado para alumnos de 3º de la ESO que se encuentren cursando la tecnología de Tecnología, donde podrán ver la utilidad de este tipo de Arduino en un proyecto que puede ser utilizado para actividades cotidianas como la compra de aperitivos o snacks en máquinas de vending.

Descripción del proyecto

En primer lugar, se procederá a hacer una breve introducción sobre qué es Arduino y para qué puede ser utilizado. Arduino se trata de una plataforma de creación de electrónica de código abierto, la cual estará basada en hardware y software libre, flexible y fácil de utilizar para los creadores y desarrolladores, permitiendo la creación de diferentes tipos de microordenadores de una sola placa a los que la comunidad de creadores puede darles diferentes tipos de uso.

Su funcionamiento está basado en un microcontrolador ATMEL, siendo circuitos integrados en los que se pueden grabar instrucciones, permitiendo la creación de programas que interactúan con los circuitos de la placa.

Hecha esta pequeña introducción, se puede ver que existe una gran variedad de proyectos que se pueden llevar a cabo en Arduino, dónde éste puede ser utilizado para cualquier cosa, desde relojes hasta robots.

En este caso en concreto y para la asignatura de Innovación Docente de la Especialidad de Tecnología se programado un Arduino que servirá como una máquina expendedora, donde en primer lugar se recibirá al mensaje con un mensaje de “Bienvenido/a!” en la pantalla LCD 1602 acoplada. Hecho esto se procederá a comprobar si existe algún producto o no en la infraestructura y para poder hacer esto se utilizará un botón que servirá como sensor, el cual se mantendrá pulsado en el caso que no exista ningún producto que dispensar al usuario. Finalmente se imprimirá un mensaje de error en la pantalla y se encenderá el diodo LED rojo, indicando que la máquina no puede hacer su función.

A partir de lo mencionado anteriormente, se continuará viendo que sucederá en el caso que si se tenga algún producto y el sensor no se active y es que visto esto, se procederá a definir que el mando a distancia servirá como la detección de monedas de dichas máquinas, es decir, donde en las máquinas originales se tendrá el mecanismo de detección de monedas en este caso se tendrá el mando a distancia, el cual recibirá las señales a través de IR Receiver Module. Por lo tanto, la máquina una vez haya hecho la comprobación referente a si existe un objeto y éste sea el caso, el usuario procederá a utilizar el mando para elegir un producto.

En el caso que el usuario no seleccione nada en el mando, se irá a un caso error donde existirán productos, pero el usuario no selecciona nada, por lo tanto, se imprimirá por pantalla esto y se encenderá el diodo LED rojo, no pudiendo hacer la máquina su función.

Finalmente, en el caso que exista el producto y el usuario seleccione en el mando algún producto, se encenderá el motor Stepper Motor 26byj-48, donde girará un número determinado de veces hasta que el usuario reciba el producto, mostrando por pantalla que la operación se ha producido con éxito y se encenderá el diodo LED verde.

Montaje final y funcionamiento

Se adjuntará un pequeño vídeo demostrando su funcionamiento



https://youtu.be/TIRdJfLA9Qg

Esquema de montaje

El esquema del proyecto se ha realizado con la aplicación Autodesk TinkerCad, el cual se adjuntará a continuación, así como con su circuito.















Materiales Utilizados

  • ·        Placa de Arduino ELEGOO UNO R3
  • ·        Protoboard
  • ·        Potenciómetro de 10K
  • ·        Diodo LED rojo
  • ·        Diodo LED verde
  • ·        Resistencia 220K Ω (2)
  • ·        Resistencia 10KΩ
  • ·        Pantalla LCD 1602
  • ·        Cable puerto USB
  • ·        Stepper Motor 26byj-48
  • ·        IR Receiver Module
  • ·        Momentary button or Switch

Código


























lunes, 23 de enero de 2023

SISTEMA DE CONTROL DE TEMPERATURA DE UN INVERNADERO

Vídeo demostrativo



 


Descripción del Proyecto

El objetivo del presente proyecto es el de controlar a través de un sensor de temperatura y humedad, las condiciones ambientales del interior de un invernadero que se mostrarán en un display y mediante un motor de corriente continúa (un ventilador) y una alarma que nos dará el aviso, se mantendrá la temperatura dentro de los límites determinados previamente.

Como entradas tenemos un sensor de temperatura y humedad, que en el esquema de Tinkerdad lo represento con un sensor de temperatura, ya que el programa no da la opción de seleccionar un único dispositivo que contenga las dos variables, que si lo contiene el paquete físico de Elegoo y como salidas, se mostrarán los valores de temperatura y humedad en la pantalla LCD, en la que se regulará la intensidad a través de un potenciómetro, se regulará la temperatura del interior del invernadero mediante un ventilador y se dará aviso del exceso de la misma con una alarma (buzzer). Como complementos se añadirán un módulo de suministro extra de energía para el tablero de circuitos y una pila de 9V.

Este proyecto podría encuadrarse dentro de la asignatura de tecnología para alumnos de 3º o 4º de la ESO.

 


Esquema de conexiones con Tinkerdad





Esquema del circuito con Tinkerdad




 

Código de Programación

 

#include <LiquidCrystal.h>

#include <dht_nonblocking.h>

#define DHT_SENSOR_TYPE DHT_TYPE_11

#define ENABLE 5

#define DIRA 3

#define DIRB 4

 

int i;

 

static const int DHT_SENSOR_PIN = 2;

DHT_nonblocking dht_sensor( DHT_SENSOR_PIN, DHT_SENSOR_TYPE );

 

// room temperature in Celsius

const float baselineTemp = 24.0;

 

int tempPin = 0;

 

//                BS  E  D4 D5  D6 D7

LiquidCrystal lcd(789101112);

 

void setup() {

  lcd.begin(162);

 

  //---set pin direction

  pinMode(ENABLE,OUTPUT);

  pinMode(DIRA,OUTPUT);

  pinMode(DIRB,OUTPUT);

 

}

 

 /* Poll for a measurement, keeping the state machine alive.  Returns

 true if a measurement is available */

static bool measure_environment( float *temperaturefloat *humidity )

{

  static unsigned long measurement_timestamp = millis( );

 

  /* Measure once every three seconds. */

  if( millis( ) - measurement_timestamp > 3000ul )

  {

    if( dht_sensor.measure( temperature, humidity ) == true )

    {

      measurement_timestamp = millis( );

      return( true );

    }

  }

 

  return( false );

}

 

void loop() {

  float temperature;

  float humidity;

 

  /* Measure temperature and humidity.  If the functions returns

     true, then a measurement is available. */

  if( measure_environment( &temperature, &humidity ) == true )

  {

    lcd.print( "T = " );

    lcd.print( temperature, 1 );

    lcd.print( " deg. C " );

    lcd.setCursor(01);

    lcd.print( "H = " );

    lcd.print( humidity, 1 );

    lcd.print( " % " );

    

  } // if the temperature exceeds the set temperature

  if (temperature >= baselineTemp) {

    tone(62000500);

    delay(500);

    tone(65000500);

    delay(500);

    tone(67000500);

    delay(500);

    tone(69000500);

    delay(1000);

    tone(67000500);

    delay(500);

    tone(65000500);

    delay(500);

    tone(62000500);

    delay(500);

    digitalWrite(ENABLE,HIGH);// Encender motor-ventilador si Tª>Temperatura base

    digitalWrite(DIRA,HIGH);//one way

    digitalWrite(DIRB,LOW);    

    delay(3000);  

 

  }

  // if the temperature not exceeds the set temperature

  if (temperature < baselineTemp ) {

    digitalWrite(ENABLE, LOW);// Apagar motor-ventilador

   

  }

 

}

 


 

Datos


Alumno: Aitor Ondarra Vega

Asignatura: Innovación Docente de la Especialidad de Tecnología.

Master: Máster Universitario en Profesor de Educación Secundaria Obligatoria y Bachillerato, Formación Profesional y Enseñanza de Idiomas. 

Centro: Universidad de Salamanca.

Curso: 2022/2023.