Les jeux de société sont l'un des plus anciens divertissements qui réunissent des amis, des familles et seulement des amateurs de communication en direct et d'émotions autour du jeu.
Aujourd'hui, je veux vous dire comment mon ami et moi avons décidé de créer notre propre jeu de société, mais pas simple, mais
«intelligent» .

La deuxième partie se trouve ici:
lienAttention! Beaucoup de photos dessus.
Notre jeu est un plateau
MoBA dans lequel chaque joueur contrôle son propre héros unique, avec ses propres caractéristiques et capacités. Pour le moment, nous avons la première version du prototype en Arduino et contreplaqué.
La principale caractéristique de notre jeu est qu'il n'est pas nécessaire de toucher les personnages pendant le jeu, le jeu lui-même doit les déplacer et afficher toutes les capacités appliquées. Le joueur ne peut regarder et contrôler son héros qu'à partir d'un téléphone mobile.
Plusieurs gifs de gameplay Qu'est-ce qu'un jeu intelligent devrait être capable de faire:
- Déplacez vous-même les personnages sur le terrain.
- Mettez en surbrillance le terrain de jeu (en entier ou dans un bloc séparé) avec n'importe quelle couleur.
- Montrez au joueur ce qu'il peut / ne peut / ne doit pas faire, rendant ainsi les règles du jeu transparentes.
- Échangez des données avec le smartphone de chaque joueur.
Voici à quoi ressemble notre première version réalisable:

Comment est née l'idée
D'une certaine manière, je me suis acheté le bureau Arkham Horror. Après le magasin, je suis immédiatement allé voir mes amis pour jouer. Cependant, malheureusement, aucun d'entre nous ne l'avait joué auparavant, et nous n'avons pas pu maîtriser 26 pages du règlement.
C'est ce qui m'a fait penser que ce serait génial de faire un jeu de société qui surveillerait indépendamment la mise en œuvre des règles, calculerait les valeurs nécessaires (sans cubes, règles et feuille de papier écrite), etc.
Un de mes amis a beaucoup aimé l'idée et il a accepté de participer.
Implémentation
Nous n'avions aucune expérience dans le développement de périphériques matériels (aucun d'entre nous ne tenait même Arduino entre nos mains), et l'expérience de programmation était limitée à l'université et au développement de petites applications pour Android. Cependant, cela n'a fait qu'ajouter l'intérêt et le désir.
Après avoir discuté de tous les détails, nous sommes arrivés à ce qui suit:
- CoreXY déplace les chiffres à travers le champ, avec un solénoïde 12V situé sur son chariot.
- Deux moteurs pas à pas Nema 17 17HS4401 et des pilotes DRV8825 sont responsables du mouvement.
- Une bande LED avec adressage de pixels WS2812b est utilisée pour mettre en évidence le champ.
- L'Arduino Mega 2560, sur lequel le bouclier développé par nos soins, est installé, est responsable de la gestion.
- Pour le transfert de données entre le jeu et les smartphones des joueurs, 4 modules HM10 BLE sont responsables.
- Tout cela est alimenté par une alimentation 12V, une alimentation 120W et un convertisseur DC-DC 5V.
- Du côté du smartphone se trouve une application mobile (actuellement sous Android), qui est en fait le cœur de tout le jeu. A partir de là sur BLE, il y a des commandes sur le mouvement, un aimant marche / arrêt et des LED.
La mécanique
Nous ne sommes pas venus directement sur CoreXY. Au tout début, lors de la mise en œuvre de la cinématique, nous nous sommes inspirés de différents guides de bricolage pour l'assemblage d'imprimantes 3D.
Ci-dessous, une photo de notre toute première tentative:
Pour créer les composants, nous avons acheté une imprimante 3D d'occasion bon marché, sur laquelle 6200 mètres de plastique étaient déjà imprimés et qui fonctionne parfaitement à ce jour.
Cependant, cette option avait un tas d'inconvénients:
- L'assemblage a été douloureux - la moindre inexactitude dans l'emplacement des puits - la voiture a cessé de rouler.
- Au moins un mauvais roulement - le chariot a cessé de rouler.
- Hauteur trop élevée de toute la structure.
- Nous n'aimions pas l'idée que le moteur soit placé sur une pièce mobile.
À un moment donné, nous sommes tombés sur un article décrivant la cinématique CoreXY et avons décidé de la choisir. Elle a les deux avantages:
- L'assemblage est simple car toutes les pièces «personnalisées» sont créées sur CNC ou imprimante 3D.
- Faible hauteur de construction, limitée par la hauteur du moteur pas à pas.
- Les moteurs pas à pas sont immobiles.
Donc les inconvénients:
- Grandes tailles. L'image avec le modèle 3D montre que la surface totale est beaucoup plus grande que la surface de la surface de travail.
- Longues bretelles que vous devez réussir à enfiler.
- Une manière spécifique de déplacer le chariot, dont je parlerai ci-dessous.
Afin d'éviter tous les problèmes au maximum, nous avons fabriqué notre modèle à Tinkercad, après quoi nous avons commencé à commander et à imprimer des composants.

Le jeu possède actuellement les paramètres physiques suivants:
Largeur: 780 mm
Longueur: 700 mm
Hauteur: 85 mm
Le terrain de jeu: un carré d'un côté de 462 mm.
Base: contreplaqué de 12 mm d'épaisseur, avec des trous découpés sur CNC pour le montage des pièces et des moteurs.

Quand le modèle était prêt, il semblait miniature et léger ... Cependant, en direct il est très gros et lourd. Nous comprenons maintenant que toute la structure doit être optimisée:
- Remplacez le contreplaqué par un matériau plus léger et plus mince.
- La longueur et la largeur du contour extérieur ne doivent pas dépasser largement la taille du terrain de jeu (vous devrez peut-être modifier la cinématique).
Ci-dessous, je décrirai les fonctionnalités que nous avons rencontrées lors de l'assemblage:
- Pour garantir que le mouvement du contour intérieur et du chariot soit fluide et sans bruits parasites, il est important que les courroies soient parallèles aux arbres. Il est également conseillé de lubrifier les arbres. Nous avons utilisé de l'huile ordinaire pour les machines à coudre.
- Au début, nous utilisions le LM8UU de l'oncle Liao comme roulements linéaires, mais nous rencontrions souvent des échantillons défectueux qui étaient desserrés, instantanément émiettés et rayés de l'arbre. Par conséquent, ils ont décidé de les échanger contre des bagues en graphite.
- Il existe certaines fonctionnalités en mouvement à l'aide de la cinématique CoreXY. Donc, si nous démarrons seulement 1 moteur pas à pas, le chariot se déplacera en diagonale. Pour un mouvement horizontal, il est nécessaire de démarrer les moteurs dans le même sens. Pour vertical - dans des directions opposées.
Pour calculer la distance le long de X et Y, vous devez utiliser les formules suivantes:
Terrain de jeu
Pour mettre en évidence le terrain de jeu, nous avons choisi la bande LED avec adressage de pixels WS2812b, ce qui est parfait pour nos besoins.
Le WS2812b est une LED RGB dans un boîtier SMD5050 à 4 broches: VDD, VSS, DIN et DOUT.
Quelles sont les exigences pour le domaine:
- Petite épaisseur pour que l'électro-aimant puisse faire glisser la figure avec elle.
- Une surface lisse sur laquelle le glissement se fera sans problème.
En conséquence, le terrain de jeu se compose conditionnellement de 3 parties: le substrat, sur lequel la bande LED est fixée, le ruban lui-même et le revêtement de surface sur lequel glissent les personnages.
Le principal problème auquel nous sommes confrontés est de quoi fabriquer le substrat?
Actuellement, nous utilisons du plexiglas, dans lequel les creux sous le ruban ont été découpés sur une CNC à une profondeur de 2 mm (la hauteur du ruban et de la LED). Naturellement, cette feuille a complètement perdu au moins une certaine rigidité et se courbe fortement le long des lignes de coupe. Nous avons donc simplement collé le substrat à la surface. Peut-être que dans la prochaine version, nous remplacerons le plexiglas par du polycarbonate monolithique.

En tant que surface, tout a également été sélectionné comme Plexiglas, qui était posé sur moi après réparation sur un balcon, 4 mm d'épaisseur, de couleur laiteuse, avec de bons taux de dispersion.
En conséquence, après s'être assis le soir avec un fer à souder, nous avons obtenu ce qui suit:

Il existe des bandes avec différentes densités de LED. Il est généralement de 144, 90, 60, 30 par mètre. Nous nous sommes arrêtés sur une bande avec 30 LED par mètre, car En utilisant une bande avec une densité de LED plus élevée - il est difficile de déplacer les chiffres sans collision et la puissance requise pour les aliments augmente.
Il convient de noter que les LED sont connectées en série. Par conséquent, si votre première LED s'éteint, le reste ne fonctionnera pas.
Notre champ a une taille de 14 * 14 cellules, soit un total de 196 pixels. La bande fonctionne à une tension de 5V. Un pixel de la bande se compose de 3 LED - R, G, B, chacune consommant 20 mA à une luminosité maximale. Il est facile de calculer que si nous voulons éclairer les 196 pixels en blanc, il nous faut presque 12 A ...
Trouver une alimentation compacte ou un convertisseur DC-DC qui peut produire un tel courant à 5V est très problématique. Par conséquent, nous avons décidé que dans notre jeu, le champ ne devrait pas être rempli à plus de 60% et n'utilisait pas la couleur blanc / gris (la couleur à laquelle les 3 LED s'allument), c'est-à-dire maximum 40 mA par pixel. En conséquence, nous obtenons que la table ne doit pas consommer plus de 5 A.
J'ai souvent vu une recommandation selon laquelle il est nécessaire d'alimenter la bande des deux côtés afin qu'il n'y ait pas de perte de tension. Mais nous nous connectons à la bande d'une part, toutes les 100 LED, et nous n'observons pas de baisses de tension visibles.
Électronique
La gestion de toutes les parties du jeu se fait à l'aide de l'Arduino Mega 2560. Les fonctions suivantes lui sont attribuées:
- Effectuez un étalonnage, à la suite duquel nous découvrons combien de pas un moteur pas à pas doit prendre pour surmonter 1 cellule.
- Recevez les commandes et les données de l'application mobile et renvoyez l'état d'exécution à BLE.
- Déplacez le chariot du point A au point B en fonction des coordonnées des données reçues de l'application mobile.
- Allumez / éteignez l'électro-aimant.
- Allumez un pixel spécifique sur une table avec une couleur spécifique. Le nombre de pixels et la couleur sont transmis par l'application mobile.
Le premier prototype a été assemblé sur une planche à pain et comprenait les composants suivants:
- Arduino Mega 2560;
- 2 moteurs pas à pas DRV8825;
- 4 interrupteurs de fin de course;
- Module BLE HM-10;
- Transistor IRF530N - pour contrôler un électro-aimant;
- PSU MeanWell 12V 10A;
- Abaissement du convertisseur DC-DC MeanWell de 12V à 5V, 10A;

Après nous être assurés que tout fonctionne, nous avons décidé que nous devions faire notre bouclier pour l'Arduino Mega et enfin nous débarrasser du câblage et d'un tas de fils.
Faute d'expérience dans le développement de logiciels, nous avons décidé de confier cette activité à un professionnel. En conséquence, un de nos amis a entièrement développé la carte et installé tous les composants. Le résultat peut être vu ci-dessous:

Je ne peux pas juger de la qualité d'exécution par manque d'expérience, mais la planche fonctionne parfaitement. Vous pouvez voir le schéma de circuit
ici .
Application mobile
L'application mobile est le cerveau de notre jeu. C'est l'application qui contient toutes les informations sur l'état du jeu, les personnages, etc. Anroid a été choisi comme plate-forme de développement, la principale exigence étant le support BLE (car à l'avenir, il est prévu d'ajouter une version du jeu pour iOS).
Contrairement à l'électronique, nous avions peu d'expérience dans le développement d'applications mobiles, nous avions donc prévu de terminer cette étape assez rapidement. Cependant, comme d'habitude, tout ne s'est pas déroulé comme prévu.

Nous nous sommes vite rendu compte qu'il nous faudrait en fait écrire un jeu mobile à part entière dans lequel le moyen d'afficher des informations n'est pas seulement l'écran d'un téléphone mobile, mais aussi la surface d'un jeu de société.
La fonctionnalité principale de l'application actuelle:
- Recherche d'appareils BLE, identification d'un appareil approprié pour la connexion. L'identification comprend une «poignée de main» - le téléphone doit s'assurer que l'appareil connecté est bien un module Bluetooth d'un jeu de société et non un téléviseur.
- Le choix des joueurs (au moins 2) parmi les héros disponibles, dont il y en a actuellement 4.
- Fournir toutes les informations nécessaires au joueur actuel: sur les capacités disponibles, sur leurs temps de recharge , sur les adversaires, etc.
- Faire des mouvements - chaque joueur contrôle ses mouvements à l'aide d'un «joystick», avec lequel il sélectionne les cellules pour appliquer les capacités, se déplacer, etc.
Nous n'avons pas un sens de la beauté, ainsi que les concepteurs UX / UI familiers, nous avons donc fait le design nous-mêmes comme nous le pouvions. À l'avenir, nous prévoyons d'ajouter un ENT, une description, ainsi qu'un mode
PVE dans lequel les joueurs se battront contre des boss dans l'arène.
Résultat
Pour le moment, nous avons un prototype entièrement fonctionnel auquel vous pouvez jouer (quoique sur 1 smartphone), et sur lequel nous peaufinons les règles et la mécanique du jeu. Nous avons passé environ un an à le créer, à travailler le week-end et les rares soirs quand il y avait du temps libre.
Nous avons un plan ambitieux: trouver des personnes partageant les mêmes idées, finaliser le prototype, «lécher» complètement l'équilibre et les règles du jeu et essayer d'aller sur
Kickstarter , comme ce sera juste une expérience fantastique.
Si cela sera intéressant, alors dans le prochain article, je vous en dirai plus sur l'application mobile, le jeu lui-même, comment nous avons fabriqué nos miniatures et ce qui en est ressorti.