Roll i stil med denna DIY Electronic D20 Die

Roll i stil med denna DIY Electronic D20 Die / DIY

Vill du ha något som är lite unikt för ditt nästa bordspel rollspel? Vad sägs om en elektronisk D20 med anpassad grafik för kritiska träffar och missar? Idag visar jag dig hur du bygger din egen med en Arduino och några enkla delar.

Oroa dig inte om du aldrig har använt en Arduino innan vi har en startguide. Komma igång med Arduino: En nybörjarhandbok Komma igång med Arduino: En nybörjarguide Arduino är en öppen källkods elektronikprototypplattform baserad på flexibel, att använda maskinvara och programvara. Den är avsedd för artister, designers, hobbyister och alla som är intresserade av att skapa interaktiva objekt eller miljöer. Läs mer .

Byggplan

Detta är ett enkelt projekt. En Arduino kommer att köra en OLED-skärm, och en knapp rullar munstycket. Anpassad grafik kommer att visa för kritiska träffar eller kritiska missrullar. Du kan enkelt ändra koden för att vara en D8, D10 eller D12.

Vad du behöver

  • 1 x Arduino
  • 1 x 0,96 "I2C OLED-skärm
  • 1 x tryckknapp
  • 1 x 10k? Motstånd
  • 1 x brödbräda
  • Assorted hook up wires
  • Fullständig kod här, om du inte vill följa hela vägen genom de skriftliga instruktionerna.

Det är kärndelarna du behöver för att bygga din egen D20. Du kanske vill installera den i ett fall (diskuteras nedan) och löd kretsen till ett mer permanent tillstånd. Här är de extra delarna du behöver göra:

  • 4 x M2 x 10 mm (0,4 tum) bultar
  • 4 x M2 muttrar
  • 4 x 7 mm (0,28 tum) brickor
  • 9V batteri snap (eller lämpligt alternativ)
  • Assorterad värmekrympslang

Dessa OLED-skärmar är väldigt coola. De kan vanligtvis köpas i vit, blå, gul eller en blandning av de tre. Jag har köpt en i blått, för att matcha mitt fall. Se till att du får en I2C modell istället för SPI.

Nästan alla Arduino kommer att vara lämpliga. Jag har valt en nano, eftersom de är små nog att passa in i fallet. Kolla in vår köpguide Arduino Köpguide: Vilket styrelse ska du få? Arduino Köpguide: Vilket styrelse ska du få? Det finns så många olika typer av Arduino brädor där ute, du skulle bli förlåtad för att vara förvirrad. Vilket ska du köpa för ditt projekt? Låt oss hjälpa till med den här Arduino-köpguiden! Läs mer för mer information om Arduino modeller.

Kretskortet

Här är kretsen du behöver:

Ansluta VCC och GND på OLED-skärmen till Arduino +5V och jord. Ansluta analog 4 på Arduino till stiftet märkt SDA. Ansluta analog 5 till SCL stift. Dessa stiften innehåller de kretsar som behövs för att driva displayen med hjälp av I2C-bussen. De exakta stiften varierar beroende på modell, men A4 och A5 används på Nano och Uno. Kontrollera dokumentationen för trådbiblioteket för din modell om du inte använder en Uno eller Nano.

Anslut batteriet till marken och VIN stift. Detta står för spänning i och accepterar en mängd olika likspänningar - men kontrollera din specifika modell först och det kan ibland variera något.

Anslut knappen till digital stift 2. Lägg märke till hur 10k? motståndet är anslutet till jord. Det här är väldigt viktigt! Detta är känt som ett drag ner motstånd, och det förhindrar att Arduino upptäcker falska data eller störningar som en knapptryckning. Det tjänar också till att skydda styrelsen. Om detta motstånd inte användes skulle + 5V gå direkt i marken. Detta är känt som a död kort och är ett enkelt sätt att döda en Arduino.

Om du lödar denna krets, skydda dina anslutningar med värmekrympslang:

Se till att du inte värmer upp det för mycket, och gör det bara när du är säker på att kretsen fungerar. Du kanske också vill vrida dina kablar i par. Detta håller dem snygga och hjälper till att skydda dem mot otillbörlig stress:

Knapptest

Nu när du har byggt kretsen, ladda upp denna testkod (se till att du väljer rätt kartong och port från Verktyg> Styrelse och Verktyg> Port menyer):

const int-knappenPin = 2; // numret på knappens stiftrumsinställning () pinMode (buttonPin, INPUT); // inställningsknapp Serial.begin (9600); // setup serial void loop () if (digitalRead (buttonPin) == HIGH) Serial.print ("It Works"); fördröjning (250); 

