La idea
Las decoraciones son simplemente parte de Halloween. Y una calavera tan genial en la ventana se vería increíble. Pero sólo si la gente también lo notara. En la oscuridad el efecto es bastante manejable. Por supuesto, sería mejor si los ojos brillaran. Incluso mejor si no sólo brillan sino que parpaderan o se desvanecieran. Y tan irregulares como sea posible. Así que tomé mi soldador y mi PC de nuevo e hice un nuevo proyecto.
El Hardware
Para el proyecto, tenía casi todo en casa.
En primer lugar, necesita una calavera. Puedes conseguirla en Amazon o en algunas tiendas de fiestas bien surtidas. La mía tiene un tamaño realista, así que puede verla de pie en la ventana desde fuera.
Luego necesita 2 LEDs, los mejores en color rojo y bonitos y brillantes.
Como unidad de control usé un DigiSpark (Digistump).
Por supuesto, cualquier otra variante de Arduino también es posible.
Para el circuito todavía necesita resistencias en serie limitadoras de corriente a' 220Ohm para los LEDs y algunos cables.
Para la fuente de alimentación se pueden utilizar diferentes métodos. La forma más fácil es, por supuesto, un banco de energía con un cable de extensión USB. Pero hay que tener cuidado, porque el consumo de energía puede ser demasiado bajo para algunos bancos de energía, de modo que pueden ser apagados después de un corto tiempo o incluso no ser encendidos en absoluto.
Otra opción es una simple caja de baterías para 3xAAA (si están equipadas con 1.5V) o 4xAAA, si son baterías recargables (1.2V). Esta ya está disponible con interruptor y cable.
El cableado es bastante simple.
La Caja de la Batería se conecta a GND y 5V. (Con una fuente de alimentación USB no se necesita esto). En los cátodos de los dos LEDs tiene que soldar primero un trozo de cable al conector de tierra de la caja de la batería.
Primero se suelda la resistencia en serie (normalmente 220Ohm a 2,2V de voltaje directo del LED) a los ánodos de los LEDs. Luego se suelda un cable a la resistencia y se conecta a los conectores P0 y P1 del Digispark. Si desea utilizar un Arduino diferente, tenga en cuenta que las salidas deben soportar PWM. Con el Arduino Uno o Nano puede usar las salidas 5 y 6. Sólo recuerda cambiar las constantes correspondientes en la parte superior del programa. (`OUT_1` y `OUT_2`)
Ahora puede cortar cuidadosamente una tapa plegable de la parte inferior de la cabeza con un cuchillo para alfombras. Luego hace un agujero de 5mm en el medio de cada ojo y conecta los LEDs con los cables desde el interior. El resto de la electrónica, incluyendo la batería, puede ser almacenada en el cráneo.
La cabeza es ligeramente transparente y el LED rojo de mi Digispark es también muy brillante. Como este LED también usa el PIN 1, toda la cabeza brilla al mismo ritmo que los ojos. Si quiere tener esto de forma independiente, puede por supuesto soldar el LED del ojo del PIN 1 a otro PIN y cambiarlo en el programa. Otra salida PWM es proporcionada por el PIN 4 en el Digispark.
El Software
Instalación del Digispark
Primero hay que instalar el controlador de Windows correcto para el Digispark.
Para ello, descárguelo de la página web:
[https://github.com/digistump/digiStumparduino/releases]
el archivo DigiStump.Drivers.zip.
Descomprima este archivo en cualquier directorio y luego ejecute el archivo DPinst64.exe (Windows 64 Bit, para 32 Bit DPinst.exe). Sólo tiene que seguir las instrucciones del programa de instalación.
El siguiente paso es añadir el Digispark al administrador de la placa del Arduino IDE. Puede hacerlo fácilmente añadiendo la siguiente URL a la lista de "additional board manager URLs" en las preferencias. Si ya tiene URLs adicionales del administrador de la placa allí, por favor no olvide la coma.
> `http://digistump.com/package_digistump_index.json`
Ahora puede buscar la entrada de Digistump AVR Boards en Tools/Board/Board manager. Contiene el tablero. Luego puede instalarla.
El último paso de la configuración del hardware es seleccionar el Digispark (por defecto 16.5MHz) como placa activa.
Hasta ahora hemos terminado con la instalación. Una característica especial de Digispark es que no necesita un puerto. Si desea cargar un programa, esto sólo funciona si el “dwarf” (microcontrolador) acaba de ser conectado/iniciado en el puerto USB. Al cargar, aparece la siguiente instrucción en la consola:
En este momento necesita conectar el Digi en el puerto USB.
Por supuesto, todo es más fácil si tiene un concentrador USB conmutable. De esa manera no tiene que conectarlo y desconectarlo.
El código
No tengo que decir mucho sobre el programa. Ambas salidas son capaces de PWM, es decir, puede alimentarlas con valores entre 0 y 255. Pero el programa no se desvanece completamente, sino que comienza con un valor mínimo. Y también el tiempo de vuelta se elige al azar de un intervalo. El programa ahora hace que los dos LED suban y bajen simultáneamente en este intervalo aleatorio.
/*
Skull
This is a tiny little program for fading red eyes on a skull for Halloween.
Designed for a Digispark or Tiny85
Copyright 2020 Wilfried Klaas
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
const byte OUT_1 = 0;
const byte OUT_2 = 1;
const byte MAX = 255;
const byte MIN = 16;
const byte DELAY= 7;
const word ROUNDTIME_MIN = 500;
const word ROUNDTIME_MAX = 1500;
bool up = true;
byte bright = MIN;
byte level = MAX;
word delayTime = 7;
word roundTime = ROUNDTIME_MIN + (ROUNDTIME_MAX - ROUNDTIME_MIN) / 2;
void setup() {
pinMode(OUT_1, OUTPUT);
pinMode(OUT_2, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
analogWrite(OUT_1, bright); // turn the LED on (HIGH is the // voltage level)
analogWrite(OUT_2, bright); // turn the LED on (HIGH is the // voltage level)
if (bright >= level) {
up = false;
}
if (bright <= MIN) {
up = true;
level = random(16, MAX);
roundTime = random(ROUNDTIME_MIN, ROUNDTIME_MAX);
delayTime = roundTime / (level - MIN);
}
if (up) {
bright++;
} else {
bright--;
}
delay(delayTime);
}
Conclusión
Diviértase construyendo este proyecto.
Espero que haya disfrutado de este corto blog.
Nos vemos en la próxima serie de blogs!
Wilfried Klaas