Introduction: The Wizard's Dice Tower

Zoals de titel hierboven al zegt, ik heb een dice tower gemaakt. Ik heb deze in de stijl van een wizard tower gemaakt, daarnaast lijkt de toren in de wolken te zitten, door het stof eromheen.

Met behulp van deze toren kan je op een leukere manier je dobbelsteen laten rollen. Je legt bovenin je dobbelsteen op het balkon van de toren, deze wordt dan tegengehouden door een luikje. Om dit luikje te openen moet je de motion sensor activeren. Deze zit verstopt in het gat in het dak.

Wanneer je hand langs het dak beweegt, gaat het luikje open, waardoor de dobbelsteen naar beneden rolt, terwijl dit gebeurt vindt er een kleine onweersbui plaats in de wolken voor een extra episch effect.


Wat voor mij erg belangrijk was bij dit project was hoe het er uit ging zien, daarom heb ik hiervoor ook gebruik gemaakt van een 3D printer, om zo hoog mogelijke kwaliteit te kunnen geven. Met behulp van de Arduino wilde ik het uiterlijk ook gaan versterken en dat heb ik in dit geval gedaan met de wolken en LED lichten.

Supplies

Elektronische Componenten

  • Arduino Uno
  • Experiment PCB 5cm*7cm
  • PIR Motion Sensor
  • Micro Servo SG90 - 1.8kg/cm - 9g
  • Adafruit NeoPixel LED Strip w/ Alligator Clips - 60 LED/m - 0.5 Meter Long - Black Flex
  • 4x AA batterijhouder met aan/uit schakelaar
  • 4x AA batterijen
  • Draadbruggen set

Materiaal voor de toren:

  • 37.5m PLA voor 3D printer
  • 2cm dik karton, 30x30 cm
  • Dun karton, 30x30 cm (pizza doos bijvoorbeeld)
  • Een zak vezelvulling
  • Verf, INDOOR&OUTDOOR, terracotta red
  • Verf, INDOOR&OUTDOOR, sea green
  • Verf, INDOOR&OUTDOOR, moss green
  • een elastiekje
  • D20/D12

Gereedschap

  • Lijm
  • Soldeerbout met soldeer

Step 1: Het Idee

Als eerste moest ik een idee verzinnen, maar ja zo makkelijk is dat niet. Hiervoor heb ik op deze zelfde website, als dat ik dit plaats, gezocht en afgestruind om te zien of ik inspiratie kon opdoen. Hier had ik de volgende paar ideeën gevonden:

  • Iets met LED lichtjes
  • Een wolk van kleur laten veranderen met behulp van LED lichtjes
  • Een Thermostaat
  • Een Klok
  • Dungeons and Dragons related
  • Puzzel
  • Een interactieve map
  • Iets dat dobbelstenen rolt
  • Lichtjes die reageren op muziek

Het leek mij erg leuk om met LED lichtjes te werken, want daar kan je veel verschillende dingen mee doen.

Mijn eerste idee was een werkende thermostaat te maken, die dan van kleur veranderde liggend aan hoe warm of koud het was in de omgeving, maar dat leek mij te saai, je kan er niet echt iets mee doen en het staat maar gewoon een beetje in je kamer te niksen.

Dus daarna ging ik weer verder brainstormen, ik wilde kijken of ik iets kon doen met Dungeons and Dragons, omdat ik dat ook speel. Toen kwam ik dus op het idee van een dice tower, die kon ik dan 3D printen of laser cutten en dan in elkaar zetten. Mijn originele idee was om dan een luikje open te doen met een button, maar ik kwam al snel tot de conclusie dat ik waarschijnlijk de button niet op een mooie en logische plek kon stoppen, daarnaast is een button niet erg ingewikkeld. Dus ik heb de button verwisseld met een motion sensor, omdat ik hier nog nooit eerder mee gewerkt hebt.

Maar alleen een luikje open doen met een motion sensor leek mij erg saai, ik had al eerder iets voorbij zien komen van mensen die een onweersbui gemaakt hadden in een wolk, dit zag er echt heel gaaf uit, dus dat wilde ik er bij combineren.

Een dice tower die onweersbuien eromheen heeft wanneer er een dobbelsteen door heen rolt.

Step 2: Het Begin

