Sommario:

Campanello Arduino: 4 passaggi
Campanello Arduino: 4 passaggi

Video: Campanello Arduino: 4 passaggi

Video: Campanello Arduino: 4 passaggi
Video: DIY Stopwatch made in 30 seconds using #arduino 2024, Luglio
Anonim
Campanello Arduino
Campanello Arduino

Oggi ti mostrerò come realizzare un campanello usando un Arduino. Questo campanello riproduce una melodia casuale da una libreria di brani. Puoi personalizzare il tuo campanello e aggiungere ancora più canzoni. Installalo fuori dalla tua camera da letto, aula, ufficio o persino dalla porta di casa!

Forniture:

  • Arduino Uno (la maggior parte degli altri tipi va bene)
  • Computer con Arduino IDE per la programmazione
  • Cavo da USB-A a USB-B per la programmazione di Arduino
  • tagliere
  • 4x ponticelli
  • Pulsante o altro interruttore
  • Resistenza da 10 kOhm
  • Buzzer passivo (es. altoparlante piezoelettrico)
  • Per l'installazione permanente:

    • Alimentatore da 9 V CC o batteria da 9 V per alimentare Arduino
    • 2x fili lunghi per il cablaggio del pulsante esterno alla porta

Passaggio 1: configurazione hardware

Configurazione hardware
Configurazione hardware
Configurazione hardware
Configurazione hardware
Configurazione hardware
Configurazione hardware

Per prima cosa, configureremo l'hardware. Inizieremo con il buzzer passivo (cioè l'altoparlante). Vogliamo collegare il polo positivo del cicalino passivo (indicato dal segno "+") al pin digitale 8 dell'Arduino. Collegheremo l'altra estremità del cicalino passizza a terra.

Successivamente, installeremo il pulsante per il campanello. Useremo un resistore pulldown esterno da 10 kOhm per l'interruttore, quindi non c'è tensione fluttuante o stato instabile sull'ingresso di Arduino. Utilizzando la resistenza di pulldown, Arduino legge la tensione come 0V quando il pulsante non viene premuto e 5V quando viene premuto il pulsante. Per maggiori informazioni sui resistori pullup o pulldown, puoi leggere questo articolo:

Collegheremo un lato del pulsante a 5V. L'altro lato del pulsante sarà collegato a terra tramite un resistore di pulldown da 10 kOhm. Ricorda: i pulsanti sono collegati orizzontalmente internamente. Sono collegati verticalmente solo quando vengono premuti. Maggiori informazioni sono fornite in questo articolo:

Passaggio 2: installazione del software

Tutto il codice è allegato. Di seguito sono riportate le descrizioni di ciascuna delle funzioni con snapshot del codice.

impostare:

Nella funzione setup(), vogliamo configurare i pin digitali per il nostro pulsante e il nostro altoparlante. Vogliamo configurare il pin 2 come input per il nostro pulsante e vogliamo configurare il pin 8 come output per il nostro altoparlante.

Vogliamo anche "seminare" il nostro generatore di numeri casuali per selezionare casualmente una melodia quando qualcuno suona il campanello. Seminare il nostro generatore di numeri casuali significa fornirgli un input casuale. Semineremo il nostro generatore di numeri casuali con il valore di tensione sull'ingresso analogico 0. Poiché nulla è collegato a questo ingresso, ci sarà una tensione "casuale" fluttuante su questo pin che fornirà al nostro generatore di numeri casuali molti valori diversi. Ciò garantisce che avremo un diverso ordine di selezioni di brani per il nostro campanello. Per maggiori informazioni sulla funzione Arduino random(), vai qui:

#include "pitch.h"

#include "songs.h" #define BUTTON_PIN 2 #define SPEAKER_PIN 8 /* imposta la funzione */ void setup() { // abilita i pin di input/output pinMode(BUTTON_PIN, INPUT); pinMode(SPEAKER_PIN, OUTPUT); // funzione seed random() in modo da ottenere un ordine diverso randomSeed(analogRead(0)); }

ciclo continuo:

Nella nostra funzione loop(), controlleremo continuamente per vedere se il pulsante è premuto (il pin digitale 2 è alto). Se il pin è alto, aspettiamo 50 ms e ricontrolliamo per assicurarci che sia ancora alto. Ciò garantisce che il pulsante venga premuto e che non si tratti di rumori vaganti sul pin di ingresso digitale che causano un falso positivo.

Una volta confermato che il pulsante è stato premuto, utilizziamo il nostro generatore di numeri casuali per selezionare uno dei 5 brani utilizzando un'istruzione switch. I dati per questi brani sono archiviati in "songs.h" e le informazioni sull'intonazione sono archiviate in "pitch.h". Una volta scelta una canzone, passiamo questa informazione alla funzione play_song().

/* funzione ciclo while principale */

void loop() { // controlla se il pulsante è premuto if (digitalRead(BUTTON_PIN) == HIGH) { // ritarda 50 ms per assicurarti che sia ancora premuto // evita qualsiasi ritardo di lettura errata (50); if(digitalRead(BUTTON_PIN) == HIGH) { // scegli una canzone a caso int song_choice = random(5); // seleziona quale canzone riprodurre switch (song_choice) { case 0: play_song(haircutLength, haircut, haircutDurations, haircutTempo); rottura; caso 1: play_song(marioLength, mario, marioDurations, marioTempo); rottura; caso 2: play_song(miiLength, mii, miiDurations, miiTempo); rottura; caso 3: play_song(hpLength, hp, hpDurations, hpTempo); rottura; caso 4: play_song(takeonmeLength, takeonme, takeonmeDurations, takeonmeTempo); rottura; default: play_song(miiLength, mii, miiDurations, miiTempo); rottura; } } } }

play_song:

play_song() accetta 4 argomenti: un numero intero di note nella canzone, un array intero delle altezze nella melodia, un array intero della durata e un tempo intero per quella particolare canzone. È necessario specificare ciascuno di questi per ogni brano che si desidera riprodurre. Per ulteriori informazioni su come utilizzare le funzioni di tono di Arduino, puoi guardare questo tutorial: https://www.arduino.cc/en/Tutorial/ToneMelody. Ho aggiunto alcune funzionalità in cima a questo tutorial per le note punteggiate. Se un valore nell'array della durata della nota è negativo, significa che è una nota puntata (la lunghezza è 1,5 volte maggiore).

/* riproduce la canzone */

void play_song(int num_notes, int melody, int noteDurations, int tempo) { // scorre e suona tutte le note per (int i=0; i 0) { duration = tempo / noteDurations; } // se è un numero negativo, significa nota puntata // aumenta la durata della metà per le note puntate else if (noteDurations < 0) { duration = tempo / abs(noteDurations) * 1.5; } tone(SPEAKER_PIN, melodia, durata); // per distinguere le note, imposta un tempo minimo tra di esse. // la durata della nota + 30% sembra funzionare bene: int pauseBetweenNotes = duration * 1.30; delay(pauseBetweenNotes); // interrompe la riproduzione del tono: noTone(SPEAKER_PIN); } }

Esempio di canzoni.h:

Di seguito è riportato un esempio di una delle canzoni in "songs.h". Le note sono macro definite in "pitch.h". I numeri corrispondono alle frequenze delle note in hertz (Hz). La durata delle note è definita come: 1 = nota intera, 2 = semiminima, 4 = semiminima, 8 = semiminima, -4 = semiminima puntata, ecc. La lunghezza è il numero totale di note nella canzone. Il tempo è un divisore per la velocità della canzone (un numero più alto significa un tempo più lento). Dovrai giocare con questo numero fino a ottenere un tempo che ti piace.

/* 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;

Passaggio 3: modifiche

Aggiungi più canzoni! Segui il formato mostrato in "songs.h" e usa il tutorial per aiuto: https://www.arduino.cc/en/Tutorial/ToneMelody. Per ogni nuova canzone che aggiungi, ricorda di aggiungere un nuovo caso all'istruzione switch e aumentare il numero massimo che può essere generato dalla tua funzione random(). Buona codifica!

Passaggio 4: più progetti

Per altri progetti, visita le mie pagine:

  • https://dargen.io/
  • https://github.com/mjdargen
  • https://www.instructables.com/member/mjdargen/

Consigliato: