domingo, 16 de febrero de 2020

Proyecto de coeficiente de efectividad para escalada con galga extensiométrica





DATOS

Asignatura: Innovación Docente en la Especialidad de Tecnología.
Curso: 2019/2020

COMPONENTES DEL GRUPO
  • Francisco Borrego Bermejo
  • Rubén Hernández Martín
  • Iván Pérez Díez

CONTEXTO

El siguiente proyecto se puede realizar para alumnos de 4º de la E.S.O. de la asignatura de Tecnología tanto Académicas como Aplicadas.
Para el caso de académicas esta relacionado con los bloques:
Bloque 1. Electrónica aplicada.
Bloque 2. Control y robótica.
Bloque 4. Tecnologías del diseño asistido e impresión 3D.
Para el caso de aplicadas esta relacionado con los bloques:
Bloque 1. Tecnologías de la Información y la Comunicación.
Bloque 3. Electrónica.
Bloque 4. Control y robótica.


FUNCIONAMIENTO

El objetivo del sistema es medir la fuerza que se realiza sobre una presa de escalada en un rocódromo cuando el escalador se encuentra realizando el paso sobre ella. Después de medir la fuerza sacaremos un coeficiente que hemos llamado de efectividad que será un indicador de lo bien que se utiliza la técnica en este deporte.
Entendemos que cuanto menos fuerza se realice sobre la presa mejor se utiliza la técnica de escalada. Como el peso juega un papel determinante en la fuerza sobre la presa; lo que hacemos con el coeficiente es similar a lo que se hace en el ciclismo respecto a los puertos de montaña que se utilizan los W/Peso.
En nuestro caso será:

C.efectividad = Fuerza / Peso

Para medir la fuerza sobre la presa se utilizará una galga extensiométrica con su adaptador de señal HX711 que proporciona una señal entendible para Arduino y  su librería correspondiente. Esta fuerza no la mediremos siempre, ya que solo queremos la ejercida por las manos del escalador por lo que la presa tendrá instalado un sensor capacitivo para distinguir entre mano y pie.
Para conocer el peso del deportista tendremos unos interruptores en las entradas digitales de Arduino para cargar el peso dentro de la franja correspondiente.
Una vez que en Arduino tenemos la fuerza y el peso, simplemente haremos la división para sacar el coeficiente de efectividad.
Todos estos datos se sacan por el puerto serie para verlos y además nos permite exportarlos a Excel para hacer las distintas gráficas.
Cuanto más bajo es el coeficiente mejor se utiliza la técnica de escalada para esa vía que hemos diseñado.
Nota aclaratoria: Decir que la fuerza que una persona ejerce sobre una presa es bastante compleja en su conjunto y depende de muchos factores al igual que la utilización de la técnica. Este pequeño proyecto es una simplificación y aproximación de medir esa fuerza con una galga extensiometrica en una sola dirección y por lo tanto quedarían muchos cabos sueltos para depurar el coeficiente del que hablamos.





ESQUEMA DEL CIRCUITO





MATERIALES UTILIZADOS 
  • Arduino uno
  • Protoboard 
  • 1 LED verde
  •  3 pulsadores
  • HX711 (convertidor galga extensiomética)
  • Galga extensiométrica 20 Kg.
  • 1 resistencia 220Ω
  • 4 resistencia 10kΩ 
  • Cables para el montaje de los circuitos
  • Papel de plata (sensor capacitivo)
  • Sargento
  • Ordenador
Materiales utilizados para la maqueta:
  • Presa diseñada con Tinkercad e impresa en 3D
  • Muñeco
  • Cartón
  • Cinta de carrocero
  • Mosquetones
  • Pegamento
  • Cinta adhesiva
  • Pintura blanca
  • Cartulina
  • Cuerda
  • Presas de cartón
  • Tornillos de sujeción

IMÁGENES DE LA COSNTRUCCIÓN DEL PROYECTO






CODIGO FUENTE

// PROGRAMA PARA LA ASIGNATURA DE INOVACIÓN DOCENTE (MUPES USAL.)
//_____________FRANCISCO BORREGO BERMEJO, IVÁN PÉREZ DÍEZ Y RUBÉN HERNÁNDEZ MARTÍN
//_____________!!!!! %%%%COEFICIENTE DE EFECTIVIDAD PARA EL ENTRENAMIENTO DE LA
ESCALADA%%%%!!!!!!___________________
//INICIO DEL PROGRAMA. Librerias necesarias para el funcionamiento de la galga y del sensor
capacitivo.
#include <Q2HX711.h> // Libreria para el sensor capacitivo.
#include <HX711_ADC.h> // Libreria para el convertidor HX711 (bascula con galga
extensiometrica.)
#include <HX711.h> // Libreria para el convertidor HX711 (bascula con galga
extensiometrica.)
#include "HX711.h" // Libreria para el convertidor HX711 (bascula con galga
extensiometrica.)
#include <CapacitiveSensor.h> // Libreria para el sensor capacitivo (bascula con galga
extensiometrica.)
//VARIABLES PARA SENSOR CAPACITIVO, RANGO DE PESO Y BASCULA CON GALGA EXTENSIOMETRICA.
byte pinData = 3; // Pin de datos y de reloj para el sensor capacitivo.
byte pinClk = 2;
CapacitiveSensor capSensor = CapacitiveSensor(4, 5);
int threshold =400; // Limite de variable ajustada a la mano humana.
(distinguimos entre mano y pie)



