Pratende Poppetjes Doos
Voor een schoolproject moest ik een object in elkaar flansen waar de gebruiker een interactie mee kon ervaren.
Wat ik heb verzonnen is een doos die naar je begint te praten en te zwaaien als je langs loopt. Zelf heb ik daar een poppeke op getekend en ingesproken waar ik persoonlijk een groot fan van ben. (Excuseer dat het nog een schetsje is, de tijdsdruk maakt alles erg krap!)
Maar dat is het leuke aan dit projekkie, je mag helemaal zelf kiezen wat voor poppeke je erop tekent/verft/plakt! Je mag het zo gek maken als je wil. De geluiden die je hem wil laten afspelen hoef je alleen maar op een Micro-sd'tje te kwakken en dan in de code invoeren hoeveel audioclips het maximaal ter schikking heeft.
Zet hem ergens in je kamer, mik m aan de stroom en iedereen die langsloopt zal zich afvragen waarom je dit voorwerp bezit!
Als je nog steeds geïnteresseerd ben lees dan vooral verder!
Supplies
Alle onderdelen die je nodig hebt!
1x DFRobot DFPlayer Mini - MP3 Module - DFRobot DFPlayer Mini - MP3 Module
1x DFRobot Gravity Digitale Speaker Module - DFRobot Gravity Digitale Speaker Module
1x Sharp Optische Afstandsensor GP2Y0A21YK0F - Sharp Optische Afstandsensor GP2Y0A21YK0F
1x Een MicroSD kaart met de audio files erop of een manier om ze erop te zetten
2x Witte LED 5mm (mag ook gekleurd als je een specifieke oogkleur wil geven aan je poppeke)
1x Arduino Uno R3
3x 1kΩ weerstand
17x Jumperdraad M/M 20cm
2x Jumperdraad M/F 10cm
1x YwRobot Breadboard 420 points Experimenteer-printplaat - Zwart - YwRobot Breadboard 420 points Experimenteer-printplaat - Zwart - BB400PCBBK
Minimaal 50x70cm aan MDF hout 3mm dik
Verder moet je beschikken over
Soldeergereedschap
Houtbewerkings-gereedschap (Boor, figuurzaag voornamelijk)
Lasercutter gaat echt erg handig zijn
Houtlijm
Hete lijm
En ik raad isoleertape aan voor noodgevallen
Het Technische Stukje
Laten we starten met al onze onderdeeltjes aan de praat krijgen. Begin alles maar rustig te plaatsen volgens het schema in de plaatjes.
Zodra alles werkt weet je dat het goed zit. Mocht je problemen ervaren met de Mp3 speler check dan of je niet de draadjes van de input en output perongeluk heb omgewisseld. (zoals ik tijdens ontwikkeling)
Probeer een beetje orde te houden in je kabels, je wilt geen foutjes maken met je stroom en grond.
#include <DFRobotDFPlayerMini.h> //Library voor de MP3 speler
#include <Servo.h> //Library voor de servo
#include <SoftwareSerial.h> //Ook een library, nodig!
#include <SharpIR.h> //Library voor de motion sensor
#define IRPin A0 //Verbind analoge input aan motion sensor
#define model 1080 //modelnummer van de Mp3 speler
SoftwareSerial softwareSerial(11, 10);
Servo myservo; //variabel om de servo mee aan te roepen
DFRobotDFPlayerMini player; //variabel om de mp3 speler aan te roepen
int led1 = 4;
int led2 = 5;
int pos = 0; //huidige positie van de servo in graden
int delayTime = 15; //milliseconden om te delayen (voor animeren met de servo en lampjes)
int rotSpeed = 0; //hoe snel de servo draait
int distance = 400; //Hiermee check ik de afstand vanaf de IR sensor, verlaag dit als je de afstand korter wil, en verhoog het als je de afstand hoger wil. 400 heb ik voornamelijk voor testing. Hoger is handig voor praktijk
int val = 0; //deze variabel lees ik om te checken of er iets in de buurt is van de IR sensor
bool curPlay; //Word momenteel de actie afgespeeld?
int curClip = 0; //Welk audioclip zit ik nu op?
int clips = 2; //Hoeveel audioclips staan op mn kaartje?
/* Model : Dit is voor de MP3 speler, zijn model is GP2YOA21YK0F
GP2Y0A02YK0F --> 20150
GP2Y0A21YK0F --> 1080 <--- deze moet ik hebbe
GP2Y0A710K0F --> 100500
GP2YA41SK0F --> 430
*/
SharpIR mySensor = SharpIR(IRPin, model); //variabel om de de IR sensor mee aan te roepen
void setup() {
// Begin serial communication at a baudrate of 9600:
Serial.begin(9600);
Serial.println("Bingo Bazinga"); //dit is gewoon zodat ik weet waar ik moet kijken wanneer ik een nieuwe test begin
softwareSerial.begin(9600);
player.begin(softwareSerial); //activeer MP3 speler
myservo.attach(9); //verbind de servo aan pin 9 voor communicatie
myservo.write(60); //Draai servo naar 60 graden hoek
}
void loop() {
// Get a distance measurement and store it as distance_cm:
distance_cm = mySensor.getDistance(); //doet niks want deze library is fucked
val = analogRead(A0); //lees veranderingen in A0, Hoge cijfers betekent dat object dicht bij sensor is.
Serial.print(val); //check waardes van IR sensor, debugging
if (val >= distance && !curPlay) { //Wanneer een object dicht langs de IR sensor gaat en de actie nog niet speelt, speel de actie af
spinAndScream();
}
}
void spinAndScream() {
Serial.println(val); //debugging, toon welke waarde de actie triggerde
curPlay = true; //zeg dat je nu iets aan het afspelen ben
curClip += 1; //zet de volgende clip klaar om te spelen. Bij eerste keer spelen gaat ie van 0 naar 1
if (curClip > clips) { //is de huidige clip hoger dan het maximale aantal clips? reset dan terug naar de eerste clip
curClip = 1;
}
player.volume(50);
player.play(curClip); //speel de huidige clip af
delayTime = 150;
for (pos = 60; pos <= 70; pos += 1) { //Dit hele process is gewoon een grote animatie, lichten die langzaam aan flickeren en de servo die langzaam opstart. Alles is getimed op de lengte van de audioclip: 25 seconden.
myservo.write(pos);
lightOn();
delay(delayTime / 2);
lightOff();
delay(delayTime / 2);
}
delayTime = 55;
for (pos = 70; pos <= 120; pos += 1) {
myservo.write(pos);
lightOn();
delay(delayTime / 2);
lightOff();
delay(delayTime / 2);
}
delayTime = 32;
for (pos = 120; pos <= 180; pos += 1) {
myservo.write(pos);
lightOn();
delay(delayTime / 2);
lightOff();
delay(delayTime / 2);
}
lightOn();
delayTime = 15;
for (pos = 180; pos >= 60; pos -= 1) {
myservo.write(pos);
delay(delayTime);
}
for (pos = 60; pos <= 180; pos += 1) {
myservo.write(pos);
delay(delayTime);
}
for (pos = 180; pos >= 60; pos -= 1) {
myservo.write(pos);
delay(delayTime);
}
for (pos = 60; pos <= 180; pos += 1) {
myservo.write(pos);
delay(delayTime);
}
for (pos = 180; pos >= 60; pos -= 1) {
myservo.write(pos);
delay(delayTime);
}
for (pos = 60; pos <= 180; pos += 1) {
myservo.write(pos);
delay(delayTime);
}
delayTime = 32; //begin hier met de vertraging naar het stoppunt toe
for (pos = 180; pos >= 120; pos -= 1) {
myservo.write(pos);
delay(delayTime);
}
delayTime = 55;
for (pos = 120; pos >= 90; pos -= 1) {
myservo.write(pos);
delay(delayTime);
}
delayTime = 90;
for (pos = 90; pos >= 60; pos -= 1) {
myservo.write(pos);
delay(delayTime);
}
lightOff(); //lampjes laten knipperen om signaal te geven dat ie klaar is
delay(500);
lightOn();
delay(500);
lightOff();
delay(500);
lightOn();
delay(500);
lightOff();
curPlay = false; //nu is ie klaar voor een nieuwe ronde
}
void lightOn() {
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
}
void lightOff() {
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
}
Doosje Bouwe
Voor dit onderdeel raad ik sterk het gebruik MakerCase aan: https://en.makercase.com/#/basicbox
In de 2de foto staan de settings die ik heb gebruik voor mijn bakje.
Als je dit overneemt en de gegevens in een lasercutter mikt ben je al een heel end.
MAAR JE BENT NOG NIET KLAAR. Want de doos heeft nog een dekseltje nodig. Ik raad aan dat je in de gegevens van de doos zelf even de onderkant 2x kopieert en 3mm van alle hoeken afsnijdt voor de ene terwijl je de andere schoon laat. Voor de handigheid kan je het kleinere onderdeel erin graferen zodat je weet waar de onderkant van de deksel moet komen. In de plaatjes is een foto ter verduidelijking.
Als je dan toch al lekker bezig ben in de file van de lasercutter raad ik je aan om ook meteen gaten te snijden in de voorkant, je mag zelf plaatsen waar zolang ze niet in de weg van je servo of mooie plaatje zitten. Plaats absoluut niet de IR sensor voor de bewegende onderdelen! Pak de afmeting data van de onderdeeltjes die je hebt en werk ze in het hout, als je het goed doet passen ze er lekker snug in en zetten we ze later vast met hete lijm.
Dat Klaar? Decoreren Maar!
Heb je je voorkant mooi uitgesneden en ben je tevreden met het resultaat? Dan raad ik aan om nu de voorkant mooi aan te kleden met wat je in gedachte heb voor het poppeke dat erop moet komen!
Laat hier lekker je creatieve vrijheid op los, er is geen verkeerde manier om dit stuk aan te pakken. Je kan ook meteen de rest van de doos omwerpen om in de stijl te vallen van je voorkant.
Als je tevreden bent met je ontwerp kan je de boel in elkaar gaan zetten.
Eventjes De Boel in Elkaar Zetten
Als de stappen hiervoor zijn gelukt dan is het tijd om de boel in elkaar te zetten!
Sterke aanrader : Zorg nu alvast dat je alle soundclips erop heb staan die je erop wilt, het word lastig maar niet onmogelijk om vanaf die punt bij de Mp3 speler te komen!
Ik raad aan dat je eerst al het nodige soldeerwerk doet, als je de breadboard heb aangeschaft zoals aangegeven dan hoef je geeneens linkjes te leggen, je mag de schematiek van step 1 helemaal navolgen maar dit keer met een soldeerbout in je hand.
Zodra je alles goed heb vast gesoldeerd kan je je werkje op de bodem plaatsen zoals aangeven in de plaatjes, ik raad aan om tijdelijk de Arduino en je Bordje vast te plakken met een beetje tape, je kan het later vastzetten zodra alles werkt.
Nu hoef je alleen nog de elektronische onderdeeltjes door de voorkant van het hout heen te steken, wees een beetje snugger met de manier waarop je ze plaatst zodat het geen zootje wordt met alle draden. Het word al gauw onoverzichtelijk naarmate je meer monteert. Gebruik hete lijm om ze goed vast te zetten, verspreid het over de gaten waar je de onderdelen doorheen steekt, niet de onderdelen zelf.
Als dat allemaal is gelukt en alles zit netjes vast is het tijd om de doos zelf in elkaar te flansen. Zet een hoop houtlijm in en bouw langzaam alle deeltjes aan elkaar vast, ik raad sterk aan om een set handen hierbij te vragen om het wat soepeler te maken. Gebruik kunstenaars tape of iets anders wat het goed in zn plaats houd zodat de lijm rustig kan drogen.
En Zo Is Ie Klaar
Goed gedaan man/vrouw/anders!
Nu heb je een doosje met je eigenste poppetje naar keuze die tegen je zal praten wanneer je langsloopt!
Eindelijk gezelschap!
Wat Heb Ik Geleerd?
Dat HKU je genoeg tijd gunt om te werken aan je projecten en als je een klein foutje maakt en je je tijd een beetje mis managet dat het je niet meteen je kop kost.
Maar even serieus nu.
Ik heb geleerd:
Hoe ik moet solderen
Hoe ik moet werken met Arduino en de Arduino IDE
Niet de in en output van Mp3 speler omwisselen anders doet ie t nie
Wat telt als een interactie
Uiteindelijk vond ik dit best wel een leuk project om aan te werken, ik zou willen dat onze school ietsjes minder stressvol was zodat ik er langer voor had kunnen zitten en vragen kon stellen aan de leraren die de opdracht gaven. Het heeft me een hoop vertrouwen gegeven in wat ik allemaal ookweer kan met mijn handjes.