jueves, 11 de junio de 2020

Sensor de huella dactilar

Este curso debido a la pandemia no hemos podido desarrollar nuestros proyectos con Arduino. Algunas prácticas con sensores, ya las habíamos realizado en cursos pasados, pero uno de los proyectos que teníamos previstos para este curso, consistía en aprender a utilizar un sensor de huella dactilar o módulo de reconocimiento de huella dactilar. 
La aparición de nuestras huellas dactilares comienza en las primeras semanas de vida dentro del útero materno y es un rasgo que nos define de manera única toda nuestra vida. De ahí que sea una buena manera de identificarnos ya que es un rasgo biométrico propio de cada individuo.


Las características de los rasgos biométricos son las siguientes:
- Universalidad: Todo individuo debe tenerlo.
- Unicidad: Personas distintas tienen rasgos distintos.
- Permanencia: El rasgo debe ser invariable en el tiempo.
- Perennidad: El rasgo debe ser permanente a largo plazo.
- Mensurabilidad: El rasgo debe poder ser cuantificado de alguna manera.

Los sensores de huellas dactilares para Arduino son unos dispositivos capaces de leer, guardar e identificar posteriormente las huellas de nuestros dedos.
En los últimos tiempos los sensores de huellas se han hecho muy populares gracias a los smartphones pues intentamos sustituir las contraseñas por algún tipo de sensor biométrico, que son casi imposibles de falsificar. 
El módulo de reconocimiento de huella dactilar que tenemos es el siguiente:


Este módulo, almacena las huellas en una memoria interna y posteriormente las reconoce. El módulo se comunica con Arduino a través de un puerto serie. Este sensor escanea las huellas en menos de 1 segundo y puede almacenar en su memoria hasta 162. Es fácil de conectar, sólo usaremos 4 de los 6 cables que vienen con el sensor: 2 para alimentación y 2 para comunicación serie.
Cable rojo --> 5 V 
Cable negro --> GND
Verde/Amarillo --> Rx (pin D2) 
Blanco/Azul -->Tx (pin D3) 

En cuanto a la programación, es muy sencilla gracias a la librería que pone a nuestra disposición Adafruit, llamada Adafruit-Fingerprint-Sensor-Library y disponible en el siguiente enlace: https://github.com/adafruit/Adafruit-Fingerprint-Sensor-Library. 
Como siempre, descargaremos y lo añadiremos a IDE Arduino a través de Programa/Incluir librería

Para probar el funcionamiento del sensor lo primero que hacemos es cargar el ejemplo de la propia librería, llamado “enroll”.

Este ejemplo sirve para escanear y guardar las huellas que queramos que reconozca. Aquí dejamos el código de este ejemplo:

#include <Adafruit_Fingerprint.h>
// On Leonardo/Micro or others with hardware serial, use those! #0 is green wire, #1 is white
// uncomment this line:
// #define mySerial Serial1
// For UNO and others without hardware serial, we must use software serial...
// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino (WHITE wire)
// comment these two lines if using hardware serial
SoftwareSerial mySerial(2, 3);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
uint8_t id;
void setup()
{
Serial.begin(9600);
while (!Serial); // For Yun/Leo/Micro/Zero/...
delay(100);
Serial.println("\n\nAdafruit Fingerprint sensor enrollment");
// set the data rate for the sensor serial port
finger.begin(57600);
if (finger.verifyPassword()) {
Serial.println("Found fingerprint sensor!");
} else {
Serial.println("Did not find fingerprint sensor :(");
while (1) { delay(1); }
}
}
uint8_t readnumber(void) {
uint8_t num = 0;
while (num == 0) {
while (! Serial.available());
num = Serial.parseInt();
}
return num;
}
void loop() // run over and over again
{
Serial.println("Ready to enroll a fingerprint!");
Serial.println("Please type in the ID # (from 1 to 127) you want to save this finger as...");
id = readnumber();
if (id == 0) {// ID #0 not allowed, try again!
return;
}
Serial.print("Enrolling ID #");
Serial.println(id);

while (! getFingerprintEnroll() );
} uint8_t getFingerprintEnroll() { int p = -1;
Serial.print("Waiting for valid finger to enroll as #"); Serial.println(id);
while (p != FINGERPRINT_OK) {
p = finger.getImage();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image taken");
break;
case FINGERPRINT_NOFINGER:
Serial.println(".");
break;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
break;
case FINGERPRINT_IMAGEFAIL:
Serial.println("Imaging error");
break;
default:
Serial.println("Unknown error");
break;
}
} // OK success! p = finger.image2Tz(1);
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image converted");
break;
case FINGERPRINT_IMAGEMESS:
Serial.println("Image too messy");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return p;
case FINGERPRINT_FEATUREFAIL:
Serial.println("Could not find fingerprint features");
return p;
case FINGERPRINT_INVALIDIMAGE:
Serial.println("Could not find fingerprint features");
return p;
default:
Serial.println("Unknown error");
return p;
}
Serial.println("Remove finger");
delay(2000);
p = 0;
while (p != FINGERPRINT_NOFINGER) {
p = finger.getImage();
}
Serial.print("ID "); Serial.println(id);
p = -1;
Serial.println("Place same finger again");
while (p != FINGERPRINT_OK) {
p = finger.getImage();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image taken");
break;
case FINGERPRINT_NOFINGER:
Serial.print(".");
break;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
break;
case FINGERPRINT_IMAGEFAIL:
Serial.println("Imaging error");
break;
default:
Serial.println("Unknown error");
break;
}
} // OK success! p = finger.image2Tz(2);
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image converted");
break;
case FINGERPRINT_IMAGEMESS:
Serial.println("Image too messy");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return p;
case FINGERPRINT_FEATUREFAIL:
Serial.println("Could not find fingerprint features");
return p;
case FINGERPRINT_INVALIDIMAGE:
Serial.println("Could not find fingerprint features");
return p;
default:
Serial.println("Unknown error");
return p;
}