const int ledPin = 12; // En el pin 12 conectamos el led que se iluminará
cuando toquemos con la mano LA PRESA.
const int cincuenta =11 ; // En el pin 11 Interruptor para meter 50kg.
const int setenta = 10; // En el pin 10 Interruptor para meter 70kg
const int noventa = 9; // En el pin 9 Interruptor para meter 90kg
HX711 bascula;
// Variable para calibrar el peso y el sensor en formato float.
float factor_calibracion = 70000.0; //Este valor es para calibrar nuestra galga de 20 kg.
float pesoPersona=70; // variable que pone 70 kg a la persona.
float resultado = 0; // variable declarada para el resultado
int manoPresa; // variable necesaria para la detección de la mano.
int leer50; // variable para leer interruptor de 50.
int leer70; // variable para Leer interruptor de 70.
int leer90; // variable para leer interruptor de 90.
// FIRST SCAN DEL PROGRAMA ( SOLO SE EJECUTA UNA VEZ AL INICIO )
void setup() {
Serial.begin(9600); // Habilitamos el puerto serie.
// Instrucciones para calibrar la bascula desde el puerto serie.
Serial.println("HX711 programa de calibracion");
Serial.println("Quita cualquier peso de la bascula");
Serial.println("Una vez empiece a mostrar informacion de medidas, coloca un peso conocido



encima de la bascula");
Serial.println("Presiona + para incrementar el factor de calibracion");
Serial.println("Presiona - para disminuir el factor de calibracion");
bascula.begin(pinData, pinClk); // Iniciar sensor
bascula.set_scale(); // Aplicar la calibración
bascula.tare(); // Iniciar la tara
// No tiene que haber nada sobre el peso
// Obtener una lectura de referencia
long zero_factor = bascula.read_average();
// Mostrar la primera desviación
Serial.print("Zero factor: ");
Serial.println(zero_factor);
// Led pin lo ponemos como salida para led del capacitivo
pinMode(ledPin, OUTPUT);
pinMode(cincuenta, INPUT); //Declaramos cincuenta como entrada.
pinMode(setenta, INPUT); //Declaramos setenta como entrada.
pinMode(noventa, INPUT); //Declaramos noventa como entrada.
}
// Fin del SETUP
// COMIENZO DEL BUCLE QUE SE EJECUTARA SIEMPRE.

void loop() {


long sensorValue = capSensor.capacitiveSensor(30);// Valor aportado por el sensor
capacitivo
Serial.println(sensorValue); // imprimir el valor del sensor
Serial.println("pesopersona"); // imprimir el valor de los kg de la persona.
if (sensorValue > threshold) { // Condicion de la variable para encender el led cuando
tocamos el capacitivo.
digitalWrite(ledPin, HIGH);
}
// Si el valor es menor apagamos el led.
else {
digitalWrite(ledPin, LOW);
}
delay(10); // Retardo de 10 mS.
if (sensorValue > threshold); // Si el valor del capacitivo es mayor que el estipulado

(se esta tocando con la mano).
{
// Aplicar 00
bascula.set_scale(factor_calibracion);
// Mostrar la información para ajustar el factor de calibración
Serial.print("Leyendo: ");
Serial.print(bascula.get_units(), 1);

Serial.print(" kgs");


Serial.print(" factor_calibracion: ");
Serial.print(factor_calibracion);
Serial.println();
// Obtener información desde el monitor serie
if (Serial.available())
{
char temp = Serial.read();
if (temp == '+')
factor_calibracion += 10;
else if (temp == '-')
factor_calibracion -= 10;
else
delay (10); // Retardo de 10 mS
}
}
leer50 = digitalRead(cincuenta); // Leemos las entradas digitales para ver que
interruptor se pulsa.
if (leer50 == HIGH) { // El valor de arranque es de 70 Kg en el set up si se

pulsan los interruptores cambiará.
pesoPersona = 50;
}
leer70 = digitalRead(setenta);
if (leer70 == HIGH) {



pesoPersona = 70;
}
leer90 = digitalRead(noventa);
if (leer90 == HIGH) {
pesoPersona = 90;
}
manoPresa = digitalRead(ledPin); // Leemos el led del capacitivo; si esta en on haremos
la cuenta
// para sacar el coeficiente de efectividad que será
fuerza/ peso.
if (manoPresa == HIGH) {
resultado = bascula.get_units()/pesoPersona; // Division fuerza en galga/ Peso se
carga en var resultado.
Serial.println("Coeficiente de efectividad");
Serial.println(resultado);
}
// Si no se cumple la condicion de
tocar la presa resultado = 0.
else {
resultado = 0;
}
delay (500); // Retardo para ver comodamente el
monitor Serie.
}


 

jueves, 13 de febrero de 2020

Parking Arduino

DESCRIPCIÓN 


El proyecto consiste en un parking con capacidad para detectar de manera autónoma si existen plazas libres por medio de unos sensores de ultrasonido y control de acceso mediante tarjetas RFID. Cuenta además con una pantalla LCD a través de la que se muestra la información al usuario, un servo que acciona la barrera de entrada y leds que indican si las plazas están libres u ocupadas.





AUTORES

  • Carlos David Arias Fernández
  • Rubén Llamas Fidalgo

Universidad de Salamanca.

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

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




CONTEXTO


Se plantea como un proyecto a desarrollar a lo largo de todo un trimestre por los alumnos de 4º de ESO (Educación Secundaria Obligatoria) de la asignatura de Tecnología (Académicas/Aplicadas).

Los bloques de contenido a trabajar en dicho trimestre y que se están relacionados con este proyecto son el de electrónica y el de control y robótica.

Mediante el desarrollo de este proyecto se busca una aplicación práctica para motivar al alumno y fijar el aprendizaje, relacionando los contenidos vistos en el aula con la resolución de un problema de la vida real.

Las competencias que se trabajan en este proyecto son la digital, aprender a aprender y las competencias básicas en ciencia y tecnología.



FUNCIONAMIENTO


El sistema cuenta con 3 tipos de entrada: los sensores de ultrasonido, que detectan si hay algún coche aparcado, el lector RFID que escanea las tarjetas de los usuarios y un switch que resetea los datos de las tarjetas almacenadas.

Por otro lado, cuenta con 3 tipos de salidas: El servo que acciona la barrera, la pantalla LCD que proporciona información al usuario y los leds tanto del sistema de lectura de tarjeta como de las plazas de aparcamiento.

Cuando un usuario quiere acceder al parking debe pasar su tarjeta por el lector RFID, si se trata de un usuario autorizado, se levanta la barrera permitiendo el paso del vehículo que aparcará en una de las plazas libres (led verde). Si se intenta acceder una vez que estén ocupadas todas las plazas el sistema denegará el acceso y mostrará en la pantallas el mensaje “no hay plazas libres”, del mismo modo que si un usuario no autorizado escanea su tarjeta en cuyo caso el mensaje mostrado será el de “usuario no autorizado”.

Se ha colocado también un switch que permite el reseteo de los usuarios guardados. Una vez activado se deberá escanear en primer término la tarjeta maestra y después todas las que se deseen validar. Cuando se hayan registrado todos los usuarios que se desee se volverá a pasar la tarjeta maestra y el sistema entrará en el modo de funcionamiento normal.



ESQUEMA DEL CIRCUITO (FRITZING)





MATERIALES


    • Arduino Mega (x1)
    • Protoboard (x2)
    • Pantalla LCD (x1)
    • Sensor ultrasonido (x3)
    • Lector RFID (x1)
    • Servo (x1)
    • Led rojo (x3)
    • Led verde (x3)
    • Led azul (x1)
    • Switch (x1)
    • Resistencia 220 Ohm (x2)
    • Cable

      CÓDIGO FUENTE


      Descarga aquí el código comentado.



      IMÁGENES

       

      domingo, 2 de febrero de 2020

      Proyecto Arduino: Tecnología GOL

       

      Imagen proyecto terminado

      DATOS


      Asignatura: Innovación Docente en la Especialidad de Tecnología.
      Curso: 2019/2020

      COMPONENTES DEL GRUPO

      • Carlos Hernández Calvo
      • Daniel Pescador Hernández

      CONTEXTO


      El siguiente proyecto se puede realizar para alumnos de 4º de la E.S.O. de la asignatura de Tecnología tanto Académicas como Aplicadas.
      1. Bloque 1: Tecnologías de la Información y la Comunicación.
      2. Bloque 3: Electrónica.
      3. Bloque 4: Control y Robótica.

      Este proyecto permite implementar un problema de la vida real, como es el caso si el balón ha entrado o no en una portería, con conceptos vistos en la asignatura de Tecnología.

      FUNCIONAMIENTO


      La tecnología de Gol tiene el siguiente funcionamiento:
      En primer lugar, disponemos de 5 sensores de Infrarrojos situados en el larguero de la portería (realizada con una impresora 3D), de manera que puedan detectar si el balón atraviesa la misma. La elección de 5 sensores ha sido debido a la longitud que debían abarcar.

      En segundo lugar, vamos a disponer de una pantalla LCD donde se irá reflejando el marcador del partido, además del mensaje de GOL cuando haya entrado la pelota, o de reinicio del mismo cuando sea necesario (mediante un botón pulsador).

      Por último, disponemos de servo motor para simular el banderín del asistente de árbitro con un led verde que se encenderá cada vez que haya un gol.

      Así pues, cada vez que el balón pase la portería se mostrará el mensaje de GOL por la pantalla LCD, se levantará el banderín y se encenderá la luz LED durante 2 segundos, después de esto la pantalla LCD mostrará el marcador existente. Si se desea reinicializar el partido, se dispone de un botón “switch” para ello.

      ESQUEMA DEL CIRCUITO CON FRITZING

       

      Para una mejor visualización se especifican 2 de los 5 sensores de Infrarrojos, los cuales irán situados en las entradas analógicas de la A0 a la A4.


       Protoboard

      Esquema electrónico

      MATERIALES UTILIZADOS 

      • Arduino MEGA (también podría usarse Arduino UNO)
      • 2 protoboard 
      • 1 LED verde
      • 1 pulsador
      • 5 sensores de Infrarrojos 
      • 1 servomotor 
      • 1 condensador de 100 µF
      • 1 pantalla LCD 
      • 1 potenciómetro 10kΩ
      • 1 resistencia 220Ω
      • 1 resistencia 10kΩ 
      • Cables para el montaje de los circuitos
      Materiales utilizados para la maqueta:
      • Portería diseñada con Tinkercad e impresa en 3D
      • Caja de cartón
      • Césped artificial
      • Chinchetas
      • Tapón de corcho
      • Palo de Chupa-Chups
      • Pegamento
      • Cinta adhesiva
      • Pintura blanca
      • Cartulina
       

      CÓDIGO FUENTE

      /*
       * PROYECTO OJO DE HALCÓN GOL:
       * MUPES UNIVERSIDAD DE SALAMANCA - Innovación Docente en la Especialidad de Tecnología
       *
       * El siguiente código implementa los pasos necesarios para la detección de 5 sensores de infrarojos en una porteria realizada en Impresión 3D
       * Donde cada vez que el balon consigue pasar dicha portería, se enciende un LED, se mueve un servo con el banderín del linier y muestra en
       * una pantalla LCD el mensaje de GOL y el Marcador correspondiente.
       *
       * Creado en Enero de 2020, por los integrantes del grupo:
       * - Carlos Hernández Calvo
       * - Daniel Pescador Hernández
       *
       * #################################
       */
      // Se incluyen las librerias del Servo y el LCD
      #include <Servo.h>
      #include <LiquidCrystal.h>

      Servo myServo;  //creamos el objecto del Servo

      //Inicialización de la LCD con cada uno de los PINs
      LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

      const int analogInPin01 = A0;// Pin analogico 1 para la lectura del Fototransistor
      const int analogInPin02 = A1;// Pin analogico 2 para la lectura del Fototransistor
      const int analogInPin03 = A2;// Pin analogico 3 para la lectura del Fototransistor
      const int analogInPin04 = A3;// Pin analogico 4 para la lectura del Fototransistor
      const int analogInPin05 = A4;// Pin analogico 5 para la lectura del Fototransistor

      const int OutPin = 13;// Pin para el led indicador
      const int InPin = 7;  // Pin para el Switch

      //Inicialización del valor de los sensores:
      int sensorValue01 = 0;
      int sensorValue02 = 0;
      int sensorValue03 = 0;
      int sensorValue04 = 0;
      int sensorValue05 = 0;

      int varGol = 0;        // Inicializamos la variable de goles a 0
      String stringMarcador; //Inicializamos el texto del marcador

      //Creación de una variable global para el stado del Switch
      int switchstate = 0;

      void setup() {
        // Inicializamos la comunicacion serial a 9600 bps:
        Serial.begin(9600);
        //"Attach" del servo al pin 9
        myServo.attach(9);
       
        //Declaración de los pines de Entrada y Salida
        pinMode(InPin, INPUT);
        pinMode(OutPin, OUTPUT);
       
        //Configuración del número de caracteres y columnas del LCD.
        lcd.begin(16, 2);
       
        //Impresión del mensaje inicial en el LCD
        lcd.print("MARCADOR: ");
        //Movemos el cursor a la linea 1 segunda columna
        lcd.setCursor(0, 1);
        stringMarcador += varGol;
        stringMarcador += " - 0";
        lcd.print(stringMarcador);
      }

      void loop() {

        // Leemos el valor del Switch
        // digitalRead() comprueba si tiene voltage el pin o no
        switchstate = digitalRead(InPin);
       
        //Leemos los pines de entrada y se lo asignamos a las variables
        sensorValue01 = analogRead(analogInPin01); 
        sensorValue02 = analogRead(analogInPin02);
        sensorValue03 = analogRead(analogInPin03);
        sensorValue04 = analogRead(analogInPin04); 
        sensorValue05 = analogRead(analogInPin05);              

        //Reinicio del Partido al pulsar el botón del Switch
         if (switchstate == HIGH) {
          varGol = 0;
          stringMarcador = "";
          //Limpiamos la pantalla antes de poner el nuevo mensaje
          lcd.clear();
          lcd.setCursor(0, 0);
          //Impresión de Primera Línea
          lcd.print("INICIO PARTIDO");
          //Esperamos 1.5 segundos para volver a inicializar el LCD
          delay(1500);
          lcd.clear();
          lcd.setCursor(0, 0);
          lcd.print("MARCADOR: ");
          //Movemos el cursor a la linea 1 segunda columna
          lcd.setCursor(0, 1);
          stringMarcador += varGol;
          stringMarcador += " - 0";
          lcd.print(stringMarcador);
        }
       
        // Si el valor obtenido es menor a 900 entonces detecta el balon (los sensores IR estás configurados para que cuando no destecta ningún obstáculo de valores superiores a 900 hasta 1023)
        if(sensorValue01 < 900 || sensorValue02 < 900 || sensorValue03 < 900 || sensorValue04 < 900 || sensorValue05 < 900)
        {
          Serial.print("GOOOOOL ");
          varGol = varGol + 1; //Se aumenta la variable gol
          stringMarcador = ""; //Ponemos el texto del marcador vacío
          //Se ilumina el led
          digitalWrite(OutPin, HIGH);
          //Movemos el servo 180° para hacer mover el banderín del linier
          myServo.write(179);
          //Limpiamos el LCD para poner el mensaje de GOL
          lcd.clear();
          lcd.setCursor(0, 0);
          lcd.print("GOOOOOL!!!!!!");
          //Esperamos 2 segundos antes de poner el marcador de nuevo
          delay(2000);
          lcd.clear();
          lcd.setCursor(0, 0);
          //Escribimos el número de goles en el marcador
          lcd.print("MARCADOR: ");
          lcd.setCursor(0, 1);
          stringMarcador += varGol;
          stringMarcador += " - 0";
          lcd.print(stringMarcador);
        }
        else
        {
          //Miestras no detecten nada los sensores el Pin estará apagado y el servo no se mueve
          digitalWrite(OutPin, LOW);
          myServo.write(0);
        }

        //Imprimimos los valores de los sensores para hacer comprobaciones en el puerto serie
        Serial.print("sensor1 = " );                      
        Serial.println(sensorValue01);
        Serial.print(" y sensor2 = " );                      
        Serial.println(sensorValue02);   
        Serial.print(" y sensor3 = " );                      
        Serial.println(sensorValue03);
        Serial.print(" y sensor4 = " );                      
        Serial.println(sensorValue04); 
        Serial.print(" y sensor5 = " );                      
        Serial.println(sensorValue05);    

        delay(100);                    
      }


      GALERÍA DE FOTOGRAFÍAS DEL PROYECTO