När du har laddat upp, behåll Arduino ansluten via USB och öppna seriekontrollen (Överst till höger> Seriell bildskärm). Du borde se orden Det fungerar visas varje gång du trycker på knappen.

Om inget händer, gå och dubbelkollera din krets.

OLED-inställning

Du måste installera två bibliotek för att köra skärmen. Hämta Adafruit_SSD1306 och Adafruit-GFX [Ej längre tillgängliga] -bibliotek från Github och spara dem i din biblioteksmapp. Om du inte är säker på var bibliotekets mappar finns, läs min retro spelhandledning Arduino Retro Gaming Med en OLED-skärm Arduino Retro Gaming Med en OLED-skärm Har du någonsin undrat hur mycket arbete du behöver för att skriva egna retrospel? Hur lätt är Pong att koda för Arduino? Läs mer, där jag konfigurerar samma skärm mer detaljerat.

Starta om din Arduino IDE och ladda upp en testskiss från Arkiv> Exempel meny. Välj Adafruit SSD1306 och då ssd1306_128x64_i2c. Ladda upp den här koden (det tar ett tag), och du borde se massor av former och mönster på displayen:

Om inget händer, dubbelkontrollera dina anslutningar. Om det efter kontroll fortfarande inte fungerar, måste du ändra provkoden.

Ändra den här raden (i början av inrätta fungera):

display.begin (SSD1306_SWITCHCAPVCC, 0x3D);

Till detta:

display.begin (SSD1306_SWITCHCAPVCC, 0x3C);

Detta berättar bibliotekets specifika detaljer om den bildskärm du använder. Du borde nu vara helt inställd på fortsättningen med byggnaden.

Fallet

Om du bygger detta på en brödbräda eller inte vill göra det, kan du hoppa över det här steget.

Jag designade och 3D tryckte den här rutan. Hämta filerna på Thingiverse. Oroa dig inte om du inte har en 3D-skrivare - onlinetjänster 3D-hubbar och shapeways tillhandahåller online-utskriftstjänster.

Du kan enkelt göra den här rutan av trä, eller genom att köpa en plastprojektlåda.

Locket är en enkel push fit design, och innehåller några utklipp för hårdvaran:

Koden

Nu när allt är klart är det dags för koden. Så här fungerar det i Pseudocode:

om knappen trycks generera slumpmässigt nummer om slumpmässigt nummer är 20 vis grafik annars om slumpmässigt nummer är 1 vis grafik annars vis nummer

För att detta ska kunna fungera ordentligt måste ett slumptal genereras - det här är rullen på döet. Arduino har en slumptalsgenerator som heter slumpmässig, men borde inte använda den. Även om det är tillräckligt bra för grundläggande slumpmässiga uppgifter, är det bara inte slumpmässigt nog för en elektronisk dö. Anledningen till varför är något komplicerat, men du kan läsa mer om du är intresserad av boallen.com.

Hämta TrueRandom-biblioteket av sirleech på Github. Lägg till det här i din bibliotekskatalog och starta om IDE.

Skapa nu en ny fil och ställ in din ursprungliga kod (eller ta bara den färdiga koden från GitHub):

#inkludera  #inkludera  #inkludera  #inkludera  #inkludera  Adafruit_SSD1306 display (4); void setup () display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // ställa in OLED pinMode (buttonPin, INPUT); // inställningsknapp tomrumsling () 

Den här koden konfigurerar OLED och innehåller alla bibliotek du behöver kommunicera med, tillsammans med ditt nya slumpmässiga nummerbibliotek. Lägg nu till detta i huvudslingan:

om (digitalRead (buttonPin) == HIGH) fördröjning (15); om (digitalRead (buttonPin) == HIGH) display.fillScreen (BLACK); // radera hela displayen display.setTextColor (WHITE); display.setTextSize (2); display.setCursor (0, 0); display.println (TrueRandom.random (1, 21)); // skriva slumpmässigt nummer display.display (); // skriv för att visa fördröjning (100); 

Det här är ganska grundläggande i minuten, men det är en fungerande D20. När knappen trycks in visas ett slumptal mellan ett och 20 på skärmen:

Det fungerar bra, men det är lite tråkigt. Låt oss göra det bättre. Skapa två nya metoder, drawDie och eraseDie:

void drawDie () display.drawRect (32, 0, 64, 64, WHITE); 

Dessa kommer att dra en dörr mitt på skärmen. Du kanske vill göra det mer komplicerat, kanske genom att dra en D20, eller en D12 och så vidare, men det är enklare att rita en grundläggande sexsidig dö. Här är den grundläggande användningen:

drawDie ();

Ändra sedan din huvudslinga för att dra slumpmässigt nummer, bara större och i mitten. Ändra textstorlek och markör till detta:

display.setTextColor (VIT); display.setCursor (57, 21);

Det ser mycket bättre ut nu:

Det enda problemet är med siffror större än nio:

Åtgärden för detta är enkelt. Alla siffror mindre än 10 kommer att ha markören inställd till en annan position än de siffrorna 10 eller större. Byt ut denna rad:

display.setCursor (57, 21);

Med detta:

int roll = TrueRandom.random (1, 21); // lagra slumptalet om (rulla < 10)  // single character number display.setCursor(57, 21);  else  // dual character number display.setCursor(47, 21); 

Så här ser det ut nu:

Allt som är kvar nu är för bilderna när du rullar en kritisk träff eller miss. Det är några steg involverade, men det är en enkel nog process.

Hitta en lämplig bild som du vill använda (ju enklare desto bättre är det att displayen endast är enfärgad). Här är bilderna jag använde:

Bildkrediter: publicdomainvectors.org

Alla bilder du vill använda måste konverteras till en HEX-array. Detta är en representation av bilden i kodformat. Det finns många verktyg tillgängliga för detta, och vissa är skrivna specifikt för OLED-skärmar. Det enklaste sättet är att använda PicturetoC_Hex onlineverktyget. Här är de inställningar som behövs:

Ladda upp din bild och sätt kodformatet till HEX: 0x. Uppsättning Används för till Svart / Vit för alla teckenbildsfunktioner. Lämna alla andra alternativ som standardinställningar. Du kan ändra storlek på bilden här om du behöver. Tryck Få C-sträng och du bör se bilddata visas:

Du behöver den här genererade data på en minut. Skapa två funktioner som heter drawExplosion och drawSkull (eller ett lämpligt namn för din version). Här är koden:

void drawExplosion () // butiksbild i EEPROM statisk konst unsigned char PROGMEM imExp [] = 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 , 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc, 0x00,0x00,0x00 , 0x00,0x00,0x78,0x7f, 0xff, 0xc0,0x00,0x00,0x00,0x00,0xfe, 0xff, 0xff, 0xf0,0x00,0x00,0x00,0x3f, 0xff, 0xff, 0xff, 0xfb, 0x00,0x00,0x00 , 0x7f, 0xff, 0xff, 0xff, 0xff, 0xc0,0x00,0x00,0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,0x01,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,0x03,0xff , 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,0x03,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,0x03,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,0x03,0xff, 0xff , 0xff, 0xff, 0xff, 0xff, 0xf0,0x07,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,0x07,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,0x07,0xff, 0xff, 0xff , 0xff, 0xff, 0xff, 0xe0,0x07,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0,0x1f, 0xff, 0xff, 0xff, 0xff , 0xff, 0xff, 0xe0,0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0,0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,0x03,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,0x03,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,0x03,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0,0x01,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,0x00,0x0f, 0xff, 0xff, 0xff, 0xff, 0xFE, 0x00,0x00,0x07,0xff, 0xff, 0xf9,0xff, 0xd8, 0x00,0x00,0x00,0x3f, 0xff, 0xf0,0x0f, 0x00,0x00,0x00,0x00,0x1f, 0x1F, 0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x0f, 0xe0,0x00,0x00,0x00, 0x00,0x00,0x00,0x0f, 0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x0f, 0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x0f, 0xf0,0x00,0x00,0x00,0x00, 0x00,0x00,0x0f, 0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x0f, 0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x3f, 0xf8,0x00,0x00,0x00,0x00,0x00, 0x00,0x7f, 0xff, 0x00,0x00,0x00,0x00,0x00,0x00,0x7f, 0xff, 0x00,0x00,0x00,0x00,0x00,0x00,0x7f, 0xff, 0x00,0x00,0x00,0x00,0x00,0x00, 0x7f, 0xFE, 0x00,0x00,0x00,0x00,0x00,0x00,0x7f, 0xfc, 0x00,0x00,0x00,0x00,0x00,0x00,0x0f, 0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x07, 0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xe0, 0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x0f, 0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x0f, 0xf8,0x00, 0x00,0x00,0x00,0x00,0x00,0x0f, 0xfc, 0x00,0x00,0x00,0x00,0x00,0x00,0x1f, 0xff, 0x00,0x00,0x00,0x00,0x00,0x0f, 0xff, 0xff, 0xff, 0x00, 0x00,0x00,0x07,0xff, 0xff, 0xff, 0xff, 0xf0,0x00,0x00,0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,0x00,0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,0x1f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00,0x00,0x01,0xbf, 0xff, 0xff, 0xff, 0x30,0x00,0x00,0x00,0x13,0xf7,0xb8,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00; display.drawBitmap (0, 0, imExp, 64, 62, 1); // draw champinjon moln tomtdragSkull () // butiksbild i EEPROM statisk konst unsigned char PROGMEM imSku [] = 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 , 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0xf0,0x00,0x00,0x00 , 0x00,0x78,0x00,0x07,0xf0,0x00,0x00,0x00,0x00,0xfc, 0x00,0x07,0xf8,0x00,0x00,0x00,0x00,0xfe, 0x00,0x07,0xf8,0x00,0x00,0x00,0x01 , 0xFE, 0x00,0x07,0xfc, 0x00,0x00,0x00,0x01,0xfe, 0x00,0x07,0xfe, 0x00,0x3f, 0xc0,0x03,0xfe, 0x00,0x01,0xff, 0x81,0xff, 0xfc, 0x07,0xec , 0x00,0x00,0x3f, 0xc7,0xff, 0xff, 0x1F, 0xc0,0x00,0x00,0x0f, 0xcf, 0xff, 0xff, 0xdf, 0x00,0x00,0x00,0x07,0xbf, 0xff, 0xff, 0xee, 0x00,0x00 , 0x00,0x01,0x7f, 0xff, 0xff, 0xf0,0x00,0x00,0x00,0x00,0xff, 0xff, 0xff, 0xf8,0x00,0x00,0x00,0x01,0xff, 0xff, 0xff, 0xf8,0x00,0x00,0x00 , 0x03,0xff, 0xff, 0xff, 0xfc, 0x00,0x00,0x00,0x07,0xff, 0xff, 0xff, 0xFE, 0x00,0x00,0x00,0x0f, 0xff, 0xff, 0xff, 0xff, 0x00,0x00,0x00,0x0f , 0xff, 0xff, 0xff, 0xff, 0x00,0x00,0x00,0x1f, 0xff, 0xff, 0xff, 0xff, 0x80,0x00,0x00 , 0x1F, 0xff, 0xff, 0xff, 0xff, 0x80,0x00,0x00,0x1f, 0xff, 0xff, 0xff, 0xff, 0x80,0x00,0x00,0x1f, 0xff, 0xff, 0xff, 0xff, 0x80,0x00,0x00,0x1f , 0xff, 0xff, 0xff, 0xff, 0x80,0x00,0x00,0x1f, 0xff, 0xff, 0xff, 0xff, 0x80,0x00,0x00,0x1e, 0x3f, 0xff, 0x3f, 0xc7,0x80,0x00,0x00,0x1e, 0x0C , 0x0F, 0x00,0x07,0x80,0x00,0x00,0x1e, 0x00,0x0f, 0x00,0x0f, 0x80,0x00,0x00,0x1e, 0x00,0x19,0x80,0x0f, 0x00,0x00,0x00,0x0f, 0x00,0x19 , 0x80,0x0f, 0x00,0x00,0x00,0x0d, 0x00,0x30,0xc0,0x1f, 0x00,0x00,0x00,0x05,0x80,0x70,0xc0,0x1e, 0x00,0x00,0x00,0x05,0xf0,0xe0,0xe0 , 0x36,0x00,0x00,0x00,0x01,0xff, 0xe0,0x7f, 0xf0,0x00,0x00,0x00,0x03,0xff, 0xc4,0x7f, 0xf0,0x00,0x00,0x00,0x03,0xff, 0xCC, 0x7f, 0xf0 , 0x00,0x00,0x00,0x03,0xff, 0xCC, 0x7f, 0xf0,0x00,0x00,0x00,0x03,0xff, 0x9e, 0x7f, 0xf0,0x00,0x00,0x00,0x00,0xff, 0xFE, 0x7f, 0xc0,0x00 , 0x00,0x00,0x00,0x01,0xff, 0xf8,0x1c, 0x00,0x00,0x00,0x03,0xe0,0x3f, 0x01,0xbf, 0x00,0x00,0x00,0x07,0xa6,0x40,0x09,0x9f, 0x80,0x00 , 0x00,0x1f, 0x27,0x5a, 0x39,0x9f, 0xf8,0x00,0x01,0xff, 0x27,0xdb, 0x39,0x0f, 0xfc, 0x00,0x03,0xfe, 0x31,0x7f, 0x39,0x07,0xfc, 0x00,0x03 , 0xfc, 0x10,0x1a, 0x02,0x03,0xf8,0x00,0x03,0xf8,0x10,0x00,0x02,0x01,0xf0,0x00,0x01,0xf8,0x10,0x00,0x02,0x01,0xe0,0x00,0x00,0x78 , 0x10,0x00,0x02,0x00,0xe0,0x00,0x00,0x70,0x30,0x00,0x02,0x00,0x00,0x00,0x00,0x30,0x20,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x64 , 0x00,0x1b, 0x00,0x00,0x00,0x00,0x00,0x73,0x55,0x63,0x00,0x00,0x00,0x00,0x00,0xf9,0x55,0x4f, 0x00,0x00,0x00,0x00,0x00,0x7f, 0x14 , 0x1F, 0x00,0x00,0x00,0x00,0x00,0x1f, 0xe0,0xfe, 0x00,0x00,0x00,0x00,0x00,0x0f, 0xff, 0xfc, 0x00,0x00,0x00,0x00,0x00,0x07,0xff, 0xf0 , 0x00,0x00,0x00,0x00,0x00,0x03,0xff, 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 , 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00; display.drawBitmap (0, 0, imSku, 60, 64, 1); // teckna skalle moln

