ITTT Documentatie

by Mirjam M in Circuits > Arduino

126 Views, 0 Favorites, 0 Comments

ITTT Documentatie

20210528_185430.jpg

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

20210325_175641 (1).jpg
20210416_132233.jpg

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

20210513_103524.jpg
20210514_114517(0).jpg

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

20210517_192051.jpg
20210517_192109.jpg

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

20210528_190219.jpg
20210528_185439.jpg
20210528_190208.jpg

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

20210527_094808.jpg
20210527_140848.jpg

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

20210528_185430 (2).jpg

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

ittt schemapng.png

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;
    }
}