Arduino MusicStump: Luz, toque cautivo y un zumbador: 3 pasos

Arduino MusicStump: Luz, toque cautivo y un zumbador: 3 pasos

Tabla de contenido:

Anonim

Un árbol interactivo con un anillo LED en la parte superior, un zumbador para hacer sonido y un sensor táctil cautivo en su interior que cambia el color al tocarlo. Para hacer esta pequeña cosa divertida necesitarás lo siguiente:

Electrónica:

- 1x Arduino Uno

- cables 15x

- 1x soldador con punta redonda.

- 1x toque cautivo de 8 teclas Adafruit (CAP1188)

- 1x cable de alimentación Arduino

- Anillo 1x8 LED.

- 1x zumbador

- 1x pistola de pegamento caliente

- Descargue la biblioteca de CAP1188 http: //learn.adafruit.com/adafruit-cap1188-breako …

- Descargue la biblioteca de Adafruit Neopixel

Extra (carcasa):

- 1x tocón de árbol

- 1x stick para interior

- Bandeja de madera para colocarlo todo sobre / dentro.

- Relleno de peluche para el exterior.

También puedes usar otra cosa como fuera, ¡sé creativo!

Ahora vamos a empezar …

Suministros:

Paso 1: Paso 1: Anillo LED con toque cautivo

Ahora, si tienes suerte, tu anillo LED ya tiene alfileres. Si no es el momento de soldar!

Las cosas que usaremos para este proyecto son:

- DI (Entrada digital, pin 6 ~

- 5V (para alimentación, 5V pin)

- GND (El suelo, pin GND)

Ese es el anillo LED por ahora.

Ahora el toque cautivo.

Colóquelo en un tablero y conecte todo de la siguiente manera:

SDA / MISO en pin (entrada analógica) A4

SCK en el pin (entrada analógica) A5

VIN en (potencia) 5V

GND en un pin GND

Cable 1x en C1 (en el propio toque cautivo)

Ahora para probar, cargue el siguiente código en su Arduino:

// Julia Emmink

// Código de luz y toque para el árbol interactivo 19/01/2018 // Hecho con el uso de Adafruit Neopixel y Adafruit touch cautivo (CAP1188) (se instalará) y el LED parpadeará sin demora

// NEOPIXEL ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~ #incluir

#define PIXELSPIN 6 // Donde conectó el anillo de LED #define NUMPIXELS 8 // La cantidad de LED que están en su anillo #define CALIBRATIONTIME 20000

Adafruit_NeoPixel pixels = Adafruit_NeoPixel (NUMPIXELS, PIXELSPIN, NEO_GRB + NEO_KHZ800);

Intervalo de píxeles largo sin firmar = 500; // el tiempo que debemos esperar sin firmar largo colorWipePreviousMillis = 0; largo sin firmar theaterChasePreviousMillis = 0; arco iris largo sin firmarPreviousMillis = 0; arco iris largo sin firmarCyclesPreviousMillis = 0;

int theaterChaseQ = 0;

uint16_t currentPixel = 0; // en qué píxel estamos operando

// TOUCH ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~ #incluir #incluir #incluir

// Restablecer Pin se usa para I2C o SPI # define CAP1188_RESET 9

// El pin CS se usa para el software o hardware SPI #define CAP1188_CS 10

// Estos están definidos para el software SPI, para el hardware SPI, verifique los pines SPI de su placa en la documentación de Arduino #define CAP1188_MOSI 11 #define CAP1188_MISO 12 #define CAP1188_CLK 13

// ¡Usa I2C, no hay pin de reinicio! Adafruit_CAP1188 cap = Adafruit_CAP1188 ();

configuración de vacío () {// NEOPIXEL ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~ currentPixel = 0; pixels.begin (); // Esto inicializa la biblioteca NeoPixel. pixels.show (); // Esto envía el color de píxel actualizado al hardware.

// TOUCH ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~ Serial.begin (300); Serial.println ("CAP1188 test!");

if (! cap.begin ()) {Serial.println ("CAP1188 no encontrado"); mientras (1); } Serial.println ("¡CAP1188 encontrado!"); }

bucle de vacío () {// TOUCH + NEOPIXEL ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~ uint8_t touch = cap.touched (); if (toque == 0) {if ((sin signo largo) (millis () - colorWipePreviousMillis)> = pixelsInterval) {colorWipePreviousMillis = millis (); colorWipe (pixels.Color (0, 255, 125)); }} else else if ((sin signo largo) (millis () - colorWipePreviousMillis)> = pixelsInterval) {colorWipePreviousMillis = millis (); colorWipe (pixels.Color (100, 0, 150)); }}

}

void colorWipe (uint32_t c) {// NEOPIXEL ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~ // Elimina el color pixels.setPixelColor (currentPixel, c); pixels.setPixelColor (currentPixel - 1, pixels.Color (0, 0, 0)); pixels.show (); currentPixel ++; if (currentPixel == NUMPIXELS) {currentPixel = 0; pixels.setPixelColor (7, pixels.Color (0, 0, 0));

} }

