Swamp Monsters Pearl
Hier leg ik het concept uit en hoe ik tot het eind product ben gekomen en welke valkuilen ik allemaal ben tegen gekomen met daarbij een reflectie over het hele project. Vervolgens wat je allemaal nodig zult hebben voor dit project en dan als laatste een stappenplan met hoe je het zelf thuis kunt maken.
Hierboven staan allerlei wip foto's van verschillende stadia uit het proces. Ook een demonstratie video staat ertussen.
Concept
Ik wilde een gevaarlijke versie van het krokodil met kiespijn spel maken. Dit is een spel waarbij je de tanden van een krokodil indrukt tot je de verkeerde indrukt met hij zijn bek sluit.
Dit zorgt voor een schrik momentje, maar meer niet. Ik wilde dit een upgrade geven. Geen zachte tandjes en een kindvriendelijk ontwerp, maar een gevaarlijke bek met scherpe tanden.
Bij deze variant van het spel druk je om de beurt de parel in in de bek van het monster. Iedere keer bestaat er een kans dat de bek dichtklapt. Als een speler gebeten is, is deze af. Zo ga je door tot er nog maar een over is.
Het project zit zo in elkaar:
Het bestaat uit twee servo's die de boven en onderkaak laten bewegen, Deze worden geactiveerd door een druksensor die in de parel zit. Als de speler de parel probeert te pakken, zat er een random kans zijn dat de bek dichtklapt.
Leerdoelen
Ik wilde met dit project graag met een aantal verschillende technieken werken.
Allereerst wilde ik heel graag 3D printen. Voor dit project had ik nog nooit een 3D printer gebruikt en ik wilde dit al langere tijd heel graag leren.
Ook wilde ik met servo's werken. Ik had nog nooit gewerkt met Arduino en het besturen van kleine motors leek mij echt een goede kans om te leren over het ontwerpen van mechanismes.
Proces
Het ontwerpen van dit idee begon allereerst bij het bedenken van het mechanisme. Ik begon met allerlei complexe ontwerpjes die veel te lastig waren om te kunnen maken en vervolgens op te itereren. Het mechanisme moest zo simpel mogelijk om zo mijn tijd goed te kunnen verdelen en te kunnen itereren. Goed bedacht, maar vervolgens ben ik hier bij een ander onderdeel volledig in misgestapt.
Het hele project zou namelijk met de 3D printer gemaakt worden. Voor dit project ben ik onderzoek gaan doen naar wat voor programma's er gebruikt word om accuraat te 3D printen. Dit bracht mij tot Fusion 360, er word ook veel in AutoCad gedaan maar Fusion 360 sloot goed aan bij andere interesses van Game Art. Ik ben vervolgens dit programma gaan leren en na wat testjes ben ik begonnen aan de onderdelen van het project.
Het bestond uit een kast, waar de Arduino en alle bedrading in behuisd zou worden. Hierin zaten gaten om de servo's in te monteren en zo dat deze erdoorheen staken voor de bek. Aan deze behuizing zat de standaard waar de parel op gemonteerd zou worden. Aan de andere kant zou nog een box staan om de bek aan de andere kant te ondersteunen. Ook de parel heb ik in Fusion 360 gemaakt, zodat deze goed op de standaard aansloot.
In VR heb ik de bek gemodelleerd, bestaand uit twee losse onderdelen. De bovenkaak en de onderkaak, met beide aan de zijkant een vlakke kant zodat deze goed aansluiten op de behuizingen.
Hier ontstond het probleem. Zoals je misschien wel bedacht hebt, is dit heel erg veel printwerk, hier kwam ik zelf ook achter zodra ik voor de eerste keer kwam printen. Dit zou een volledige week aan printen kosten. Niet bepaald efficiënt.
Hier moest ik een oplossing voor vinden.
De behuizing die ik gemaakt had bestond uit een hoop rechte vlakken. Dit kwam goed uit, want deze konden dus ook op een andere wijze gemaakt worden. Lasercutten! Dus boven op het leren van 3D printen kwam het leren van lasercutten, ook iets wat ik nog nooit gedaan had. Dit verbeterde de productie tijd van de onderdelen met een heleboel tijd. Het koste inplaats van dagen maar een kwartiertje. Hier kwam wel bovenop dat ik de behuizing opnieuw moest ontwerpen zodat deze uit losse vlakken bestond die in elkaar gezet konden worden. Ik heb de behuizing opnieuw gemodelleerd en vervolgens omgezet in dxf formaat. In deze behuizing zitten ook al de gaten zodat de servo's erin passen en vastgeschroeft kunnen worden.
De andere onderdelen moesten wel met de 3D printer gemaakt worden, maar dit koste al veel minder tijd.
Het programeren
Allereerst wilde ik het mechanisme uittesten zonder te alles al te solderen. Dus heb ik alles op een breadbord gebouwd. Ik gebruikte ook een simpele drukknop voor het testen. Allereerst liet ik de servo's draaien wanneer ik op de knop drukte. Vervolgens stelde ik de hoeken in zodat ze maar 90 graden draaide. Hierna heb ik alles gesoldeert, hier heb ik de drukknop voor een gevoelige knop verwisseld zodat deze met kleine aanraking al registreerde.Toen alles gesoldeerd was ben ik naar huis gegaan om te testen. Hier kwam ik erachter dat het niet werkte. De knop werkte niet. Ik het internet rondgespeurd om te kijken of deze knop andere code nodig had om te werken. Hij zou moeten werken met de normale code. Om het te checken heb ik het weer opnieuw op de breadbord gebouwt met de oude drukknop, deze deed het gewoon. De nieuwe knop werkte gewoon niet. Dus ik wilde een nieuwe knop proberen, maar toch voor de zekerheid nog maar een kijkje genomen. Even vergeten dat aan de knop ook een plus en min kant aan zat... Ik had hem andersom gesoldeerd. Dit had ik even over het hoofd gezien.
Nu deed hij het!
Vervolgens ben ik gaan bouwen. Alles opnieuw gesoldeerd en geinstalleerd in de behuizing. De boven en onderkaak waren heel zwaar voor de servo's. Dit zorgde ervoor dat ze nig goed konden draaien. Ik moest ondersteuning aan de andere kant maken zodat het gewicht verdeeld was. Ik heb gaten in het 3D model geboord om zo een schroef erin te kunnen zettten en de kaken te ondersteunen. Dit hielp al enorm, maar de grote servo haperde enorm. Ik dacht dat deze versleten was omdat hij geen kracht kon zetten. Ik heb toen een aantal andere servo's geprobeerd alleen om er achter te komen dat ik aan het werken was met 3.3 volt inplaats van 5. Toen weer alles in elkaar gezet, hij werkte!
Nu alleen nog maar te code uit te breiden. Ik voegde een random factor toe zodat de bek niet elke keer dicht klapte. Ook een delay eraan toegevoegd zodat de bek wat langer dichtbleef voor hij weer openklapte. Alleen was het wel een beetje saai als de bek alleen maar bewoog als hij dichtvalt. Dus voegde ik wat lichte beweging toe als je de knop in drukte. Zo blijft het spel wat spannender, omdat je niet weet of hij helemaal dichtvalt wanneer hij beweegt.
Zodra alles af was heb ik de behuizing dicht gelijmt en heb ik nog een stuk stof toegevoegd zodat je het frame waar de knop op staat niet ziet.
Zo was het project compleet!
Reflectie
Het was een flinke uitdaging om voor 1 vak zoveel verschillende nieuwe dingen te moeten leren, ik was helemaal niet gewend om met fysiek materiaal te werken. Het verreiste een stuk meer planning. Ook moest ik veel verder duiken in het ontwerpen van alle onderdelen, alles moest goed op elkaar aansluiten en als er niet over na gedacht was liep ik tegen problemen aan. Ook het solderen en zorgen dat alles op de juiste manier werd aangesloten was lastig voor mij. Ik had nog geen ervaring met solderen, maar het is een waardevolle ervaring geweest en nu weet ik in ieder geval de basis. Ik wil door dit project in de toekomst vaker fysiek werken en ik heb ook wat meer vertrouwen gekregen in mijn fysieke ontwerp skills.
Supplies
Hierboven staat ion de afbeelding hoe je de arduino met de servo's en de knop moet opzetten.
Drive link naar alle files die je nodig zult hebben voor het Lasercutten en 3D printen.
Materialen
- 1 Arduino Uno
- 1 printplaat
- 1 MG 996R servo
- 1 sg90 micro servo 9g
- 1 20X 120X 0.5 cm hout
- 1 10X 30cm hout
- 1 Arcade 30mm Push button
- 1.5 m bedrading
- 30m PLA (3DPrinten)
- 1 lap stof 20X30cm
- 1 stalen hoeklijn 10cm
- 6 2mm schroeven en bouten
- 2 .5mm schroeven en bouten
- Houtlijm
- Secondelijm
- 1. 120 Ω ±1% (F) resistor
Gereedschap
- Soldeerbout met soldeer
- Lasercutter
- 3D printer
- Striptang
- Boor machine
Arduino
Dit is de code voor de Arduino:
#include <Servo.h>
// Definieer pin-nummers
const int knoppoort = 9; // De knoppoort wordt via het paarse snoertje aan invoer 9 gekoppeld
const int servoPin1 = 10; // De eerste servomotor wordt via het snoertje aan invoer 10 gekoppeld
const int servoPin2 = 11; // De tweede servomotor wordt via het snoertje aan invoer 11 gekoppeld
// Maak Servo objecten aan
Servo servo1;
Servo servo2;
// Variabelen om de huidige en vorige status van de knop op te slaan
int knopStatus = 0; // Huidige status van de knop
int vorigeKnopStatus = 0; // Vorige status van de knop
bool servosPositie = false; // Status van de servos (standaard = false)
// Huidige posities van de kaken
const int startServo1Pos = 60;
const int startServo2Pos = 0;
int servo1Pos = startServo1Pos;
int servo2Pos = startServo2Pos;
void setup() {
// Zet de knoppoort als invoer
pinMode(knoppoort, INPUT);
// Verbind de servomotoren met de juiste pinnen
servo1.attach(servoPin1);
servo2.attach(servoPin2);
// Zet de servos in hun beginpositie
servo1.write(servo1Pos);
servo2.write(servo2Pos);
// Initialiseer de willekeurige generator
randomSeed(analogRead(0));
}
void loop() {
// Lees de huidige status van de knop
knopStatus = digitalRead(knoppoort);
// Controleer of de knop is ingedrukt (hoog signaal)
if (knopStatus == HIGH && vorigeKnopStatus == LOW) {
// Genereer een willekeurig getal tussen 0 en 9
int randomNum = random(6);
// 1 op 10 kans voor volledige beweging
if (randomNum == 0) {
// Wissel de positie van de servos
servosPositie = !servosPositie;
// Zet de kaken op 30 graden of terug naar de beginpositie afhankelijk van de nieuwe status
if (servosPositie) {
servo1Pos = 30;
servo2Pos = 90;
} else {
servo1Pos = 60;
servo2Pos = 0;
}
// Verplaats de servos naar de nieuwe positie
servo1.write(servo1Pos);
servo2.write(servo2Pos);
// Wacht 2 seconden
delay(2000);
// Zet de servos terug naar de beginpositie
servo1.write(startServo1Pos);
servo2.write(startServo2Pos);
// Herstel de servo posities
servo1Pos = startServo1Pos;
servo2Pos = startServo2Pos;
// Reset de servosPositie status
servosPositie = false;
} else {
// Kleine willekeurige kaakbeweging tussen -5 en 5 graden
servo1Pos += random(-9, 10);
servo2Pos += random(-9, 10);
// Zorg ervoor dat de posities binnen een geldig bereik blijven (0-180 graden)
servo1Pos = constrain(servo1Pos, 0, 180);
servo2Pos = constrain(servo2Pos, 0, 180);
// Verplaats de servos naar de nieuwe positie
servo1.write(servo1Pos);
servo2.write(servo2Pos);
}
delay(50);
}
// Update de vorige knopstatus
vorigeKnopStatus = knopStatus;
}
3D Printen
Print de 4 modellen uit, kies zelf een leuke kleur uit!
Lasercutten
Lasercut het hout met de dxf files uit de drive! Zo krijg je de behuizing en kan je hem zo in elkaar zetten(lijm hem nog niet dicht! Er moet nog wat in!)
Solderen
Soldeer de arduino aan de Servo's en de knop aan elkaar volgens de layout bovenin!
Maar!
voordat je de knop soldeert, steek eerst de bedrading door het gat van de behuizing, aan dezelfde zijde waar de servo's in gaan.
Voor je verder gaat naar de volgende stap zou ik even de Arduino aansluiten en testen of het werkt. Upload de Code die bij de Supplies staat.
De Servo's
Installeer de servo's in de behuizing, let op dat ze recht boven elkaar zitten.
Lijm de aansluiting van de servo's aan de boven en onderkaak zoals op de afbeelding.
Boor ook een gat aan de andere kant van de kaak, op dezelfde plek waar de kaak aan de servo vast zit.
Behuizing
Lijm met de houtlijm de behuizing aan elkaar. Laat 2 zijdes open tot het einde zodat je er nog bij kan waar nodig.
Boor in het 10X30cm plankje 2 gaten
Boor in de hoeklijn ook 4 gaten die aansluiten op het plankje en de support plankje.
Schroef deze vast met de boutjes.
Lijm de behuizing op en plankje met genoeg ruimte zodat de kaken er nog tussen passen.
Sluit ook de kaken aan de servo's vast en steek de bouten aan de andere zijde door de support en de kaken, als het goed is zitten deze nu stevig en bewegen ze soepel.
De Button
Lijm nu de Parel op de Arcade button met Secondelijm.
Lijm ook de button aan de Button stand.
Schuif de stand in de behuizing, als het goed is sluit deze goed aan op de kaken en kun je erop drukken wanneer de bek open staat.
Laatste Stap
Lijm nu nog de laatste behuizing dicht, check nog even of alles nog werkt voor je het dichtlijmt.
Pak nu het stuk stuk en knip in het midden een gat waar de button doorheen past en lijm met de secondelijm deze eraan vast. Let erop dat de button nog wel goed ingedrukt kan worden. Lijm de uiteindens van de stof aan de behuizing zodat alles mooi afgedekt is.
Congrats! je hebt de Swamp Monsters Pearl gebouwt!