Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Secouer les dés Arduino

Composants et fournitures

Arduino Nano R3
× 1
Matrice de points 3 mm 8x8 MAX7219
× 1
Module de basculement et interface numérique
× 1
Interrupteur à glissière
× 1
Module d'alimentation élévateur DC 2A MT3608 2v-24v à 5v/ Convertisseur Boost 9v/12v/28V
× 1

Outils et machines nécessaires

Fer à souder (générique)
Pistolet à colle chaude (générique)

Applications et services en ligne

Arduino IDE
Autodesk Fusion 360

À propos de ce projet

Il y a environ un an mon fils et Je a construit un dés électroniques avec un Arduino et quelques LED. C'est toujours un projet idéal pour les débutants. Nous avons beaucoup appris cette année, il est donc grand temps de faire une mise à jour.

Les dés sont toujours un projet de démarrage parfait. La fonction est claire pour tout le monde et il est facile de comprendre les différents domaines :microcontrôleur, électronique simple et codage.

Version 2.0

Le dé est aussi fantastique, pour aller plus loin :relier d'autres zones.

Aujourd'hui, il existe un composant prêt à l'emploi pour presque tout. Cela se voit mieux lorsque vous recherchez un kit de démarrage pour un Arduino ou un Raspberry Pi. Les composants tels que les LED, les boutons-poussoirs et tout type de capteur sont construits sur une carte de circuit imprimé et peuvent donc être connectés et utilisés avec seulement quelques fils aux GPIO.

Simples, mais suffisantes, les imprimantes 3D sont disponibles sur ebay pour moins de 140 €. Presque toutes les variantes de support, de montage ou de boîtier peuvent être créées avec.

Il existe un certain nombre d'autres possibilités de développer vos propres projets. Un exemple de ceci est notre nouveau dé 2.0.

Capteurs d'inclinaison

Nous implémentons les dés d'une manière complètement différente. A l'intérieur, un Arduino Nano fonctionne pour des raisons d'espace. Il y a toujours un interrupteur marche-arrêt, mais pas de bouton. Le découpage se fait en secouant le cube entier.

À cette fin, des capteurs d'inclinaison ou des capteurs de vibrations sont utilisés. Ils fonctionnent comme un bouton. Dans un tube de verre, une boule se déplace. S'il touche les contacts de connexion, le circuit est fermé. Ce contact, parfois très court, sert de signal.

Le mouvement de la bille métallique peut être assez bien entendu si vous secouez le capteur.

Normalement, la position de montage est décisive pour un capteur d'inclinaison. Il est censé déclencher un signal à une certaine position angulaire. Dans notre cas, cela se produit en secouant le boîtier. Ici, la situation n'est pas si importante, car lorsqu'on secoue dans n'importe quelle direction, un signal est déclenché. Pour plus de sécurité, nous utilisons deux capteurs dans le projet, qui sont disposés décalés de 90 ° l'un par rapport à l'autre. Nous obtenons donc toujours un signal de secousse fiable.

Interruptions

Afin de pouvoir reconnaître le tremblement, les broches d'entrée des capteurs d'inclinaison devraient être interrogées dans le croquis. Cependant, selon le moment où cela se produit et ce que le croquis doit faire d'autre, il est toujours possible qu'un ou plusieurs événements passent inaperçus.

Une meilleure solution consiste à utiliser des interruptions matérielles. Ceci est défini par la fonction attachInterrupt. En tant que paramètre, un sous-programme est spécifié qui doit être appelé sur le signal.

L'Arduino fournit deux interruptions matérielles :les broches D2 et D3.

Affichage

Bien entendu, l'affichage de l'image des dés pourrait à nouveau se faire avec 7 LED individuelles. Mais il est aussi plus intéressant d'utiliser ici un composant fini.

Notre choix pour ce projet s'est beaucoup porté sur une matrice LED 8x8 avec circuit intégré pilote MAX7219. Il prend très peu de place, ne coûte que peu d'argent et est facile à coder.

Selon l'endroit où vous l'achetez, vous devez souder et assembler les pièces détachées. Ce n'est normalement pas un problème. La seule erreur qui peut être commise est de mettre la matrice LED torsadée dans les prises.

Ceci est montré par l'image ci-dessus. Ici, il suffit de retirer délicatement la matrice des prises et de la tourner de 180 °.

Un peu de physique

La matrice LED ne doit pas seulement afficher l'image du dé en conséquence. Il devrait offrir des effets de spectacle. Les six yeux des dés se déplacent sur la matrice :ils rebondissent sur les bords et perdent lentement de la vitesse.

Grâce aux deux capteurs d'inclinaison, nous pouvons voir combien de secousses ont été effectuées. Cette information que nous donnons aux yeux des dés comme "vitesse" pour leur mouvement.

Nous utilisons également un effet similaire lors de l'affichage du résultat des dés. Les yeux roulent de leur position aléatoire à leur position correcte dans l'image du cube.

Alimentation

Tout d'abord, nous avons installé deux piles bouton 3V CR2032 pour des raisons d'espace. Au début, ça avait l'air très bien aussi. L'Arduino et la matrice LED ont joué le jeu et tout a fonctionné. Après quelques minutes de fonctionnement, cependant, l'alimentation des piles bouton tombe en panne.

Si vous éteignez l'Arduino après chaque dé, vous pouvez l'utiliser de cette façon. Ce n'est pas parfait, alors nous installons mieux deux piles AAA. Cependant, ceux-ci ne délivrent ensemble que du 3V. Nous avons donc encore besoin d'un convertisseur élévateur, qui élève la tension à 5V. La connexion a toujours lieu au niveau de la broche VIN de l'Arduino.

Conception du logement

La meilleure option pour un logement approprié est une conception et une production propres via l'impression 3D. Il existe de nombreuses applications pour la construction. Nous avons utilisé Autodesk Fusion 360 pour ce projet. Il a d'excellentes fonctionnalités et l'impression 3D est bien intégrée au logiciel Print Studio. Si vous êtes intéressé par Autodesk Fusion 360, vous trouverez quelques suggestions dans l'article de blog Parametric Enclosures (seulement en allemand).

Notre logement se compose de 3 parties :

  • Majuscule
  • Boîtier inférieur avec support de pile pour piles AAA
  • Couverture en plexiglas (pas nécessairement obligatoire)

La matrice LED est encore plus belle avec un couvercle en plexiglas laiteux devant. Cela rend impossible la reconnaissance des LED éteintes et l'image est plus claire.

Croquis

Pour contrôler la LED Matrix, la bibliothèque LedControl est requise. S'il n'est pas déjà installé, il peut être téléchargé depuis arduino.cc https://playground.arduino.cc/Main/LedControl.

Ensuite, nous faisons les autres définitions de variables. Tout d'abord, nous déterminons comment les yeux des dés sont affichés sur la matrice. Un œil de dés se compose de 4 points LED. Dans le tableau, le coin supérieur gauche est spécifié comme la coordonnée X / Y (-1 signifie en dehors de l'affichage).

int DicePic[8][6][2] ={ … { //1 :{4,4}, /1/1. Punkt {-1,-1}, //2. Punkt {-1,-1}, //3. Punkt {-1,-1}, //4. Punkt {-1,-1}, //5. Punkt {-1,-1} //6. Punkt }, { //2 :{2,2}, /1/1. Punkt {6,6}, //2. Punkt {-1,-1}, //3. Punkt {-1,-1}, //4. Punkt {-1,-1}, //5. Punkt {-1,-1} //6. Punkt }, … 

Bien sûr, tout est possible ici. Laissez courir votre imagination. Il ne doit pas toujours s'agir de l'image oculaire typique.

Vous trouverez d'autres remarques directement dans le code.

Assemblage

Nous mettons notre Arduino sur une barrette de socket, comme une sorte de shield. Les cinq contacts de la matrice LED sont connectés de la même manière. Si l'Arduino est centré, l'espace est mieux utilisé. Par conséquent, il est préférable d'utiliser les broches 5, 6, 7 pour CS, CLK et DIN pour la matrice. Ici, seuls les points de soudure doivent être connectés. La connexion à 5V et GND se fait via un petit cavalier.

Nous connectons également les deux capteurs d'inclinaison avec des fils courts. Ceux-ci sont connectés aux broches 2 et 3 et 5V et GND.

Maintenant, tout peut être assemblé. Le plexiglas est d'abord fixé avec de la colle chaude. Nous faisons de même avec la matrice LED. Une petite pointe de colle chaude suffit.

Ensuite, l'interrupteur marche / arrêt est installé, fixé avec de la colle chaude et connecté aux fils appropriés.

Montage de l'alimentation

L'alimentation est un peu bricolée. Selon les options et les composants dont vous disposez, les contacts pour plus et moins peuvent être ajustés en conséquence.

Nous utilisons les ressorts et les broches d'un compartiment à piles usagé. Pour fixer au fond du boîtier, nous utilisons à nouveau des fils et un peu de colle chaude.

Le convertisseur élévateur de puissance est mieux ajusté à env. 5V avant l'installation. Pour cela, la résistance doit être légèrement tordue.

Ensuite, les majuscules et les minuscules sont assemblées. En raison de l'ajustement de 0,1 mm, l'enfichage sans autre fixation est suffisant. Et ils peuvent toujours s'ouvrir à nouveau pour un changement de batterie.

Et puis c'est fini !

Le plaisir des dés 2.0 peut commencer !

Ce dont vous avez besoin

  • Arduino Nano (ou ESP8266)
  • 2 capteurs d'inclinaison (avec résistances intégrées)
  • Matrice de 8 x 8 LED avec circuit intégré MAX7219, SPC
  • Prise de courant
  • Interrupteur marche/arrêt
  • PCB
  • 2 piles AAA

Plus d'informations

Si vous voulez en savoir plus, consultez notre site Web techpluscode.de/arduino-wuerfel-2-0.

Désolé, ce blog étendu n'est disponible qu'en allemand;-)

Code

  • wuerfel8x8.ino
wuerfel8x8.inoArduino
Code pour le dé secouant
/*Blog-Artikel:Schttel-Wrfel mit LED Matrix und Bewegungssimulationhttps://techpluscode.de/schuettel-wuerfel-mit-led-matrix-und-bewegungssimulation/techpluscode.deCopyright 2019 de Thomas Angielsky *///Bibliothek fr die Ansteuerung der 8x8 LED-Matrix einbinden//Include lib pour la matrice LED 8x8#include "LedControl.h"int PinTiltX =2; //Pin fr Tiltsensor Xint PinTiltY =3; //Pin fr Tiltsensor Y//Pins der LED-Matrix//Pins de la matrice LEDint PinCLK =7; int PinCS =6;int PinDIN =5;LedControl lc =LedControl(PinDIN, PinCLK, PinCS, 1);//Koordinaten der Wrfelaugen in der LED-Matrix//Coordonnées des points Dice dans la matrice LEDint DicePic[8][ 6][2] ={ { //leere Matrix et Startposition :{9,9}, //1. Punkt {9,8}, //2. Punkt {9,7}, //3. Punkt {9,6}, //4. Punkt {9,5}, //5. Punkt {9,4} //6. Punkt }, { //1 :{4,4}, /1/1. Punkt {-1,-1}, //2. Punkt {-1,-1}, //3. Punkt {-1,-1}, //4. Punkt {-1,-1}, //5. Punkt {-1,-1} //6. Punkt }, { //2 :{2,2}, /1/1. Punkt {6,6}, //2. Punkt {-1,-1}, //3. Punkt {-1,-1}, //4. Punkt {-1,-1}, //5. Punkt {-1,-1} //6. Punkt }, { //3 :{2,6}, /1/1. Punkt {6,2}, //2. Punkt {4,4}, //3. Punkt {-1,-1}, //4. Punkt {-1,-1}, //5. Punkt {-1,-1} //6. Punkt }, { //4 :{2,2}, /1/1. Punkt {2,6}, //2. Punkt {6,2}, //3. Punkt {6,6}, //4. Punkt {-1,-1}, //5. Punkt {-1,-1} //6. Punkt }, { //5 :{2,2}, /1/1. Punkt {2,6}, //2. Punkt {6,2}, //3. Punkt {6,6}, //4. Punkt {4,4}, //5. Punkt {-1,-1} //6. Punkt }, { //6 :{2,1}, /1/1. Punkt {2,4}, //2. Punkt {2,7}, //3. Punkt {6,1}, //4. Punkt {6,4}, //5. Punkt {6,7} //6. Punkt }, { //Début :{-1,-1}, /1/1. Punkt {-1,-1}, //2. Punkt {-1,-1}, //3. Punkt {-1,-1}, //4. Punkt {-1,-1}, //5. Punkt {-1,-1} //6. Punkt } };//Variablen der Wrfelaugen:Position, Richtung, Geschwindigkeit fr X und Y//Variables du dé:position, direction, vitesse pour X et Yfloat DiceXpos[6];float DiceXdir[6];octet volatile DiceXspeed[ 6];float DiceYpos[6];float DiceYdir[6];volatile byte DiceYspeed[6];int DiceValue;horodatage long non signé;byte Mode;int volatile shakes;int ShakesPerSecond;int step;void InterruptChecks() { //Schttel -Anzahl zhlen // Count Shakes shakes =shakes+1 ; //Série.println(millis()); timestamp=millis();}void SetSpeedX() { if (Mode==0) { //alle Wrfel in X beschleunigen //Accélérer les dés dans X for (int i =0; i <6; i++) { if (DiceXspeed[i]<255) {DiceXspeed[i]=DiceXspeed[i]+5;} } } InterruptChecks();}void SetSpeedY() { if (Mode==0) { //alle Wrfel in Y beschleunigen / /Accélérer les dés en Y pour (int i =0; i <6; i++) { if (DiceYspeed[i]<255) {DiceYspeed[i]=DiceYspeed[i]+5;} } } InterruptChecks(); }void ShowLed(int x, int y, bool onoff) {//LED nur anzeigen, wenn im sichtbaren Bereich//show only, when x/y in matrix if ((x<8) and (y<8) and ( x>=0) et (y>=0)) { lc.setLed(0, x, y, onoff); }}void ShowDot(int x, int y, bool onoff) {//Wrfel-Auge anzeigen oder ausblenden//Afficher ou masquer le point de dés ShowLed(x-1, y-1, onoff); ShowLed(x, y-1, onoff); ShowLed(x-1, y, onoff); ShowLed(x, y, onoff);}void ShowDicePic(int value) {//Wurf anzeigen//Afficher diceboolean done; //alle Punkte von der aktuellen Position aus zur Zielposition von DiceValue bewegen //déplace tous les points de la position actuelle à la destination de DiceValue for (int i =0; i <6; i++) { DiceXspeed[i]=100; DésYvitesse[i]=100 ; //Werte fr X berechnen //Calc x valeurs DiceXdir[i]=0; if (int(DiceXpos[i])>DicePic[valeur][i][0]) {DiceXdir[i]=-1;} else if (int(DiceXpos[i])DicePic[value][i][1]) {DiceYdir[i]=-1;} else if (int(DiceYpos[i])7) { pos=7; dir=dir*(-1); } si (pos<1) { pos=1; dir=dir*(-1); } } // Geschwindigkeit wird pro Schritt langsamer // La vitesse diminue à chaque pas si (sp>
0) {sp=sp-1;}}void MoveDots() { //alle Wrfel einen Schritt weiter bewegen //déplace les points de dés d'un pas plus loin pour (int i =0; i <6; i++) { //neue Koordinaten berechnen //calculer les nouvelles coordonnées DoStep(DiceXpos[i],DiceXdir[i],DiceXspeed[i],true); DoStep(DiceYpos[i],DiceYdir[i],DiceYspeed[i],true); } //Wrfel-Augen anzeigen //afficher les points de dés lc.clearDisplay(0); for (int i =0; i <6; i++) { ShowDot(int(DiceXpos[i]), int(DiceYpos[i]), true); } } void setup() { //Der MAX7219 ist beim Starten im Power-Saving Modus, //er muss aufgeweckt werden. //Le MAX7219 est en mode d'économie d'énergie au démarrage, //nous devons faire un appel de réveil lc.shutdown(0, false); //Helligkeit auf einen Mittelwert //Réglez la luminosité sur des valeurs moyennes lc.setIntensity(0, 8); //und Display lschen //et efface l'affichage lc.clearDisplay(0); randomSeed(analogRead(0)); ValeurDice=0 ; pour (int i =0; i <6; i++) { DiceXpos[i]=DicePic[7][i][0]; DésYpos[i]=DicePic[7][i][1] ; DiceXdir[i]=aléatoire(3)-1 ; DésYdir[i]=aléatoire(3)-1 ; DiceXspeed[i]=aléatoire(126)+120 ; DésYvitesse[i]=aléatoire(126)+120 ; } //Pins einstellen //Configurer les broches pinMode(PinTiltX, INPUT_PULLUP); pinMode(PinTiltY, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(PinTiltX),SetSpeedX,CHANGE); attachInterrupt(digitalPinToInterrupt(PinTiltY),SetSpeedY,CHANGE); lc.clearDisplay(0) ; horodatage=millis(); Mode=1 ; AfficherDicePic(6) ; retard(1000); lc.clearDisplay(0) ; Mode=0 ; Serial.begin(9600); pas=0; shakes=0;}boucle vide() { delay(50); étape=étape+1 ; if (step>
20) { //1 sek ist vorbei //1 sec is over step=0; ShakesPerSecond=secoue ; secoue=0 ; } if (Mode==0) { MoveDots(); if (millis()-timestamp>
2000) { //seit 2 sec kein Schtteln mehr //il n'y a pas de tremblement depuis 2 sec Mode=1; ValeurDice=aléatoire(6)+1 ; ShowDicePic(DiceValue); } } if (ShakesPerSecond>5) { //Es wird wieder geschttelt //secouant à nouveau Mode=0; }}

Pièces et boîtiers personnalisés

Schémas

C'est mon croquis pour le circuit.

Processus de fabrication

  1. Dés
  2. Switch/Panneau LED avec Arduino pour FS2020
  3. Dés numériques Arduino
  4. Arduino Spybot
  5. FlickMote
  6. Téléviseur maison B-Gone
  7. horloge maîtresse
  8. Jeu Arduino Nano Tetris sur matrice 16x8 maison
  9. Trouvez-moi