In dit project gaan we een stukje entertainment bouwen met Arduino. We hebben allemaal de gewoonte om op Tafel of Pen te tikken om willekeurige muziek te maken. Natuurlijk wordt het misschien niet als een goed maniërisme beschouwd, maar we vinden het allemaal leuk om het minstens één keer te doen. Daarom dacht ik erover om het naar een hoger niveau te tillen door Arduino's vermogen om tonen te spelen te gebruiken. Als je dit project eenmaal hebt gebouwd, zou je in staat zijn om tonen te genereren door met je vingers op iets geleiders te tikken en je eigen ritmes te creëren, het is alsof je piano speelt op je handpalm. Klinkt goed, dus laten we het bouwen.
Componenten vereist:
De materialen die nodig zijn voor dit project staan hieronder vermeld, het is niet verplicht om hier aan vast te houden. Als je het concept eenmaal begrijpt, kun je het op je eigen manier bouwen.
- Arduini Pro Mini
- Peizo-luidspreker
- Flex-sensor
- Vingerhandschoenen
- 10K weerstanden
- BC547-transistors
- 9V batterij
Schakelschema en uitleg:
Het schakelschema voor deze Arduino Palm Piano wordt hieronder weergegeven.
Het project maakt gebruik van in totaal vier sensoren, dat wil zeggen twee flex-sensoren en twee Darlington-paren die als aanraaksensor fungeren. We hebben ook twee pull-down-weerstanden R1 en R2 met een waarde van 10k elk gebruikt, die zullen fungeren als een pull-down-weerstand voor de Flex-sensor. Hier wordt de Flex-sensor gebruikt om drie verschillende tonen te genereren door één vinger te gebruiken, op basis van hoeveel hij is gebogen. We kunnen dus 6 geluiden produceren met twee vingers. Lees hier meer over de Flex-sensor.
Darlington-paar:
Voordat we verder gaan, is het belangrijk om te weten wat een Darlington is en hoe het precies werkt in ons project. Darlington-paar kan worden gedefinieerd als twee bipolaire transistors die zo zijn verbonden dat de stroom die wordt versterkt door de eerste, verder wordt versterkt door de tweede transistor. Een Darlington-paar wordt getoond in de onderstaande afbeelding:
Zoals hierboven weergegeven, hebben we twee BC547-transistors gebruikt waarvan de collectoren zijn verbonden om te verzamelen en de emitter van de eerste transistor is verbonden met de basis van de tweede transistor. Dit circuit werkt als een versterker met een versterking, wat betekent dat elk klein signaal dat aan de basis van de eerste transistor wordt gegeven, voldoende is om de basis van de tweede transistor voor te spannen. Ons lichaam fungeert hier als aarde, dus wanneer we de basis van de transistor aanraken, wordt de tweede transistor voorgespannen. Om dit in ons voordeel te gebruiken, hebben we de aanraaksensor voor dit project gebouwd.
Pin nummer 2 en 3 zijn de interrupt-pinnen op de Arduino die hoog worden getrokken met behulp van interne pull-up-weerstanden en deze pinnen worden op aarde gehouden wanneer de Darlington-schakelaar sluit. Op deze manier wordt elke keer dat we de draad aanraken (vanaf de basis van de 1 ste transistor) een interrupt geactiveerd vanuit de Arduino.
Het gebruik van twee vingers kan slechts twee soorten tonen produceren, daarom heb ik ook een flex-sensor toegevoegd die de toon zal veranderen op basis van hoeveel hij is gebogen. Ik heb geprogrammeerd om drie verschillende tonen per vinger te produceren op basis van hoeveel de vinger (flexsensor) gebogen is. U kunt het aantal verhogen als u meer tonen binnen handbereik wilt hebben.
Ik heb het complete bord gemaakt op een perfboard zodat het gemakkelijk in mijn handpalmen past, maar je kunt ook een breadboard gebruiken. Zorg ervoor dat uw lichaam op een gegeven moment de grond van het circuit raakt. Zodra je alles hebt gesoldeerd, zou het er ongeveer zo uit moeten zien
Ik heb twee vingerhandschoenen gebruikt om de draden van het Darlington-paar en de flex-sensor vast te zetten zoals hierboven weergegeven. U kunt uw eigen (indien mogelijk beter) idee bedenken om ze op hun plaats te houden terwijl u uw tonen speelt.
Arduino-programmering:
Het programma voor deze Arduino Tap Tone Generator is vrij eenvoudig. We moeten gewoon uitkijken voor onderbrekingen van de Darlington-draden en als we er een vinden, moeten we een toon spelen die afhangt van hoeveel flex-sensor is gebogen. De volledige code staat aan het einde van dit bericht, maar ik heb hieronder enkele belangrijke stukjes uitgelegd.
Opmerking: dit programma werkt met behulp van bibliotheek “pitches.h”. Zorg er dus voor dat je het header-bestand aan je programma hebt toegevoegd voordat je het compileert. U kunt het header-bestand pitches.h hier downloaden.
In de setup- functie initialiseren we pin 2 en 3 als input met pull-up weerstanden. Wij verklaren ze ook als interrupt pinnen en voer het TOON1 () wanneer er een interrupt op pin 2 en de functie Tone2 () wanneer er een onderbreking op de 3 rd pin. Deze interrupts worden geactiveerd wanneer deze pinnen LAAG worden vanuit hun opgetrokken toestand.
void setup () {pinMode (2, INPUT_PULLUP); pinMode (3, INPUT_PULLUP); attachInterrupt (digitalPinToInterrupt (2), tone1, LOW); attachInterrupt (digitalPinToInterrupt (3), tone2, LOW); Serial.begin (9600); }
Binnen de loop- functie controleren we constant hoeveel de flex-sensor gebogen is. Mijn FlexSensor 1 gaf bijvoorbeeld waarden rond de 200 als hij plat werd gelaten en ging helemaal naar 130 toen ik hem tot het maximum boog, dus ik heb de waarde van 200 tot 130 in kaart gebracht als 1 tot 3, omdat ik 3 verschillende typen moet spelen van tonen. U moet deze twee regels aanpassen op basis van uw Flex-sensorwaarden en het aantal tonen.
void loop () {flexSensor1 = kaart (analogRead (A0), 200,130,1,3); // Breng uw eigen waarden in kaart op basis van uw flexsensor flexSensor2 = map (analogRead (A1), 170,185,1,3); // Breng uw eigen waarden in kaart op basis van uw flexsensor}
Zoals we eerder zagen, zal de functie tone1 () worden uitgevoerd wanneer een interrupt wordt gedetecteerd op pin 2. Wat er binnen de tone1 () functie gebeurt, wordt hierboven weergegeven. We kijken naar de waarden van FlexSensor1 en spelen een toon gebaseerd op de flexSesnor Value. Tonen worden gespeeld met de Tone-functie van Arduino. We hebben de functie tone () uitgelegd in ons vorige project.
void tone1 () {if (flexSensor1 == 1) tone (8, NOTE_D4,50); anders if (flexSensor1 == 2) toon (8, NOTE_A3,50); anders if (flexSensor1 == 3) toon (8, NOTE_G4,50); anders toon (8, NOTE_D4,50); }
De onderstaande regel wordt gebruikt om de toon te spelen. U kunt elke toon spelen die beschikbaar is in het "pitches.h" header-bestand. De bovenstaande regel speelt bijvoorbeeld de NOTE_A3 op pin voor een duur van 50 milli seconden.
toon (8, NOTE_A3,50); // tone (PinNum, Note name, Duration);
Werken:
Zodra je hardware klaar is, upload je de code en monteer je ze op je vingers. Zorg ervoor dat uw lichaam op een gegeven moment de aarde van het circuit raakt. Raak nu gewoon een geleidend materiaal of uw lichaam aan en u zou de betreffende toon moeten kunnen horen. U kunt uw eigen melodie of muziek spelen door op verschillende intervallen en verschillende posities te tikken.
De onderstaande video toont de volledige werking van het project. Ik hoop dat je het leuk vond om het project te bouwen, eventuele suggesties of vragen kunnen in het commentaargedeelte hieronder worden geplaatst. Bekijk ook onze Arduino Audio Player en Arduino Tone Generator Project.