Toen ik mijn idee vastgezet had, ging ik aan de slag met het maken van eerst een kleine test. Met deze test ging ik kijken of ik eerst de servo motor kon activeren met de motion sensor.

Hiervoor heb ik eerst op Google en YouTube gekeken voor passende code. Daarna heb ik zo'n zelfde soort tekening als hierboven gevolgd om het in elkaar te zetten.

Bij de eerste paar testen lukte het wel, maar dan had de servo motor vaak een vreemde positie waar hij in draaide, het was nooit recht.

Dit had ik als eerste opgelost door het een vaste locatie te geven, door middel van graden in te vullen in de code.

Hierna liep ik tegen het probleem aan dat de motion sensor niet altijd reageerde. Het voelde willekeurig wanneer het reageerde en wanneer niet. De oplossing hiervoor was de kleine knopjes aan de zijkant om te draaien, deze bepalen hoeveel meter het van de motion sensor kan opvangen.

Nadat dit aangepast was werkte mijn eerste prototype!


Ik wilde dit project erg graag 3D printen, omdat ik zelf erg vaak bezig ben met 3D models maken, maar nog nooit zelf iets geprint heb.

Dit was een grote uitdaging toen ik er uiteindelijk mee begon, met behulp van het programma Blender heb ik het model gemaakt. Hierin heb ik de afmetingen van de servo motor, motion sensor en de Arduino gezet op kleine vierkantjes, zodat ik wist waar ik ruimte moest over houden.

Hierboven kan je mijn eerste uitwerking terug vinden.

Toen ik langs de 3D printers geweest was, kwam ik al snel tot de conclusie dat mijn 3D model te groot was. Ik moest het gaan verkleinen en gaan tweaken. In het 3D print programma kwam ik ook tot de conclusie dat ik te weinig ondersteuning had. Dus ik kon nog lang niet gaan printen.

Na heel veel aanpassingen maken, heb ik ten eindelijk een compacter eind model gekregen, maar alles paste er nog wel in en zou als het goed is perfect werken.

De laatste foto zijn al mijn verschillende ideeën en aanpassingen die ik heb uitgeprobeerd op het 3D model. Bij stap 5 zie je het uiteindelijke model.

Step 3: De Lichtjes

// Dit hieronder zijn libraries, deze zijn nodig voor de code om werkend te zijn
#include <Servo.h>
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif

Servo myservo;

int colorPin = 6;   // Met welke pin de LED aangestuurd worden met de Arduino.
int NUM_LEDS = 30;  // Hier word aangegeven met hoeveel LEDS je werkt, ik werk in dit geval met 30.
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, colorPin, NEO_GRB + NEO_KHZ800);

int servoPin = 9;   // Aan welke pin de servo gekoppeld zit aan de Arduino
int pos = 0;

int sensorPin = 2;  // Aan welke pin de motion sensor gekoppeld zit aan de Arduino
int state = LOW;    // De state waar hij in begint, LOW staat voor niet geactiveerd.
int val = 0;

int closedAngle = 110;    // De positie van de servo motor wanneer de dobbelsteen tegen gehouden wordt
int openAngle = 180;      // De positie van de servo motor wanneer de dobbelsteen rolt

void setup() {
  // Deze code wordt 1 keer afgespeeld
  strip.begin();  // Begin de connectie met de LED lichtjes
  strip.show(); // Zet alle lampjes uit als deze nog aan stonden

  // De servo motor wordt aangeroepen en op de juiste locatie gezet, in dit geval onze "closed angle"
  myservo.attach(servoPin);
  pinMode(sensorPin, INPUT);
  Serial.begin(9600);
  myservo.write(closedAngle);
}

void loop() {
  // Deze code herhaalt
  val = digitalRead(sensorPin);
  if (val == HIGH) {      
   
    if (state == LOW) {   // Als de motion sensor getriggered wordt start de functie "open hatch"
      state = HIGH;
      openHatch();
    }
  } else {
    if (state == HIGH){   // Zet de motion sensor weer terug naar untriggered state
      state = LOW;
    }
  }
}

void openHatch() {
  for (pos = closedAngle; pos <= openAngle; pos += 2) { // De servo motor word geactiveerd en draait een stukje,
// dit zal het luikje openen
    myservo.write(pos);
    delay(15);                                          // Dit zorgt ervoor dat hij langzamer open gaat
  }
  lightningStrikes(5, 8); // De funtie "Lightning Strikes" word aangeroepen
  delay(1000); // Een pauze
  for (pos = openAngle; pos >= closedAngle; pos -=1) { // Het luikje gaat weer dicht
    myservo.write(pos);
    delay(15);
  }
}

void lightningStrikes(int nGroups, int nLightningStrikes) {
  for (int i = 0; i < nGroups; i++) {               // Hoeveel lightning strikes er zijn
    for(int j = 0; j < nLightningStrikes; j++) {    // Hoeveel lampjes er branden per lightning strike
      lightningStrike(random(NUM_LEDS));            // De functie "Lightning strike" wordt hier aangeroepen
    }
    strip.clear();
    strip.show();
  }
}

// Zet de kleur en tijdsduur van 1 lichtje
void lightningStrike(int pixel) {
  strip.setPixelColor(pixel, strip.Color(127, 127, 127));
  strip.show();
  delay(random(5, 100));
}


Wanneer de code geüpload is op de Arduino hoeft het niet meer aangesloten te zijn op de computer voor energie, wanneer de batterijen in de batterijenhouder zitten werkt de Arduino volledig daarop.


Step 4: Solderen

Nu dat alle code werkt en het klaar is om in elkaar gezet te worden moet het gesoldeerd worden. Ik heb dit stap voor stap gedaan. Ik heb de power aan 1 kant van het experiment bord vast gemaakt en de ground aan de andere kant.

Ik heb als eerste de servo motor losgekoppeld en de power en ground vast gemaakt aan het experiment bord. Hierna heb ik de power en ground draden, die van de Arduino kwamen, gekoppeld aan beide de power en ground.

Tussen deze 2 heb ik een kleine pauze gehouden, waarbij ik heb getest of alles nog werkte en dat deed het ook! Ik was hier erg blij mee, want ik wist niet zeker of het solderen goed zou gaan.

Vervolgens heb ik de power en ground van de Motion Sensor vast gesoldeerd aan de power en ground van het experiment bord.

Het zelfde geldt voor de batterijen en de LED Strip.

Ik had ten eindelijk 1 groep aan rode draden en 1 groep van zwarte draden.

Hierna heb ik het weer gekoppeld aan de Arduino en alles werkte! Dit was erg goed nieuws, want dit betekende dat ik kon beginnen met het in elkaar zetten van de toren.

Step 5: Het Bouwen

In Blender heb ik het 3D model gemaakt om het vervolgens te printen. Hierbij is gedacht aan de afmetingen, zodat de Arduino onder de toren past en de servo motor en motion sensor boven in de toren passen.

Na 3 lange dagen printen op school, had ik ten eindelijk mijn toren in 3 stukken mee gekregen naar huis. Ik heb ze geverfd met de kleuren die ik had gekocht, ik heb ze allemaal in het totaal 3 lagen gegeven, zodat de originele kleur niet meer te zien is. De toren heb ik blauw gemaakt en het dak rood. Als laatste heb ik met de groene verf een soort mos geverfd op de toren, zodat het oud lijkt.

Na het verven ging ik de binnenkant van de toren werkend maken, binnen in de toren heb ik met dunne stukje karton een glijbaan gemaakt, die vanaf het balkon naar de opening naar beneden loopt. Ik heb de stukjes karton met lijm vast gezet in de toren. Hierbij moet je goed opletten dat het goed naar beneden afloopt, zodat de dobbelsteen goed kan rollen. Je kan het beste van onderaf naar boven toe werken, dan zit je jezelf niet in de weg en kan je het af en toe testen met een D20 of een D12 of de glijbaan goed werkt voor de dobbelsteen, zo niet, probeer het dan zo snel mogelijk los te maken en het dan wat steiler te maken. Test na afloop nog een paar keer of het goed rolt door een dobbelsteen via het balkon naar binnen te rollen.

Nadat de toren opgedroogd is heb ik het op z'n zij gelegd, zodat ik de draden van de motion sensor en de servo motor erdoorheen kon halen.

Om de Arduino en soldeerbord zo klein mogelijk te maken heb ik ze aan elkaar vastgebonden met een simpel elastiekje, maar let wel op! Zorg ervoor dat je tussen de Arduino en soldeerbordje iets isolerend doet, zoals een stukje karton, dit zorgt ervoor dat er geen kortsluiting kan ontstaan doordat er per ongeluk een draadje van het soldeer bord in de Arduino steekt.

