Calabaza diabólica para Halloween con Arduino

Calabaza diabólica con Arduino

Hoy os traigo un montaje muy apropiado para estas fechas. Una calabaza diabólica basada en Arduino que se activa por proximidad, habla y enciende sus ojos.

Para detectar la proximidad de un individuo tenemos varias opciones. Yo he optado por un sensor de ultrasonidos HC-SR04. Quizá no sea lo más óptimo pero es lo que tenía más a mano. También necesitaremos un par de LEDs con sus respectivas resistencias de 1K y un pequeño altavoz o speaker (cuidado, no lo he probado, pero me temo que con un piezoeléctrico no funcione bien). La idea es que cuando alguien se acerque a la calabaza, emita un sonido digitalizado y encienda sus dos ojos (LEDs). Éste es el circuito.

Circuito calabaza Arduino

El altavoz se conecta a tierra y al pin 11, el sensor de ultrasonidos a los pines 9 y 10 (además de a VCC y  GND), y finalmente, he usado los pines 2 y 3 para controlar el encendido de los LEDs. La cosa queda así.

Circuito detalle

Otro asunto es cómo meter todo en la calabaza. La mía, de plástico, era un poco pequeña y me ha costado acomodar y manipular dentro. He colocado el sensor en la boca y los LEDs en los ojos con la ayuda de un cutter. Aunque esto ya lo dejo a vuestra pericia manual, que seguramente es mejor que la mía.

No voy a entrar en más detalle sobre el funcionamiento de los LEDs ni del HC-SR04 que ya hemos usado en proyectos anteriores. Para reproducir sonidos digitalizados he usado la librería PCM de Damellis. Gracias a esta librería es posible reproducir pequeños samples de 8 bits a 8000 kHz. Dichos samples se transforman en un array de valores entre 0 y 255, que se insertan directamente en el programa. Como su autor lo explica bastante mejor que yo en su blog, es preferible que lo leáis allí.

El programa para Arduino es el siguiente.

 

#include <PCM.h>

#define MIN_DISTANCIA 30

int echo = 9;     // Pin para echo                          
int trigger = 10; // Pin para trigger
int ojo1 = 2; // leds para los ojos
int ojo2 = 3; 
unsigned long tiempoRespuesta;
unsigned long distancia;

const unsigned char sample[] PROGMEM = {
126, 124, 123, 123, 123, 124, 124, 124, 124, ...
  };


void setup()
{
  pinMode(trigger, OUTPUT);                     
  pinMode(echo, INPUT); 
  pinMode(ojo1, OUTPUT);
  pinMode(ojo2, OUTPUT);
}

void loop()
{
  digitalWrite(trigger, HIGH);            // Enviamos pulso de 10 microsegundos
  delayMicroseconds(10);                        
  digitalWrite(trigger, LOW);                   
  tiempoRespuesta = pulseIn(echo, HIGH);  // Y esperamos pulso de vuelta
  distancia = tiempoRespuesta/58;         // Calculo de distancia en cm

  if (distancia < MIN_DISTANCIA) {
    digitalWrite(ojo1, HIGH);
    digitalWrite(ojo2, HIGH);
    startPlayback(sample, sizeof(sample));    
    delay(5000);
    digitalWrite(ojo1, LOW);
    digitalWrite(ojo2, LOW);
  } 
}

 

He quitado los valores del array para almacenar el sample porque es bastante largo. Podéis descargar el programa completo aquí.

Os dejo el vídeo de la calabaza diabólica. Eso sí, tendréis que subir el sonido para escucharla porque suena bastante bajo.

 

CompartirShare on FacebookShare on Google+Tweet about this on TwitterShare on LinkedIn

2 Comentarios en "Calabaza diabólica para Halloween con Arduino"

  1. Cesar | en | Responder

    buen dia que tal? 🙂 me podras ayudar? como le puedo modificar el codigo para que realize el movimiento de un servomotor? al momento que el sensor detecte a alguien?

Deja un comentario.

Tu dirección de correo no será publicada.


*