Pruébalo y diviértete! Como ves cuando tocas el cordón C1 el color cambia. (Si no es la primera vez, simplemente desconecte su Arduino y conéctelo nuevamente a su computadora).

Paso 2: Paso 2: ¡Agregando sonido!

Con el uso de un práctico tutorial hice esto. El tutorial es abajo:

http: //github.com/xitangg/-Pirates-of-the-Caribbe …

¡Hora de agarrar tu timbre! Coloque el (-) del zumbador en uno de los pines de GND y el (+) en el pin 10 ~

¡Eso es todo, ahora es el momento de ejecutar el código de nuevo y escuchar esa hermosa melodía de Piratas del Caribe! Ahora diviértete probando!

// Julia Emmink

// Código de luz, toque y música para el árbol interactivo 19/01/2018

// Hecho con el uso de Adafruit Neopixel y Captive Touch (CAP1188) (se instalará) y el LED parpadeará sin demora

// NEOPIXEL ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~

#incluir

# define PIXELSPIN 6 # define NUMPIXELS 8 # define CALIBRATIONTIME 20000

Adafruit_NeoPixel pixels = Adafruit_NeoPixel (NUMPIXELS, PIXELSPIN, NEO_GRB + NEO_KHZ800);

Intervalo de píxeles largo sin firmar = 500; // el tiempo que debemos esperar sin firmar largo colorWipePreviousMillis = 0; largo sin firmar theaterChasePreviousMillis = 0; arco iris largo sin firmarPreviousMillis = 0; arco iris largo sin firmarCyclesPreviousMillis = 0;

int theaterChaseQ = 0;

uint16_t currentPixel = 0; // en qué píxel estamos operando

// MÚSICA ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~ const int buzzer = 10; // Defina el pin 10, puede usar otros pWM (5,6 o 9) // Los pines de nota 3 y 11 no se pueden usar cuando se usa la función de tono en Arduino Uno const int songspeed = 1.5; // Cambie a 2 para una versión más lenta de la canción, cuanto mayor sea el número, más lenta será la canción // *************************** ************** #define NOTE_C4 262 // Definición de la frecuencia de la nota #define NOTE_D4 294 #define NOTE_E4 330 #define NOTE_F4 349 #define NOTE_G4 392 #define NOTE_A4 440 #define NOTE_B4 494 #define NOTE_C5 523 #define NOTE_D5 587 #define NOTE_E5 659 #define NOTE_F5 698 #define NOTE_G5 784 #define NOTE_A5 880 #define NOTE_B5 988 // *********************** ****************** int notas = {// Nota de la canción, 0 es un descanso / pulso NOTE_E4, NOTE_G4, NOTE_A4, NOTE_A4, 0, NOTE_A4, NOTE_B4, NOTE_C5, NOTE_C5, 0, NOTE_C5, NOTE_D5, NOTE_B4, NOTE_B4, 0, NOTE_A4, NOTE_G4, NOTE_A4, 0}; // ***************************************** int duration = {/ / duración de cada nota (en ms) La nota trimestral se establece en 250 ms 125, 125, 250, 125, 125, 125, 250, 125, 125, 125, 125, 250, 125, 125, 125, 125, 375, 125};

// TOUCH ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~ #incluir #incluir #incluir

// Restablecer Pin se usa para I2C o SPI # define CAP1188_RESET 9

// El pin CS se usa para el software o hardware SPI #define CAP1188_CS 10

// Estos están definidos para el software SPI, para el hardware SPI, verifique los pines SPI de su placa en la documentación de Arduino #define CAP1188_MOSI 11 #define CAP1188_MISO 12 #define CAP1188_CLK 13

// ¡Usa I2C, no hay pin de reinicio! Adafruit_CAP1188 cap = Adafruit_CAP1188 ();

configuración del vacío () {// MÚSICA ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~ para (int i = 0; i <203; i ++) {// 203 es el número total de notas musicales en la canción int wait = duration i * songspeed; tono (zumbador, notas i, espera); // tono (pin, frecuencia, duración);} // se usa el retardo para que no pase al siguiente bucle antes de que el tono termine de reproducirse // Puede hacer clic en reiniciar en Arduino para reproducir la canción // NEOPIXEL ~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ currentPixel = 0; pixels.begin (); // Esto inicializa la biblioteca NeoPixel. pixels.show (); // Esto envía el color de píxel actualizado al hardware.

// TOUCH ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~ Serial.begin (300); Serial.println ("CAP1188 test!"); if (! cap.begin ()) {Serial.println ("CAP1188 no encontrado"); mientras (1); } Serial.println ("¡CAP1188 encontrado!");

}

bucle de vacío () {// TOUCH + NEOPIXEL ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~ uint8_t touch = cap.touched (); if (toque == 0) {if ((sin signo largo) (millis () - colorWipePreviousMillis)> = pixelsInterval) {colorWipePreviousMillis = millis (); colorWipe (pixels.Color (0,255,125)); }} else else if ((sin signo largo) (millis () - colorWipePreviousMillis)> = pixelsInterval) {colorWipePreviousMillis = millis (); colorWipe (pixels.Color (100,0,150)); }}

para (int i = 0; i <19; i ++) {// 203 es el número total de notas musicales en la canción // int iSecond = duration i int wait = duration i * songspeed; tono (zumbador, notas i, espera); if (toque == 0) {if ((sin signo largo) (millis () - colorWipePreviousMillis)> = pixelsInterval) {colorWipePreviousMillis = millis (); colorWipe (pixels.Color (0,255,125)); }} else else if ((sin signo largo) (millis () - colorWipePreviousMillis)> = pixelsInterval) {colorWipePreviousMillis = millis (); colorWipe (pixels.Color (100,0,150)); }}

retraso (espera);

} }

void colorWipe (uint32_t c) {// NEOPIXEL ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~ // Elimina el color pixels.setPixelColor (currentPixel, c); pixels.setPixelColor (currentPixel-1, pixels.Color (0,0,0)); pixels.show (); currentPixel ++; if (currentPixel == NUMPIXELS) {currentPixel = 0; pixels.setPixelColor (7, pixels.Color (0,0,0));

} }

Paso 3: Paso adicional: hacer que el muñón 'Arduino esté listo'

Si decides usar un tocón de árbol, debes hacer lo siguiente.

  • Obtener un tocón de árbol (obtuve uno de un viejo árbol de Navidad gratis)
  • Mida su Arduino y vea cómo desea tener el cableado en el tocón del árbol
  • Vaciar el muñón (usé una máquina perforadora de la escuela)
  • Lije los bordes ásperos
  • Agrega divertidos pequeños detalles.

Los detalles que agregué fueron un pequeño logotipo que hice con un cortador láser. También apilé todos mis aparatos electrónicos dentro de un palo dentro de mi árbol y agregué relleno de peluche en el exterior para dejar pasar la luz y darle esa pequeña suavidad adicional.