Blog para los futuros profesores del Máster de Secundaria en la especialidad de Tecnología en Salamanca
martes, 16 de febrero de 2021
Sistema de Frenado
SISTEMA DE FRENADO
DESCRIPCIÓN
El proyecto consiste en la programación de un prototipo de sistema de frenado para vehículos utilizando Arduino UNO y otros componentes descritos más adelante.
El prototipo se basa en un servo que adoptará diferentes posiciones definidas en el código dependiendo de la distancia a la que esté el obstáculo, este dato lo proporcionará un sensor de ultrasonidos. Además se han incorporado estímulos lumínicos (LEDs de colores que brillarán en función de la distancia siguiendo el código de color estandarizado) y auditivos (mediante un zumbador que sonará con mayor frecuencia cuando la distancia al obstáculo sea crítica).
CONTEXTO
4º de ESO tanto en la rama de académicas como de aplicadas.
- Académicas:
- Bloque 1: Electrónica Aplicada.
- Bloque 2: Control y Robótica.
- Aplicadas:
- Bloque 3: Electrónica.
- Bloque 4: Control y Robótica.
ESQUEMA
COMPONENTES
- Arduino UNO
- Protoboard
- Sensor de Ultrasonidos
- Servo
- Buzzer Pasivo
- 3 x LEDs
- LED verde
- LED amarillo
- LED rojo
- 3 x Resistencias 220 Ω
- Cables
IMÁGENES
DESCARGAS
CREADOR/A
Ester Martín Rodríguez
Asignatura: Innovación Docente en la Especialidad de Tecnología
Máster Universitario en Profesor de Educación Secundaria Obligatoria, Bachillerato, Formación Profesional y Enseñanza de Idiomas (Universidad de Salamanca)
SIMULADOR DE TENIS CON ARDUINO
DATOS
El siguiente proyecto se puede realizar para alumnos de 4º de E.S.O. de la asignatura de Tecnología tanto en Académicas como en Aplicadas.
Para el caso de académicas está relacionado con:
Bloque 1. Electrónica aplicada.
En el caso de Aplicadas está relacionado con:
Bloque 1. Tecnologías de la Información y de la Comunicación.
Bloque 3. Electrónica.
FUNCIONAMIENTO
El objetivo del sistema es recrear, de manera intuitiva, el intercambio de golpes en un partido de tenis. La trayectoria de la pelota se recrea a través de la hilera de LED colocada en la protoboard. De esta manera, el LED iluminado simula la posición parcial de la pelota dentro del campo, siguiendo una trayectoria lineal de un extremo del campo al otro.
En cada extremo del campo hay un LED amarillo que se ilumina como advertencia para devolver la pelota al otro jugador. Un pulsador colocado a cada lado del campo acciona el comando para “devolver” la pelota al otro lado del campo.
En caso de que alguno de los dos jugadores no accione el pulsador en el momento indicado se encenderá la luz roja de su lado del campo indicando el fallo. Además, el fallo se comunicará con una señal acústica emitida por un zumbador pasivo.
ESQUEMA DEL CIRCUITO
A continuación se muestra el esquema del circuito realizado en Tinkercad*.
* En Tinkercad se han utilizado dos placas para la mejor comprensión del esquema.
MATERIALES UTILIZADOS
Arduino uno
Protoboard
LED verde (x11)
LED amarillo (x2)
LED rojo (x2)
Resistencia 220Ω (x15)
Resistencia 10KΩ (x2)
Pulsadores (x2)
Zumbador pasivo
Cables para circuito
Cable puerto USB
CÓDIGO FUENTE
Estación Meteorológica
Componentes
Sensor Temperatura y Humedad
Sensor IR
Mando IR
Pantalla LCD
Conectores
Arduino UNO 3R
Esquema eléctrico
Al pulsar el botón Power del mando, se activa el sensor de Temperatura, apareciendo por pantalla los datos de Temperatura y Humedad del ambiente.
Cuando pulsamos cualquier otro botón se desactiva el sensor de Temperatura y Humedad apareciendo en pantalla "Apagado".
https://youtu.be/itu1dZ45MGc
#include <DHT.h>
#include <LiquidCrystal.h>
#include <IRremote.h>
int dhtPin=4;
int receiver = 5;
LiquidCrystal lcd (7,8,9,10,11,12);
DHT dht (dhtPin, DHT11);
IRrecv irrecv(receiver); // create instance of 'irrecv'
decode_results results;
void setup() {
lcd.begin(16,2);
Serial.begin(9600);
dht.begin ();
delay(500);
Serial.begin(9600);
Serial.println("IR Receiver Button Decode");
irrecv.enableIRIn();
}
void loop() {
if (irrecv.decode(&results)){
Serial.println(results.value, HEX);
if (results.value==0xFFA25D){
float humidity= dht.readHumidity();
float temperature= dht.readTemperature();
float temperatureF=dht.readTemperature (true);
if (isnan (humidity) || isnan (temperature)|| isnan (temperatureF)){
Serial.println ("Error en la lectura del sensor");
lcd.setCursor (0,0);
lcd.print ("Error en sensor");
return;
}
float hic =dht.computeHeatIndex (temperature, humidity, false);
float hif= dht.computeHeatIndex (temperatureF, humidity);
lcd.setCursor (0,0);
lcd.print ("humedad ");
lcd.setCursor (8,0);
lcd.print (humidity);
lcd.setCursor (14,0);
lcd.print ("%");
lcd.setCursor (0,1);
lcd.print("temperat");
lcd.setCursor (9,1);
lcd.print (temperature);
lcd.setCursor (15,1);
lcd.print ("C");
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print("%Temperature: ");
Serial.print(temperature);
Serial.print("C");
Serial.print (temperatureF);
Serial.print("F Heat Index: ");
Serial.print (hic);
Serial.print ("C");
Serial.print (hif);
Serial.println ("F");
irrecv.resume();
}
else {
lcd.setCursor (0,0);
lcd.print("Apagado");
lcd.setCursor (8,0);
lcd.print (" ");
lcd.setCursor (0,1);
lcd.print (" ");
irrecv.resume();
}
}
delay (100);
}
CONTROL CLIMÁTICO DE UN INVERNADERO.
El control climático en invernadero se realiza mediante ventilación pasiva y ventilación forzada, así como mediante el uso de agua para bajar la temperatura por nevulización (fog system).
En este proyecto se obtiene información en tiempo real sobre temperatura y humedad ambiental (sonda 1), así como sobre la humedad del suelo (sonda 2), esta última conectada a una entrada analógica para calibrar la humedad del suelo entre 1 (suelo encharcado) y 1024 (suelo completamente seco).
Con estos datos programamos el motor servo, que activaría la ventilación pasiva mediante la apertura de ventanas por encima de 24ºC así como un motor de corriente continua para la ventilación forzada cuando no es suficiente con la apertura de ventanas, en este caso se activaría con temperaturas superiores a 27ºC. Para el movimiento del ventilador (motor) se ha colocado un transistor para dotar de la potencia necesaria al mismo sin necesidad de usar alimentación complementaria (un transistor puede actuar como amplificador de corriente y como interruptor). http://www.practicasconarduino.com/manualrapido/transistores.html
El objetivo es mantener la temperatura siempre entre los 18 y 24ºC (temperatura óptima de crecimiento de la mayoría de cultivos).
Por otra parte hemos colocado un led que nos avisa cuando la humedad del terreno es inferior a la necesaria para el óptimo crecimiento de los cultivos. De esta forma sabemos cuando hay que regar. En un futuro el objetivo es controlar el selenoide de una electroválvula (motor que activa el paso de agua por la tubería para el riego), a partir del propio arduino mediante un relé, de esta manera completaríamos la automatización del sistema.
Sensor de aparcamiento con luz y sonido
Autoría y datos
Descripción del proyecto
Contexto
Componentes
Esquema
Funcionamiento
Código fuente
Contenedor Inteligente
Contenedor inteligente con Arduino y ThingSpeak
DATOS
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
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
- 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 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.
- Arduino IDE y con placa ESP32 instalada: Seguir los pasos descritos AQUI.
- 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
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.
DISEÑO DEL CIRCUITO ELECTRÓNICO (TINKERCAD y Diagrams.net)
DIAGRAMA DE FLUJO DEL PROGRAMA
CÓDIGO ARDUINO, BIBLIOTECAS Y REPOSITORIO GITHUB
Bibliotecas Necesarias:
- ESP32Servo
- ThingSpeak Arduino ESP32
- Wire
- Wifi
VIDEO DEMOSTRATIVO
lunes, 15 de febrero de 2021
Autor: Fernando Martín Pérez
Se ha ideado una herramienta que controla el número de vehículos que circula por una calle, de tal manera que se automatiza la cuenta de vehículos que circulan para poder realizar estudios y estadísticas.
Funcionamiento
Se incrustará en el centro del carril de la calzada una resistencia LDR (debidamente protegida para que en caso de que un vehículo la atraviese con las ruedas, no sea dañada). Cuando no circula ningún vehículo, la resistencia al paso de la corriente a través de ella es baja porque le llega la iluminación de la calle, por lo que Arduino considerará que está recibiendo una señal "HIGH".
En el momento que un coche circula por encima, le llegará muy poca iluminación, por lo que la resistencia será muy elevada, y arduino considerará que está recibiendo una señal "LOW".
Cuando recibe una señal "LOW", Arduino contará al coche y sumará el paso de un nuevo coche.
Para evitar desajustes, se han añadido dos pulsadores, uno restará el paso de coches, y otro lo sumará; es decir, si un coche atraviesa el sensor y por cualquier motivo Arduino no lo ha detectado, se puede añadir manualmente que ha pasado un coche. A su vez, si pasa una persona por encima (por ejemplo si atraviesa mal la calle y justo por el lector), con el seggundo pulsador se puede restar un paso por el lector.
A cada paso de vehículo, se encenderá un LED, que nos indicará que el sistema ha realizado una lectura correcta, y si se resta una lectura, se encenderá otro LED, para comprobar que se ha realziado correctamente esta sustracción.
Asimismo, para evitar exceso de cableado que dificulte la operación del sistema y visualización de datos, se opta por aprovechar las características de las placas protoboard y no emplear cables con banana, sino cables colocacdos a medida que permitan utilizar únicamente bananas para conectar la placa Arduino a la protoboard.
Materiales
- 1 o 2 placas protoboard
- 1 placa Arduino
- 1 pantalla LCD Arduino
- 1 potenciómetro 10 kohmios
- 2 LED
- 1 resistencia LDR
- 2 pulsadores
- 3 resistencias de 10 kohmios
- 1 resistencia de 1 kohmio
- cables necesarios para realizar conexiones
El esquema de conexiones es el siguiente:
Código
El código, explicado mediante comentarios, es el siguiente:
LiquidCrystal lcd(7,6,5,4,3,2); //Define los pines a utilizar de la pantalla LCD //Se declaran las variables necesarias int LED1=0; int LED2=1; int BOTON1=8; int BOTON2=9; int val1; int val2; const int LDR1 = 12; int vehiculos=0; //Setup, se desarrolla solo una vez, al inicio void setup() { //Se especifica si los pines van a ser de salida o entrada pinMode(LED1,OUTPUT); pinMode(BOTON1,INPUT); pinMode(LED2,OUTPUT); pinMode(BOTON2,INPUT); pinMode(LDR1, INPUT); //Se inicializa el uso de pantalla LCD lcd.begin(16,2); //Loop, se desarrolla en bucle constantemente } void loop() { //Muestra en la pantalla LCD cuántos vehículos han pasado lcd.setCursor(0,0); lcd.print("Vehículos:"); lcd.setCursor(0,1); lcd.print(vehiculos); //Variables para controlar el estado de los pulsadores val1=digitalRead(BOTON1); val2=digitalRead(BOTON2); //Variable que nos dice si la LDR está recibiendo luz (HIGH), u oscuridad (LOW) int value1 = digitalRead(LDR1); //Bucle if para contar un vehículo si se atraviesa la LDR if (value1 == LOW) { vehiculos=vehiculos+1; digitalWrite(LED1,HIGH); delay(1000); digitalWrite(LED1,LOW); } //Bucle if para contar un vehículo si se pulsa el pulsador de sumar un vehículo y encender el LED de vehículo contado if(val1==HIGH) { vehiculos=vehiculos+1; digitalWrite(LED1,HIGH); delay(1000); digitalWrite(LED1,LOW); } else { digitalWrite(LED1,LOW); } //Bucle if para restar un vehículo si se pulsa el pulsador de restar y encender el LED de vehículo restado if(val2==HIGH) { vehiculos=vehiculos-1; digitalWrite(LED2,HIGH); delay(1000); digitalWrite(LED2,LOW); } else { digitalWrite(LED1,LOW); } } |
DISPENSADOR DE GOLOSINAS AUTOMÁTICO
Máster Universitario en Profesor de Educación Secundaria Obligatoria, Bachillerato, Formación Profesional y Enseñanza de Idiomas (MUPES)
Universidad de Salamanca
Asignatura: Innovación Docente en la Especialidad de Tecnología
Curso: 2020/2021
Abel Olmedo Rodríguez
Este proyecto puede resultar adecuado para cualquier curso de Secundaria en la asignatura de Tecnología, ya sea en 1º de ESO, en 3º de ESO como en 4º de ESO, tando en la modalidad de Académicas como de Aplicadas.
También puede ser adecuado para la asignatura de Tecnología industrial I y II, de 1º y 2º de Bachillerato respectivamente.
En particular se propone para el 4º curso de ESO de la asignatura de Tecnología modalidad Académicas para el bloque de Control y robótica.
El funcionamiento se basa en que mediante un pulsador, se dispensan pequeñas gominolas de manera automática. El pulsador hace girar a un servomotor el cual está solidarizado con un pequeño cilindro con una oquedad en un lateral.Al alinearse esta oquedad con una perforación en el envase de las golosinas, caen por gravedad al interior del cilindro una cantidad controlada de las mismas.Posteriormente, el cilindro gira en sentido contrario para dejarlas caer por una rampa que desemboca en un pequeño recipiente para que las golosinas puedan ser tomadas.En estado normal podemos apreciar un led RGB que luce con una tonalidad azul y una pantalla LCD que nos muestra la frase "¿QUIERE GOLOSINAS? - SON GRATIS".Cuando se acciona el pulsador y el cilindro comienza a girar, el led RGB, que en estado normal luce azul, se torna rojo advirtiendo de que el servomotor está trabajando acompañado a su vez de la pantalla LCD mencionada en la cual en esta ocasión se puede leer el mensaje "EN PROCESO... ESPERE".El funcionamiento termina cuando el servomotor acaba de realizar todos los movimientos programados y habiendo depositado ya las golosinas en el recipiente final. En este momento en la pantalla LCD se puede leer la frase "AQUÍ TIENE SUS RICAS GOLOSINAS" acompañado de un parpadeo del led RGB, esta vez con tonalidad verde, apoyado a su vez por varios sonidos de un zumbador, advirtiendo de que todo el proceso ha terminado y puede recoger las golosinas.El proyecto cuenta también con otra posibilidad manual, mediante el accionamiento de un joystick en el eje y. Los movimientos serían los equivalentes a la modalidad automática pero abarcando directamente desde 0 a 90 y 180º , es decir solo en dos movimientos, desde reposo a 90º, giraría a 0º para recoger golosinas y después moviendo el joystick hacia el lado contrario el servomotor giraría hasta los 180 º, dejando caer las golosinas a la rampa inferior.En este caso no seactivaría ningún otro elemento, pueso que está pensado explusivamente para un accionamiento manunal llegado el caso de que el mecanismo se atascase.
- Placa protoboard
- Placa ARDUINO
- Potenciómetro
- Joystick
- Pulsador
- Zumbador
- Servomotor
- Pantalla LCD
- Led RGB
- Resistencias 220
- Cables
- Tableros DM
- Tornillería 3x25mm para madera
- Silicona termofusible
- Varilla roscada 4mm
- Arandelas metálicas 4mm
- Tuercas hexagonales 4mm
- Poliestireno extruido
- Bote de galletas saladas
- Lata de atún
Servo Abel;
#include "pitches.h"
int melody[] = {
NOTE_C5, NOTE_D5,
NOTE_E5, NOTE_F5, NOTE_G5, NOTE_A5, NOTE_B5, NOTE_C6};
int duration = 500;
// 500 miliseconds
const int SW_pin = 4; // digital pin connected to switch output
const int X_pin = A0; // analog pin connected to X output
const int Y = 0; // analog pin connected to Y output
#define BLUE 3
#define GREEN 5
#define RED 6
void setup() {
pinMode(SW_pin,
INPUT);
digitalWrite(SW_pin,
HIGH);
Serial.begin(9600);
Abel.attach(2);
delay(10);
lcd.begin(16, 2);
lcd.print("QUIERE GOLOSINAS");
pinMode(RED, OUTPUT);
pinMode(GREEN, OUTPUT);
pinMode(BLUE, OUTPUT);
digitalWrite(RED, HIGH);
digitalWrite(GREEN, HIGH);
digitalWrite(BLUE, HIGH);
}
int greenValue;
int blueValue;
void loop() {
if (digitalRead(SW_pin) == HIGH)
{
Serial.print("Switch: HIGH-->");
Serial.print(digitalRead(SW_pin));
}
if (digitalRead(SW_pin) == LOW)
{
lcd.begin(10, 2);
lcd.print(" EN PROCESO...");
lcd.setCursor(0, 1);
lcd.print(" ESPERE ");
digitalWrite(RED, HIGH);
digitalWrite(GREEN, LOW);
digitalWrite(BLUE,
LOW);
delay(1000);
Abel.write(90);
delay(2000);
Abel.write(45);
delay(2000);
Abel.write(0);
delay(2000);
Abel.write(45);
delay(2000);
Abel.write(180);
delay(2000);
Abel.write(90);
delay(2000);
lcd.begin(3, 2);
lcd.print(" AQUI TIENE SUS");
lcd.setCursor(0, 1);
lcd.print("RICAS GOLOSINAS");
for (int thisNote = 0; thisNote < 8; thisNote++)
tone(13, melody[thisNote], duration);
digitalWrite(RED, LOW);
digitalWrite(GREEN, HIGH);
digitalWrite(BLUE,
LOW);
delay(1000);
digitalWrite(RED,
LOW);
digitalWrite(GREEN, LOW);
digitalWrite(BLUE,
LOW);
delay(1000);
for (int thisNote = 0; thisNote < 8; thisNote++)
tone(13, melody[thisNote], duration);
digitalWrite(RED, LOW);
digitalWrite(GREEN, HIGH);
digitalWrite(BLUE, LOW);
delay(1000);
digitalWrite(RED, LOW);
digitalWrite(GREEN, LOW);
digitalWrite(BLUE, LOW);
delay(1000);
for (int thisNote = 0; thisNote < 8; thisNote++)
tone(13, melody[thisNote], duration);
digitalWrite(RED, LOW);
digitalWrite(GREEN, HIGH);
digitalWrite(BLUE,
LOW);
delay(1000);
digitalWrite(RED,
LOW);
digitalWrite(GREEN, LOW);
digitalWrite(BLUE,
LOW);
delay(1000);
for (int thisNote = 0; thisNote < 8; thisNote++)
tone(13, melody[thisNote], duration);
digitalWrite(RED, LOW);
digitalWrite(GREEN, HIGH);
digitalWrite(BLUE,
LOW);
delay(1000);
digitalWrite(RED,
LOW);
digitalWrite(GREEN, LOW);
digitalWrite(BLUE,
LOW);
delay(1000);
for (int thisNote = 0; thisNote < 8; thisNote++)
tone(13, melody[thisNote], duration);
digitalWrite(RED, LOW);
digitalWrite(GREEN, HIGH);
digitalWrite(BLUE,
LOW);
delay(1000);
digitalWrite(RED, LOW);
digitalWrite(GREEN, LOW);
digitalWrite(BLUE,
LOW);
delay(1000);
Serial.print("Switch:
LOW-->");
Serial.print(digitalRead(SW_pin));
lcd.begin(3, 2);
lcd.print("QUIERE GOLOSINAS");
}
int position_Y= analogRead(Y);
int angulo = map(position_Y, 0, 1023, 0, 180);
Abel.write(angulo);
delay(10);
Serial.print("Switch:
");
Serial.print(digitalRead(SW_pin));
Serial.print("\n");
Serial.print("X-axis: ");
Serial.print(analogRead(X_pin));
Serial.print("\n");
Serial.print("Y-axis: ");
Serial.println(analogRead(Y));
Serial.print("\n\n");
delay(100);
lcd.setCursor(3, 1);
lcd.print("SON GRATIS");
digitalWrite(RED,
LOW);
digitalWrite(GREEN, LOW);
digitalWrite(BLUE, HIGH);
}