
Índice:
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-23 15:03

Hoje, mostrarei como fazer uma campainha usando um Arduino. Esta campainha toca uma melodia aleatória de uma biblioteca de músicas. Você pode personalizar sua campainha e adicionar ainda mais músicas. Instale-o fora do seu quarto, sala de aula, escritório ou até mesmo da porta da frente!
Suprimentos:
- Arduino Uno (a maioria dos outros tipos serve)
- Computador com IDE Arduino para programação
- Cabo USB-A para USB-B para programação de Arduino
- Tábua de pão
- 4 fios de jumper
- Botão de pressão ou outro interruptor
- Resistor de 10 kOhm
- Campainha passiva (ou seja, alto-falante piezoelétrico)
-
Para instalação permanente:
- Fonte de alimentação de 9 V DC ou bateria de 9 V para alimentar o Arduino
- 2 fios longos para botão de fiação fora da porta
Etapa 1: configuração do hardware



Primeiro, vamos configurar o hardware. Começaremos com a campainha passiva (ou seja, alto-falante). Queremos conectar a extremidade positiva da campainha passiva (denotada pelo sinal "+") ao pino digital 8 no Arduino. Iremos conectar a outra extremidade da campainha passize ao aterramento.
A seguir, instalaremos o botão da campainha. Usaremos um resistor externo suspenso de 10 kOhm para a chave, de forma que não haja tensão flutuante ou estado instável na entrada do Arduino. Ao usar o resistor suspenso, o Arduino lê a tensão como 0 V quando o botão não é pressionado e 5 V quando o botão é pressionado. Para obter mais informações sobre resistores pullup ou pulldown, você pode ler este artigo:
Vamos conectar um lado do botão em 5V. O outro lado do botão será conectado ao aterramento por meio de um resistor suspenso de 10 kOhm. Lembre-se: os botões são conectados horizontalmente internamente. Eles só são conectados verticalmente quando pressionados. Mais informações são fornecidas neste artigo:
Etapa 2: configuração do software
Todo o código está anexado. Abaixo estão as descrições de cada uma das funções com instantâneos do código.
configurar:
Na função setup (), queremos configurar os pinos digitais para nosso botão e nosso alto-falante. Queremos configurar o pino 2 como uma entrada para nosso botão e queremos configurar o pino 8 como uma saída para nosso alto-falante.
Também queremos "propagar" nosso gerador de números aleatórios para selecionar aleatoriamente uma melodia quando alguém toca nossa campainha. Semear nosso gerador de números aleatórios significa alimentá-lo com uma entrada aleatória. Semearemos nosso gerador de números aleatórios com o valor de tensão na entrada analógica 0. Como nada está conectado a esta entrada, haverá uma tensão flutuante "aleatória" neste pino, fornecendo ao nosso gerador de números aleatórios muitos valores diferentes. Isso garante que teremos uma ordem diferente de seleção de músicas para a campainha. Para obter mais informações sobre a função random () do Arduino, clique aqui:
#include "pitches.h"
#include "songs.h" #define BUTTON_PIN 2 #define SPEAKER_PIN 8 / * função de configuração * / void setup () {// habilita pinos de entrada / saída pinMode (BUTTON_PIN, INPUT); pinMode (SPEAKER_PIN, OUTPUT); // semeia a função random () para que obtenhamos uma ordem diferente randomSeed (analogRead (0)); }
ciclo:
Em nossa função loop (), verificaremos continuamente se o botão está pressionado (o pino digital 2 é alto). Se o pino estiver alto, esperamos 50 ms e verificamos novamente para ter certeza de que ainda está alto. Isso garante que o botão seja pressionado e não haja ruído perdido no pino de entrada digital causando um falso positivo.
Assim que tivermos confirmado que o botão foi pressionado, usamos nosso gerador de números aleatórios para selecionar uma das 5 músicas usando uma instrução switch. Os dados para essas músicas são armazenados em "songs.h" e as informações de pitch são armazenadas em "pitches.h". Depois de escolher uma música, passamos essas informações para a função play_song ().
/ * função principal while loop * /
void loop () {// verifique se o botão está pressionado if (digitalRead (BUTTON_PIN) == HIGH) {// atrase 50 ms para ter certeza de que ainda está pressionado // evita qualquer atraso de leitura incorreta (50); if (digitalRead (BUTTON_PIN) == HIGH) {// escolher aleatoriamente uma música int song_choice = random (5); // seleciona qual música tocar switch (song_choice) {case 0: play_song (haircutLength, haircut, haircutDurations, haircutTempo); pausa; caso 1: play_song (marioLength, mario, marioDurations, marioTempo); pausa; caso 2: play_song (miiLength, mii, miiDurations, miiTempo); pausa; caso 3: play_song (hpLength, hp, hpDurations, hpTempo); pausa; caso 4: play_song (takeonmeLength, takeonme, takeonmeDurations, takeonmeTempo); pausa; padrão: play_song (miiLength, mii, miiDurations, miiTempo); pausa; }}}}
tocar música:
play_song () leva 4 argumentos: um número inteiro de notas na música, um array inteiro dos tons da melodia, um array inteiro da duração e um tempo inteiro para aquela música em particular. Você deve especificar cada um deles para cada música que deseja tocar. Para obter mais informações sobre como usar as funções de tom do Arduino, você pode consultar este tutorial: https://www.arduino.cc/en/Tutorial/ToneMelody. Eu adicionei algumas funcionalidades no topo deste tutorial para notas pontilhadas. Se um valor na matriz de duração da nota for negativo, significa que é uma nota pontilhada (a duração é 1,5 vezes maior).
/ * toca a música * /
void play_song (int num_notes, int melody , int noteDurations , int tempo) {// percorrer e reproduzir todas as notas para (int i = 0; i 0) {duration = tempo / noteDurations ; } // se for um número negativo, significa nota pontilhada // aumenta a duração pela metade para notas pontilhadas else if (noteDurations <0) {duration = tempo / abs (noteDurations ) * 1.5; } tom (SPEAKER_PIN, melodia , duração); // para distinguir as notas, defina um tempo mínimo entre elas. // a duração da nota + 30% parece funcionar bem: int pauseBetweenNotes = duration * 1.30; atraso (pauseBetweenNotes); // interrompe a reprodução do tom: noTone (SPEAKER_PIN); }}
Amostra de canções.h:
Abaixo está uma amostra de uma das músicas em "songs.h". As notas são macros definidas em "pitches.h". Os números correspondem às frequências das notas em hertz (Hz). A duração das notas é definida como: 1 = nota inteira, 2 = semínima, 4 = semínima, 8 = colcheia, -4 = semínima pontilhada, etc. A duração é o número total de notas na música. O tempo é um divisor para a velocidade da música (um número mais alto significa um tempo mais lento). Você terá que brincar com esse número até chegar a um tempo de sua preferência.
/ * harry potter * /
int hp = {NOTE_D4, NOTE_G4, NOTE_AS4, NOTE_A4, NOTE_G4, NOTE_D5, NOTE_C5, NOTE_A4, NOTE_G4, NOTE_AS4, NOTE_A4, NOTE_F4, NOTE_GS4, NOTE_D4}; int hpDurations = {4, -4, 8, 4, 2, 4, -2, -2, -4, 8, 4, 2, 4, 1}; int hpLength = 14; int hpTempo = 1050;
Etapa 3: ajustes
Adicione mais músicas! Siga o formato mostrado em "songs.h" e use o tutorial para obter ajuda: https://www.arduino.cc/en/Tutorial/ToneMelody. Para cada nova música que você adicionar, lembre-se de adicionar um novo caso à instrução switch e aumentar o número máximo que pode ser gerado por sua função random (). Boa codificação!
Etapa 4: Mais projetos
Para mais projetos, visite minhas páginas:
- https://dargen.io/
- https://github.com/mjdargen
- https://www.instructables.com/member/mjdargen/
Recomendado:
Nest Hello - Campainha da campainha com transformador integrado Reino Unido (220-240 V CA - 16 V CA): 7 etapas (com imagens)

Nest Hello - Campainha da campainha com transformador integrado Reino Unido (220-240 V CA - 16 V CA): eu queria instalar uma campainha Nest Hello em casa, um aparelho que funciona com 16 V a 24 V CA (NOTA: uma atualização de software em 2019 mudou a Europa faixa de versão para 12V-24V AC). A campainha padrão toca com transformadores integrados disponíveis no Reino Unido no
Como fazer uma campainha sem toque, detecção de temperatura corporal, GY-906, 433 MHz usando Arduino: 3 etapas

Como fazer uma campainha sem toque, detecção da temperatura corporal, GY-906, 433 MHz usando o Arduino: Hoje faremos uma campainha sem toque, ela detectará a temperatura do seu corpo. Na situação atual, é muito importante saber se a temperatura corporal de alguém está mais alta do que o normal, quando alguém está chocando. Este projeto mostrará luz vermelha se detectar alguma
Campainha de controle do projeto Arduino + Blynk: 8 etapas

Campainha de controle de projeto Arduino + Blynk: Blynk é usado para tornar a IoT possível de uma maneira muito conveniente. Neste projeto, não estou usando nenhum módulo bluetooth ou Wifi para fazer comunicação sem fio. Isso é possível usando o aplicativo Blynk, que pode ajudá-lo a projetar seu próprio aplicativo em
Transforme sua campainha com fio em uma campainha inteligente com IFTTT: 8 etapas

Transforme sua campainha com fio em uma campainha inteligente com IFTTT: A campainha WiFi transforma sua campainha com fio existente em uma campainha inteligente. https://www.fireflyelectronix.com/product/wifidoor
Transforme sua campainha com fio em uma campainha inteligente com o Home Assistant: 6 etapas

Transforme sua campainha com fio em uma campainha inteligente com o Home Assistant: Transforme sua campainha com fio existente em uma campainha inteligente. Receba uma notificação em seu telefone ou emparelhe-se com sua câmera existente na porta da frente para receber um alerta de foto ou vídeo sempre que alguém tocar sua campainha. Saiba mais em: fireflyelectronix.com/pro