// OK converted!
Serial.print("Creating model for #"); Serial.println(id);

p = finger.createModel();
if (p == FINGERPRINT_OK) {
Serial.println("Prints matched!");
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Communication error");
return p;
} else if (p == FINGERPRINT_ENROLLMISMATCH) {
Serial.println("Fingerprints did not match");
return p;
} else {
Serial.println("Unknown error");
return p;
}

Serial.print("ID "); Serial.println(id);
p = finger.storeModel(id);
if (p == FINGERPRINT_OK) {
Serial.println("Stored!");
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Communication error");
return p;
} else if (p == FINGERPRINT_BADLOCATION) {
Serial.println("Could not store in that location");
return p;
} else if (p == FINGERPRINT_FLASHERR) {
Serial.println("Error writing to flash");
return p;
} else {
Serial.println("Unknown error");
return p;
}
}

Con este programa, guardaremos las huellas que después queramos que reconozca el sensor. Simplemente cargaremos el programa en nuestro Arduino y al ejecutarlo nos va a pedir un nº identificador para la huella que vayamos a guardar. Empezamos con el 0, y al dar Intro, nos pedirá que pongamos la huella en el sensor, nos pedirá quitarla y volverla a poner.
Estos mismos pasos los tenemos que hacer para cada una de las huellas que queramos guardar, cambiando, por supuesto, el nº identificador de cada una de ellas.

Una vez hecho esto, tendremos que cargar otro programa que trae también la librería, con el que se comparará la huella que pongamos con las que tiene en su base de datos(las que hemos guardado antes). Este programa también lo tendremos disponible al cargar la librería, está disponible en Ejemplos/Fingerprint. Su código es:

#include <Adafruit_Fingerprint.h>

// On Leonardo/Micro or others with hardware serial, use those! #0 is green wire, #1 is white
// uncomment this line:
// #define mySerial Serial1 // For UNO and others without hardware serial, we must use software serial...
// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino (WHITE wire)
// comment these two lines if using hardware serial
SoftwareSerial mySerial(2, 3); Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial); void setup()
{
Serial.begin(9600);
while (!Serial); // For Yun/Leo/Micro/Zero/...
delay(100);
Serial.println("\n\nAdafruit finger detect test"); // set the data rate for the sensor serial port
finger.begin(57600);
delay(5);
if (finger.verifyPassword()) {
Serial.println("Found fingerprint sensor!");
} else {
Serial.println("Did not find fingerprint sensor :(");
while (1) { delay(1); }
} finger.getTemplateCount(); if (finger.templateCount == 0) {
Serial.print("Sensor doesn't contain any fingerprint data. Please run the 'enroll' example.");
}
else {
Serial.println("Waiting for valid finger...");
Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates");
}
} void loop() // run over and over again
{
getFingerprintIDez();
delay(50); //don't ned to run this at full speed.
} uint8_t getFingerprintID() {
uint8_t p = finger.getImage();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image taken");
break;
case FINGERPRINT_NOFINGER:
Serial.println("No finger detected");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return p;
case FINGERPRINT_IMAGEFAIL:
Serial.println("Imaging error");
return p;
default:
Serial.println("Unknown error");
return p;
} // OK success! p = finger.image2Tz();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image converted");
break;
case FINGERPRINT_IMAGEMESS:
Serial.println("Image too messy");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return p;
case FINGERPRINT_FEATUREFAIL:
Serial.println("Could not find fingerprint features");
return p;
case FINGERPRINT_INVALIDIMAGE:
Serial.println("Could not find fingerprint features");
return p;
default:
Serial.println("Unknown error");
return p;
}

// OK converted!
p = finger.fingerFastSearch();
if (p == FINGERPRINT_OK) {
Serial.println("Found a print match!");
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Communication error");
return p;
} else if (p == FINGERPRINT_NOTFOUND) {
Serial.println("Did not find a match");
return p;
} else {
Serial.println("Unknown error");
return p;
}

// found a match!
Serial.print("Found ID #"); Serial.print(finger.fingerID);
Serial.print(" with confidence of "); Serial.println(finger.confidence); return finger.fingerID;
} // returns -1 if failed, otherwise returns ID #
int getFingerprintIDez() {
uint8_t p = finger.getImage();
if (p != FINGERPRINT_OK) return -1; p = finger.image2Tz();
if (p != FINGERPRINT_OK) return -1; p = finger.fingerFastSearch();
if (p != FINGERPRINT_OK) return -1;

// found a match!
Serial.print("Found ID #"); Serial.print(finger.fingerID);
Serial.print(" with confidence of "); Serial.println(finger.confidence);
return finger.fingerID;
}



Con este programa cargado, vemos que si le ponemos cualquiera de las huellas que hemos guardado previamente, la reconoce y aparece en pantalla un mensaje “Found Id #0”. Si ponemos cualquier otra huella no nos aparece mensaje.
Esto, por supuesto, tiene muchas utilidades, pero eso ya lo veremos en próximos cursos.

lunes, 8 de junio de 2020

NORBA LANDER - 2º ESO - Información sobre vehículos robotizados

Hoy os mostramos esta presentación que ha preparado la alumna Victoria Rodríguez de 2º ESO. Esperamos que os sea útil para aprender:

NORBA LANDERS - 2º ESO - Diseño de carcasas con Thinkercad

Hoy os mostramos los diseños de carrocería que ha realizado un alumno de 2º ESO con la herramienta de diseño en 3d Thinkercad:



lunes, 1 de junio de 2020

Norba ships: construyendo un vehículo acuático bluetooth

Durante los dos últimos cursos hemos creado vehículos terrestres, aéreos, estaciones, brazos robots,... pero nos ha quedado en el tintero la construcción de vehículos que puedan desplazarse por el agua. Así que es el momento de ponerse manos a la obra para añadir un nuevo miembro a la familia, siguiendo con la línea de construcción basada en materiales reciclados y circuitería basada en Arduino.

Aprendiendo a programar

Para la construcción de este tipo de vehículos ha sido necesario adquirir previamente una serie de conocimientos de programación de controladores Arduino. Esto nos ha llevado cierto tiempo, ya que partíamos de prácticamente ningún tipo de experiencia en programación. Nos ha llevado más de un mes en asimilar lo más básico, usando para ello el simulador online TinkerCad, en el que los alumnos han realizado creaciones de pequeños programas de control de leds e interruptores. Hemos usado como referencia algunas entradas de este blog como la de iniciación a arduino en la que podemos encontrar numerosos ejemplos prácticos.

Diseños preliminares

La idea básica del diseño consistía en crear una estructura lo más hidrodinámica posible y que flotara, sobre la que instalar la circuitería de control del timón y de propulsión. El timón se movería con un servo controlado por Arduino. La propulsión consistiría en un ventilador de un PC cuya velocidad de rotación pudiera también ser controlada a voluntad. Finalmente, para optimizar el rendimiento, habíamos pensado en la posibilidad de que el ventilador pudiera oscilar a la derecha o a la izquierda junto al timón.

Creando del fuselaje

Una vez realizados varios diseños sobre papel, los alumnos comenzaron a plasmar de forma física sus ideas, usando para ello materiales reciclados. Algunos se centraron en utilizar bandejas de poliesman, muy ligeras, sobre las que montar todos los circuitos, modificándolas adecuadamente para que tuvieran una forma lo mas hidrodinámica posible. Otros utilizaron pequeñas botellas de plástico de medio litro a modo de flotadores, sobre las cuales montaron una plataforma de madera contrachapada de 3mm obtenida de retales de otros proyectos que sirviera de soporte para toda la circuitería.

Construyendo fuselaje con botellas de plástico y contrachapado de 3mm

Construyendo fuselaje con bandejas de poliespan modificadas

Control del timón mediante pulsadores

Una vez construido el fuselaje, se comenzó la construcción del timón junto a su circuitería de control. En primer lugar se optó por un diseño sencillo, aunque poco funcional, que permiritía comprobar si el funcionamiento del timón era correcto y estable. La idea era conectar la superficie del timón a un servo, y mover este mediante dos pulsadores en un "mando a distancia" conectado al barco mediante un cable de tres hilos. El principal problema de esta solución es que solamente nos podemos alejar del barco a la distancia determinada por la longitud del cable, algo poco práctico en un sistema real. Pero tiene la ventaja de que la implementación es muy sencilla y barata.

Circuito de control de timón basado en servo motor y pulsadores
Integración de la circuitería y mecánica en el fuselaje del barco

Tras realizar varios diseños, y realizar varias implementaciones del código de control, finalmente se obtuvieron los resultados deseados. Las pruebas que se realizaron con este tipo de control fueron un éxito. El código de control finalmente utilizado en esta versión fue la siguiente:
#include <Servo.h> //Patillas control del Servo1 #define PinSERVO1 6 //Interruptores de control del Servo1 #define BotonSube1 13 #define BotonBaja1 7 //Angulos máximos y minimos del Servo1 #define MAX1 135 #define MIN1 45 Servo Servo1; int angulo1=(MAX1+MIN1)/2; //Inicia angulo1 al valor medio de MAX1 y MIN1
void
setup() { Servo1.attach(PinSERVO1); // Asocia patilla PinSERVO1 a motor Servo1 pinMode(BotonSube1,INPUT); pinMode(BotonBaja1,INPUT); } void loop() { if (digitalRead(BotonSube1)&&(angulo1<MAX1)){ angulo1++; Servo1.write(angulo1); delay(100); } if (digitalRead(BotonBaja1)&&(angulo1>MIN1)){ angulo1--; Servo1.write(angulo1); delay(100); } }

Control del timón mediante puerto serie y bluetooth

Debido a que el control del barco mediante una conexión cableada a un mando no es algo práctico, era necesario modificar el diseño para poder realizar un control de forma inalámbrica. Una de las opciones que barajamos fue la de utilizar sensores de infrarrojos y un mando a distancia cualquiera. Era una opción barata, sencilla y disponíamos de los materiales. Además, en el proyecto NorbaSky ya teníamos ejemplos de este tipo de implementaciones que habíamos estudiado mientras aprendíamos a programar. Una alternativa era la de utilizar un control por bluetooth, del cual no sabíamos nada hasta el momento. 

La implementación de control por bluetooth en su versión más sencilla es idéntica a la implementación de control utilizando el puerto serie de Arduino (posteriormente se conecta un módulo bluetooth a las patillas TX y RX y el sistema pasa de funcionar por puerto serie a funcionar por bluetooth). Así que lo primero que hicimos fue sustituir los el control de pulsadores por un control basado en el envío de caracteres a través del cable serie USB. Mientras operáramos por USB seguiríamos teniendo una conexión del barco por cable, esta vez al PC de control, y tendríamos que utilizar el terminal serie del IDE Arduino para realizar los movimientos del timón.

Circuitería de control del servo motor usando el terminal serie USB del PC

En nuestro caso utilizamos los caracteres "a" y "s" para mover a un lado y al otro el timón. Si queríamos mover 10 grados a la izquierda, escribiríamos "aaaaaaaaaa" en el terminal serie del PC y enviaríamos la secuencia. Si queríamos mover 20 grados a la derecha, escribiríamos "ssssssssssssssssssss" en el terminal y enviaríamos. En todo momento Arduino nos devolvería una respuesta indicando la posición del timón en grados. Las pruebas fueron un éxito. El código utilizado fue el siguiente:

#include <Servo.h> //Patillas control del Servo1 #define PinTimon 6 //Angulos máximos y minimos del Servo1 #define MAX1 135 #define MIN1 45 Servo Timon; //Define una variable Timon para controlar un Servo int angulo1=(MAX1+MIN1)/2; //Inicia angulo1 al valor medio de MAX1 y MIN1 void setup() { Serial.begin(9600); Timon.attach(PinTimon); // Asocia patilla PinTimon a motor Timon } void loop() { char opcion; if (Serial.available()>0){ opcion=Serial.read(); if ((opcion=='a')&&(angulo1<MAX1)) { angulo1++; } if ((opcion=='s')&&(angulo1>MIN1)) { angulo1--; } Timon.write(angulo1); Serial.print("Ángulo: "); Serial.println(angulo1);
delay(100);
}
}

Una vez probado el funcionamiento correcto del control del timón a partir del puerto serie, simplemente había que añadir un módulo HC-06 de 4 pines y conectarlo a los pines RX y TX de forma adecuada (recuerda que la conexión es cruzada, es decir, la patilla RX del módulo HC-06 al pin TX de Arduino y la patilla TX del módulo a la RX de Arduino) y los pines de alimentación y tierra a las patillas correspondientes. Con esto, el control por serie se transforma en control por bluetooth. A partir de este momento, no podremos enviar ni recibir nada desde el terminal serie del IDE Arduino y solo podremos usar una conexión bluetooth para realizar envío y recepción de datos.
Hay que recordar que primero debemos cargar el código en la placa Arduino y posteriormente conectar el módulo HC-06, ya que si tenemos conectado el módulo, el IDE no podrá comunicarse con la placa al quedar deshabilitada la comunicación por puerto serie.

Conversión del sistema de comunicación basado en puerto serie a comunicación basada en bluetooth mediante módulo HC-06 de cuatro pines

Integración de la circuitería y mecánica basada en bluetooth en el fuselaje del barco

Podemos enviar información a través de bluetooth utilizando un smartphone con cualquier programa diseñado para tal fin (existen cientos de ellos). Nosotros hemos utilizado "Arduino Bluetooth Controller" que permite entre otras cosas trabajar como si se tratase de un terminal serie o bien como un gamepad configurable.

Una vez instalada la aplicación de control en el smartphone y puesto en marcha el controlador Arduino, deberemos ejecutar la aplicación y conceder los permisos que se nos pidan. Acto seguido seleccionar "Connect to a device" y seleccionar "HC-06". Puede que se nos pida una clave, en cuyo caso lo normal es que esta sea "0000" o bien "1234". Si fuera otra, habría que buscar en las especificaciones del módulo HC-06. Finalmente podemos indicar al programa cómo queremos operar. Las opciones que nos resultaron más útiles fueron las de "Controller mode" que simula un gamepad, en donde asignamos un código a cada tecla, o bien "Terminal mode" que simula el terminal serie del PC.

Interface de configuración de la aplicación "Arduino Bluetooth Controller"

Interface de uso en modo "Gamepad" de la aplicación "Arduino Bluetooth Controller"

Sistema de propulsión

Una vez finalizado el sistema de guiado mediante timón, solamente quedaría implementar físicamente y mediante software el sistema de propulsión. Como ya comentamos, la idea era la de utilizar un ventilador de un PC. Sin embargo, cuando nos disponíamos a realizar esta tarea surgió el estado de alarma y el consecuente confinamiento, con lo que tuvimos que detener las clases presenciales y nuestro trabajo en el taller de tecnología, y por tanto no pudimos realizar estas últimas mejoras.
También nos fue complicado recopilar fotografías y material para documentar este artículo. Lo hemos redactado con el poco material que teníamos en la nube (un par de fotografías de alumnos, y los diseños y código de Tinkercad que se almacenan de esta forma).

Implementación sencilla para conectar y controlar la velocidad de giro de un ventilador del PC a una placa Arduino

Distintos ventiladores de PC. Podemos encontrarlos con conexiones de 2, 3 y 4 hilos.

Intentaremos finalizar el NorbaShip durante el próximo curso.
Parte de los recursos materiales y humanos necesarios para realizar estas actividades han sido cofinanciados por el programa Proyect@ de la Junta de Extremadura.

viernes, 29 de mayo de 2020

Reciclado de fuentes de alimentación de PC's para proyectos electrónicos: células Peltier

En nuestro afán por concienciar sobre el reciclaje, hemos realizado en el centro distintos proyectos y propuestas para dar una segunda vida a distintos componentes. Existen numerosos proyectos en nuestro centro, tales como Norba en Verde, que se mueven en esta línea. Los alumnos del programa proyect@ también realizan muchas actividades que se mueven en esa dirección. Y nosotros mismos, desde NorbaSky hemos realizado numerosas entradas en nuestro blog en donde los alumnos usaban componentes reciclados para sus diseños. En cuanto al uso de piezas de PCs obsoletos, hemos realizado un estudio de mercado para poder construir potentes ordenadores reutilizando componentes y adquiriendo otros de segunda mano. Hoy nos centraremos en el la reutilización de las fuentes de alimentación de PC's para distintos desarrollos.

Necesidad de potencia y amperaje

Tanto en este curso como en cursos anteriores hemos realizado una serie de proyectos tecnológicos con componentes electrónicos, motores y otros dispositivos que hacían uso de corriente continua para funcionar. Cuando estos proyectos requieren de una cantidad considerable de potencia (principalmente amperaje a un determinado voltaje fijo) surgen numerosos problemas. Por lo general, el uso de pilas convencionales no es posible, y el de baterías (generalmente de litio) es ineficiente y caro, teniendo que utilizar frecuentemente varias conectadas en paralelo. Es por ello por lo que intentamos buscar un medio económico y eficiente que pudiera solucionar nuestros problemas, y lo encontramos en la basura.

