Soyez élégant avec ce pochoir électronique DIY D20
Vous voulez apporter quelque chose d’unique à votre prochain RPG de table ? Que diriez-vous d’un Electron D20 avec des graphismes personnalisés pour les succès et les échecs critiques ? Aujourd’hui, je vais vous montrer comment construire le vôtre en utilisant un Arduino et quelques pièces simples.
Si vous n’avez jamais utilisé d’Arduino auparavant, ne vous inquiétez pas, nous avons un guide de démarrage.
Plan de construction
Il s’agit d’un projet simple. Un Arduino pilotera un écran OLED et un bouton lancera les dés. Les graphiques personnalisés montreront les coups critiques ou les coups manqués critiques. Vous pouvez facilement modifier le code en D8, D10 ou D12.
de quoi avez-vous besoin
- 1 Arduino
- 1 écran OLED I2C de 0,96″
- 1 bouton
- 1 résistance de 10 kΩ
- 1 planche à pain
- Diverses lignes de connexion
- Le code complet est ici, si vous ne voulez pas suivre les instructions écrites tout le temps.
Ce sont les pièces essentielles dont vous avez besoin pour construire votre propre D20. Vous voudrez peut-être l’installer dans le boîtier (décrit ci-dessous) et souder le circuit à un état plus permanent. Voici les autres pièces dont vous avez besoin pour ce faire :
- 4 boulons M2 x 10 mm (0,4 po)
- 4 écrous M2
- 4 rondelles de 7 mm (0,28 po)
- Clip de batterie 9V (ou remplacement approprié)
- Diverses gaines thermorétractables
Ces écrans OLED sont plutôt cool. Ils peuvent généralement être achetés en blanc, bleu, jaune ou un mélange des trois. J’ai acheté un bleu pour correspondre à ma situation.assurez-vous d’en obtenir un I2C modèle au lieu de IPS.
Faire une vidéo du jour
Fonctionne avec presque tous les Arduino. J’ai choisi Nano car ils sont assez petits pour tenir dans un étui. Consultez notre guide d’achat pour en savoir plus sur les modèles Arduino.
circuit
Voici le circuit dont vous avez besoin :
relier VCC et sol Sur l’écran OLED d’Arduino +5V et sol. relier Simulateur 4 Marqué comme des broches sur l’Arduino SDA. relier Simulateur 5 arriver SCL broche. Ces broches contiennent les circuits nécessaires pour piloter l’affichage à l’aide du bus I2C. Le brochage exact variera selon le modèle, mais les Nano et Uno utilisent A4 et A5. Si vous n’utilisez pas un Uno ou un Nano, consultez la documentation de la bibliothèque Wire du modèle.
mettre la batterie à la terre et plaque d’immatriculation broche. Cela représente la tension d’entrée et accepte une variété de tensions CC différentes – mais vérifiez d’abord votre modèle spécifique, il peut parfois être légèrement différent.
connecter le bouton à broche numérique 2Remarquez comment 10k? Résistance à la masse. C’est très important! C’est ce qu’on appelle une résistance pull-down, et cela empêche l’Arduino de détecter des données parasites ou des interférences lorsque le bouton est enfoncé. Il protège également le circuit imprimé. Si cette résistance n’est pas utilisée, +5V ira directement à la masse.c’est appelé de courte durée Et c’est un moyen facile de tuer un Arduino.
Si vous soudez ce circuit, utilisez une gaine thermorétractable pour protéger vos connexions :
Assurez-vous de ne pas trop le chauffer et ne le faites qu’après vous être assuré que le circuit fonctionne correctement. Vous pouvez également torsader les câbles par paires. Cela les garde propres et aide à les protéger du stress excessif :
test clé
Maintenant que votre circuit est construit, téléchargez ce code de test (assurez-vous de commencer par Outils > Circuits imprimés et Outils > Ports menu):
const int buttonPin = 2;
void set() {
pinMode (boutonPin, entrée);
série.start(9600);
}
boucle vide() {
if(digitalRead(buttonPin) == HIGH) {
Serial.print(« Ça marche »);
retard(250);
}
}
Après le téléchargement, laissez l’Arduino connecté via USB et ouvrez le moniteur série (En haut à droite > Moniteur série).mots que vous devriez voir Ça marche Apparaît à chaque pression sur le bouton.
Si rien ne se passe, revérifiez votre circuit.
Paramètres OLED
Vous devez installer deux bibliothèques pour piloter l’affichage. Télécharger Adafruit_SSD1306 et Adafruit-GFX [No Longer Available] Bibliothèques de Github et enregistrez-les dans votre dossier de bibliothèque. Si vous ne savez pas où se trouve le dossier de la bibliothèque, lisez mon tutoriel de jeu rétro où je configure le même affichage plus en détail.
Redémarrez votre IDE Arduino et démarrez Fichier > Exemple menu.choisir Adafruit SSD1306 et puis ssd1306_128x64_i2c. Téléchargez ce code (cela prendra un certain temps) et vous devriez voir beaucoup de formes et de motifs à l’écran :
Si rien ne se passe, vérifiez votre connexion. Si cela ne fonctionne toujours pas après vérification, vous devez modifier l’exemple de code.
Changez cette ligne (au début d’installation Caractéristiques):
display.begin(SSD1306_SWITCHCAPVCC, 0x3D);
Pour ça:
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
Cela indique à la bibliothèque les spécificités du moniteur que vous utilisez. Vous devriez maintenant être prêt à continuer la construction.
Cas
Si vous le construisez sur une planche à pain ou si vous ne voulez pas le mettre en boîte, vous pouvez ignorer cette étape.
J’ai conçu et imprimé en 3D cette boîte. Obtenez le fichier sur Thingiverse. Si vous n’avez pas d’imprimante 3D, ne vous inquiétez pas – les services en ligne 3D Hubs et Shapeways proposent des services d’impression en ligne.
Vous pouvez facilement fabriquer cette boîte en bois ou acheter une boîte de projet en plastique.
Le couvercle est une conception simple à emboîter et contient quelques découpes matérielles :
codage
Maintenant que tout est prêt, il est temps d’écrire le code. Voici comment cela fonctionne en pseudocode :
Si le bouton est enfoncé
générer des nombres aléatoires
si le nombre aléatoire est 20
afficher des graphiques
Sinon, si le nombre aléatoire est 1
afficher des graphiques
autre
afficher le numéro
Pour que cela fonctionne, un nombre aléatoire doit être généré – c’est le lancer de dés. Arduino a un générateur de nombres aléatoires appelé Aléatoire, mais il ne doit pas être utilisé. Bien qu’il soit assez bon pour les tâches aléatoires de base, ce n’est pas assez aléatoire pour les puces électroniques. Les raisons sont un peu compliquées, mais si vous êtes intéressé par boallen.com, vous pouvez en savoir plus.
Téléchargez la bibliothèque TrueRandom de sirleech sur Github. Ajoutez ceci à votre dossier de bibliothèque et redémarrez l’IDE.
Créez maintenant un nouveau fichier et configurez votre code initial (ou récupérez le code complet sur GitHub) :
#inclure
#inclure
#inclure
#inclure
#inclure
Affichage Adafruit_SSD1306(4);
void set() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
pinMode (boutonPin, entrée);
}
boucle vide() {
}
Ce code configure l’OLED et inclut toutes les bibliothèques nécessaires pour communiquer avec lui, ainsi que la nouvelle bibliothèque de nombres aléatoires. Ajoutez maintenant ceci à la boucle principale :
if(digitalRead(buttonPin) == HIGH) {
retard(15);
if(digitalRead(buttonPin) == HIGH) {
display.fillScreen(noir);
display.setTextColor(blanc);
display.setTextSize(2);
display.setCursor(0, 0);
display.println(TrueRandom.random(1, 21));
display.display();
retard(100);
}
}
Actuellement, c’est assez basique, mais c’est un D20 valide. A chaque appui sur le bouton, un nombre aléatoire entre 1 et 20 s’affiche à l’écran :
Cela fonctionne bien, mais c’est un peu ennuyeux. rends-nous meilleurs. Créer deux nouvelles méthodes, mourir et effacer le pochoir:
void drawDie() {
display.drawRect(32, 0, 64, 64, BLANC);
}
Ceux-ci dessineront un dé au milieu de l’écran. Vous voudrez peut-être rendre cela plus compliqué en dessinant un D20 ou D12, etc., mais dessiner un dé de base à six faces est plus simple. Voici l’utilisation de base :
plotmod();
Ensuite, modifiez votre boucle principale pour tirer des nombres aléatoires, seulement plus grands au milieu. Modifiez la taille du texte et le curseur en :
display.setTextColor(blanc);
display.setCursor(57, 21);
C’est beaucoup mieux maintenant :
Le seul problème est les nombres supérieurs à neuf :
Résoudre ce problème est simple. Tout nombre inférieur à 10 placera le curseur sur une position différente des nombres 10 ou plus. Remplacez cette ligne :
display.setCursor(57, 21);
Avec ça:
int roll = TrueRandom.random(1, 21);
si (jet < 10) {
display.setCursor(57, 21);
}
autre {
display.setCursor(47, 21);
}
Voici à quoi cela ressemble maintenant :
Tout ce qui reste maintenant est l’image lorsque vous lancez un coup dur ou un coup manqué. Il y a quelques étapes impliquées, mais c’est un processus assez simple.
Trouvez la bonne image que vous souhaitez utiliser (le plus simple sera le mieux, puisque le moniteur est uniquement monochrome). Voici l’image que j’utilise :
Source de l’image : publicdomainvectors.org
Toutes les images que vous souhaitez utiliser devront être converties en un tableau HEX. Voici l’image sous forme de code. Il existe de nombreux outils pour ce faire, dont certains sont écrits spécifiquement pour les écrans OLED. Le moyen le plus simple consiste à utiliser l’outil en ligne PicturetoC_Hex. Voici les paramètres requis :
Téléchargez votre image et formatez le code comme Hex : 0x. mettre utilisé pour arriver Noir/blanc pour toutes les fonctions de dessin d’image. Laissez toutes les autres options à leurs valeurs par défaut. Ici, vous pouvez redimensionner l’image si nécessaire.selon obtenir la chaîne C Vous devriez voir apparaître les données de l’image :
Vous aurez besoin de ces données générées dans une minute.Créer deux nommés explosion de peinture et dessiner des crânes (ou quel que soit le nom qui convient à votre version). Voici le code :
void drawExplosion() {
statique const caractère non signé PROGMEM imExp[] =…