Duveltje-in-een-doosje Arduino Project

by irmaplaizier in Circuits > Arduino

455 Views, 0 Favorites, 0 Comments

Duveltje-in-een-doosje Arduino Project

20210808_134252.jpg

Van in plaats iets praktisch te maken, wilde ik iets grappigs maken. En omdat ik geen eerdere ervaring had met een arduino wilde ik ook iets simpels maken. Al gauw kreeg een theremin achtig project mijn interesse. Aangezien een echte theremin een spookachtig geluid maakt, wilde ik ook een spookje bij mijn project betrekken. Het laatste beetje inspiratie kwam van een duveltje in een doosje.

Het uiteindelijke project is een klein spookje dat een duveltje-in-een-doosje heeft bezeten en met de aanwezige mechanismes (een geluidje en een opened dekseltje) zijn best doet om iedereen die te dicht bij komt te intimideren, ook al is hij er misschien niet erg goed in door zijn kleine formaat.

Iteraties

Plan.png
Test code.png
Scharnier plannen.png
Scharnier plannen 2.png
20210806_133409.jpg

Welk geluid het spookje zou maken is door wat veranderingen gegaan. Het originele idee was om een soort theremin te maken waarbij de toonhoogte verandert als je dichterbij komt, dit was echter erg simpel en al veel gedaan. Het volgende idee was om een paar geluidsopties te hebben in een soort keuzemenuutje (theremin, glitchy/chaos, muziekje, stilte) maar dit was iets te geavanceerd voor mijn arduino kennis. Hoewel ik deze code kwijt ben, heb ik nog wel een eerdere versie (toegevoegd in de afbeeldingen). Uiteindelijk heb ik het op alleen maar een muziekje gehouden die sneller gaat spelen als je dichterbij komt. Het muziekje wat ik gekozen heb is ‘Pop goes the weasel’ aangezien het volgens mij vaak gebruikt wordt voor duveltjes in doosjes.

Voor het openingssysteem heb ik een paar methodes moeten uittesten om te zien welke niet alleen het beste de deksel kon openen, maar ook welke het makkelijkst op de servo aan te sluiten was. Naast het ontwerp van het openingsmechanisme, waren de materialen ook erg belangrijk. Alles moest licht van gewicht zijn en weinig weerstand geven om de servo niet tegen te werken.

Schema

Draadjes.png

De gebruikte onderdelen voor dit project waren:

  • Een Arduino Uno
  • Een Piezo Buzzer
  • Een micro Servo
  • Een HC-SR04 Ultrasonic distance sensor
  • Draadjes (male-male)

Code

Code.png
#include <ServoTimer2.h>
#include <NewTone.h>
#include <NewPing.h>

ServoTimer2 servo1;

int distance = 0;
int distanceHigh = 0;
int modifier = 0;

int achtste = 500;
int kwart = 1000;
int anderhalf = 1500;

void setup() {
  Serial.begin(9600);
  pinMode(4, INPUT);
  pinMode(5, OUTPUT);
  servo1.attach(9);
  pinMode(13, OUTPUT);
  
  while (millis() < 5000) { 
    digitalWrite(5, HIGH); 
    digitalWrite(5, LOW);
    distance = pulseIn(4, HIGH);
    
    if (distance > distanceHigh) {
      distanceHigh = distance;
    }
  }
}

void loop() {
  digitalWrite(5, HIGH);
  digitalWrite(5, LOW);
  distance = pulseIn(4, HIGH);
 
  servo1.write(distance); 
  modifier = map(distance, 50, distanceHigh, 4, 1); 
  song1(modifier); 
  servo1.write(distance); 
  modifier = map(distance, 50, distanceHigh, 4, 1); 
  song2(modifier); 
}

void song1(int speed){ 
  NewTone(13,349,kwart/speed);
  delay(kwart/speed);
  noNewTone(13);
  delay(13);
  NewTone(13,349,achtste/speed);
  delay(achtste/speed);
  NewTone(13,391,kwart/speed);
  delay(kwart/speed);
  noNewTone(13);
  delay(13);
  NewTone(13,391,achtste/speed);
  delay(achtste/speed);
  NewTone(13,440,achtste/speed);
  delay(achtste/speed);
  NewTone(13,523,achtste/speed);
  delay(achtste/speed);
  NewTone(13,440,achtste/speed);
  delay(achtste/speed);
  NewTone(13,349,kwart/speed);
  delay(kwart/speed);
  NewTone(13,261,achtste/speed);
  delay(achtste/speed);
}

void song2 (int speed){ 
  NewTone(13,349,kwart/speed);
  delay(kwart/speed);
  noNewTone(13);
  delay(13);
  NewTone(13,349,achtste/speed);
  delay(achtste/speed);
  NewTone(13,391,kwart/speed);
  delay(kwart/speed);
  noNewTone(13); 
  delay(13);
  NewTone(13,391,achtste/speed);
  delay(achtste/speed);
  NewTone(13,440,anderhalf/speed);
  delay(anderhalf/speed);
  NewTone(13,349,kwart/speed);
  delay(kwart/speed);
  NewTone(13,261,achtste/speed);
  delay(achtste/speed); 
}

Voorbeeld code: https://create.arduino.cc/projecthub/pollux-labs/...

Deze code is bedoeld voor een theremin. Het gedeelte van deze code die ik heb gebruikt, zorgt ervoor dat de afstand gemeten door de sonar in een map gebruikt kan worden. Dit wordt gedaan door na het aanzetten van je arduino eerst langzaam je hand van de sonar af te bewegen tot ongeveer 50 cm, dit is de maximale afstand voor de rest van de tijd dat de arduino aanstaat. In de originele code wordt de maximale afstand in combinatie met je huidige afstand gebruikt om een toonhoogte te genereren, in mijn code gebruik ik deze afstanden om de snelheid van de muziek te bepalen.

Het afspelen van de muziek is in twee onderdelen verdeeld om een extra mogelijkheid te geven om de snelheid en servo positie te veranderen. Als de muziek in 1 keer gespeeld wordt, duurt het anders te lang voordat er verandering komt in de snelheid of servo positie.

Voor mijn project heb ik een andere library voor zowel de Tone() als voor de servo motor moeten gebruiken aangezien er anders meerdere onderdelen op een timer zaten. De servo library die ik gebruikte had echter nog wel wat problemen die ik zelf moest oplossen met behulp van een paar forums.

Decoratie

aestetic of da box.png
da box.png
20210714_104630.jpg

In eerste concepten voor het doosje ging ik voor een wat meer creep en vergaan concept om te passen bij een spookje. Later bedacht ik me dat de sonar uit de voorkant zou moeten komen en dat die erg opvallend zou zijn in al mijn eerste ideeën. Ook was inmiddels het concept en het achtergrondverhaal wat komischer geworden, dus was er een nieuw idee nodig. Het uiteindelijke doosje is (nogmaals) geïnspireerd op een duveltje-in-een-doosje met een gezichtje aan de voorkant om de sonar te camoufleren.

Reflectie

20210808_143310.jpg
20210808_143256.jpg

Ten eerste had eerder met de fysieke arduino moeten testen in plaats van met behulp van Tinkercad. Hoewel het simpeler is, geeft het niet altijd een accurate visie van de werkelijkheid en zijn er bepaalde functies die niet erg goed te testen zijn op Tinkercad, zoals de sonar. Ook zouden hierdoor problemen, zoals de timers die elkaar in de weg zaten, sneller aan het licht zijn gekomen als ik meer fysiek getest had.

Met het uiteindelijke concept en product ben ik redelijk tevreden. Eerst was ik bang dat het te simpel zou zijn als het doosje alleen een muziekje zou spelen, maar uiteindelijk past het goed bij alle andere onderdelen en gaf het nog steeds wat uitdaging. Over het algemeen was werken met de arduino niet mijn favoriete ervaring. Misschien kwam het door de vele beproevingen tussendoor, van de timers die elkaar in de weg zaten tot een suïcidale servo. Het zou natuurlijk heel goed kunnen dat mijn problemen gewoon kwamen door het feit dat ik geen eerdere ervaring had met de arduino.