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...

Scripts en NMAP

Cuando pensamos en NMAP, pensamos en el escaneo de puertos de un host objetivo al que estamos relizando una prueba de intrusión, pero gracias a las posibilidades que nos ofrecen su Scripting Engine , NMAP es mucho más que eso. Antes de continuar, un aviso: algunas de posibilidades que nos ofrecen los scripts de NMAP son bastante intrusivas, por lo que recomiendo hacerlas contra hosts propios, máquinas virtuales como las de Metasploitable, o contrato de pentesting mediante. Para este artículo voy a usar las máquinas de Metasploitable3 . No voy a entrar en los detalles sobre el uso básico de NMAP, ya que hay miles de tutoriales en Internet que hablan sobre ello. Lo cierto es que NMAP tiene algunas opciones que permiten obtener información extra, además de qué puertos están abiertos y cuales no. Por ejemplo, la opción -sV trata de obtener el servicio concreto, e incluso la versión del servicio que está corriendo en cada puerto. Otro ejemplo es la opción -O, que intenta averiguar el ...