Rouler dans le style avec ce dé d20 électronique diy

Vous voulez quelque chose d`un peu unique pour votre prochain jeu de rôle-jeu de table? Que diriez-vous d`une électronique avec des graphismes J20 personnalisés pour les coups critiques et misses? Aujourd`hui, je vais vous montrer comment construire votre propre avec un Arduino et quelques pièces simples.

Ne vous inquiétez pas si vous ne l`avez jamais utilisé un Arduino avant, nous avons Guide de Démarrage.Mise en route avec Arduino: Guide du débutantMise en route avec Arduino: Guide du débutantArduino est une plate-forme de prototypage électronique open source basée sur flexible, facile à utiliser du matériel et des logiciels. Il est destiné aux artistes, designers, amateurs, et toute personne intéressée par la création d`objets interactifs ou des environnements.Lire la suite

plan de construction

Ceci est un projet simple. Un Arduino pilotera un écran OLED, et un bouton lancer le dé. Des graphiques personnalisés montreront pour coup critique ou des rouleaux de manquer critiques. Vous pouvez facilement modifier le code pour un J8, D10 ou D12.

De quoi as-tu besoin

arduino_d20_what_you_need

  • 1 x Arduino
  • 1 x 0,96 "I2C affichage OLED
  • 1 x Bouton poussoir
  • 1 x 10k? résistance
  • 1 x Breadboard
  • crochet en fils assortis
  • code complet ici, si vous ne voulez pas suivre tout le chemin à travers les instructions écrites.

Ce sont les éléments essentiels dont vous avez besoin pour construire votre propre J20. Vous pouvez l`installer dans un cas (voir ci-dessous) et souder le circuit dans un état plus permanent. Voici les pièces supplémentaires dont vous aurez besoin de le faire:

  • 4 x M2 x 10 mm (0,4 pouce) boulons
  • 4 x écrous M2
  • 4 x rondelles de 7 mm (0,28 pouce)
  • enclenchement de la batterie de 9V (ou alternative appropriée)
  • gaine thermorétractable Assortiment

Ces écrans OLED sont très cool. Ils peuvent généralement être achetés en blanc, bleu, jaune, ou un mélange des trois. Je l`ai acheté un en bleu, pour correspondre à mon cas. Assurez-vous d`obtenir un I2C modèle au lieu de SPI.

Presque tous les Arduino sera approprié. Je l`ai choisi un Nano, car ils sont assez petits pour tenir dans le cas. Consultez notre Guide d`achat Pour de plus amples informations sur les modèles Arduino.Guide d`achat Arduino: Quel conseil devriez-vous obtenir?Guide d`achat Arduino: Quel conseil devriez-vous obtenir?Il y a tellement de différents types de cartes Arduino là-bas, vous seriez pardonné d`être confus. Que devriez-vous acheter pour votre projet? Aidons, avec ce guide d`achat Arduino!Lire la suite

Le circuit

Voici le circuit dont vous avez besoin:

circuit arduino d20

Relier CCV et GND sur l`écran OLED à l`Arduino +5 V et sol. Relier analogique 4 sur le Arduino à la broche marquée SDA. Relier analogique 5 au SCL épingle. Ces broches contiennent les circuits nécessaires pour commander l`affichage en utilisant le bus I2C. Les broches exactes varient selon le modèle, mais A4 et A5 sont utilisés sur le Nano et Uno. Consultez la documentation bibliothèque fil pour votre modèle si vous n`êtes pas en utilisant un Uno ou Nano.

Connecter la batterie à la terre et la VIN épingle. Cette tension représente et accepte une variété de différentes tensions continues - mais vérifiez votre modèle d`abord, et il peut parfois varier légèrement.

Connectez le bouton broche numérique 2. Remarquez comment le 10k? résistance est connectée à la masse. C`est très important! Ceci est connu comme une résistance de traction vers le bas, et il empêche l`Arduino détection de données parasites ou des interférences en tant que presse bouton. Il sert également de protéger la carte. Si cette résistance n`a pas été utilisé, + 5V irait directement dans le sol. Ceci est connu comme mort à court et est un moyen facile de tuer un Arduino.

Si vous souder ce circuit, protégez vos connexions avec un tube thermorétractable:

arduino d20 Heatshrink

Assurez-vous que vous ne chauffez pas trop, et ne le faites une fois que vous êtes sûr que les travaux de circuit. Vous pouvez également tordre vos câbles en paires. Cela les maintient propres et les aide à protéger contre le stress excessif:

câbles torsadés arduino d20

Test Bouton

Maintenant que vous avez construit le circuit, télécharger ce code de test (assurez-vous de sélectionner la carte et le port de la Outils gt; Planche et Outils gt; Port menus):

const int buttonPin = 2- // le numéro de la broche de boutonvide installer() {pinMode(buttonPin, CONTRIBUTION)- // Bouton de configuration En série.commencer(9600)- // série d`installation}vide boucle(){si(digitalRead(buttonPin) == HAUTE) {En série.impression("Ça marche")-retard(250)-}}

Une fois téléchargé, garder l`Arduino connecté via USB et ouvrez le moniteur série (En haut à droite gt; Serial Monitor). Vous devriez voir les mots Ça marche apparaît chaque fois que vous appuyez sur le bouton.

Si rien ne se passe, aller et vérifier votre circuit.

Configuration OLED

Test arduino oled

Vous devez installer deux bibliothèques pour commander l`affichage. Télécharger les bibliothèques Adafruit_SSD1306 et Adafruit-GFX de Github, et les enregistrer dans votre dossier de bibliothèque. Si vous ne savez pas où vous dossiers de la bibliothèque sont, allez lire mon tutoriel de jeu rétro, où configurer ce même écran plus en détail.Arduino Retro Gaming Avec un écran OLEDArduino Retro Gaming Avec un écran OLEDJamais demandé combien le travail qu`il faut pour écrire vos propres jeux rétro? Comment est facile Pong à coder pour l`Arduino?Lire la suite

Redémarrez votre IDE Arduino et télécharger une esquisse de test de la Fichier gt; Exemples menu. Sélectionner Adafruit SSD1306 et alors ssd1306_128x64_i2c. Téléchargez ce code (cela prendra un certain temps), et vous devriez voir beaucoup de formes et de motifs sur l`écran:

Test arduino oled

Si rien ne se passe, vérifiez vos connexions. Si, après vérification, il ne fonctionne toujours pas, vous devrez modifier le code exemple.

Modifiez cette ligne (au début de la installer fonction):

afficher.commencer(SSD1306_SWITCHCAPVCC, 0x3D)-

Pour ça:

afficher.commencer(SSD1306_SWITCHCAPVCC, 0x3C)-

Cela indique les détails spécifiques bibliothèque sur l`écran que vous utilisez. Vous devriez maintenant être tous ensemble à poursuivre la construction.

L`affaire

Si vous construisez cela sur une planche à pain, ou ne voulez pas la boîte vers le haut, vous pouvez sauter cette étape.

cas arduino d20

J`ai conçu et 3D imprimé cette case. Obtenez les fichiers sur Thingiverse. Ne vous inquiétez pas si vous ne disposez pas d`une imprimante 3D - services en ligne Hubs 3D et Shapeways fournissent des services d`impression en ligne.

Vous pouvez facilement faire cette boîte en bois, ou en achetant une boîte de projet en plastique.

Le couvercle est une simple pression de conception en forme, et contient quelques découpes pour le matériel:

cas arduino d20

Le code

Maintenant que tout est prêt, il est temps pour le code. Voici comment cela fonctionne dans pseudocode:

si le bouton est aléatoire pressedgenerate de numberif aléatoire est 20show graphicelse si le nombre aléatoire est 1show nombre de graphicelseshow

Pour que cela fonctionne correctement, un nombre aléatoire doit être généré - c`est le rouleau de la filière. Arduino dispose d`un générateur de nombres aléatoires appelé au hasard, mais ne devrait pas l`utiliser. Bien qu`il soit assez bon pour les tâches aléatoires de base, il est tout simplement pas assez aléatoire pour une matrice électronique. Les raisons pour lesquelles sont un peu compliquées, mais vous pouvez en savoir plus si vous êtes intéressé à boallen.com.

Téléchargez la bibliothèque TrueRandom par sirleech sur Github. Ajoutez ceci à votre dossier de bibliothèque et redémarrez l`IDE.

Maintenant, créez un nouveau fichier et la configuration de votre code initial (ou tout simplement saisir le code fini à partir de GitHub):

#comprendre lt;SPI.hgt;#comprendre lt;Câble.hgt;#comprendre lt;Adafruit_GFX.hgt;#comprendre lt;Adafruit_SSD1306.hgt;#comprendre lt;TrueRandom.hgt;Adafruit_SSD1306 afficher(4)-vide installer() {afficher.commencer(SSD1306_SWITCHCAPVCC, 0x3C)- // configuration l`OLEDpinMode(buttonPin, CONTRIBUTION)- // Bouton de configuration }vide boucle() {}

Ce code configure l`OLED, et comprend toutes les bibliothèques dont vous avez besoin pour communiquer avec lui, ainsi que votre nouvelle bibliothèque de nombres aléatoires. Maintenant, ajoutez cela à la boucle principale:

si(digitalRead(buttonPin) == HAUTE) {retard(15)-si(digitalRead(buttonPin) == HAUTE) {afficher.fillScreen(NOIR)- // effacer l`affichage entierafficher.SetTextColor(BLANC)-afficher.SetTextSize(2)-afficher.setCursor(0, 0)-afficher.println(TrueRandom.au hasard(1, 21))- // imprimer nombre aléatoireafficher.afficher()- // écriture pour afficherretard(100)-}}

Ceci est tout à fait de base à la minute, mais il est un travail de J20. Chaque fois que le bouton est enfoncé, un nombre aléatoire entre un et 20 est affiché à l`écran:

arduino d20 premier code

Cela fonctionne bien, mais il est un peu ennuyeux. Faisons mieux. Créer deux nouvelles méthodes, drawDie et eraseDie:

vide drawDie() {afficher.drawRect(32, 0, 64, 64, BLANC)-}

Ceux-ci élaboreront une filière au milieu de l`écran. Vous pouvez le rendre plus complexe, peut-être en dessinant un J20, ou un D12 et ainsi de suite, mais il est plus simple de dessiner un dé à six faces de base. Voici l`utilisation de base:

drawDie()-

Ensuite, modifiez votre boucle principale pour dessiner le nombre aléatoire, que plus grand et au milieu. Modifier la taille du texte et le curseur à ceci:

afficher.SetTextColor(BLANC)-afficher.setCursor(57, 21)-

Il semble beaucoup mieux maintenant:

caractère arduino d20

Le seul problème est avec un plus grand nombre de neuf:

double caractère arduino d20

Le correctif est simple. Tous les numéros moins de 10 auront le curseur réglé sur une position différente de celle de ces chiffres 10 ou plus. Remplacer cette ligne:

afficher.setCursor(57, 21)-

Avec ça:

rouleau int = TrueRandom.au hasard(1, 21)- // enregistre le nombre aléatoiresi (rouleau lt; dix) {// numéro unique de caractèresafficher.setCursor(57, 21)-}autre {// Numéro double caractèreafficher.setCursor(47, 21)-}

Voilà ce qui ressemble maintenant:

double caractère fixe arduino d20

Tout ce qui reste est maintenant pour les images lorsque vous lancez un coup critique ou manquer. Il y a quelques étapes, mais il est un processus assez simple.

Trouver une image appropriée que vous souhaitez utiliser (le plus simple est le mieux que l`affichage est seule couleur). Voici les images que j`ai utilisé:

arduino oeuvre d20
Crédit d`image: publicdomainvectors.org

Toute image que vous souhaitez utiliser devra être converti en un tableau de HEX. Ceci est une représentation de l`image sous forme de code. Il existe de nombreux outils pour ce faire, et certains sont écrits spécialement pour les écrans OLED. La façon la plus simple est d`utiliser l`outil en ligne PicturetoC_Hex. Voici les paramètres nécessaires:

l`image arduino à six pans

Téléchargez votre image et définir le format de code HEX: 0x. Ensemble Utilisé pour à Noir / Blanc pour toutes les fonctions d`image de tirage. Laissez toutes les autres options que les paramètres par défaut. Vous pouvez redimensionner l`image ici si vous avez besoin. presse Obtenez C Chaîne et vous devriez voir les données d`image apparaissent:

des données d`image arduino d20

Vous aurez besoin des données générées dans une minute. Créer deux fonctions appelées drawExplosion et drawSkull (Ou un nom approprié pour votre version). Voici le code:

vide drawExplosion() {// image du magasin dans l`EEPROMstatique const 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,
Articles connexes