- Vereiste hardware:
- Inzicht in de Tone () -functie van Arduino:
- Het pitches.h- headerbestand:
- Muzieknoten spelen op Arduino:
- Schema en hardware:
- Arduino Programma Uitleg:
- Werking van dit Melody Player Arduino Circuit:
Arduino is een uitstekende manier om uw microcontrollerprojecten te vereenvoudigen en te versnellen, dankzij de gemeenschap van ontwikkelaars die bijna alles er eenvoudig hebben laten uitzien. Er zijn hier veel Arduino-projecten die je kunt proberen en plezier kunt hebben. Sommige van je projecten hebben misschien wat geluidsactie nodig om iets op de hoogte te stellen of gewoon om indruk te maken op de kijkers. Wat als ik je zou vertellen dat bijna alle themaliedjes die op een piano kunnen worden gespeeld, op je Arduino kunnen worden nagebootst met behulp van een eenvoudig programma en een goedkope Piezo-luidspreker?
In deze tutorial zullen we leren hoe eenvoudig en gemakkelijk het is om Melody op Piezo Buzzer of Speaker te spelen met behulp van de Arduino tone () functie. Aan het einde van deze tutorial kun je een aantal beroemde tonen spelen van Pirates of Caribbean, Crazy Frog, Super Mario en Titanic. Je leert ook hoe je elk stuk pianomuziek met Arduino kunt spelen. Bekijk de video aan het einde.
Vereiste hardware:
- Arduino (elke versie - UNO wordt hier gebruikt)
- Piezo-luidspreker / zoemer of een andere 8ohm-luidspreker.
- Breadboard
- Verbindingsdraden
- Drukknoppen
- 1k weerstand (optioneel)
Inzicht in de Tone () -functie van Arduino:
Voordat we kunnen begrijpen hoe een toon () werkt, moeten we weten hoe een piëzo-zoemer werkt. We hebben misschien op onze school over piëzo-kristallen geleerd, het is niets anders dan een kristal dat mechanische trillingen omzet in elektriciteit of vice versa. Hier passen we een variabele stroom (frequentie) toe waarvoor het kristal trilt en zo geluid produceert. Om de piëzo-zoemer wat geluid te laten maken, moeten we het piëzo-elektrische kristal laten trillen, de toonhoogte en toon van ruis hangen af van hoe snel het kristal trilt. Daarom kunnen de toon en toonhoogte worden geregeld door de frequentie van de stroom te variëren.
Oké, dus hoe krijgen we een variabele frequentie van Arduino ? Dit is waar de functie tone () van pas komt. De tone () kan een bepaalde frequentie op een specifieke pin genereren. Indien nodig kan ook de tijdsduur worden vermeld. De syntaxis voor tone () is
Syntaxis toon (pin, frequentie) toon (pin, frequentie, duur) Parameters pin: de pin waarop de toonfrequentie moet worden gegenereerd: de frequentie van de toon in hertz - niet-ondertekend int duur: de duur van de toon in milliseconden (optioneel) - lang ongetekend
De waarden van pin kunnen elk van uw digitale pin zijn. Ik heb hier pincode 8 gebruikt. De frequentie die kan worden gegenereerd, is afhankelijk van de grootte van de timer in je Arduino-bord. Voor UNO en de meeste andere gangbare boards is de minimale frequentie die kan worden geproduceerd 31Hz en de maximale frequentie die kan worden geproduceerd is 65535Hz. Wij mensen kunnen echter alleen frequenties horen tussen 2000 Hz en 5000 Hz.
Het pitches.h- headerbestand:
Nu weten we hoe we wat ruis kunnen produceren met behulp van de arduino tone () -functie . Maar hoe weten we wat voor soort toon er voor elke frequentie wordt gegenereerd?
Arduino heeft ons een notitietabel gegeven die elke frequentie gelijkstelt aan een specifiek type muzieknoot. Deze notitietafel is oorspronkelijk geschreven door Brett Hagman, op wiens werk het commando tone () was gebaseerd. We zullen deze notitietafel gebruiken om onze thema's te spelen. Als je iemand bent die bekend is met bladmuziek, zou je deze tabel een beetje moeten kunnen begrijpen, voor anderen zoals ik is dit gewoon een ander codeblok.
#define NOTE_B0 31 #define NOTE_C1 33 #define NOTE_CS1 35 #define NOTE_D1 37 #define NOTE_DS1 39 #define NOTE_E1 41 #define NOTE_F1 44 #define NOTE_FS1 46 #define NOTE_G1 49 #define NOTE_GS1 52 #define NOTE_A1 55 # 58 # NOTE_AS NOTE_B1 62 #define NOTE_C2 65 #define NOTE_CS2 69 #define NOTE_D2 73 #define NOTE_DS2 78 #define NOTE_E2 82 #define NOTE_F2 87 #define NOTE_FS2 93 #define NOTE_G2 98 #define NOTE_GS2 104 #define NOTE_A2 110 #define NOTE_AS2 117 # 123 #define NOTE_C3 131 #define NOTE_CS3 139 #define NOTE_D3 147 #define NOTE_DS3 156 #define NOTE_E3 165 #define NOTE_F3 175 #define NOTE_FS3 185 #define NOTE_G3 196 #define NOTE_GS3 208 #define NOTE_A3 220 #define NOTE_AS3 233 #define # NOTE_C4 262 #define NOTE_CS4 277 #define NOTE_D4 294 #define NOTE_DS4 311 #define NOTE_E4 330 #define NOTE_F4 349#define NOTE_FS4 370 #define NOTE_G4 392 #define NOTE_GS4 415 #define NOTE_A4 440 #define NOTE_AS4 466 #define NOTE_B4 494 #define NOTE_C5 523 #define NOTE_CS5 554 #define NOTE_D5 587 #define NOTE_DS5 622 #define # 698_E5 NOTE_FS5 740 #define NOTE_G5 784 #define NOTE_GS5 831 #define NOTE_A5 880 #define NOTE_AS5 932 #define NOTE_B5 988 #define NOTE_C6 1047 #define NOTE_CS6 1109 #define NOTE_D6 1175 #define NOTE_DS6 1245 #define # 1319 NOTE_E6 #define NOTE_G6 1568 #define NOTE_GS6 1661 #define NOTE_A6 1760 #define NOTE_AS6 1865 #define NOTE_B6 1976 #define NOTE_C7 2093 #define NOTE_CS7 2217 #define NOTE_D7 2349 #define NOTE_DS7 2489 #define NOTE_E7 2637 #define # 2960 NOTE_G7 3136 #define NOTE_GS7 3322 #define NOTE_A7 3520 #define NOTE_AS73729 #define NOTE_B7 3951 #define NOTE_C8 4186 #define NOTE_CS8 4435 #define NOTE_D8 4699 #define NOTE_DS8 4978
Bovenstaande code wordt gegeven in pitches.h header-bestand in dit zip-bestand , je hoeft dit bestand alleen maar te downloaden en op te nemen in onze Arduino-code zoals aangegeven aan het einde van deze tutorial, of gebruik de code die in het zip-bestand staat.
Muzieknoten spelen op Arduino:
Om een fatsoenlijke melodie te spelen met Arduino, moeten we weten wat deze melodieën zijn. De drie belangrijkste factoren die nodig zijn om een thema te spelen zijn
- Let op de waarde
- Opmerking Duur
- Tempo
We hebben het header-bestand pitches.h om elke nootwaarde te spelen, nu zouden we de specifieke nootduur moeten weten om het te spelen. Tempo is niets anders dan hoe snel de melodie moet worden gespeeld. Zodra u de nootwaarde en de nootduur kent, kunt u ze gebruiken met de toon () zoals
tone (pinName, Note Value, Note Duration);
Voor de tonen die in deze tutorial worden gespeeld, heb ik je de nootwaarde en de nootduur gegeven in het header-bestand "themes.h" waarmee je ze in je projecten kunt afspelen. Maar als je een specifieke toon in je mijn hebt en je wilt die in je project spelen, lees dan verder… Sla anders dit onderwerp over en ga naar de volgende.
Om een specifieke toon te spelen, moet je de bladmuziek van die specifieke muziek ophalen en bladmuziek converteren naar Arduino-sketch door de nootwaarde en de nootduur ervan te lezen. Als je een muzikale student bent, zou het een fluitje van een cent voor je zijn, anders zou je wat tijd besteden en je hoofd breken zoals ik deed. Maar aan het einde van de dag, wanneer uw toon op de piëzo-zoemer speelt, zult u merken dat uw moeite de moeite waard is.
Zodra u de nootwaarde en de nootduur heeft, laadt u ze in het programma in het header-bestand "themes.h", zoals hieronder getoond
// ############## ** "HE IS A PIRATE" Themalied van Pirates of caribbean ** ############## // int Pirates_note = {NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D3 NOTE_A3, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_G4, NOTE_E4, NOTE_E4, NOTE_D4, NOTE_C4, NOTE_C4, NOTE_D4, 0, NOTE_A3, NOTE_C4, NOTE_F4, NOTE_F4, NOTE_F3, NOTE_C4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4 NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_C4, NOTE_D4, 0, 0, NOTE_A3, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_F4, NOTE_G4, NOTE_G4, NOTE_G4, NOTE_A4, NOTE_D, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, 0, NOTE_D4, NOTE_E3, NOTE_F4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_D4, 0, NOTE_D4, NOTE_F4,NOTE_E4, NOTE_E4, NOTE_F4, NOTE_D4}; int Pirates_duration = {4,8,4,8,4,8,8,8,8,4,8,4,8,4,8,8,8,8,4,8,4,8, 4, 8,8,8,8,4,4,8,8,4,4,8,8,4,4,8,8, 8,4,8,8,8,4,4,8,8, 4,4,8,8,4,4,8,4, 4,8,8,8,8,4,4,8,8,4,4,8,8,4,4,8,8, 8,4,8,8,8,4,4,4,8,4,8,8,8,4,4,8,8}; // ########### End of He is a Pirate song ############# //
Het bovenstaande codeblok toont de nootwaarde en de nootduur van het "He is a Pirate" -thema uit de film Pirates of the Caribbean. U kunt uw thema op dezelfde manier toevoegen.
Schema en hardware:
Het schema van dit Arduino Tone Generator Project- project wordt weergegeven in de onderstaande afbeelding:
De verbinding is vrij eenvoudig, we hebben een piëzo-luidspreker die is aangesloten op pin 8 en aarde van de Arduino via een 1K-weerstand. Deze 1k-weerstand is een stroombegrenzende weerstand, die wordt gebruikt om de stroom binnen de veilige limieten te houden. We hebben ook vier schakelaars om de gewenste melodie te selecteren. Het ene uiteinde van de schakelaar is verbonden met aarde en het andere uiteinde is verbonden met respectievelijk pin 2, 3, 4 en 5. De schakelaars hebben pull-up-weerstanden die intern zijn ingeschakeld met behulp van de software. Omdat het circuit vrij eenvoudig is, kan het worden aangesloten met behulp van een breadboard, zoals hieronder wordt weergegeven:
Arduino Programma Uitleg:
Als je het concept eenmaal hebt begrepen, is het Arduino-programma vrij eenvoudig. De volledige code wordt aan het einde van de tutorial gegeven. Als je niet bekend bent met het toevoegen van headerbestanden, kun je de code vanaf hier downloaden als een ZIP-bestand en deze direct uploaden naar je Arduino.
De bovenstaande twee zijn de header-bestanden die moeten worden toegevoegd. "Pitches.h" wordt gebruikt om elke muzieknoot gelijk te stellen aan een bepaalde frequentie en "themes.h" bevat de nootwaarde en de nootduur van alle vier de tonen.
#include "pitches.h" #include "themes.h"
Er is een functie gemaakt om elke toon te spelen wanneer dat nodig is. Hier, wanneer de functie Play_Pirates () wordt genoemd, zal de toon "Hij is een piraat" worden gespeeld. Deze functie bestaat uit de toonfunctie die de frequentie op pin nummer 8 produceert. De noTone (8) wordt opgeroepen om de muziek te stoppen zodra deze is afgespeeld. Als je je eigen toon wilt spelen, verander dan de Pirates_note en Pirates_duration in de nieuwe noot- en duurwaarden die je hebt opgeslagen in de waarde "themes.h"
void Play_Pirates () {for (int thisNote = 0; thisNote <(sizeof (Pirates_note) / sizeof (int)); thisNote ++) {int noteDuration = 1000 / Pirates_duration; // converteer duur naar vertragingstoon (8, Pirates_note, noteDuration); int pauseBetweenNotes = noteDuration * 1.05; // Hier is 1,05 tempo, verhoog om het langzamer te spelen delay (pauseBetweenNotes); noTone (8); }}
De pin 2, 3, 4 en 5 worden gebruikt om de specifieke toon te selecteren die moet worden gespeeld. Deze pinnen worden standaard hoog gehouden met behulp van de interne pull-up-weerstanden met behulp van de bovenstaande coderegel. Wanneer de knop wordt ingedrukt, wordt deze naar beneden getrokken.
pinMode (2, INPUT_PULLUP); pinMode (3, INPUT_PULLUP); pinMode (4, INPUT_PULLUP); pinMode (5, INPUT_PULLUP);
Onderstaand codeblok wordt gebruikt om het nummer af te spelen wanneer een knop wordt ingedrukt. Het leest de digitale waarde van elke knop en wanneer deze laag wordt (nul), gaat het ervan uit dat de knop is ingedrukt en speelt de respectieve toon door de vereiste functie aan te roepen.
if (digitalRead (2) == 0) {Serial.println ("Geselecteerd -> 'Hij is een piraat'"); Play_Pirates (); } if (digitalRead (3) == 0) {Serial.println ("Geselecteerd -> 'Crazy Frog'"); Play_CrazyFrog (); } if (digitalRead (4) == 0) {Serial.println ("Geselecteerd -> 'Mario UnderWorld'"); Play_MarioUW (); } if (digitalRead (5) == 0) {Serial.println ("Geselecteerd -> 'Hij is een piraat'"); Play_Pirates (); }
Werking van dit Melody Player Arduino Circuit:
Zodra je code en hardware klaar zijn, brand je het programma gewoon in je Arduino en zou je de toon moeten kunnen spelen door simpelweg op de knoppen te drukken. Als je problemen hebt, kijk dan eens naar je seriële monitor voor foutopsporing of gebruik de commentaarsectie om het probleem te melden en ik help je graag verder.
De volledige werking van het project wordt getoond in de onderstaande video. Ik hoop dat je van het project genoten hebt en het in een deel van je project zou gebruiken of een nieuwe toon voor je project zou creëren. Zo ja, deel dan gerust uw werk in het commentaargedeelte.