Arduino tone


Necesita poner melodía o simplemente hacer ruido con un parlante y arduino, pero no se preocupe que es más fácil usar una función.

oscar Escrito por oscar 27 November 2018 9259 0
Necesita poner melodía a un proyecto o simplemente hacer ruido con un parlante y arduino, pero no se preocupe que es más fácil como simplemente usar una función.

¿Como funciona?

Genera una onda cuadrada de la frecuencia especificada (y un ciclo de trabajo del 50%) en un pin.[1] Se puede especificar una duración; de lo contrario, la ola continúa hasta que se realiza una llamada a noTone(). El pin se puede conectar a un zumbador piezoeléctrico u otro altavoz para reproducir tonos.
Solo se puede generar un tono a la vez. Si ya se está reproduciendo un tono en un pin diferente, la llamada a tone() no tendrá ningún efecto. Si el tono se reproduce en el mismo pin, la llamada establecerá su frecuencia.

Función tone

El uso de la función tone() interferirá con la salida PWM en los pines 3 y 11 (en tableros que no sean Mega).
No es posible generar tonos inferiores a 31Hz. Para detalles técnicos, vea las notas de Brett Hagman.

Sintaxis

tone(pin, frequency)

tone(pin, frequency, duration)

Parámetros

pin
Pin para generación de tonos
frequency
Frecuencia del tono en herz
duration
Duración del tono en milisegundos

Retornos

No retorna datos

Placas que soporta tone

El uso de la función tone() interferirá con la salida PWM en los pines 3 y 11 (en las placas distintas de la Mega) [2].
Placa Frecuencia Mín. (Hz) Frecuencia Máx (Hz)
Uno, Mega, Leonardo y otras placas AVR 31 65535
Gemma No implementado No implementado
Zero 41 275000
Due No implementado No implementado

Ejemplo

Veamos un simple ejemplo de como funciona la generación de sonidos con arduino.

Materiales

El parlante puede ser uno pequeño, en este caso lo conectamos directamnete a la placa pero hay que tene en cuenta que la potencia debe ser muy baja.
Material Cantidad Descripción
Arduino 1 Usado para controlar el circuito
Resistencias de 1kΩ 8 Protección del parlante y de la placa arduino
Parlantre de 1Ω5w de potencia o similar 1 El transductor de los sonidos
Cables macho a macho 2 Aprox Conexión al circuito

Conexión

Observemos la conexión de circuito, tenemos el arduino y el parlante en el pin 8.

Codígo

Para colocar un ejemplo sencillo, usemos el nos proporciona en programa arduino que se llama toneMelody, el único cambio fue añadirle una tonada diferente.
//Libreria de tonos
#include "pitches.h"

//Melodia
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
};

//Nota duración: 4 = cuarto de nota, 8 = octavo de nota, etc.:
int noteDurations[] = {
  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
};

void setup() {
  //Iterar sobre las notas de la melodía:
  int size = sizeof(melody) / sizeof(int);
  for (int thisNote = 0; thisNote < size; thisNote++) {

    //Para calcular la duración de la nota, tome un segundo dividido por el tipo de nota.
    //e.g. cuarto de nota = 1000 / 4, octavo de nota = 1000/8, etc.
    int noteDuration = 1000 / noteDurations[thisNote];
    tone(9, melody[thisNote], noteDuration);

    //Para distinguir las notas, establece un tiempo mínimo entre ellas.
    //La duración de la nota + 30% parece funcionar bien:
    int pauseBetweenNotes = noteDuration * 1.30;
    delay(pauseBetweenNotes);
    //Deja de tocar el tono
    noTone(9);
  }
}

void loop() {
  //No requiere en este proyecto
}

Referencias

[1] Arduino tone https://www.arduino.cc/reference/en/language/functions/advanced-io/tone/, Consultado noviembre 2018

[2] Manueldelgadocrespo, http://manueldelgadocrespo.blogspot.com/p/tone.html Consultado noviembre 2018


Comentario

Debe aceptar antes de enviar