Piano Eletrônico (A)

Criando música com circuitos e programação.

Vamos transformar código em música! Nesta atividade, o desafio é projetar e construir um pequeno piano eletrônico funcional. Usando botões como teclas e um buzzer como alto-falante, cada equipe criará um instrumento capaz de tocar diferentes notas musicais.

Este projeto é uma exploração fascinante da física do som, mostrando como as ondas sonoras e as frequências que formam as notas musicais podem ser controladas por um circuito eletrônico e um programa de computador.

Roteiro para Professores (Foco no Aprofundamento Técnico)

  • Objetivo da Atividade: Construir um instrumento musical eletrônico utilizando múltiplos inputs digitais (botões) para controlar a frequência de um output sonoro (buzzer), aplicando estruturas de programação condicional (if/else if) e a função tone().
  • Conceitos Tecnológicos Fundamentais:
    • Geração de Som: Utilização da função tone(pino, frequencia) para gerar uma onda quadrada em um pino digital na frequência (em Hertz) especificada. Uso da função noTone(pino) para interromper o som.
    • Input Digital: Leitura de múltiplos botões em pinos digitais, utilizando resistores de pull-down para garantir leituras estáveis.
    • Estrutura if / else if / else: Forma eficiente de checar múltiplas condições (qual botão está pressionado) em sequência, garantindo que apenas uma ação seja executada por ciclo.
    • Frequência (Hz): Entender a relação direta entre o valor da frequência passada para a função tone() e a altura da nota musical produzida.
  • Princípio Lógico: O programa executa um loop único que verifica o estado de cada botão, um após o outro. Uma cadeia if / else if é usada para que, ao encontrar o primeiro botão pressionado, o programa toque a nota correspondente e ignore a verificação dos demais botões naquele ciclo. Um bloco else final garante que, se nenhum botão estiver pressionado, a função noTone() seja chamada, silenciando o buzzer. Este método assegura que apenas uma nota seja tocada por vez (monofônico).
  • Guia de Solução de Problemas (Troubleshooting):
    • Som muito baixo ou inexistente: Verifique as conexões do buzzer. Se for um buzzer passivo, ele tem polaridade. Verifique se o resistor usado no circuito do botão não é de um valor muito alto.
    • Notas não param de tocar: A lógica if / else if / else está incorreta ou o bloco else com noTone() está faltando. Verifique também se os botões não estão travados ou com mau contato.
    • Toca a nota errada: Confirme se o botão conectado ao pino X no hardware corresponde à condição digitalRead(X) no software.
  • Desafio Extra (Nível Avançado):
    • Criar uma função para tocar uma música pré-programada. Crie dois arrays: um para as notas (frequências) e outro para a duração de cada nota. Faça um loop for que percorra os arrays e toque a melodia automaticamente com o apertar de um “botão play”.
  • Materiais Necessários:
    • Hardware: SmartMotor com Servo Motor (Placa B) OU (Kit Arduino, Protoboard, Resistores 10k Ohm para pull-down, Buzzer/alto-falante, Botões).
    • Software: Arduino IDE e/ou conta na plataforma TinkerCAD.
  • Possibilidades de Aplicação e Expansão:
    • Sintetizador Simples: Adicionar potenciômetros para controlar o volume (amplitude) ou o timbre (alterando a forma da onda, um conceito mais avançado).
    • Theremin Simplificado: Trocar os botões por um sensor de distância ultrassônico para que a nota mude conforme a distância da mão ao sensor.
    • Feedback Sonoro: Utilizar a geração de tons para criar sons de feedback em outros projetos (som de “sucesso”, “erro”, “alerta”).

Segue uma referência de cada nota musical por frequência em Hertz.

Programação Sugerida
// — Notas Musicais (4ª Oitava) e suas Frequências em Hertz —
// C (Dó) = 262 Hz
// D (Ré) = 294 Hz
// E (Mi) = 330 Hz
// F (Fá) = 349 Hz
// G (Sol) = 392 Hz
// A (Lá) = 440 Hz
// B (Si) = 494 Hz

// Pinos dos componentes
const int pinoBuzzer = 8;
const int pinoBotaoC = 2;
const int pinoBotaoD = 3;
const int pinoBotaoE = 4;
// … adicione mais pinos para mais notas

void setup() {
// Configura o pino do buzzer como saída
pinMode(pinoBuzzer, OUTPUT);

// Configura os pinos dos botões como entrada
pinMode(pinoBotaoC, INPUT);
pinMode(pinoBotaoD, INPUT);
pinMode(pinoBotaoE, INPUT);
// … configure os demais pinos
}

void loop() {
// Verifica cada botão em sequência
if (digitalRead(pinoBotaoC) == HIGH) {
tone(pinoBuzzer, 262); // Toca a nota Dó (C)
}
else if (digitalRead(pinoBotaoD) == HIGH) {
tone(pinoBuzzer, 294); // Toca a nota Ré (D)
}
else if (digitalRead(pinoBotaoE) == HIGH) {
tone(pinoBuzzer, 330); // Toca a nota Mi (E)
}
// … adicione ‘else if’ para os outros botões
else {
// Se nenhum botão estiver pressionado, desliga o som.
noTone(pinoBuzzer);
}
}

Esquemático Eletrônico

Este projeto propõem um instrumento funcional, dependendo da estrutura criada e potencia do alto-falante é possível tocar músicas reais. Se for possível, peça para alguém que saiba tocar piano experimentar o resultado da atividade.