Hierna zag ik dat de Arduino en het soldeer bord meer ruimte nodig hadden dan dat de toren kon geven, hiervoor heb ik een verhoging voor de toren gemaakt uit karton. Ik heb hiervoor in het totaal 4 kleine rechthoekige torens gemaakt uit karton die de toren ongeveer 6 cm verhogen. Deze heb ik vervolgens aan de toren vast gelijmd.

Hierna heb ik uit het grote stuk karton een ronde cirkel uitgesneden waarop de toren en wolken kunnen staan.

Leid de draden van de batterij en de LED lichtjes via de achterkant van de toren eruit. Nu kan je de toren vast lijmen aan de kartonnen onderkant, kijk of alle draden nog goed lopen en dat de Arduino en soldeerbord goed binnen de toren zitten voordat je het vast lijmt.

Als de toren stevig vast staat gaan we verder met het vast zetten van de servo motor. Hiervoor moet je even goed passen en meten, de servo motor moet precies zo staan dat de dobbelsteen niet naar binnen kan rollen wanneer het dicht zit, maar wel wanneer hij open draait, hiervoor heb ik een klein stukje karton aan het draai mechanisme vastgelijmd. Vervolgens heb ik onder de servo motor een klein plateau gemaakt waar hij op kan staan, daarna heb ik aan de bovenkant van de servo motor een stuk karton vastgelijmd, zodat hij ook aan de bovenkant van de toren vast zit en hierdoor de juiste positie zal behouden.

Als laatste moet je de motion sensor zo recht op mogelijk neerzetten en hierover heen het dak zetten, bij mij zat het in 1 keer goed, maar het kan zijn dat je deze nog een beetje goed moet duwen. Nu is de toren helemaal werkend!

De LED strip moet je rond om de toren neer leggen in een cirkel, achter de toren ligt ook de batterijen. Zelf heb ik deze niet vastgelijmd, zodat ik hem makkelijker kan verplaatsen als dat nodig is.

Als de LED strip goed ligt pak je de vezelvulling erbij en leg je deze over de strip heen, probeer zoveel mogelijk van de onderkant van de toren te verbergen, zorg ervoor dat het op een paar mooie wolken lijkt!

Step 6: Het Geheel En Conclusie

En dit is het! Ik ben erg blij met het eindproduct dat ik heb kunnen opleveren.

De win conditie die ik voor mijzelf had opgesteld hierbij was dat de dobbelsteen naar beneden rolde nadat het luikje open ging en ook daadwerkelijk van nummer veranderde en dat is gelukt!

Ik heb tijdens dit project nieuwe dingen geleerd die ik zeker ook voor andere projecten nog wil gaan gebruiken. Voornamelijk het 3D printen en solderen komen hierbij kijken. Een 3D model gewoon even maken voor de leuk en een 3D model maken die geprint moet worden zit toch nog wel een groot verschil tussen, daar ben ik met dit project achter gekomen. Je moet op veel kleine details letten en ook van te voren al gaan na denken of de printer het wel kan printen op die manier en hoe lang het allemaal gaat duren ten eindelijk.

Daarnaast heb ik zelf nog nooit eerder gesoldeerd, dus dat was wel leuk om te doen, ik moet zeker nog op veel plekken verbeteren met solderen, zoals je hierboven kan zien is het totaal niet netjes gedaan, maar hierin wil ik wel gaan verbeteren.

Als laatste ben ik erg blij met hoe de lampjes werken, als ik weer een fysiek project heb wil ik daar zeker weer gebruik van gaan maken, vooral voor de coole resultaten die je ermee kan krijgen.

Een leerpunt voor mijzelf is wel echt dat ik eerder moet beginnen met grote projecten zoals dit, ik onderschatte het enorm, waardoor ik sommige dingen te snel gedaan heb en dus niet het allerbeste eind resultaat heb kunnen krijgen. Ik had gewild dat ik meer verschillende testen gedaan had, zodat ik het project ook makkelijker kon aanpassen op verbeteringen die ik dan tegen kwam.

Maar ik ben heel erg blij met wat ik heb kunnen opleveren en ik ga het zeker ook gebruiken bij mijn aankomende Dungeons en Dragons sessies.