Manual

do

Maker

.

com

DAC do Arduino UNO R4 WiFi - tocar música

DAC do Arduino UNO R4 WiFi - tocar música

O DAC do Arduino UNO R4 WiFi serve para tocar música também. O código de exemplo da própria documentação é simples e utilizei para experimentação.

Digital to Analog Converter (DAC)

Agora o Arduino tem esse recurso nativo no hardware do UNO R4 WiFi, no pino analógico 0. O DAC é utilizado para transformar sinal digital em sinal analógico e pode ser usado para projetos de áudio maker ou como um gerador de função como um equipamento de laboratório. Pode ser "maker" também. Laboratório Maker.

PWM

As ondas que vemos em arquivos de áudio editados em programas como SoundForge ou Audacity são leituras da forma analógica (são ondas de frequências analógicas, não ondas quadradas). O DAC nos permite gerar essa semelhança de formato. Já o PWM gera onda quadrada, que "simula" sinal analógico com modulação de comprimento de pulso. Tem montes de artigos aqui no blog mostrando o uso de PWM para diversos propósitos, mas o que mais se adequa a esse artigo é o Adams Family DIgital Song, que é a música da família Adams tocada em um ESP32 usando PWM e um módulo relé para o estalar de dedos.

O vídeo - fundamental nesse caso - Música no ESP32 com módulo relé.

No artigo sugerido no parágrafo acima, dispus algumas oitavas, suficiente para centenas de músicas.

Tocar música no Arduino usando DAC

Conecte um buzzer ao Arduino. Se for um módulo, ele tem os pinos VCC, GND e SIGNAL. Alimente conforme o nível do buzzer (no caso, usei um módulo 3v3) e coloque o pino de sinal no A0 do Arduino.

No código a seguir (da documentação do Arduino UNO R4 WiFi) temos a música Frere Jacques. Só alterei o tempo porque estava chato demais na velocidade original. Tirei o comentário para reduzir o número de linhas, mas o código foi escrito por Tom Igoe. O link de referência é esse tutorial de DAC.

#include "analogWave.h"
analogWave wave(DAC);

#define NOTE_A4 69         // MIDI note value for middle A
#define FREQ_A4 440        // frequency for middle A

// the tonic, or first note of the key signature for the song:
int tonic = 65;
// the melody sequence. Note values are relative to the tonic:
int melody[] = {1, 3, 5, 1,
                1, 3, 5, 1,
                5, 6, 8, 5, 6, 8,
                8, 10, 8, 6, 5, 1,
                8, 10, 8, 6, 5, 1,
                1, -4, 1,
                1, -4, 1
               };
// the rhythm sequence. Values are 1/note, e.g. 4 = 1/4 note:
int rhythm[] = {4, 4, 4, 4,
                4, 4, 4, 4,
                4, 4, 2,
                4, 4, 2,
                8, 8, 8, 8, 4, 4,
                8, 8, 8, 8, 4, 4,
                4, 4, 2,
                4, 4, 2
               };
// which note of the melody to play:
int noteCounter = 0;

int bpm = 240;  // beats per minute
// duration of a beat in ms
float beatDuration = 60.0 / bpm * 1000;

void setup() {
// start the sine wave generator:
  wave.sine(10);
}

void loop() {
  // current note is an element of the array:
  int currentNote = melody[noteCounter] + tonic;
  // play a note from the melody:
  // convert MIDI note number to frequency:
  float frequency =  FREQ_A4 * pow(2, ((currentNote - NOTE_A4) / 12.0));

  // all the notes in this are sixteenth notes,
  // which is 1/4 of a beat, so:
  float noteDuration = beatDuration * (4.0 / rhythm[noteCounter]);
  // turn the note on:
  wave.freq(frequency);
 // tone(speakerPin, frequency, noteDuration * 0.85);
  // keep it on for the appropriate duration:
  delay(noteDuration * 0.85);
  wave.stop();
  delay(noteDuration * 0.15);
  // turn the note off:
 // noTone(speakerPin);
  // increment the note number for next time through the loop:
  noteCounter++;
  // keep the note in the range from 0 - 32 using modulo:
  noteCounter = noteCounter % 32;

}

Como pode ser visto, a implementação é estupidamente simples, mas esse tutorial não é suficiente para compreender o uso para um projeto do zero. Por essa razão farei um novo artigo explicando a construção completa, para que você possa escrever suas músicas, como fiz no Adams Family Digital Song. É só acompanhar.

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.