Introduction: Anti Snoring Machine

Wordt jouw nachtrust weleens verstoord door een huisgenoot, partner of hond? Bij mij wel! 

Voor dit project heb ik een “anti snurk machine gemaakt”. De snurk machine wordt aangezet voordat de snurker gaat slapen. De geluidsensor neemt de snurkgeluiden gedurende de nacht op. Is het geluid te hard, dan speelt er een audio af uit de speaker: “you are snoring, be quiet!" Als dit niet voldoende is voor de snurker om minder geluid te maken en de snurker voor de tweede keer te hard snurkt, wordt de audio weer afgespeeld. De snurker heeft vervolgens kort de tijd om wakker te worden. Kort na de tweede waarschuwing duwt een servo een glas water over de snurker heen. Zo kan jij lekker genieten van je nachtrust.


Supplies

Elektronische componenten:

  • Arduino Uno
  • YX5200 DFPlayer Mini MP3 module met MicroSD kaartslot
  • Geluidssensor module voor Arduino | ESP32 | ESP8266
  • Speakertje 3W 40mm
  • Micro SD kaart
  • Draadbruggen set
  • Servo SG90

Behuizing:

  • Hard schuim board of ander sterk materiaal waar makkelijk in te snijden is en aan elkaar te plakken is met alles lijm.
  • Alles lijm
  • Seconde lijm
  • Tape
  • Ijsstokje

Extra decoratie:

  • Verf/spuitbus grijs
  • Nep mos
  • Oren + Anti snoring machine printjes

Gereedschap:

  • Soldeerbout + soldeer
  • Liniaal
  • Stanleymes

Step 1: Test

Voor dit project ben ik begonnen met een schets van mijn idee en het bestellen van de onderdelen. Vervolgens heb ik mijn ontwerp op een breadboard uitgetest. Ik raad aan dit altijd te doen. Tijdens dit project ben ik vaak tegen dingen aangelopen zoals de geluidssensor die af en toe niet deed wat het moest doen. Test dus altijd de componenten voor het solderen.

Aandachtspunten:

Het testen met de componenten ging niet altijd even soepel. De speaker is lastig vast te krijgen aan de draden zonder deze te solderen. Het is dus handig om de speaker alvast te solderen aangezien je daarmee ook niet snel de fout in kan gaan. 

Bij het testen van de audio ben ik een paar keer de mist in gegaan. Ik dacht dat het aan de componenten lag maar dit was niet het geval. Om de audio af te kunnen spelen dient de audiofile een bepaalde naam te hebben. In mijn geval “01”.

Het allergrootste struikelpunt tijdens dit project was de geluidssensor. Deze leek vrij onbetrouwbaar en na heel veel pogingen bleek dat er flink geschroefd moest worden aan de sensor. Op de sensor zitten twee lampjes die rood licht geven, er moet net zo lang aan het draaipunt (zie afbeelding met pijl) worden gedraaid tot een van de lampjes net uit is. Dit is een priegel werkje maar met een stanley mesje prima te doen. Nadat de sensor goed is afgesteld zul je merken dat de uitkomsten veel betrouwbaarder zijn.

Step 2: Behuizing & Solderen

Maak voordat je gaat solderen een duidelijk schematische tekening van je project zoals op de toegevoegde afbeelding. Soldeer vervolgens de componenten aan elkaar.

Voor de behuizing heb ik een schuimachtig karton gebruikt. Dit is fijn materiaal omdat je er makkelijk in kunt snijden, het weegt niet veel en is sterk genoeg om alles bij elkaar te houden. Snijd netjes met een mes en liniaal een bodem waar de arduino en het breadboard op passen. Snijd vervolgens vier stukken die als zijkanten dienen. In deze zijkanten moeten een paar gaten zitten; een gat voor de servo, een rond gat waar de speaker precies in past, een gat waar de stroompoort voor de arduino zit en een gaatje voor de geluidssensor zodat deze aan de buitenkant van de behuizing geplakt kan worden en geen belemmeringen heeft voor het detecteren van geluid. Tenslotte moet er nog eenzelfde stuk als de bodem gesneden worden die als deksel dient. Kijk de foto's voor referentie.

De stukken schuimkarton kunnen worden vastgelijmd met alleslijm maar laat de bovenzijde los zodat je altijd nog in de case kunt. De arduino en mp3 speler kunnen op de bodem geplakt worden. De servo, geluidssensor, en speaker kunnen in de juiste gaten geplakt worden met secondenlijm voor extra stevigheid. Plak op de servo een ijsstokje die als verlenging dient om het glaasje water om te duwen. Alle draden binnen de behuizing kunnen nog netjes tegen de zijkanten aangeplakt worden met wat tape.

Ik heb ervoor gekozen om de behuizing grijs te spuiten met een spuitbus. Aan de zijkanten heb ik oren toegevoegd (zie afbeelding) en ik heb de hele behuizing bedekt met nep-mos. Ik heb veel planten in mijn huis en vind dat de machine met nep mos hier beter tussen past. 

Uiteraard kun je de machine versieren zoals je zelf wilt.

Step 3: Code

//Code voor de "anti snoring machine" + uitleg

//Deze code gebruikt een microfoon om het geluidsniveau te detecteren
//Als het geluidsniveau boven een bepaalde drempelwaarde komt, wordt er een MP3-bestand afgespeeld om de slaper wakker te maken en de snurk te stoppen.
//De code maakt gebruik van een DFPlayerMini-module om het MP3-bestand af te spelen, een Servo-motor om een glas water om te duwen en een microfoon om het geluid te detecteren.


#include <SoftwareSerial.h>       // Importeer de SoftwareSerial
#include <DFRobotDFPlayerMini.h>  // Importeer de DFPlayerMini
#include <Servo.h>                // Importeer de Servo


static const uint8_t PIN_MP3_TX = 11;                   // Definieer de pin voor de TX van de MP3 speler
static const uint8_t PIN_MP3_RX = 10;                   // Definieer de pin voor de RX van de MP3 speler
SoftwareSerial softwareSerial(PIN_MP3_RX, PIN_MP3_TX);  // Maak een softwarematige seriële verbinding met de MP3-speler
DFRobotDFPlayerMini player;                             // Initialiseer de DFPlayerMini
Servo myservo;                                          // Initialiseer de Servo
int microphonePin = A0;                                 // Definieer de pin van de microfoon
int threshold = 525;                                    // Stel de drempelwaarde voor de microfoon in
int prevMicrophoneValue = 0;                            // Initialiseer de variabele voor de vorige microfoonwaarde
int pos = 0;                                            // Initialiseer de variabele voor de servo positie
int counter;                                            // Initialiseer de teller voor de microfoon


void setup() {                         // Functie voor het instellen van de Arduino bij het opstarten
  myservo.attach(9);                   // Koppel de servo aan pin 9
  Serial.begin(9600);                  // Start de seriële communicatie op 9600 baudrate
  softwareSerial.begin(9600);          // Initialiseer de softwarematige seriële communicatie op 9600 baudrate
  pinMode(microphonePin, INPUT);       // Stel de pinmode van de microfoon in als input
  if (player.begin(softwareSerial)) {  // Initialiseer de communicatie met de DFPlayerMini
    Serial.println("OK");              // Laat de status zien als OK wanneer de communicatie met de DFPlayerMini is gestart
    player.volume(20);                 // Stel het volume in op 20 (van de 0-30 range)
  } else {
    Serial.println("Connecting to DFPlayer Mini failed!");  // Laat de status zien als de communicatie met de DFPlayerMini mislukt is
  }
}


void loop() {                                       // Functie voor het continue uitvoeren van de Arduino
  delay(200);                                       // Wacht 200 milliseconden
  int microphoneValue = analogRead(microphonePin);  // Lees de waarde van de microfoon


  myservo.write(200);  // Stuur de servo naar positie 200 graden


  Serial.println(microphoneValue);  // Laat de waarde van de microfoon zien op de seriële monitor


  if (microphoneValue != prevMicrophoneValue) {  // Controleer of de microfoonwaarde veranderd is
    prevMicrophoneValue = microphoneValue;       // Bewaar de huidige microfoonwaarde als vorige microfoonwaarde


    if (microphoneValue > threshold) {         // Controleer of de microfoonwaarde hoger is dan de drempelwaarde
      counter++;                               // Verhoog de teller voor de microfoonwaarde
      player.playMp3Folder(1);                 // speelt geluid af
      Serial.println("Sound level is high!");  // Geef aan "Sound level is high!" in de serial monitor
      delay(6000);                             // in miliseconden zoveel tijd doet tie even niks
      if (counter == 2) {                      // Als de teller op 2 staat
        for (pos = 200; pos >= 90; pos -= 1)   // Ga van 200 graden naar 90 graden in stappen van 1 graad
        {
          myservo.write(pos);  // Stuur de servo naar de positie in de variabele 'pos'
          delay(15);           // Wacht 15 milliseconden voor de servo om de positie te bereiken
        }
      }
    }
  }
}

Step 4: Conclusie

Tijdens dit project heb ik geleerd hoe ik moet omgaan met een Arduino. Na heel veel frustratie heb ik mijn design kunnen realiseren. De machine kan nog meer geoptimaliseerd worden en als ik meer tijd had, had ik een alternatief gekozen voor de geluidssensor/microfoon. Deze is namelijk niet altijd even betrouwbaar en heel irritant om te gebruiken. In de video is mijn eind resultaat te zien.