Ir al contenido principal

Calabaza diabólica para Halloween 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.

Calabaza diabólica halloween

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.

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

Comentarios

Entradas populares de este blog

Creando firmas de virus para ClamAV

ClamAv es un antivirus opensource y multiplataforma creado por Tomasz Kojm muy utilizado en los servidores de correo Linux. Este antivirus es desarrollado por la comunidad, y su utilidad práctica depende de que su base de datos de firmas sea lo suficientemente grande y actualizado. Para ello es necesario que voluntarios contribuyan activamente aportando firmas. El presente artículo pretende describir de manera sencilla cómo crear firmas de virus para ClamAV y contribuir con ellas a la comunidad.

Ingeniería inversa de un parche de Microsoft Windows

A estas alturas ya hemos asumido que la seguridad total en Internet es, cuanto menos, un mito. Ningún software está libre de vulnerabilidades, y por mucha auditoría, test de intrusión o pruebas de fuzzing que nos empeñemos en hacer, ninguna metodología puede demostrar sin lugar a dudas que un software es 100% seguro. Ante este panorama, hay dos tendencias mayoritarias a la hora de hacer públicas las vulnerabilidades. Por un lado, están los que piensan que cuando se descubre un fallo ha de hacerse público de forma inmediata. En este escenario, la publicación de una vulnerabilidad es el pistoletazo de salida para una carrera entre el desarrollador para sacar el parche y los "malos" para lograr explotarla. Esta política es conocida como full disclosure . Por otro lado, tenemos a los siguen una política responsible disclosure , que abogan por mantener la vulnerabilidad en secreto hasta la salida del parche por parte del desarrollador. Sin entrar en cuestiones filosóficas que no...

Manejo de grafos con NetworkX en Python

El aprendizaje computacional es un área de investigación que en los últimos años ha tenido un auge importante, sobre todo gracias al aprendizaje profundo (Deep Learning). Pero no todo son redes neuronales. Paralelamente a estas técnicas, más bien basadas en el aprendizaje de patrones, también hay un auge de otras técnicas, digamos, más basadas en el aprendizaje simbólico. Si echamos la vista algunos años atrás, podemos considerar que quizá, la promesa de la web semántica como gran base de conocimiento ha fracasado, pero no es tan así. Ha ido transmutándose y evolucionando hacia bases de conocimiento basadas en ontologías a partir de las cuales es posible obtener nuevo conocimiento. Es lo que llamamos razonamiento automático y empresas como Google ya lo utilizan para ofrecerte información adicional sobre tus búsquedas. Ellos lo llaman Grafos de Conocimiento o Knowledge Graphs . Gracias a estos grafos de conocimiento, Google puede ofrecerte información adicional sobre tu búsqueda, ad...