ITTT Documentatie
Mijn kleine broertje speelt graag piano. Hij doet dit erg vaak en erg luid. Na een tijdje kan dit heel irritant worden. Daarom heb ik besloten voor If This Then That een device te maken, dat hem ervan weerhoudt voortdurend piano te spelen.
Dit ontwerp moest reageren op pianomuziek en de speler ontmoedigen. Na met mijn broertje te praten heb ik ontdekt dat hij het erg demotiverend vind wanneer onze vader hem eraan herinnert dat hij nog huiswerk moet maken. Daarom besloot ik een poppetje van mijn vader te maken die van achter zijn pianoboeken tevoorschijn zou komen en hem aan zijn huiswerk zou herinneren.
De Servomotor
De pop van mijn vader die tevoorschijn moest springen heb ik gemaakt met een servomotor.
Mijn eerste stap was om deze werkend te krijgen. Ik had op dit moment nog geen microfoon, dus op heb ik hem tijdelijk aangesloten op een potentiometer, om te kijken of de servo op de juist manier draaide.
Omdat ik mijn device tussen pagina’s bladmuziek wou verstoppen, heb ik de servo in een schrift geplakt. Ik probeerde doormiddel van touwtjes en stokjes een systeem te bouwen waarbij er een pop opzij zou draaien.
Uiteindelijk heb ik besloten dat de servo binnen de behuizing op zijn zij kon liggen. Hierdoor nam hij iets meer plek in beslag, maar het zorgde ervoor dat de pop direct op de arm van de servo vast kon worden gemaakt. Hierdoor werd de beweging van de servo veel voorspelbaarder.
De Microfoon
Nu mijn servomotor goed werkte, was het tijd om een audio-component toe te voegen. Ik heb de Adafruit Electret Microphone Amplifier gebruikt. Als eerste heb ik de pinnen aan de microfoon gesoldeerd zodat ik hem kon gebruiken met mijn breadboard.
Ik had best moeite met het omzetten van de input van de microfoon in een bruikbare waarde. Uiteindelijk heb ik een gedeelte code hergebruikt uit de volgende tutorial: https://learn.adafruit.com/adafruit-microphone-amplifier-breakout. Hier wordt de input van de microfoon omgezet in volts. Dit wordt vervolgens gebruikt om een visuele weergave van de soundlevels in de omgeving te maken. Dit eerste gedeelte, het omzetten in volts, heb ik ook gebruikt om het geluidsniveau te meten voor dit project.
Combineren
Ik had nu mijn audio input en het was tijd om deze te combineren met de servomotor. Eerst probeerde ik een absoluut geluidsniveau te vinden waar de Arduino op moest reageren, maar dit bleek al snel onpraktisch te zijn.
Ik realiseerde me dat het veel handiger was om de Arduino te laten reageren op het verschil in geluid in de omgeving. Dit werkte al stukken beter, maar was nog steeds niet altijd even betrouwbaar. Ik heb hierna besloten dat de verandering in percenten moest worden gemeten, in plaats van in absolute getallen. Dit zorgde er voor dat de Arduino niet zou reageren op constant achtergrondgeluid, maar alleen op de piek die zou ontstaan wanneer er piano gespeeld wordt.
Behuizing En Batterijen
Mijn device werkte nu in principe, maar hij had nog geenbehuizing. Hij moest verstopt worden tussen de bladzijdes van een piano-boek, zodat mijn vader daar tussen uit zou springen.
Ik heb een ongeveer twee-derde van de pagina’s uit een oud piano-boek gehaald. Vervolgens heb ik de Arduino vastgeplakt in een zo dun mogelijk doosje en deze tussen de pagina’s geplakt. k heb de pagina’s waar nodig aan elkaar geplakt zodat het boek goed open kon, er een zo’n natuurlijk mogelijk effect werd gemaakt en de servo de ruimte had om heen en weer te draaien.
In de deksel van de doos heb ik een gaatje gemaakt en daar rondom een groef, zodat de servomotor kon bewegen. Het lichaam van de servo heb ik onder de deksel geplakt en de arm kan er van bovenaf op geplaatst worden.
Aan die arm heb ik een stuk karton vastgemaakt. Ik heb een foto van mijn vader uitgeprint, er een tekstballon bij gemaakt en dit op het stuk karton geplakt om de pop te maken.
Dit is ook wanneer ik een batterypack heb toegevoegd in het ontwerp. Door een batterypack als energiebron te gebruiken in plaats van mijn computer, werd de device natuurlijk een stuk makkelijker verstoppen. Hij is op dezelfde pagina geplakt als de Arduino. In de doos zit een gaatje zodat de batterypack makkelijk in te pluggen is.
Op dit moment heb ik ook de precieze draai van de servo en drempelwaarde
van de microfoon aangepast, zodat ze werkte in deze nieuwe opzet.
Solderen
De laatste stap van dit project was het solderen. Ondanks het feit dat ik dit eerder geoefend had, ging het verschrikkelijk. Dit kwam waarschijnlijk gedeeltelijk doordat mijn vaardigheidsniveau nog niet zo hoog was en gedeeltelijk doordat ik werkte met een extreem oude soldeerbout.
Mijn eerste poging werkte helemaal niet. Gelukkig ben ik erin geslaagd een nieuw perf-board en een nieuwe soldeerbout te lenen. Met deze soldeerbout ging het een stuk beter en de tweede keer is het solderen wel gelukt.
Ook het afgemaakte perf-board werd in de doos vastgemaakt en alle draadjes werden opnieuw aangesloten. Het project was af.
Filmpje Eindproduct
Downloads
Reflectie
Ik heb zeker geleerd dat het toch nuttig kan zijn om de extra moeite te nemen om het juiste gereedschap te vinden. Ik heb veel moeite gehad omdat ik het het in eerste instantie niet waard vond om een betere soldeerbout te vinden. Een volgende keer zal ik toch iets langer te tijd nemen om de juiste materialen te verzamelen.
Ook had ik met meer tijd graag een wat stevigere behuizing gebouwd. De huidige werkt prima binnenshuis, maar wanneer ik hem moet vervoeren gaan er nog wel dingen schuiven. Een stevige behuizing had ik niet geprioriteerd, omdat dit device toch weinig zou bewegen, maar het zou alsnog beter zijn als hij iets beter tegen een stootje kon.
Elektronische Schema
Code Met Uitleg
#include <servo.h><br></servo.h>
Servo servo1;
const int sampleWindow = 50; unsigned int sample;
float voltsNow; float voltsPrev; float voltsDif;
void setup() { //in de setup wordt de servo in zijn startpositie gezet servo1.attach(9); servo1.write(180); }
void loop() { //in de loop wordt de servo bewogen
if (calcDif() > 1.5){ //de servo gaat bewegen wanneer het geluidsniveau met meer dan 1.5% omhooggaat. Uit mijn experimenten is gebleken dat dit ongeveer de sprong is wanneer in een stille kamer piano wordt gespeeld servo1.write(90); delay (3000); //na 3 secondes verdwijnt de pop weer achter het pianoboek servo1.write(180); delay(10000); //na een reactie is er een pauze van 10 secondes. Dit zorgt ervoor dat de servo de tijd heeft om terug te draaien en dat iemand die de waarschuwing genegeerd heeft net genoeg tijd heeft om hem te vergeten voordat hij terugkomt. } }
float calcVolts(){ //deze code is hergebruikt van een ander project. Het leest de input van de amplifier over 50 millisecondes en zet deze om in volts long startMillis = millis(); int peakToPeak = 0; int signalMax = 0; int signalMin = 1024;
while (millis() - startMillis < sampleWindow) { sample = analogRead(0); if (sample < 1024) { if (sample > signalMax) { signalMax = sample; } else if (sample < signalMin) { signalMin = sample; } } }
peakToPeak = signalMax - signalMin; float volts = (peakToPeak * 5.0) / 1024; return volts; }
float calcDif(){ //deze function berekent per moment de percentuele verandering van het geluidniveau if(voltsNow == NULL){ voltsNow = calcVolts(); return 0; }else{ voltsPrev = voltsNow; voltsNow = calcVolts(); voltsDif = ((voltsNow-voltsPrev)/voltsPrev)*100; return voltsDif; }
}