Om du vill använda bilderna jag har använt, fortsätt och kopiera koden. Om du vill använda dina egna bilder du genererade tidigare kopierar du bytekoden i imSku och imExp arrays som krävs.

Så här ser de här bilderna ut på displayen:

Den viktigaste delen av den koden är den här raden:

statisk konst unsigned char PROGMEM imSku []

Detta berättar Arduino lagra bilderna i EEPROM (vad är EEPROM? Hur man använder Arduino EEPROM att spara data mellan gren Cycles Hur man använder Arduino EEPROM att spara data mellan gren Cycles Visste du Arduino kan lagra data när den är avstängd ? Jag pratar om EEPROM, så kom med mig när jag visar dig hur man läser och skriver till den. Läs mer) istället för RAM (snabb guide till RAM En snabb och smutsig guide till RAM: Vad du behöver veta Snabb och smutsig guide till RAM: Vad du behöver veta RAM är en avgörande del av varje dator, men det kan vara förvirrande att förstå om du inte är en teknologisk guru. I det här inlägget bryter vi ner det i lätt-till- förstå villkor. Läs mer). Anledningen till detta är enkelt; Arduino har begränsad RAM, och om du använder allt för att lagra bilder får du inte lämna några återstående för att din kod ska utföras

Ändra din huvud om uttalande för att visa den här nya grafiken när en eller 20 rullas. Notera koden för att visa numret som rullas tillsammans med bilderna också:

om (roll == 20) drawExplosion (); display.setCursor (80, 21); display.println ( "20");  annars om (roll == 1) display.setCursor (24, 21); display.println ( "1"); drawSkull ();  annars om (rulla < 10)  // single character number display.setCursor(57, 21); display.println(roll); // write the roll drawDie(); // draw the outline  else  // dual character number display.setCursor(47, 21); display.println(roll); // write the roll drawDie(); // draw the outline 

Och här ser de nya rullarna ut:

Det är allt för kodsidan (ta tag i koden från GitHub om du hoppar över allt). Du kan enkelt ändra detta för att vara en D12, D8, och så vidare.

Slutmontering

Nu när allting är klart, är det dags att lägga allt upp. Skruva på displayen, se till att inte skruva fast bultarna. Det här är kanske den svåraste delen. Jag knäckte en bildskärm så att du kanske vill använda några plastskivor. Jag skär några kvadrater ur Plasticard:

De små muttrarna och bultarna kan vara knepiga att ansluta. Tips: Använd en liten bit Blu-Tack på änden av en skruvmejsel för att i första hand sitta på muttrarna:

Skruva på knappen, anslut batteriet och stäng locket. Var försiktig så att du inte fäller några trådar, eller buntar dem för hårt, eventuellt orsakar en kortslutning. Beroende på längden på dina bakledare kan du behöva skydda utsatta anslutningar med viss isolering (en seriell låda fungerar bra):

Här är hur det ser ut som inuti:

Och här är den färdiga produkten:

Du borde nu vara den stolta ägaren till en elektronisk D20!

Vilka ändringar gjorde du? Ändrade du bilderna? Låt oss veta i kommentarerna, vi skulle gärna se vad du gjorde!

Utforska mer om: Arduino, Board Game, Electronics.