Notas musicais baseadas em Arduino e gerador de melodia com LCD

Arduino possui uma ampla variedade de aplicações. Ele pode ser usado em quase todos os campos. Suas aplicações aumentam dia a dia porque é de código aberto e qualquer pessoa pode criar um novo conjunto de funções e biblioteca para fazer a interface de qualquer novo dispositivo com o Arduino. O aplicativo fornecido demonstra o uso do Arduino como gerador de tons e melodias. Inclui teclado e LCD para interface de usuário. As notas musicais ou melodia são geradas quando a tecla é pressionada e a frequência do som gerado é exibida no LCD. Então, na verdade, o aplicativo fornecido ilustra a interface do teclado e do LCD com o Arduino junto com a geração de tons e melodias.
Protótipo de notas musicais e gerador de melodia baseado em Arduino

Figura 1: Protótipo de notas musicais e gerador de melodia baseado em Arduino

Descrição do circuito:

Conforme mostrado no circuito, um LCD 16×2, um teclado de matriz 4×3 e um alto-falante de 8Ω fazem interface com a placa Arduino.
• O pino Vcc (2) e o pino Vss (1) do LCD são conectados aos pinos +5 V e Gnd da placa Arduino, respectivamente, para fornecer polarização.
• O pino LED+ (15) e o pino LED- (16) do LCD também são conectados aos pinos +5 e Gnd, respectivamente, para LIGAR a luz de fundo do LED do LCD.
• O pino Rs (4) e o pino En (6) estão conectados aos pinos digitais 8 e 9 do Arduino, enquanto o pino Rw (5) está permanentemente conectado ao terra para habilitação de gravação.
• Os pinos de dados D4 – D7 do LCD são conectados aos pinos digitais 10 – 13 do Arduino
• 3 colunas C1, C2 e C3 do teclado matricial são conectadas com 0,1 e 2 pinos da placa Arduino enquanto 4 linhas R1, R2, R3 e R4 são conectadas com 3, 4, 5 e 6 pinos.
• Um alto-falante de 8Ω está conectado ao pino 7 conforme mostrado no diagrama de circuito.

Operação do circuito:

• Inicialmente, a mensagem é exibida no LCD como “gerador de tom do teclado”
• Quando qualquer tecla é pressionada, o pressionamento da tecla é detectado e o Arduino identifica qual tecla foi pressionada
• Com base no número da tecla pressionada, o som de frequência* específico (tom) é gerado através do alto-falante por 1 segundo
• O número da chave é exibido no LCD e a frequência do som gerado é exibida no LCD
• Conforme mostrado na figura, o teclado é o teclado do telefone (numérico) e inclui a tecla * e a tecla #. Então, quando a tecla * é pressionada, ela gera a melodia do tom 1 e quando a tecla # é pressionada, ela gera a melodia do tom 2 que é exibida no LCD
*Nota: a frequência do som gerado é escolhida para produzir 'sa', 're', 'ga', 'ma', 'pa', 'dha' e 'ni' todas as sete notas musicais
A funcionalidade completa deste projeto se deve ao programa de software carregado na memória FLASH interna do microcontrolador da placa Arduino ATMega328. Vejamos então o programa e sua explicação lógica.

Programa de software e lógica:

O programa de software é escrito na linguagem Arduino. Ele é compilado usando a ferramenta de software Arduino IDE e carregado na memória FLASH interna do microcontrolador da placa Arduino. Todos nós sabemos que o Arduino IDE possui um pacote de biblioteca poderoso que inclui um conjunto completo de funções para um dispositivo periférico específico. Neste programa, estamos usando três bibliotecas:
1) teclado matricial – para fazer a interface do teclado matricial com o Arduino
2) cristal líquido – para fazer a interface do LCD com o Arduino
3) gerador de tom – para gerar som de frequência diferente
A biblioteca do teclado matricial nos permite configurar nosso teclado matricial como um número de linhas-colunas, padrão de teclas, etc. Ele detecta o pressionamento de tecla, identifica qual tecla está pressionada e executa muitas outras funções. A biblioteca de cristal líquido é, como sabemos, especialmente para fazer a interface de diferentes tipos de LCDs com o Arduino. Ele configura o LCD, exibe texto, dados numéricos, limpa o LCD, define as posições do cursor, etc. O gerador de tons é usado para gerar som de frequência específica a partir de qualquer pino digital do Arduino.

Código fonte do projeto

###

//Program to 

#include 

#include 


const byte ROWS = 4; // Four rows

const byte COLS = 3; // Three columns

int sound(10) = {1047,1109,1245,1319,1397,1480,1568,1661,1760,1865};

int sound_pin = 7;

// Define the Keymap

char keys(ROWS)(COLS) = {

  {'1','2','3'},

  {'4','5','6'},

  {'7','8','9'},

  {'#','0','*'}

};

// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.

byte rowPins(ROWS) = { 3, 4, 5, 6 };

// Connect keypad COL0, COL1 and COL2 to these Arduino pins.

byte colPins(COLS) = { 0, 1, 2 }; 


// Create the Keypad

Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

LiquidCrystal lcd(8, 9, 10, 11, 12, 13);

#define ledpin 13

void setup 

{

  pinMode(ledpin,OUTPUT);

  digitalWrite(ledpin, HIGH);

  lcd.begin(16, 2);

  lcd.clear ;

  lcd.print("   keypad tone");

  lcd.setCursor(4,1);

  lcd.print("generator");

}

void loop 

{

   int i;

   char key = kpd.getKey ;

   if(key)  // Check for a valid key.

  {

    switch (key)

    {

      case '*':

        lcd.clear ;

        lcd.print("playing melody 1");

        for(i=0;i<10;i++)

          tone(sound_pin,sound(i),500);

        break;

      case '#':

        lcd.clear ;

        lcd.print("playing melody 2");

        for(i=0;i<10;i++)

          tone(sound_pin,sound(10-i),500);

        break;

      default:        

        lcd.clear ;

        lcd.print("key:");

        lcd.print(key);

        lcd.setCursor(0,1);

        lcd.print("sound ");

        lcd.print(sound(key-48));

        lcd.print(" Hz");

        tone(sound_pin,sound(key-48),1000); 

        break;

    } 

  }     

} 

###

Diagramas de circuito

Diagrama de Circuito-Arduino-Based-Music-Notes-Melody-Generator

Vídeo do projeto

Related Content

Back to blog

Leave a comment

Please note, comments need to be approved before they are published.