Son muchos los PC's que se abandonan por obsoletos o defectuosos. Generalmente, la mayoría de las personas no reciclan sus componentes, bien por falta de conocimientos técnicos o bien porque en muchos casos no merece la pena hacerlo, al menos económicamente hablando. También es cierto que cuando el PC que se desecha tiene muchos años, sus componentes no suelen ser prácticos ni funcionales en un nuevo equipo, bien por problemas de compatibilidad (todo tipo de tarjetas de expansión...), bien por capacidad irrisoria para los tiempos que corren (sean discos duros o memorias), bien por un bajo rendimiento (CPU's, dispositivos de almacenamiento,...) o bien porque la función que tenían ya se ha perdido (disqueteras, lectoras de CD, tarjetas de sonido, digitalizadoras de video analógico...). En cuanto a las fuentes de alimentación, las muy antiguas, aunque siguen pudiendo utilizarse en equipos actuales, suelen proporcionar poca potencia para los tiempos que corren en donde los componentes más exigentes consumen demasiado. Además, suelen ser más ruidosas que las de hoy en día y menos fiables en cuanto a picos de corriente. Sin embargo, perfectamente pueden proporcionar potencias de hasta 300w sin ningún tipo de problemas, algo que no es fácil de conseguir haciendo uso de pequeñas baterías.

Tipos de fuentes de alimentación y conectores principales

Existen numerosos tipos de fuentes de alimentación para PC (ATX, SFX, SFX-L, TFX,...) que básicamente se diferencian unos de otros en el tamaño y forma de la misma. Lo bueno para nosotros es que en todos estos tipos el cableado es prácticamente similar, o al menos muy parecido. Cada fuente de alimentación dispone de una serie de conectores estandarizados con distintas funciones que permiten, además de alimentar eléctricamente a los distintos componentes del sistema, encender la fuente de alimentación, informar si esta está encendida o proporcionar una pequeña corriente cuando el sistema se encuentra en stand-by. 
Distintos conectores de una placa ATX: 1 Mini-Molex para disquetera (en desuso), 2 Molex para dispositivos IDE (Discos duros y unidades ópticas), 3 Alimentación de dispositivos SATA (Discos duros y SSD), 4 y 5 para tarjetas gráficas potentes, 6 y 7 para alimentación de potentes CPU's, 8 conector ATX 20+4 para la placa base y sus tarjetas.
Cada conector absorbe una pequeña parte de la potencia total de la fuente de alimentación para proporcionarla a un determinado componente del PC. De hecho, aunque solo usáramos uno de los conectores, este no proporcionaría toda la potencia que la fuente puede generar. Así, por ejemplo, una fuente de 200w podría suministrar un máximo de 120w al conector ATX, un máximo de 25w a cada uno de los conectores Molex y SATA,... Por tanto, si en disponemos de una fuente de este tipo y necesitamos una potencia de 180w, tendríamos que combinar la potencia de salida de varios conectores.

A efectos prácticos, lo que más nos interesa son los colores de los cables: los cables negros están conectados a tierra, los cables amarillos proporcionan una salida de 12V de corriente continua, los cables rojos proporcionan 5V. Estos colores son los que nos van a resultar más útiles. Disponemos también de cables azules que proporcionan -12V con muy poca intensidad, cables naranjas que proporcionan 3,3V y en algunas placas modernas alguna combinación más exótica con voltajes específicos para piezas concretas. Todos estos cables de colores permitirán alimentar nuestros distintos proyectos con distintos voltajes. Por otra parte, para que la fuente de alimentación funcione, es necesario encenderla, lo que se consigue conectando el cable verde de puesta en marcha con cualquier cable negro de tierra (esto es lo que hace el interruptor del PC). Finalmente tenemos un cable gris de 5V con muy baja intensidad que habitualmente se usa para iluminar un led que nos indica que el PC está funcionando, o un cable purpura que proporciona 5V a un bajo amperaje incluso cuando la fuente está apagada, para alimentar a los dispositivos en standby.

El conector ATX

Usado para alimentar a la placa base, así como a la mayoría de los componentes acoplados directamente a la misma, consideramos el conector ATX de 20 o de 24 (20+4) pins como el más importante de la fuente de alimentación, ya que contiene cables con todos los voltajes disponibles, así como interruptor (verde) y cables de información (como el gris) o la línea púrpura de standby. Además, las líneas que suministran más potencia al PC se encuentran aquí. Las antiguas fuentes de alimentación (y las antiguas placas base) usaban conectores de 20 pins, pero a las modernas, al necesitar más potencia, se les agregaron 4 pins adicionales (de tierra, 12V, 5V y 3,3V). Sin embargo, un conector de 20 pins puede alimentar una placa de 24 pins (siempre que esta tenga no tenga componentes que requieran un elevado consumo), y un conector de 24 pins puede alimentar una placa de 20 pins (desechando los 4 pins añadidos).
Esquema de conexiones de los conectores ATX de 20 pins (en desuso) y de 20+4 pins (más moderno)

Usando fuentes ATX para alimentar placas Peltier

Durante el presente curso hemos intentado construir una cámara de niebla para detectar partículas radioactivas. En teoría es algo fácil de realizar si se dispone de los materiales adecuados y el dinero necesario para adquirirlo. Pero si para construirla usas materiales reciclados y componentes disponibles en el laboratorio, el tema se complica. Para su construcción, era necesario bajar la temperatura de la misma bastantes grados y para ello se nos ocurrió hacer uso de células Peltier. Estas células no son nada eficientes energéticamente, consumiendo en torno a 30w de potencia cada una. El uso de baterías, por tanto, era complicado. Es por ello por lo que decidimos utilizar fuentes de alimentación de ordenadores que se iban a tirar a la basura por obsoletos, ya que estas proporcionan suficiente potencia.
Disponíamos de varias fuentes de alimentación de entre 200w y 300w, pero desconocíamos su funcionamiento. Así que nos pusimos a investigar. Lo primero buscar como arrancarlas. Rápidamente nos dimos cuenta de que había que puentear el cable verde con uno negro:
Detalle del puenteado para arrancar la fuente de alimentación: conexión de cable verde con tierra
Una vez arrancada, debíamos alimentar las placas con 12v. Probamos con cables amarillo-negro de varios conectores molex, pero no cuando la placa llevaba un rato funcionando, la fuente de alimentación se apagaba. Al parecer, este tipo de conectores no proporcionan suficiente potencia para nuestros componentes. Así que al final optamos por extraer la alimentación directamente del conector ATX, que si bien era más potente, solo nos permitía alimentar correctamente una placa Peltier, la cual rápidamente se puso a funcionar.
Hielo generado por una placa Peltier conectada a la fuente ATX tras depositar sobre la misma unas gotas de agua y esperar varios segundos
Hicimos varias pruebas y anotaciones de cuanto conseguíamos bajar la temperatura de las placas en distintas condiciones. También íbamos anotando todos los problemas que nos iban surgiendo (muchos de ellos relacionados con la potencia suministrada por la fuente de alimentación). Intentamos conectar varias células Peltier en serie para conseguir bajar más la temperatura, pero los conectores sueltos de la fuente de alimentación no daban tanta potencia (una fuente moderna hubiera funcionado perfectamente, pero estas fuentes antiguas iban muy justas). 
Héctor G. G., de 3º de ESO, realizando mediciones de temperatura obtenidas con una célula Peltier en distintas condiciones
El siguiente paso que nos planteamos para usar toda la potencia de la fuente de alimentación era la de unir todos los conectores amarillos juntos y todos los conectores negros por otra parte, obteniendo así dos conectores que en teoría nos darían el máximo de potencia disponible. Esta solución la hemos visto en varios webs (entre ellas forocoches) para reutilizar viejos radiocasette de coches.  Sin embargo, la suspensión de clases presenciales y el posterior confinamiento nos impidió realizar todas las pruebas que queríamos. No obstante, aprendimos bastantes cosas que más adelante podremos utilizar en nuevos proyectos que requieran una potencia eléctrica superior a la que estamos acostumbrados a utilizar con nuestras pequeñas creaciones.
Parte de los recursos materiales y humanos necesarios para realizar estas actividades han sido cofinanciados por el programa Proyect@ de la Junta de Extremadura.

miércoles, 27 de mayo de 2020

Creando estructuras resistentes durante el confinamiento (1º PMAR)

Poniendo la vista en el horizonte del proyecto NorbaSky, debemos estudiar de qué forma crear vehículos y sondas resitentes que aguanten fuertes vientos e incluso eventuales golpes contra el suelo. Es por ello por lo que es sumamente importante el estudio de estructuras.

Propuesta del reto

Durante el principio del curso 2019-20 se realizó una introducción teórica a la creación de estructuras. Sin embargo, debido al confinamiento por la pandemia provocada por el COVID-19, quedó pendiente la implementación práctica de estos conocimientos en proyectos físicos reales realizados en el taller de tecnología. Y como había que seguir trabajando en casa, se propuso a los alumnos un reto en forma de concurso: la construcción de una maqueta con tubitos de papel que soportase el mayor peso posible. El alumno que consiguiera crear la estructura que soportase un mayor peso sobre ganaría el reto.

El premio en sí, era conseguir que su trabajo les gustara, que tuviera su propio reconocimiento, que estuvieran cómodos y que lo ejecutaran desde casa sin ningún tipo de ayuda presencial por parte del profesor: un proyecto individual, que requería esfuerzo, planificación, organización y por supuesto, entusiasmo, algo inimaginable para alumnos de 2º de la ESO. 

Investigación individual durante el confinamiento

Los alumnos han tenido que analizar y estudiar el por qué del uso de las estructuras triangulares, y entender de una forma clara los siguientes puntos: 
  • El triangulo es el único polígono que no se deforma.
  • La indeformabilidad se consigue con la triangulación. 
  • Podemos asegurar la rigidez de la estructura, añadiendo escuadras, tensores y cables.
  • La sección y la altura de los lados de los triángulos que forman la estructura son importantes en el diseño.
  • De forma muy simple, hemos tenido que tener en cuenta  la llamada Ley de las barras, por la que B>2n-3. Siendo n=número de nudos y B=Número de barras.
  • La estabilidad de nuestra estructura debía ser grande para que así soportase mucho peso, por tanto y a tener en cuenta: "las estructuras más bajas y anchas son más estables".             
  • Podríamos mejorar la estructura, llegado el momento con un buen cable o tensor.

Desarrollo práctico del proyecto

Se les proporcionó a los alumnos un documento con los conceptos teóricos y las bases del proyecto, el cual aunque era sumamente sencillo, nos debía permitir ayudar en los cálculos para que los compañeros pudieran colocar en nuestras estructuras, todos aquellos elementos y mecanismos necesarios que permitirán "alcanzar las estrellas".


Después de unas semanas de trabajo en casa hemos quedado gratamente sorprendidos por los resultados obtenidos por los alumnos de 1º de PMAR. En esta entrada del blog hemos puesto algunas de las imágenes de sus trabajos, los cuales además nos emocionan al pensar que aunque "el instituto ha estado cerrado, durante el confinamiento, hemos conseguido que nuestros alumnos han seguido aprendiendo y construyendo", eso sí, de forma totalmente distinta.

Y estos son algunos de los resultados obtenidos.


tecnomanoli@educarex.es

martes, 26 de mayo de 2020

Fabricación de una cámara de niebla casera refrigerada por células Peltier

Estudio de partículas fundamentales. 

Vamos a comenzar con una de las aplicaciones de la cámara de niebla, comprobar la teoría de la relatividad. Cuando la hacemos funcionar nos damos cuenta de que continuamente se ven trazas o estelas, tal y como se muestra en las siguientes imágenes:


Cuando una partícula cargada de suficiente energía interacciona con el vapor de etílico absoluto y saturado, lo ioniza. Los iones resultantes actúan como núcleos de condensación, alrededor de los cuales se forman gotas de líquido que dan lugar a una niebla. Al paso de las partículas se va produciendo una estela o traza, debido a los numerosos iones producidos a lo largo de su trayectoria, semejante a la que forman los aviones reactores en el cielo. Si nos fijamos de vez en cuando aparecen estas trazas o estelas debido a los muónes. Estas trazas tienen formas distintivas (por ejemplo, la traza de una partícula alfa es ancha y recta, mientras que la de un electrón es más fina y muestra evidencias de ser deflectada).

Los muones son unas partículas 207 veces más pesadas que el electrón y cuya vida media es de 2 microsegundos (la vida media es el tiempo que tarda en desintegrase la mitad de la población de partículas que se tenía inicialmente). Es decir no duran nada de tiempo. Estas partículas se generan por la interacción de los rayos cósmicos con la atmósfera y viajan a velocidades cercanas a  la velocidad de la luz. Un muón típico se mueve con velocidad 0,9978c.

En 1963 David Frisch y James Smith realizaron un experimento en el que midieron el número de muones que llegaban a la superficie terrestre. Realizaron dos mediciones a distinta altura, una en lo alto del monte Washington y otra al nivel del mar. En la cima de la montaña registraron 568 muones por hora. A nivel del mar, y de acuerdo con la ley de decaimiento de su vida media, debería registrarse tan solo 27 muones por hora, sin embargo los científicos, al realizar la experiencia, detectaron 412 muones por hora. Parecía como si a los muones les hubiese dado tiempo a llegar a la superficie terrestre antes de desintegrarse, es decir que viven más tiempo. ¿Cómo es posible? La explicación nos la da la dilatación en el espacio y en el tiempo descrita por la Relatividad Especial:

Explicación desde el punto de vista de un observador situado en la Tierra: un muón típico que se mueva a velocidad 0.9978c recorrerá sólo 600m aproximadamente en 2 microsegundos. Sin embargo, la vida media del muón medida en el sistema de referencia terrestre debe incrementarse hasta 30 microsegundos debido al fenómeno de la dilatación del tiempo, y un muón con velocidad 0.9978c recorre del orden de 9000m.

Explicación desde el punto de vista del sistema de referencia de los muones: contracción de la longitud. Desde el punto de vista del muón, éste vive sólo dos microsegundos pero puede afirmar estar en reposo y ser la atmósfera la que circula junto a él a la velocidad de 0,9978c. Debido a la contracción del espacio, la atmósfera de 9000m en el sistema terrestre se encuentra así contraída a sólo 600m en el sistema del muón. Siendo así posible que los muones lleguen al nivel del mar.

Teoría sobre radiación y materiales radiactivos

La radiación. Es una forma de energía que proviene de diversas fuentes, algunas creadas por el hombre como las máquinas de rayos X, y otras naturales como el Sol y el espacio exterior y de algunos materiales radioactivos como el uranio en la tierra. La exposición a esa energía conlleva algunos peligros para la salud de los seres vivos, incluidos los humano

Wilhelm Conrad Roentgen, uno de los pioneros de la física en Alemania, fue también el primer galardonado con el Premio Nobel de Física en 1901 por el descubrimiento en 1985 de los rayos X, teniendo su aplicación gran alcance en el sector de la industria y de la medicina. Sin embargo, fue el físico francés Henri Becquerel quien descubrió la radiactividad, distinguido también con el Premio Nobel dos años después, en 1903, galardón compartido por Pierre y Marie Curie, por sus investigaciones conjuntas sobre los fenómenos de la radiación descubiertos por el científico galo.

Entre 1896 y 1903, los científicos descubrieron que no todos los elementos radiactivos emiten las mismas radiaciones. Algunos emiten radiaciones más potentes que otros, cada una de las cuales transforma el núcleo de distinta manera.

Cuando la radiación de la muestra de un elemento radiactivo, como el Radio (Ra), se somete a la acción de un campo magnético, se determina la existencia de tres tipos de emisiones radiactivas: partículas alfa, partículas beta y rayos gamma. Es por ello por lo que se hace necesario el uso de ciertos materiales radiactivos que expulsen partículas Alfa, Beta y Gamma, así como de imanes para su uso en nuestro proyecto.
Materiales radiactivos utilizados para nuestros experimentos
Imán utilizado para generar campos magnéticos que interfieran en la trayectoria de las partículas radioactivas

Naturaleza de las radiaciones

Radiación α 
Son núcleos de átomos de helio ( se escriben α, 42 α, 42He2+ 4He2+). Se mueven a velocidades “pequeñas” (0,1c). Energías del orden de 4 a 10 MeV. Poco penetrantes. Pueden ser detenidas por pocos centímetros de aire o por una hoja de papel. La desintegración α se produce fundamentalmente para los núcleos con Z > 82

Radiación β (β− y β+) 
Son electrones (escrito o−1e, o−1β o e−) o positrones (o+1e, o+1β o e+), con velocidades próximas a la de la luz. Energías muy variables: desde keV a MeV. Poco penetrantes: Son absorbidos al cabo de unos pocos metros en el aire. Son detenidos por finas láminas metálicas. Los “rayos β” son producidos tanto por elementos ligeros como pesados. Se dan por la descomposición de un neutrón en un protón (β−) o de un protón en un neutrón (β+)

Radiación γ 
Es radiación electromagnética (fotones) de alta energía (gran frecuencia y pequeña longitud de onda)
Energías muy variables: de keV a MeV. Muy penetrantes: 2 km en el aire. Son detenidos por gruesas paredes metálicas (30 cm de plomo, más de 1 metro de hormigón o varios metros de agua). Su emisión suele estar asociada a otros tipos de emisiones, α, β. etc.

Pruebas de penetración

Vamos a realizar pruebas de penetración de las partículas que salen de los isótopos radiactivos, según la distancia a la muestra, e interponiendo distintos materiales, papel, aluminio y plomo.



Pese a que realizamos algunas mediciones preliminares para aprender a utilizar el equipo del laboratorio de Física y Química, la interrupción del curso presencial de forma inesperada no nos permitió realizar muchas de las pruebas que teníamos pensadas relacionadas con la medición de radiaciones.
Alumnos realizando mediciones de radiación generada por ciertos materiales

Cámara de niebla

Es posible fabricar una cámara de niebla sin grandes costes (para la satisfacción que produce), y realizar experimentos para encontrar miles de partículas alpha α (nucleos de He con dos protones y dos neutrones, pero desnudos de electrones). También partículas beta β (electrones libres), rayos gamma γ (fotones de alta energía) y muones (como electrones pero 200 veces más pesados).
Una cámara de niebla se basa en un recipiente estanco con una mezcla de gases.  Uno de ellos estará sobre-enfriado. Esto significa que la menor perturbación provocará que se condense.  Las partículas que se desea detectar ionizan este gas.  Estos iones generados  actúan como núcleos de condensación del gas sobreenfriado, formando una traza de niebla en la mezcla.  Se aprecia algo parecido a la raya de un avión en el cielo, pero en este caso ha sido causado por una partícula subatómica que se mueve por el gas, prestando su energía para la ionización.
Usando una cámara de niebla es relativamente fácil detectar estas partículas. Para la construcción de la cámara aún no tenemos claro todos los procedimientos. Nos basaremos en parte en las instrucciones y experiencias narradas en la web de Fisicalandia, en donde tocan el tema de una forma bastante detallada.
En relación con la ionización, que es la pérdida o ganancia de electrones, se puede comentar que en la práctica es muy fácil conseguirla. Simplemente frotando un globo con la manga del jersey ya se puede ver que atrae el pelo por motivo de la electricidad estática producida.

Materiales para la construcción de nuestra cámara de niebla

Siguiendo con la filosofía del Norba Caesarina, de reutilizar y reciclar, nos hemos propuesto construir una cámara de niebla a partir de los materiales reciclados (siempre que sea posible). Estos son los materiales que hemos utilizado:
  • Tubo de PVC
  • Disipador térmico de aluminio de la CPU de un PC.
  • Ventilador de un PC.
  • Aislante de corcho
  • Una linterna  led , emite un bloque de luz horizontal, con lo que se minimizan los reflejos no deseados. Esto permite grabar directamente con un móvil apoyado encima de la tapa superior 
  • Fuente de alimentación de un viejo PC recuperado de un contenedor de basura.
  • Células Peltier.

Estudio y comparativa de temperatura

Para realizar la cámara de niebla es necesario conseguir reducir bastante la temperatura de la misma. Para ello utilizaremos las células Peltier. Sin embargo, no sabemos si estas nos proporcionarán el resultado esperado. Por tanto vamos a realizar mediciones usando:
  • Una sola célula peltier, ubicando la parte que se calienta sobre un disipador térmico de aluminio diseñado para CPU's, conectado a un ventilador. Parece una buena opción, pero su temperatura solo baja a unos cuantos grados bajo cero.
  • Varias células Peltier concatenadas en serie, de tal forma que cada una refrigera la parte caliente de la siguiente. Es un sistema que funciona mejor, y permite bajar tres o cuatro grados adicionales respecto al sistema de una sola célula Peltier. El problema es que se dispara el consumo eléctrico y la fuente de alimentación falla. No hemos podido solucionar este contratiempo debido a la interrupción de las clases presenciales por el estado de alarma del Covid-19.
  • Células Peltier refrigeradas por agua y hielo ubicadas en un termo. No producen una mejora significativa respecto a la refrigeración usando una sola célula + un disipador + un ventilador.
  • Células Peltier refrigeradas por hielo seco. Quizá la opción que más enfría, pero a la larga resulta caro, pues el hielo seco se nos agota.
Conexión de célula Peltier a fuente de alimentación de PC para refrigerarla con un disipador y un ventilador de CPU's
Alumno de 3º de ESO anotando mediciones de temperatura de célula Peltier
Termo con agua y hielo usado para refrigerar la parte caliente de las células Peltier.
Pese a que realizamos alguna medición y anotación inicial, la suspensión de clases presenciales como causa de la pandemia en la que nos hemos visto inmersos no nos dejó continuar con nuestras investigaciones, no teniendo datos suficientes para mostrar en este artículo. En cualquier caso, llegamos a realizar mediciones en las que conseguíamos bajadas de temperatura de hasta 10 grados bajo cero, consiguiendo congelar pequeñas gotas de agua en un par de segundos.
Pese a todo, no logramos acabar la cámara de niebla de una forma 100% funcional para realizar las mediciones. Seguiremos trabajando en ello durante el siguiente curso escolar.
Parte de los recursos materiales y humanos necesarios para realizar estas actividades han sido cofinanciados por el programa Proyect@ de la Junta de Extremadura.