DARTHDUINO. Reproduciendo el mundo Star Wars con Arduino

Hoy os vamos a enseñar otro de los proyectos que hemos realizado en nuestros talleres de robótica en familia. En las primeras sesiones de estos talleres les vamos enseñando a montar y programar diferentes componentes, y a partir de entonces, les proponemos retos para hacer montajes con algunos de esos componentes.

Intentamos siempre en estos miniproyectos mezclar la parte tecnológica de arduino con montajes manipulativos donde se pueda dar rienda suelta a la creatividad para la decoración del montaje.

En las dos sesiones previas al proyecto final de curso les propusimos un reto para el cual sólo iban a necesitar dos leds, un ultrasonidos y un buzzer.

Cuando explicamos el buzzer, les enseñamos a buscar melodías hechas para Arduino en Internet, y podemos encontrar algunas tan motivadoras para nuestros alumn@s como las de Star Wars, Mario Bros, Game of Thrones, Harry Potter, Piratas del Caribe y para los más intrépidos incluso alguna como “La Cucaracha”.

A partir de estas melodías les propusimos que eligieran su personaje favorito. Tendrían que encontrar una imagen adecuada en Internet para imprimirla y colocarla en un soporte, todo ello pintado y decorado de la manera que les pareciera mejor.

Con nuestro montaje terminado, tienen que hacer hueco a los componentes. Los ojos suelen ser buen sitio para conectar los leds, el ultrasonidos en el frontal y el buzzer por ejemplo en un lateral.

Y con todo cableado, finalmente la parte de programación. La idea general es que cuando alguien se acerque, el ultrasonidos lo detecte y comience a sonar la melodía relacionada y los leds se encendieran también. El código podría ser el siguiente:

/*Marcha Imperial por:

ERICK S. P.*/

int speakerPin = 7;

#define c 261
#define d 294
#define e 329
#define f 349
#define g 391
#define gS 415
#define a 440
#define aS 455
#define b 466
#define cH 523
#define cSH 554
#define dH 587
#define dSH 622
#define eH 659
#define fH 698
#define fSH 740
#define gH 784
#define gSH 830
#define aH 880

//Leds//
int led1 = 5;
int led2 = 6;

//ultrasonidos//
int trigPin = 9;
int echoPin = 10;
long durationPulso, distance;

void setup()
{
Serial.begin (9600);
delay(2000);
//Leds//
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
//Speaker//
pinMode(speakerPin, OUTPUT);
//Ultrasonidos
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}

void loop()
{
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);

calcularDistiancia();
Serial.println(distance);
if ( distance < 30 ){
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
march();
}
}

void calcularDistiancia(){

//limpiamos de ruido el pin que realizo el disparo del ultrasonido y lo lanzamos
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
digitalWrite(trigPin, LOW);
delayMicroseconds(4);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);

//recibimos el ultrasonido de vuelta
durationPulso = pulseIn(echoPin, HIGH);

// calculamos la distancia en cm
distance = durationPulso * 10 / 292/ 2; //convertimos a distancia, en cm
Serial.println(distance);
delay(100);

}

void beep (unsigned char speakerPin, int frequencyInHertz, long timeInMilliseconds)
{

int x;
long delayAmount = (long)(1000000/frequencyInHertz);
long loopTime = (long)((timeInMilliseconds*1000)/(delayAmount*2));
for (x=0;x<loopTime;x++)
{
digitalWrite(speakerPin,HIGH);
delayMicroseconds(delayAmount);
digitalWrite(speakerPin,LOW);
delayMicroseconds(delayAmount);
}

digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
delay(20);
}

void march()
{

beep(speakerPin, a, 500);
beep(speakerPin, a, 500);
beep(speakerPin, a, 500);
beep(speakerPin, f, 350);
beep(speakerPin, cH, 150);

beep(speakerPin, a, 500);
beep(speakerPin, f, 350);
beep(speakerPin, cH, 150);
beep(speakerPin, a, 1000);

beep(speakerPin, eH, 500);
beep(speakerPin, eH, 500);
beep(speakerPin, eH, 500);
beep(speakerPin, fH, 350);
beep(speakerPin, cH, 150);

beep(speakerPin, gS, 500);
beep(speakerPin, f, 350);
beep(speakerPin, cH, 150);
beep(speakerPin, a, 1000);

beep(speakerPin, aH, 500);
beep(speakerPin, a, 350);
beep(speakerPin, a, 150);
beep(speakerPin, aH, 500);
beep(speakerPin, gSH, 250);
beep(speakerPin, gH, 250);

beep(speakerPin, fSH, 125);
beep(speakerPin, fH, 125);
beep(speakerPin, fSH, 250);
delay(250);
beep(speakerPin, aS, 250);
beep(speakerPin, dSH, 500);
beep(speakerPin, dH, 250);
beep(speakerPin, cSH, 250);
//start of the interesting bit

beep(speakerPin, cH, 125);
beep(speakerPin, b, 125);
beep(speakerPin, cH, 250);
delay(250);
beep(speakerPin, f, 125);
beep(speakerPin, gS, 500);
beep(speakerPin, f, 375);
beep(speakerPin, a, 125);

beep(speakerPin, cH, 500);
beep(speakerPin, a, 375);
beep(speakerPin, cH, 125);
beep(speakerPin, eH, 1000);

beep(speakerPin, aH, 500);
beep(speakerPin, a, 350);
beep(speakerPin, a, 150);
beep(speakerPin, aH, 500);
beep(speakerPin, gSH, 250);
beep(speakerPin, gH, 250);

beep(speakerPin, fSH, 125);
beep(speakerPin, fH, 125);
beep(speakerPin, fSH, 250);
delay(250);
beep(speakerPin, aS, 250);
beep(speakerPin, dSH, 500);
beep(speakerPin, dH, 250);
beep(speakerPin, cSH, 250);

beep(speakerPin, cH, 125);
beep(speakerPin, b, 125);
beep(speakerPin, cH, 250);
delay(250);
beep(speakerPin, f, 250);
beep(speakerPin, gS, 500);
beep(speakerPin, f, 375);
beep(speakerPin, cH, 125);

beep(speakerPin, a, 500);
beep(speakerPin, f, 375);
beep(speakerPin, c, 125);
beep(speakerPin, a, 1000);

}

El código es bastante extenso pero realmente, tal y como les explicamos, en ocasiones no hace falta conocer todo el código que estamos cogiendo de Internet (el código relacionado para reproducir la melodía que hayamos elegido), sino sólo saber utilizarlo y tener bien conectados y configurados los puertos digitales a utilizar en nuestro Arduino.

Tal y como decimos en el título de nuestro artículo en Heraldo Escolar, con poco se puede hacer mucho. Son proyectos muy agradecidos, donde conectamos intereses de nuestros alumnos y que bien pueden decorar nuestras aulas o entradas de nuestras casas. Eso sí, seguro que más de un profesor acaba cogiendo un poco de manía a las mismas melodías durante el proceso de puesta a punto 🙂

Para acabar os dejaremos con Juan y Martín Katsicas (alumno de 6º de Primaria) que nos van a contar cómo fue su proceso de montaje, el cableado necesario y la programación en Arduino.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *