La Navidad con Arduino

Ya queda algo lejos la Navidad, pero siempre vuelve… así que queremos compartir con vosotros el proyecto de Mae, un árbol programado con arduino con luces y canciones navideñas. Os compartimos el paso a paso del proyecto debajo del video, esperamos que os guste 🙂

CONECTANDO EL ALTAVOZ A LA PLACA DE ARDUINO:

  • Conectar el cable de tierra que sale del altavoz a GND de Arduino.
  • El otro cable conectarlo al pin 5.

CONECTANDO LOS LEDS:

Nuestra tira de leds funciona a 12 voltios y Arduino sólo proporciona 5 voltios  por lo que son necesarios tres transistores (uno por cada uno de los colores básicos de la tira:Rojo Verde y Azul) que funcionen como amplificadores.

Para simplificar el proyecto, partimos de los transistores ya  implementados por lo que únicamente es necesario realizar las siguientes conexiones:

  • Cable negro a GROUND
  • Cable rojo al pin 9
  • Cable verde al pin 10
  • Cable azul al pin 11

En este enlace se incluye la explicación detallada del control de tiras de LED de 12 voltios con Arduino: https://www.youtube.com/watch?v=Shly4dIspPY

El código del que hemos partido para incluir los villancicos se puede encontrar en: https://www.hackster.io/joshi/piezo-christmas-songs-fd1ae9

En la url anterior se hace referencia a la librería pitches que se puede descargar desde:

https://www.arduino.cc/en/Tutorial/toneMelody

Este es el código que hemos utilizado y que puedes compilar y subir a la placa:

/*

  Arduino Christmas Songs

  Based on a project and code by Dipto Pratyaksa, updated on 31/3/13

  Modified for Christmas by Joshi, on Dec 17th, 2017.

  Modificado por RGG 2019

*/

#include “pitches.h”

#define melodyPin 5

#define red 9

#define green 10

#define blue 11

int t = 500;

// Jingle Bells

int melody[] = {

  NOTE_E5, NOTE_E5, NOTE_E5,

  NOTE_E5, NOTE_E5, NOTE_E5,

  NOTE_E5, NOTE_G5, NOTE_C5, NOTE_D5,

  NOTE_E5,

  NOTE_F5, NOTE_F5, NOTE_F5, NOTE_F5,

  NOTE_F5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5,

  NOTE_E5, NOTE_D5, NOTE_D5, NOTE_E5,

  NOTE_D5, NOTE_G5

};

int tempo[] = {

  8, 8, 4,

  8, 8, 4,

  8, 8, 8, 8,

  2,

  8, 8, 8, 8,

  8, 8, 8, 16, 16,

  8, 8, 8, 8,

  4, 4

};

// We wish you a merry Christmas

int wish_melody[] = {

  NOTE_B3, 

  NOTE_F4, NOTE_F4, NOTE_G4, NOTE_F4, NOTE_E4,

  NOTE_D4, NOTE_D4, NOTE_D4,

  NOTE_G4, NOTE_G4, NOTE_A4, NOTE_G4, NOTE_F4,

  NOTE_E4, NOTE_E4, NOTE_E4,

  NOTE_A4, NOTE_A4, NOTE_B4, NOTE_A4, NOTE_G4,

  NOTE_F4, NOTE_D4, NOTE_B3, NOTE_B3,

  NOTE_D4, NOTE_G4, NOTE_E4,

  NOTE_F4

};

int wish_tempo[] = {

  4,

  4, 8, 8, 8, 8,

  4, 4, 4,

  4, 8, 8, 8, 8,

  4, 4, 4,

  4, 8, 8, 8, 8,

  4, 4, 8, 8,

  4, 4, 4,

  2

};

// Santa Claus is coming to town

int santa_melody[] = {

  NOTE_G4,

  NOTE_E4, NOTE_F4, NOTE_G4, NOTE_G4, NOTE_G4,

  NOTE_A4, NOTE_B4, NOTE_C5, NOTE_C5, NOTE_C5,

  NOTE_E4, NOTE_F4, NOTE_G4, NOTE_G4, NOTE_G4,

  NOTE_A4, NOTE_G4, NOTE_F4, NOTE_F4,

  NOTE_E4, NOTE_G4, NOTE_C4, NOTE_E4,

  NOTE_D4, NOTE_F4, NOTE_B3,

  NOTE_C4

};

int santa_tempo[] = {

  8,

  8, 8, 4, 4, 4,

  8, 8, 4, 4, 4,

  8, 8, 4, 4, 4,

  8, 8, 4, 2,

  4, 4, 4, 4,

  4, 2, 4,

  1

};

void setup(void) {

  pinMode(5, OUTPUT); // Zumbador

  pinMode(13, OUTPUT); // Indicador de Led cuando se reproduce una nota

  randomSeed(analogRead(0));

 }

void loop() {

  sing(1);

  delay(3000);

  sing(2);

  delay(3000);

  sing(3);

  delay(5000);

}

int song = 0;

void sing(int s) {

  // Iteracciones sobre las notas de la melodía:

  song = s;

  if (song == 3) {

    Serial.println(” ‘We wish you a Merry Christmas'”);

    int size = sizeof(wish_melody) / sizeof(int);

    for (int thisNote = 0; thisNote < size; thisNote++) {

      // Para calcular la duración de una nota, dividimos un segundo entre el tipo de nota

     int noteDuration = 1000 / wish_tempo[thisNote];

      buzz(melodyPin, wish_melody[thisNote], noteDuration);

      // Para distinguir las notas, establecemos un tiempo mínimo entre ellas.

      // la duración de la nota + 30% funciona bien:

      int pauseBetweenNotes = noteDuration * 1.30;

      delay(pauseBetweenNotes);

      // deja de sonar el tono

      buzz(melodyPin, 0, noteDuration);

    }

  } else if (song == 2) {

    Serial.println(” ‘Santa Claus is coming to town'”);

    int size = sizeof(santa_melody) / sizeof(int);

    for (int thisNote = 0; thisNote < size; thisNote++) {

      // Para calcular la duración de una nota, dividimos un segundo entre el tipo de nota

      int noteDuration = 900 / santa_tempo[thisNote];

      buzz(melodyPin, santa_melody[thisNote], noteDuration);

     // Para distinguir las notas, establecemos un tiempo mínimo entre ellas.

      // la duración de la nota + 30% funciona bien:

      int pauseBetweenNotes = noteDuration * 1.30;

      delay(pauseBetweenNotes);

       // deja de sonar el tono

      buzz(melodyPin, 0, noteDuration);

    }

  } else {

    Serial.println(” ‘Jingle Bells'”);

    int size = sizeof(melody) / sizeof(int);

    for (int thisNote = 0; thisNote < size; thisNote++) {

       // Para calcular la duración de una nota, dividimos un segundo entre el tipo de nota

      int noteDuration = 1000 / tempo[thisNote];

      buzz(melodyPin, melody[thisNote], noteDuration);

       // Para distinguir las notas, establecemos un tiempo mínimo entre ellas.

      // la duración de la nota + 30%  funciona bien:

      int pauseBetweenNotes = noteDuration * 1.30;

      delay(pauseBetweenNotes);

       // deja de sonar el tono

      buzz(melodyPin, 0, noteDuration);

    }

  }

}

void buzz(int targetPin, long frequency, long length) {

  //inicializamos las variables para los colores de los leds

  int ColorR = 0;

  int ColorG = 0;

  int ColorB=0;

  digitalWrite(13, HIGH);

  //Los colores los generamos aleatoriamente

  ColorR=random(0,255);

  ColorG=random(0,255);

  ColorB=random(0,255);

  //Enviamos el valor de los colores básicos para generar el color final

  analogWrite(green, ColorG);

  analogWrite(red, ColorR);

  analogWrite(blue, ColorB);

  long delayValue = 1000000 / frequency / 2; // calcula el valor de espera entre transiciones

  long numCycles = frequency * length / 1000; //calcula el número de ciclos 

  for (long i = 0; i < numCycles; i++) { //bucle para el número de ciclos que hemos obtenido

    digitalWrite(targetPin, HIGH); // enviamos el valor  high al zumbador

    delayMicroseconds(delayValue); // esperamos el tiempo calculado

    digitalWrite(targetPin, LOW); //enviamos el valor low al zumbador 

    delayMicroseconds(delayValue); // esperamos el tiempo calculado

  }

  digitalWrite(13, LOW);

 }

No olvides copiar el fichero pitches.h a Arduino/libraries

Comprueba que el altavoz reproduce correctamente los villancicos y se encienden los leds.

Puedes probar a cambiar los colores de los LEDS en lugar de generarlos aleatoriamente. Para ello, puede ser útil la página https://www.colorspire.com/rgb-color-wheel/ (Donde, dado un color nos indica la cantidad de Rojo, Verde y Azul necesario).

Please follow and like us:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies. Para más información puede escribirnos a info@educaendigital.com

ACEPTAR
Aviso de cookies
Contacta por WhatsApp