Bastón ambulante de Wizards
Componentes y suministros
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Aplicaciones y servicios en línea
|
Acerca de este proyecto
Este proyecto utiliza el Arduino 101, una batería y una tira de LED para hacer un bastón de mago controlado por gestos. Definiremos tres "hechizos" de visualización de luz diferentes que puede invocar moviendo el bastón en uno de los tres gestos.
Tecnología:
El código usa la Unidad de medición inercial en Arduino 101 para leer las fuerzas G, pero no usa el Motor de coincidencia de patrones (para ver un ejemplo con el PME, consulte el proyecto PME de Kitty Yeung). En cambio, este código cuenta los impulsos rápidos en las direcciones X, Y y Z y convoca hechizos cuando realiza una determinada combinación en poco tiempo.
Lanzamiento de hechizos:
Dos toques verticales rápidos inician un hechizo, luego puedes mover el bastón bruscamente hacia adelante, izquierda / derecha, o tocar una tercera vez para seleccionar uno de los tres hechizos, luego un toque final lanza el hechizo.
Comentarios visuales:
Para ayudarlo a comprender dónde se encuentra en su gesto, el código de ejemplo incluye comentarios visuales de la tira de LED. Cuando realizas un doble toque por primera vez, las luces parpadearán rápidamente en blanco, indicándote que se ha iniciado un hechizo. Obtendrá información visual de cada paso para que sepa qué hechizo se seleccionará.
Lanzamiento de hechizos (en detalle):
Sostenga el bastón con el Arduino 101 hacia usted. Primero, toque dos veces el bastón (¡suavemente!) En el suelo, o haga dos rápidos pulsos verticales en el aire. Cuando veas el destello blanco, mueve el bastón bruscamente hacia adelante o hacia atrás para seleccionar el hechizo 1, o inclina el bastón hacia la izquierda o hacia la derecha para seleccionar el hechizo 2, o muévete verticalmente por tercera vez para seleccionar el hechizo 3. Cuando se selecciona un hechizo, las luces se iluminará en verde sólido (hechizo 1), azul (hechizo 2) o rojo (hechizo 3). Una vez que las luces estén sólidas, invoca el hechizo con un toque vertical final. Las luces brillarán y parpadearán en el color seleccionado.
¡Los gestos son sensibles al tiempo! Tienes solo 1 segundo entre cada paso de un gesto o el hechizo se reiniciará. Eso significa que si te equivocas o seleccionas el hechizo incorrecto, puedes esperar un segundo y empezar de nuevo. Invocar hechizos con precisión es un poco complicado de dominar, pero la buena noticia es que los hechizos no se invocarán accidentalmente cuando estés caminando con el bastón.
Construyendo la electrónica:
Esto es básicamente solo un Arduino 101, una batería y una tira de LED NeoPixel.
Hay varias formas de configurar la energía. Lo más rápido sería usar una batería de 9v y ejecutar los LED directamente desde el Arduino 101, pero la duración de la batería sería muy corta. También puede usar una batería LiPo para maximizar la potencia / peso para una construcción más "profesional", pero necesitaría una forma segura de cargar la batería. Para mí, un buen equilibrio entre la duración de la batería y la simplicidad es usar 3 baterías AA y un regulador de voltaje de $ 4. Esta es la misma configuración electrónica que en Shadow Theater y Kaleidoscope Infinity Mirror.
Paso 1
Recoja el arnés del extremo de su tira de LED cortando aproximadamente 1 cm desde el extremo de las luces. Pele los extremos de los cables.
Paso 2
Rompa los pines del cabezal doblados que vienen con su regulador de voltaje y suelde dos de ellos a los extremos de los cables verde y amarillo. Esto te permitirá conectarlos fácilmente a los pines del Arduino 101.
Paso 3
A continuación, suelde el cable rojo al terminal VIN del regulador de voltaje y suelde dos cabezales rectos en los pines GND y VOUT como se muestra.
Paso 4
Ahora conecte los adaptadores de jack de barril. Primero pele los extremos de los cables que vienen de la caja de la batería, luego móntelos en los terminales del conector macho de barril y apriete con un destornillador. ROJO va al terminal (+), NEGRO va al terminal (-).
A continuación, conecte el adaptador de conector hembra de barril a los cables sueltos que vienen del comienzo de la tira de LED. AMARILLO va al terminal (-) y ROJO va al (+).
Paso 5
Ahora conecte su arnés al Arduino 101. El cable VERDE va al PIN 6, el cable AMARILLO va al pin GND cerca del # 13. Con los dos pines del cabezal en el regulador de voltaje, GND va a GND y VOUT va al pin "VIN" en el Arduino 101. ¡No lo malinterpretes! Conectarse al revés produce olores y quemaduras. Yo se esto.
Subiendo el código de ejemplo:
Paso 1
Con la batería apagada, use un cable USB para conectar su Arduino 101 a una computadora y cargue el código de ejemplo adjunto usando el IDE de Arduino.
Si nunca antes ha programado un Arduino 101, hay excelentes instrucciones en el sitio web de Arduino aquí:https://www.arduino.cc/en/Guide/Arduino101
Una vez que el código de ejemplo se haya cargado correctamente, puede desconectar el USB y probar el código encendiendo la batería e intentando algunos de los gestos de hechizos con el puerto USB en el Arduino 101 hacia abajo y con los pines hacia usted. Intente mover el tablero verticalmente cuatro veces para llamar al Hechizo Rojo.
Discusión sobre el código:
(Si solo desea usar el código de ejemplo tal como está, puede pasar a Construir el personal).
El código de ejemplo utiliza la capacidad de detección de descargas del Arduino 101 para contar las descargas, mientras que se ejecuta un temporizador que restablece la cuenta de descargas a cero después de un corto período de tiempo sin nuevas descargas. Si aciertas la combinación correcta antes de que expire el temporizador, se llama a una función de "hechizo".
Debido a que un golpe firme en el suelo registrará el choque inicial más varios choques de "ruido" de las vibraciones en el pentagrama, el primer código en bucle es simplemente tratar de encontrar un impulso dominante de cada lote de choques y categorizarlo simplemente como vertical, izquierda / derecha o delantera / trasera. Utilizo una variable llamada "gesto" para contener cada impulso dominante:1 =impulso vertical, 2 =impulso delantero / trasero, 3 =impulso izquierdo / derecho.
Luego, para rastrear combinaciones, el código usa una declaración de "cambio" y se mueve a través de ella a medida que se acumulan los gestos. Es como un libro de "elige tu propia aventura", donde cada paso dice algo como "si el siguiente impulso es a la izquierda / derecha, pasa al paso 2, si el temporizador ha expirado, vuelve a cero".
Hechizos:
Aquí es donde puedes cambiar fácilmente lo que hace cada hechizo. Estos están ejecutando actualmente código de ejemplo "theater-chase" en diferentes colores. Puede agregar fácilmente más, cambiar los colores o escribir su propia función de luz aquí. Las primeras tres variables de la función theaterChase son valores para rojo, verde y azul. El último número es la velocidad (número más alto =más lento).
////////////////////////////////////////////// ///// hechizos //////////////////////// void tapspell () {/// luces rojas del teatro theaterChase (strip.Color (127, 20, 0 ), 20); theatreChase (tira.Color (127, 20, 50), 55); strip.show (); } void leftspell () {theaterChase (tira.Color (0, 0, 100), 20); theatreChase (tira.Color (0, 30, 120), 75); strip.show (); } void forwardspell () {theaterChase (tira.Color (0, 127, 0), 30); theatreChase (tira.Color (0, 127, 90), 55); strip.show (); }
Construyendo el personal:
¡Aquí hay mucho espacio para la creatividad! Me centraré en la construcción tecnológica básica, pero me divertiré haciendo un personal único. Los difusores de luz, como tul, papel de seda o una botella de plástico sobre los LED, pueden crear pantallas de luz muy interesantes.
Paso 1:busque un bastón o un bastón de senderismo
Puedes usar un palo de escoba, un rociador o encontrar un palo natural. Las tiendas de manualidades de Michael también venden buenas. (En la sección de varillas, en realidad). Me gusta envolver una sección con cinta deportiva para tener un área de trabajo limpia para los componentes electrónicos, pero eso es opcional.
Ponga unas bandas elásticas en el bastón para que sea más fácil sujetar las cosas.
Paso 2:coloca el Arduino 101 en el bastón con el puerto USB hacia abajo
Utilice una banda elástica para sujetar el Arduino 101 en su lugar.
Paso 3:use bandas elásticas para ayudar en ambos extremos y envuelva los LED
Paso 4:Envuelva la cinta deportiva para asegurar el Arduino 101 y la batería
Asegúrese de dejar acceso al interruptor de encendido / apagado de la batería. Desea que el paquete de baterías esté seguro para golpes / golpes, pero recuerde que deberá cambiar esas baterías eventualmente.
Paso 5:difunde las luces LED y decora
Código
- Código de ejemplo de Wizard Walking Staff
Código de ejemplo de Wizard Walking Staff Arduino
Cuente los impulsos en los ejes x, y, z, ciertas combinaciones de impulsos convocan "hechizos" (pantallas de luz) en una tira de neopixel./ * Copyright (c) 2016 Intel Corporation. Reservados todos los derechos. Consulte el aviso de licencia al final del archivo. * // * Arduino 101 "Wizard's Walking Staff". Este código usa la biblioteca Adafruit Neopixel. Instrucciones de instalación de la biblioteca aquí:https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-installation Asegúrese de tener instalado el último Intel Curie Core. Para obtener más información, visite https://www.arduino.cc/en/Guide/Arduino101*/#include "CurieIMU.h" #include#define PIN 6 //// qué pin están conectados los NeoPixels a? Adafruit_NeoPixel strip =Adafruit_NeoPixel (60, PIN, NEO_GRB + NEO_KHZ800); /// la tira tiene 60 píxeles de largo.int tr =0; // Algunas variables para mantener el color objetivo y el color actual para suavizar ... int tg =0; int tb =0; int r =0; int g =0; int b =0; long int globaltimer =0; /// temporizadores para realizar un seguimiento de los gestos en función del tiempo ... para cosas como "si el temporizador no ha pasado 0,5 segundos, Y hay dos toques, entonces ..." long int Gesttimer =0; long int ledtimer =0; int desvanecimiento =10; /// qué tan rápido se desvanecen las luces. Se utiliza para suavizar el toque =0; // couter para impulsos verticalesint lr =0; // couter para impulsos izquierda / derechaint fb =0; // couter para impulsos de avance / retrocesoint gesto =0; // estado int =0; /// para nuestro caso de cambio ... esto hará un seguimiento de cada movimiento en una serie.void setup () {// ponga su código de configuración aquí, para que se ejecute una vez://Serial.begin(9600); temporizador global =milis (); // iniciar cronometradores en el tiempo actual GestosTimer =millis (); ledtimer =milis (); / * Inicializar la IMU * / CurieIMU.begin (); CurieIMU.attachInterrupt (eventCallback); / * Habilitar la detección de descargas * / CurieIMU.setDetectionThreshold (CURIE_IMU_SHOCK, 1500); // 1.5g =1500 mg CurieIMU.setDetectionDuration (CURIE_IMU_SHOCK, 50); // milisegundos de pico requeridos para llamar a interupt CurieIMU.interrupts (CURIE_IMU_SHOCK); strip.begin (); // inicializar la tira de neopixel strip.show (); // Inicializa todos los píxeles en 'off'} void loop () {// coloca tu código principal aquí, para que se ejecute repetidamente://// filtro básico:la IMU registra múltiples choques de rebote y contraataque. Esto intenta capturar el impacto dominante en cada gesto. if (millis () - globaltimer> 170) {/// esto intenta encontrar el eje de movimiento dominante para cada choque. Compara la suma de los movimientos de tap, izquierda-derecha y de adelante hacia atrás, y elige el más grande. if ((toque> lr) &&(toque> fb)) {Serial.println ("toque"); gesto =1; tap =0; lr =0; fb =0; //// restablecer los valores después de que se clasifica un movimiento. } más si ((lr> fb) &&(lr> tap)) {Serial.println ("lr"); gesto =2; tap =0; lr =0; fb =0; } más si ((fb> lr) || (fb> tap)) {Serial.println ("fb"); gesto =3; tap =0; lr =0; fb =0; }} ////////////////////////////////////////////////// //////////////////////////////////////////////////// //////////////////////////// if (millis () - globaltimer> 1000) {///// timeoutreset globaltimer =millis () - 170; tr =0; tg =0; tb =0; estado =0; // gesto =0; } if (milis () - temporizador de gestos> 1000) {temporizador de gestos =milis () - 350; tr =0; tg =0; tb =0; estado =0; // gesto =0; } /////////////////////////////////////////////////// //////////////////////////////////////////////////// ////////////////////////// switch (state) {// Esto rastrea los gestos caso 0:{/// aún no se han registrado gestos ... escuche el grifo. Si hay uno, vaya al caso 1. if (millis () - timertimer> 350) {if (gesto ==1) {estado =1; gesto =0; temporizador de gestos =millis (); } } descanso; } caso 1:{///// un toque grabado. Si ocurre un segundo toque, reproduzca un destello rápido y luego vaya al paso 2. if (millis () - gestor de tiempo> 350) {if (gesto ==1) {r =10; g =10; b =10; /// estado de flash de retroalimentación =2; gesto =0; temporizador de gestos =millis (); } } descanso; } caso 2:{/////// Punto de conmutación:dos toques registrados. Los tres hechizos divergen aquí según el siguiente gesto. Si es un toque, vaya al caso 3. Si es L / R, vaya al caso 4. Si es Delantero / Atrás, vaya al caso 5. if (millis () - gestor de tiempo> 350) {if (gesto ==1) {estado =3; gesto =0; temporizador de gestos =millis (); } si (gesto ==2) {estado =4; gesto =0; temporizador de gestos =millis (); } si (gesto ==3) {estado =5; gesto =0; temporizador de gestos =millis (); } } descanso; } caso 3:{//// tres toques grabados ... estamos en el hechizo tap, poner el bastón rojo y escuchar el "tap" final para activar el hechizo. tr =20; tg =0; tb =0; temporizador global =milis () - 250; if (milis () - temporizador de gestos> 350) {if (gesto ==1) {estado =0; Serial.println ("tapspell!"); tapspell (); } } descanso; } caso 4:{///// dos toques y una L o R grabada ... estamos en el hechizo de la izquierda, pon el pentagrama azul y escucha el "toque" final para activar el hechizo. tr =0; tg =0; tb =20; temporizador global =milis () - 250; if (millis () - temporizador de gestos> 350) {; si (gesto ==1) {estado =0; Serial.println ("¡hechizo izquierdo!"); leftspell (); } } descanso; } caso 5:{///// //// dos toques y una grabación hacia adelante o hacia atrás ... estamos en el hechizo hacia adelante, pon el pentagrama en verde y escucha el "toque" final para activar el hechizo. tr =0; tg =20; tb =0; temporizador global =milis () - 250; if (milis () - temporizador de gestos> 350) {if (gesto ==1) {estado =0; Serial.println ("hacia adelante!"); forwardspell (); } } descanso; } predeterminado:{descanso; }} //Serial.println(tr); if (millis () - ledtimer> fade) {/// solo haga este próximo paso periódicamente cada (valor de fade) milisegundos. A diferencia de la función "delay ()", esto permite que sucedan otras cosas en el programa entre actualizaciones. /// suavizado de color. El color real se mueve hacia el color del objetivo ... Si el objetivo es más que actual, muévase hacia arriba, si es menos, muévase hacia abajo. si (tr> r + 1) {r ++; } si (tg> g + 1) {g ++; } si (tb> b + 1) {b ++; } si (tr
Registrador de datos GPS, análisis espacial y Azure IoT Hub. Control de clima por zonas con MediaTeks LinkIt ™ Smart 7688
Proceso de manufactura
- Detección de campos eléctricos de CA
- Cálculos de potencia
- Siete formas de hacer que su etapa de posprocesamiento sea más segura
- Colorante de alimentos:los ingredientes esenciales para que los alimentos sean atractivos
- ¿Cómo hacer que cualquier modelo de negocio de IoT funcione o no?
- Crea tu propio SOMBRERO de Google Voice
- Cómo hacer una plataforma de robot Arduino + Raspberry Pi
- Cómo hacer fibra de vidrio
- Cómo hacer un molde de inyección
- ¡Cualquier día puede ser un día de fabricación!
- Cómo hacer una animación de corte en Solidworks