Índice:

Campainha Arduino: 4 etapas
Campainha Arduino: 4 etapas

Vídeo: Campainha Arduino: 4 etapas

Vídeo: Campainha Arduino: 4 etapas
Vídeo: #11 Security Alarm Prototype | Car Parking Sensor | Arduino Projects for Beginners | Arduino Uno r3 2024, Julho
Anonim
Arduino Doorbell
Arduino Doorbell

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

Configuração de hardware
Configuração de hardware
Configuração de hardware
Configuração de hardware
Configuração de hardware
Configuração de 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: