Table des matières:

ColorCube : 7 étapes (avec photos)
ColorCube : 7 étapes (avec photos)

Vidéo: ColorCube : 7 étapes (avec photos)

Vidéo: ColorCube : 7 étapes (avec photos)
Vidéo: Comment Résoudre un Rubik's Cube de 3x3 en un Rien de Temps. Le Tutoriel le Plus Simple 2024, Décembre
Anonim
Image
Image
ColorCube
ColorCube
ColorCube
ColorCube

J'ai fait cette lampe pour ma petite-fille quand elle apprenait les couleurs. J'ai été inspiré par le projet MagicCube mais j'ai finalement créé toutes les pièces à partir de zéro. Il est facile à imprimer et à assembler et vous saurez comment fonctionne le module gyroscopique.

Étape 1: Matériaux

Matériaux
Matériaux

Partie Arduino:

  • Arduino Nano (mieux sans broches d'en-tête à souder)
  • Module gyroscope à 3 axes MPU-6050
  • Module chargeur de batterie micro USB TP4056
  • Module d'amplification de puissance MT3608
  • Batterie LiPo 902936 900mA ou 503035 3,7V 500mA. Vous pouvez utiliser n'importe quelle batterie LiPo avec 3, 7V et une taille inférieure à 35x30x15mm mais vous devez fixer la batterie dans le trou.
  • Le bouton autobloquant PS-22F28 ou le bouton autobloquant PS-22F27 s'adaptent parfaitement à la pièce imprimée.
  • Anneau LED RGB WS2812B - 16 LED diamètre extérieur 68 mm - vous pouvez utiliser n'importe quel anneau même avec un nombre différent de LED (vous devez changer une constante dans le code - #define NUMPIXELS 16) avec un diamètre maximum de 76 mm (vous pouvez également utiliser un bâton Neopixel avec 8x LED ou n'importe quelle bande LED avec WS2812b).

Exemples de bagues:8 LED 32 mm12 LED 38 mm12 LED 50 mm16 LED 60 mm24 LED 66 mm16 LED 44 mm

Pour le montage, vous pouvez utiliser l'un des trous imprimés dans la partie centrale. Ils couvrent presque toutes les options (pas nécessaire d'avoir une bague centrée à 100%).

Fils

cube

  • Filament PLA pour la partie supérieure du cube - utilisez la couleur blanche car la transparence n'est pas bonne (les LED sont visibles et la couleur n'est pas lisse), ma recommandation est Prusament Vanilla White
  • Filament PLA pour les parties inférieure, centrale et des boutons - utilisez une couleur foncée car certains modules Arduino ont des lumières sur le dessus et ne correspondent pas aux couleurs des LED cubiques, ma recommandation est Prusament Galaxy Black
  • 1x vis autotaraudeuse M3x5 - La longueur (10 mm) et la forme de la tête ne sont pas critiques - la vis n'est pas visible
  • 2x vis autotaraudeuses M2x3 - La longueur (5 mm) et la forme de la tête ne sont pas critiques - les vis ne sont pas visibles

Outils

  • Imprimante 3D
  • Multimètre
  • Fer à souder
  • Tournevis

Étape 2: Impression

Impression
Impression
Impression
Impression

Toutes les parties de ColorCube ont été conçues dans Autodesk Fusion360. Le fichier f3d est joint.

Le ColorCube a été imprimé sur une imprimante Prusa i3 MK3S avec tous les paramètres par défaut et je ne m'attends à aucun changement nécessaire sur différentes imprimantes. Utilisez vos paramètres préférés pour le PLA (si imprimé sur PLA, pas de problème pour utiliser PETG ou ASA).

Paramètres d'impression 3D:

  • Couche 0,2 mm (paramètres QUALITÉ 0,2 mm sur PrusaSlicer)
  • Paramètres du filament PLA Prusament sur PrusaSlicer
  • Remplissage 15%
  • Pas de support
  • Pas de bord

Étape 3: Circuit

Circuit
Circuit

Étape 4: Souder

Soudure
Soudure
Soudure
Soudure
Soudure
Soudure

Attention: utilisez un multimètre pour vous assurer que le booster DC-DC MT3608 délivre 5V. Tout d'abord - avant de mesurer - tournez la garniture dans le sens des aiguilles d'une montre jusqu'au bout (clic). Lorsque vous connectez la tension (3, 7 V) à l'entrée, elle doit donner à peu près la même valeur. Tournez dans le sens inverse des aiguilles d'une montre (vous aurez besoin de 10 à 20 tours complets) et augmentez soudainement la tension. Réglez 5V sur la sortie doucement. (photo)

Jetez un œil à la partie inférieure imprimée du cube. Chaque composant a son propre trou. Il définit la longueur des fils entre chaque composant dont vous aurez besoin (n'utilisez pas de fils extra-longs sinon vous obtenez une jungle de fils). (photo)

Fils à souder entre Arduino Nano et anneau LED uniquement (3 fils: rouge 5V - 5V, noir GND - GND, bleu D6 - DI). Exécutez le test de fonctionnalité de l'anneau LED du chapitre suivant. (photo)

Si tout va bien, continuez en ajoutant le Gyro MPU6050 (5 fils: rouge 5V - VCC, noir GND - GND, bleu A4 - SDA, vert A5 - SCL, jaune D2 - INT). Téléchargez le code ColorCube.ino et testez (les autres composants sont uniquement destinés à la batterie et à la charge). (photo)

Si tout est OK, ajoutez le reste des composants. Il n'y a que des fils rouges (+) et noirs (-). Sélectionnez les broches de droite sur le bouton autobloquant (non connecté lorsqu'il n'est pas enfoncé). Testez la fonctionnalité sur la batterie et la charge de la batterie. (photo)

La LED rouge s'allume sur le TP4056 lors de la charge et la LED bleue s'allume lorsqu'elle est complètement chargée. Le trou au-dessus du TP4056 dans la partie imprimée centrale fait passer la lumière LED vers la partie supérieure du ColorCube et vous pouvez reconnaître la phase de charge. (photo)

Étape 5: Coder

Tout d'abord, vous devez télécharger les bibliothèques nécessaires.

Il existe des instructions détaillées pour la bibliothèque Adafruit Neopixel:

Test de fonctionnalité de l'anneau LED: Vous pouvez tester votre circuit par exemple inclus dans la bibliothèque. Ouvrez le fichier depuis File/Examples/Adafruit NeoPixels/simple et téléchargez (n'oubliez pas de configurer correctement cette ligne par nombre de pixels que vous utilisez: #define NUMPIXELS 16).

I2Cdev et MPU6050: téléchargez et décompressez le fichier i2cdevlib-master.zip depuis https://github.com/jrowberg/i2cdevlib. Copiez le dossier décompressé i2cdevlib-master/Arduino dans deux sous-dossiers: I2Cdev et MPU6050. Les deux sont copiés dans le dossier de la bibliothèque Arduino IDE (Documents/Arduino/libraries si installation par défaut).

N'oubliez pas de redémarrer Arduino IDE après la copie des bibliothèques.

#include #ifdef _AVR_ #include // Requis pour Adafruit Trinket 16 MHz #endif #include "Wire.h" include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" MPU6050 mpu; #define INTERRUPT_PIN 2 // utilisez la broche 2 sur Arduino Uno et la plupart des cartes #define PIN 6 #define NUMPIXELS 16 // Définissez le nombre correct de LED Adafruit_NeoPixel pixels (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); uint32_t activeColor, oldActiveColor=0; bool dmpReady = false; uint8_t mpuIntStatus; uint8_t devStatus; uint16_t packetSize; uint16_t fifoCount; uint8_t fifoBuffer[64]; quaternion q; Gravité vectorielle flottante; flotteur rotatif[3]; entier x, y, z; volatile bool mpuInterrupt = false; void dmpDataReady() { mpuInterrupt = true; } void setup() { Serial.begin(115200); pixels.begin(); pixels.clear(); pixels.setBrightness (128); #if défini(_AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set(clock_div_1); #endif // rejoindre le bus I2C (la bibliothèque I2Cdev ne le fait pas automatiquement) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin(); Wire.setClock(400000); // Horloge I2C 400 kHz. Commentez cette ligne si vous rencontrez des difficultés de compilation #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire::setup(400, true); #endif while (!Serial); Serial.println(F("Initialisation des périphériques I2C…")); mpu.initialize(); pinMode(INTERRUPT_PIN, INPUT); // vérifier la connexion Serial.println(F("Testing device connections…")); Serial.println(mpu.testConnection() ? F("Connexion MPU6050 réussie"): F("Connexion MPU6050 échouée")); // attendre prêt // Serial.println(F("\nEnvoyer n'importe quel caractère pour commencer la programmation DMP et la démo: ")); // while (Serial.available() && Serial.read()); // tampon vide // while (!Serial.available()); // attend les données // while (Serial.available() && Serial.read()); // vider à nouveau le tampon // charger et configurer le DMP Serial.println(F("Initializing DMP…")); devStatus = mpu.dmpInitialize(); // fournissez vos propres décalages de gyroscope ici, mis à l'échelle pour une sensibilité minimale mpu.setXGyroOffset(0); mpu.setYGyroOffset(0); mpu.setZGyroOffset(0); mpu.setZAccelOffset(1688); // 1688 par défaut d'usine pour ma puce de test // assurez-vous que cela a fonctionné (renvoie 0 si oui) if (devStatus == 0) { // Temps de calibrage: générer des décalages et calibrer notre MPU6050 mpu. CalibrateAccel(6); mpu. CalibrateGyro(6); mpu. PrintActiveOffsets(); // activer le DMP, maintenant qu'il est prêt Serial.println(F("Enabling DMP…")); mpu.setDMPEnabled(true); // activer la détection d'interruption Arduino Serial.print(F("Activation de la détection d'interruption (interruption externe Arduino ")); Serial.print(digitalPinToInterrupt(INTERRUPT_PIN)); Serial.println(F(")…")); attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus(); // définit notre indicateur DMP Ready pour que la fonction principale loop() sache qu'il est possible de l'utiliser Serial.println(F("DMP ready! Waiting for first interrupt…")); dmpReady = vrai; // obtenir la taille de paquet DMP attendue pour une comparaison ultérieure packetSize = mpu.dmpGetFIFOPacketSize(); } else { // ERREUR ! // 1 = échec du chargement initial de la mémoire // 2 = échec des mises à jour de la configuration DMP // (en cas de panne, le code sera généralement 1) Serial.print(F("DMP Initialization failed (code ")); Serial. print(devStatus);Série.println(F(")")); } } void loop() { if (!dmpReady) return; if (mpu.dmpGetCurrentFIFOPacket(fifoBuffer)) { // Obtenir le dernier paquet // afficher les angles d'Euler en degrés mpu.dmpGetQuaternion(&q, fifoBuffer); mpu.dmpGetGravity(&gravity, &q); mpu.dmpGetYawPitchRoll(rotace, &q, &gravity); } Serial.print("X "); Serial.print(rotace[2] * 180/M_PI); Serial.print(" \t Y "); Serial.print(rotace[1] * 180/M_PI); Serial.print(" \t Z "); Serial.println(rotace[0] * 180/M_PI); x=rotace[2] * 180/M_PI; y=rotation[1] * 180/M_PI; z=rotace[0] * 180/M_PI; if(abs(x)<45 && abs(y)45 && abs(x)<135 && (abs(y)135)){ activeColor=pixels. Color(255, 0, 0); //Rouge lorsque vous tournez sur le côté } else if(x<-45 && abs(x)<135 && (abs(y)135)){ activeColor=pixels. Color(0, 255, 0); //Vert lorsque vous tournez vers le deuxième côté } else if(y>45 && abs(y)<135 && (abs(x)135)){ activeColor=pixels. Color(255, 255, 0); //Jaune quand on se tourne vers le troisième côté }else if(y<-45 && abs(y)<135 && (abs(x)135)){ activeColor=pixels. Color(0, 0, 255); //Bleu quand on se tourne vers le quatrième côté }else if(abs(y)>135 && abs(x)>135){ activeColor=pixels. Color(0, 0, 0); // Noir à l'envers } if(activeColor != oldActiveColor){ pixels.clear(); pixels.fill(activeColor); pixels.show(); ancienneCouleurActive=CouleurActive; } }

Enfin, vous pouvez ouvrir et télécharger le fichier ColorCube.ino. Mettez le ColorCube sur une surface plane et allumez-le. Ne le déplacez pas jusqu'à ce qu'il commence à s'allumer avec une couleur blanche après le calibrage (quelques secondes). Ensuite, vous pouvez mettre le ColorCube sur le côté et la couleur changera - chaque côté a sa propre couleur - rouge, vert, bleu, jaune. Le ColorCube s'éteint lorsqu'il est retourné.

Étape 6: Assemblage

Assemblage
Assemblage
Assemblage
Assemblage
Assemblage
Assemblage

Soyez doux lors de l'assemblage. Les fils et toutes les pièces n'aiment pas le comportement brutal.

Pièce imprimée en 3d du bouton - placez doucement le bouton dans le trou de la partie imprimée inférieure (comme indiqué sur l'image), il doit entrer et sortir en douceur, sinon utilisez un scalpel ou un couteau tranchant ou du papier de verre pour enlever tout le surplus de matériau (principalement à l'intérieur sur haut d'un trou circulaire sur la partie inférieure). (photo)

Mettez MPU-6050, Arduino Nano, TP4056 et MT3608 dans leurs trous. La boîte a des saillies sous lesquelles vous insérez MPU-6050 et MT3608. Placez les connecteurs USB de l'Arduino Nano et du TP4056 dans leurs trous dans les parois latérales du boîtier. (photo)

Utilisez une serrure imprimée en 3D pour fixer les composants (assurez-vous que tous les composants reposent fermement sur la partie inférieure). C'est important parce que quelqu'un va sûrement essayer de jouer avec votre ColorCube comme avec des dés. (photo)

Mettez et fixez la batterie dans son trou si elle ne tient pas fermement.

Placez le bouton autobloquant dans le trou préparé dans la partie inférieure. Le bouton autobloquant doit être en position ON (court). Appuyez doucement sur le bouton. Testez la fonctionnalité avec le bouton imprimé en 3D. (Photos)

Utilisez deux vis M2 pour fixer l'anneau LED à la partie imprimée centrale. Il est bon d'utiliser l'orientation de la bague où les contacts des fils sont dans le trou arrondi de la partie imprimée centrale. (Photos)

Facultatif: utilisez une goutte de colle chaude ici et là - connexion des fils à l'anneau, pour les fils trop longs, si quelque chose n'est pas assez serré, etc. Cela peut rendre votre ColorCube plus durable.

Disposez les fils à l'intérieur du ColorCube pour qu'ils ne soient pas pincés par les pièces imprimées. Mettez la partie médiane en bas. Utilisez une vis M3 pour le fixer. (photo)

Enfin, poussez doucement la partie imprimée supérieure vers celle du bas. (photo)

Étape 7: Terminé

Félicitation. S'amuser.

Conseillé: