domingo, 27 de marzo de 2016

Prácticas #Arduino #3ESO #Tecnoprograbótica Control #LEDS a través de Relé y potenciómetro.

Tomado del blog "Estoy en ello..."


Se acerca la hora de la verdad, de hacer cosas más serias, en las que el mundo digital y el mundo físico se toquen. ¿Controlar leds reales desde un ordenador a través de un programa? Pues sí, de eso se trata.
Por fin tenemos los materiales de robótica en nuestro centro, y los chicos podrán realizar su aprendizaje con Arduino. En este nuestro primer año con la Robótica "a gran escala" (para todos los alumnos), hemos optado, de momento, por un aprendizaje progresivo; si quieres, hasta un poco conservador, ya que hemos comprado unos kits de prácticas comerciales.
Previamente, veremos en nuestro texto, y lo convertiremos en mapas mentales o conceptuales, o infografías (los chicos eligen), toda la parte de introducción a la robótica, respecto a tipos de robots (según su morfología, tipos de articulaciones, movimiento...), un poco de historia de las generaciones de los mismos, su estructura (actuadores-sensores y sus tipos, herramientas, fuentes de alimentación), sistemas de control  de lazo abierto o cerrado.
Respecto a las prácticas, los alumnos aprenderán al ritmo que ellos elijan. Tenemos para todos los gustos. Por parejas. Unos, de manera muy guiada, realizando poco a poco y con toda la documentación necesaria las prácticas del Starter Kit SparkFun 3.2 (tranquilos, que no cunda el pánico, que hay un manual en castellano). Tienen a su disposición hasta el código Arduino de las prácticas a ejecutar, con el que les propondré "jugar" para ampliarlo y mejorarlo. Realizarán prácticas con leds convencionales, led RGB, botones, fotoresistores, sensores de temperatura, servos, sensores flexibles, timbres piezoeléctricos, relés, motores DC, convertidores serie-paralelo y display LCD.

Pero algunos alumnos irán un poco más allá. Ya estas vacaciones les he propuesto a varios de ellos que se lleven los kits a casa para ir aprendiendo, y a la vuelta de vacaciones les propondremos otros retos (¿control de ascensores, casas domóticas, estudio de otros sensores, control de vehículos, scratch4Arduino, placas Makey-Makey?).

En el siguiente enlace muestro también ejemplos abiertos de proyectos realizados por profesores de la Comunidad de Madrid el curso pasado, y un buen montón de enlaces a recursos para aprender mucho más.
A continuación os muestro una práctica posible, la que preparé yo el curso pasado.

Control de leds mediante placa microcontroladora, relé y potenciómetro




Descripción:
El proyecto consiste en la implementación por parte de los alumnos/as de un circuito electrónico con diferentes componentes (leds, relés, potenciómetros, diodos, resistencias, transistores) en el que se pueda controlar diferentes secuencias y temporización del encendido y apagado de diodos led. El alumnado deberá idear los circuitos, montarlos sobre placa Protoboard y microcontrolador Arduino, y programar las funciones necesarias para controlar diversos efectos sobre los diodos con el software de desarrollo adecuado (IDE de Arduino y/o Scratch for Arduino).
Los alumnos trabajarán por parejas y deberán aprender por descubrimiento, con las pautas y guía del profesor/a, que tomará el rol de acompañante en el proceso de trabajo.
Deberán documentar el trabajo realizado en un portfolio-blog, en el que expondrán su proceso de trabajo, lo que saben, lo que desconocen y lo que desean aprender, sus investigaciones en webs y foros sobre el conocimiento de los componentes sobre los que trabajar (sensores, actuadores, placas de control), su experiencia de aprendizaje, el producto resultante (diseño del circuito con Fritzing, fotos de los elementos y del montaje, vídeo y explicación de funcionamiento, código programado con IDE de Arduino).
Autoevaluarán y coevaluarán su trabajo a través de una rúbrica de evaluación, mediante un formulario de Google Docs.
Los alumnos deben al menos, realizar la programación informática necesaria para implementar el control del encendido y apagado de una colección de ledes, usando:
  1. Control encendido/apagado alternativo de dos leds a través de un relé, por medio de circuito con transistor, diodo de extinción de corriente, resistencias limitadoras de intensidad...
  2. Control de la velocidad de encendido y apagado de al menos 3 leds usando como sensor el nivel de tensión del cursor de un potenciómetro. 
  3. Elaboración de diferentes secuencias de encendido y apagado de una fila de al menos 6 diodos. Utilizando funciones como parte del código de programación (al menos tres secuencias).
Por supuesto, el alumnado está invitado a mejorar el proyecto con respecto a la tarea que se les propone.
Los alumnos que realicen los mejores proyectos explicarán su experiencia oralmente a alumnos de cursos inmediatamente inferiores, para fomentar entre sus compañeros la afición por la programación y la sensación de que es posible realizar prácticas atractivas con la motivación adecuada.
En una unidad didáctica posterior se podrán incorporar otros elementos electrónicos como sensores de humedad, luz, presencia, temperatura, motores paso a paso o servos, pantallas LCD o matrices de ledes, etc. Y la conexión alámbrica o inalámbrica entre diferentes elementos como pueda ser un teléfono móvil, un Shield Ethernet, un Shield BlueTooth, GSM…
Vídeo demostrativo:


Esquema de funcionamiento:


Código de programación para Arduino: (comentado para una mejor comprensión)
Fichero Arduino disponible en el enlace  curso_CAMCode_fjmontero.ino
/*
Este es un programa diseñado para el taller presencial del Curso de Robótica 
Educativa -CAM_CODE- por Francisco Jesús Montero
Conectaremos diferentes dispositivos y realizaremos secuencias repetidas del código a
ejecutar a través del uso de funciones.
Ejecutaremos diferentes funciones asociadas a una secuencia de 6 ledes.
Ejecutaremos también una secuencia de encendido apagado de ledes a través de un relé.
Y controlaremos la velocidad de encendido y apagado de una secuencia de tres ledes 
a través de la tensión de un potenciómetro
*/
// Definimos variables 
int tiempo1=200; // Control de tiempos de retraso para encendidos y apagados
int tiempo2=500; // tiempo1 es tiempo breve, y tiempo2 más prolongado. 
//Se pueden variar a gusto del usuario.
int n;
int m;
// índices para administrar secuencias 
int sensorPin = 0; // Conectamos el pin central del potenciómetro -circuito de relé- al 
//pin analógico A0
int sensorValor; //Definimos como entero el valor del sensor, y le asignaremos 
//la lectura analógica del pin A0
void setup() { 
//comienza la configuracion, definimos los modos de trabajo de los pines de los 
//led como salidas

for (n=5;n<14;n++) //definimos los pines para leds 5 a 13
{
pinMode (n, OUTPUT);
pinMode (2, OUTPUT);// Pin 2 para conectar la base del transistor en el circuito de relé
digitalWrite (n, LOW); //apagamos todos los ledes alimentados directamente por Arduino 
//antes de empezar
}
}

// Definimos las diferentes funciones a ejecutar:secuencia1(), secuencia2()... rele(), 
//potenciometro()
void secuencia1() {   //encendido y apagado consecutivo y secuencial.
for (n=5;n<11;n++) {
digitalWrite (n, HIGH);
delay (tiempo1);
digitalWrite (n, LOW);
delay (tiempo1);
}
}
void secuencia2() { //encendido y apagado por parejas, con tiempos diferentes 
//de encendido y apagado
digitalWrite (5,HIGH);
digitalWrite (6,HIGH);
delay (tiempo2);
digitalWrite (7,HIGH);
digitalWrite (8,HIGH);
delay (tiempo2);
digitalWrite (9,HIGH);
digitalWrite (10,HIGH);
delay (tiempo2);
digitalWrite (5,LOW);
digitalWrite(6,LOW);
//delay (tiempo1);
digitalWrite (7,LOW);
digitalWrite(8,LOW);
//delay (tiempo1);
digitalWrite (9,LOW);
digitalWrite(10,LOW);
delay (tiempo2);
}
void secuencia3()  //encendido y apagado de led aleatorio durante tiempo aleatorio
{
  int pinaleatorio;
  
  int retraso;
 
  pinaleatorio = random(5,10); // Toma un número aleatorio entre 5 y 10, los pines.
  retraso =random(100,500); // toma número aleatorio para el retraso entre 100 y 500
  digitalWrite(pinaleatorio, HIGH);  // enciende LED aleatorio
  delay(retraso);              // pausa hasta apagar
  digitalWrite(pinaleatorio, LOW);   // apaga el mismo LED 
}
void secuencia4() { //secuencia coche fantástico. Enciende uno a uno todos los ledes
for (n=5;n<11;n++) {
digitalWrite (n, HIGH);
delay (tiempo1);
}
//Apaga todos los ledes en secuencia inversa.
for (n=10;n>4;n--) {
digitalWrite (n, LOW);
delay (tiempo1);
}
}
void secuencia5() { // encendido y apagado rápido ledes alternos.
digitalWrite (5,HIGH);
digitalWrite (6,LOW);
digitalWrite (7,HIGH);
digitalWrite (8,LOW);
digitalWrite (9,HIGH);
digitalWrite (10,LOW);
delay (tiempo2);
digitalWrite (5,LOW);
digitalWrite(6,HIGH);
digitalWrite (7,LOW);
digitalWrite(8,HIGH);
digitalWrite (9,LOW);
digitalWrite(10,HIGH);
delay (tiempo2);
}
void rele() { // Un relé conmuta para encender y apagar consecutivamente dos 
// ledes conectados a sus contactos NA y NC utilizando el contacto común 
//para limitar la corriente a través de una resistencia.
digitalWrite(2, HIGH);  // conecta el interruptor del relé
  
  delay(tiempo2);              // esperamos tiempo2
  
digitalWrite(2, LOW);   // conmuta el relé a su posición de reposo
  
  delay(tiempo2);              // esperamos tiempo2
}
void potenciometro() { 
//la tensión del cursor de un potenciómetro controla el tiempo de encendido 
//y apagado de una serie de 3 diodos
  sensorValor = analogRead(sensorPin); // La tensión entre 0V y 5V se convierte en 
//un valor entero entre 0 y 1023 ms en nuestra función
  digitalWrite(11, HIGH); 
// Encendemos los diodos de manera consecutiva
// Añadimos un retraso en milisegundos del valor dado por la tensión del potenciómetro
  delay(sensorValor);         
// Repetimos los mismos pasos para los otros dos leds, 
//retrasando el encendido 100ms más en cada uno                         
  digitalWrite(12, HIGH); 
  delay(sensorValor+100);
  digitalWrite(13, HIGH); 
  delay(sensorValor+200);
// Apagamos los leds en el mismo orden y aplicando los mismos retrasos         
  digitalWrite(11, LOW);   
  delay(sensorValor);     
  digitalWrite(12, LOW);   
  delay(sensorValor+100);         
   digitalWrite(13, LOW);   
  delay(sensorValor+200);                   
}

void loop() {
// La repetición (Loop) se realiza continuamente, sin fin.
// repetiremos todas las funciones un número determinado de veces para 
//que se pueda apreciar el funcionamiento.
for(m=1;m<6;m++) {
secuencia1(); // Encendido y apagado consecutivo
}
for(m=1;m<6;m++) {
secuencia2(); // Encendido y apagado por parejas
}
for(m=1;m<11;m++) {
secuencia3(); // encendido y apagado de Led aleatorio durante un tiempo aleatorio
}
for(m=1;m<6;m++) {
secuencia4(); // Que voy que vengo, coche fantástico
}
for(m=1;m<6;m++) {
secuencia5(); // Pares e impares
}
for(m=1;m<21;m++) {
rele(); // Circuito de conmutación entre ledes a través de un relé 
//temporizado, explicado en mi blog 
//http://tecnomapas.blogspot.com.es/2015/03/practicando-con-reles-y-arduinouno-otra.html
}
for(m=1;m<16;m++) {
potenciometro(); 
/* mediante la lectura del cursor de un un potenciómetro 
controlamos el tiempo de encendido y apagado de tres leds, desarrollado 
en http://tecnomapas.blogspot.com.es/2014/04/aprendiendo-arduino-preparando-el.html */
}
}

Objetivos:
  1. Promover la capacidad de los alumnos para regular su propio aprendizaje con autonomía, confiando en sus aptitudes y conocimientos, así como para desarrollar la creatividad, la iniciativa personal, el espíritu emprendedor y la constancia ante las dificultades.
  2. Estimular en el alumnado el desarrollo de competencias básicas, fomentando la correcta expresión oral y escrita y el uso de las matemáticas.
  3. Educar en la responsabilidad individual y en el mérito y esfuerzo personal.
  4. Planificar procesos de trabajo mediante la elaboración de un plan, reparto de tareas y distribución temporal de las mismas.
  5. Conocer qué son los sistemas de control y los operadores que los forman, valorando la importancia de la automatización en la sociedad actual.
  6. Utilizar el dibujo como medio de síntesis, expresión y comunicación de ideas.
  7. Trabajar en grupo y desarrollar habilidades para las relaciones humanas que favorezcan la discusión de ideas, la gestión de conflictos y la toma de decisiones bajo una actitud de respeto y tolerancia.
  8. Comunicar informaciones de forma escrita con la ayuda de: dibujos, tecnologías multimedia, maquetas, etc. 
  9. Fomentar en el alumnado el uso del lenguaje oral, preparándoles para hablar en público ante sus compañeros, como método para comunicarse de forma eficaz, perder el miedo a la coevaluación y ensayo de técnicas para realizar críticas constructivas.
  10. Identificar los distintos componentes electrónicos. Comprender las funciones de los componentes electrónicos (sensores, actuadores) disponibles para interactuar de manera sencilla con el mundo físico.
  11. Utilizar Internet para localizar información en diversos tipos y soportes de interés para resol¬ver tareas de búsqueda de diferentes áreas de conocimiento y experiencia.
  12. Ofrecer al alumnado la posibilidad de convertirse en creadores y difusores de conocimiento a través de diversas herramientas de la Web 2.0. Saber diseñar o blog.
Contenidos:
  • Formulación de un proyecto Tecnológico. Identificación del problema, análisis de su naturaleza.
  • Innovación y Creatividad para la búsqueda de soluciones tecnológicas.
  • Diseño y representación gráfica de los elementos de un proyecto tecnológico.
  • Documentación de un proyecto para la elaboración de un prototipo tecnológico.
  • Divulgación de la evolución de un proyecto tecnológico a través de la Web.
  • Diseño, montaje y medida de los circuitos electrónicos de un proyecto tecnológico.
  • Programación de los circuitos electrónicos de un proyecto tecnológico. 
  • Documentación de un prototipo desarrollado a través de un proyecto tecnológico. 
Tengo disponibles también las competencias clave  y criterios de evaluación trabajados en dicha unidad didáctica, aunque no las publico aquí, ya que el artículo está resultando demasiado largo.

Si alguien los desea, no tiene más que pedirlo, le paso la unidad didáctica completa. Sigo con mi filosofía "Copyleft".


No hay comentarios:

Publicar un comentario