Sommario:
- Passaggio 1: configurazione hardware
- Passaggio 2: installazione del software
- Passaggio 3: modifiche
- Passaggio 4: più progetti
Video: Campanello Arduino: 4 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 09:59
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
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:
Come realizzare un campanello senza tocco, rilevamento della temperatura corporea, GY-906, 433 MHz utilizzando Arduino: 3 passaggi
Come realizzare un campanello senza tocco, rilevamento della temperatura corporea, GY-906, 433 MHz utilizzando Arduino: oggi realizzeremo un campanello senza tocco, rileverà la temperatura corporea. Nella situazione attuale, è molto importante sapere se la temperatura corporea di qualcuno è più alta del normale, quando qualcuno sta calciando. Questo progetto mostrerà la luce rossa se rileva qualsiasi
Campanello per porte senza tocco fai-da-te senza Arduino!: 7 passaggi
Campanello fai-da-te senza tocco senza Arduino!: Gli interruttori del campanello sono una delle cose più toccate dagli estranei. E con la pandemia di covid 19 che sta diventando un problema serio, mantenere una buona igiene è diventata la massima priorità in questi giorni. Quindi in questo tutorial, ti mostrerò un modo semplice
Adattare un campanello video a un campanello digitale: 5 passaggi
Adattamento di un campanello video a un campanello digitale: per farla breve, Best Buy mi ha detto che non potevo installare il campanello Simplisafe con un campanello con melodia musicale. Leggere centinaia di post ha detto che non si può fare. Simplisafe ha detto che non si può fare, ma ha comunque fornito un kit. Il kit di connettori è per una barra st
Trasforma il tuo campanello cablato in un campanello intelligente con IFTTT: 8 passaggi
Trasforma il tuo campanello cablato in un campanello intelligente con IFTTT: il campanello WiFi trasforma il campanello cablato esistente in un campanello intelligente. https://www.fireflyelectronix.com/product/wifidoor
Trasforma il tuo campanello cablato in un campanello intelligente con Home Assistant: 6 passaggi
Trasforma il tuo campanello cablato in un campanello intelligente con Home Assistant: trasforma il tuo campanello cablato esistente in un campanello intelligente. Ricevi una notifica sul tuo telefono o accoppiala con la videocamera della porta anteriore esistente per ricevere un avviso foto o video ogni volta che qualcuno suona il campanello.Scopri di più su: fireflyelectronix.com/pro