arduino: 4. buzzers

Sobre los dispositivos bluzzers y el método random()

Shozo Shimamoto

archivado en: Electrónica / 5 Septiembre, 2016 / taller:

Seguimos con los fundamentos básicos de Arduino, pero para cambiar un poco, en lugar de leds, usaremos un buzzer o zumbador, que es una pieza electroacústica formado por un electroimán y una lámina de acero que vibra cuando pasa la corriente (si no tenemos esta pieza, se puede llevar a la práctica esta entrada con un led azul y una resistencia de 100Ω).

Para entrar en materia podemos preparar un sketch muy básico. Primero preparamos el tinglado, para lo cual necesitaremos un buzzer, un protoboard y un par de cables. Colocamos el buzzer en el protoboard con el lado más largo, el positivo, hacia la derecha y el más corto, el negativo, hacia la izquierda. Luego tiramos un cable desde el negativo hasta el pin de tierra grn y otro hacia cualquier pin pwm, como el 9. Algo así.

buzzer

Vamos ahora con el script, que es muy sencillo. Indicamos el pin que estamos utilizando, lo definimos de salida y con el método analogWriter que ya conocemos de la entrada anterior, definimos cualquier valor del 0 al 255. Ale op! cargamos el programa y el bluzzer comienza a emitir un sonido estridente que recuerda al que hacían vídeojuegos antiguos.

/* cacheamos el pin 9 */

int buzzer = 9;

void setup() {

/* Lo declaramos de salida */

pinMode(buzzer, OUTPUT);

}

void loop (){

/* Hacemos que emita un pitido estridente */

analogWrite(buzzer, 20);

}

La calidad musical seguirá siendo pésima, pero podemos ajustar algo más el sonido con el método tone(), que recibe tres parámetros: el pin que generará el sonido, la frecuencia en hertzios y, opcional, la duración en milisegundos.

tone(9, 600, 1480);

El método opuesto a tone es notone(), que claro está se usa para detener el sonido activado en un pin, algo fundamental cuando se están usando varios contra el mismo zumbador.

La semilla del azar

Vamos ahora con algo más divertido: una máquina de composición aleatoria. La idea es que en cada vuelta del loop suene una nota musical equivalente en Arduino escogida al azar:

  • Do (c): 261 Hz
  • Re (d): 294 Hz
  • Mi (e):  329 Hz
  • Fa (f): 349 Hz
  • Sol (g): 392 Hz
  • La (a): 440 Hz
  • Si (b): 493 Hz
  • Do (C): 523 Hz

Para eso tenemos que saber dos características del lenguaje. La primera es la sintaxis de los arrays, que se definen declarando sus valores entre llaves y, opcionalmente, su longitud entre corchetes (que deben ponerse siempre).

int miArray [3] = {1, 2, 3};

Como en cualquier otro lenguaje, luego se accede a los valores por su posición.

int miValor = miArray[1]; // 2

Y lo segundo que debemos saber es cómo conseguir un número aleatorio, para lo cual vamos a necesitar usar dos funciones: random() y randomSeed().

El método random() recibe dos parámetros, uno con el máximo y, opcional, otro con el mínimo, que si no se especifica es cero. Por ejemplo, así obtendríamos un número aleatorio entre 100 y 200.

randNumber = random(100, 200);

Por lo tanto, en teoría bastaría con hacer algo así para que en cada vuelta nuestra máquina tocase una nota diferente.

int musicPin = 9;

int notes [] = {261, 294, 329, 349, 392, 440, 493, 532};

int randomNote;

void setup() {

pinMode(musicPin, OUTPUT);

}

void loop() {

randomNote = random(8);

tone(musicPin, notes[randomNote], 500);

delay(500);

}

El problema es que de esta manera siempre tocaría la misma melodía cada vez que encendiéramos nuestro Arduino, ya que el método random siempre genera la misma secuencia si no se complementa con randomSeed(), que se puede traducir como «la semilla del azar». Por explicarlo de alguna manera digamos que con este método se inicializa la máquina de producir números aleatorios de Arduino cada vez que se activa y para eso le pasamos a este método el valor de la lectura analógica de un puerto que no estemos usando, como el 0, ya que, como veremos en futuras entradas, esta lectura nunca es uniforme. Así, refactorizamos el setup, añadimos esta semilla y ahora ya sí, nuestro buzzer tocará algo único cada vez que lo despertemos.

void setup() {

pinMode(musicPin, OUTPUT);

randomSeed(analogRead(0));

}

|| Tags:

Este artículo aún no ha sido valorado.

¿Te ha parecido útil o interesante esta entrada?
dormido, valoración 1 nadapensativo, valoración 2 un poco sonrisa, valoración 3 a medias guiño, valoración 4 bastante aplauso, valoración 5 mucho

Tú opinión es muy importante, gracias por compartirla!

Aportar un comentario

*