Taula de continguts:

ColorCube: 7 passos (amb imatges)
ColorCube: 7 passos (amb imatges)

Vídeo: ColorCube: 7 passos (amb imatges)

Vídeo: ColorCube: 7 passos (amb imatges)
Vídeo: Learn How to Solve a Rubik's Cube in 10 Minutes (Beginner Tutorial) 2024, De novembre
Anonim
Image
Image
ColorCube
ColorCube
ColorCube
ColorCube

Vaig fer aquesta làmpada per a la meva néta quan aprenia colors. Em vaig inspirar en el projecte MagicCube, però finalment vaig crear totes les parts des de zero. És fàcil d’imprimir i fàcil de muntar i obtindreu coneixement del funcionament del mòdul giroscòpic.

Pas 1: materials

Materials
Materials

Part Arduino:

  • Arduino Nano (millor sense passadors de capçalera de soldadura)
  • Mòdul giroscòpic de 3 eixos MPU-6050
  • Mòdul de carregador de bateria Micro USB TP4056
  • MT3608 Step Up Power Booster Module
  • Bateria LiPo 902936 900mA o 503035 3,7V 500mA. Podeu utilitzar qualsevol bateria LiPo de 3, 7V i una mida inferior a 35x30x15mm, però heu de fixar la bateria al forat.
  • El botó autoblocant PS-22F28 o el botó autoblocant PS-22F27 s’adapten perfectament a la peça impresa.
  • Anell LED RGB WS2812B - 16 LED de 68 mm de diàmetre - podeu utilitzar qualsevol anell fins i tot amb un nombre diferent de LED (heu de canviar una constant de codi - #define NUMPIXELS 16) amb un diàmetre màxim de 76 mm (també podeu utilitzar un Neopixel Stick amb 8x LED o qualsevol tira LED amb WS2812b).

Exemples d'anells: 8 LED 32mm12 LED 38mm12 LED 50mm16 LED 60mm24 LED 66 mm16 LED 44mm

Per al muntatge, podeu utilitzar qualsevol dels forats impresos a la part central. Cobreixen gairebé qualsevol opció (no cal tenir l'anell centrat al 100%).

Filferros

Cub

  • Filament PLA per a la part superior del cub: utilitzeu el color blanc perquè la transparència no és bona (els LED són visibles i el color no és suau), la meva recomanació és Prusament Vanilla White
  • Filament PLA per a parts inferiors, mitjanes i de botons: utilitzeu un color fosc perquè alguns mòduls Arduino tenen llums a la part superior i no encaixen amb els colors LED de cubs, la meva recomanació és Prusament Galaxy Black
  • 1 cargol autorroscant M3x5: la longitud (10 mm) i la forma del cap no són crítics: el cargol no és visible
  • 2x cargol autofiletant M2x3: la longitud (5 mm) i la forma del cap no són crítics: els cargols no són visibles

Eines

  • Impressora 3D
  • Multímetre
  • Soldador
  • Tornavís

Pas 2: Impressió

Impressió
Impressió
Impressió
Impressió

Totes les parts de ColorCube van ser dissenyades a Autodesk Fusion360. S'adjunta el fitxer f3d.

El ColorCube s’ha imprès a la impressora Prusa i3 MK3S amb tots els paràmetres predeterminats i no espero els canvis necessaris en diferents impressores. Utilitzeu la vostra configuració preferida per a PLA (si s’imprimeix a PLA, no hi ha cap problema per utilitzar PETG o ASA).

Paràmetres d'impressió 3D:

  • Capa de 0,2 mm (configuració de QUALITAT de 0,2 mm a PrusaSlicer)
  • Configuració del filament PLA de Prusament a PrusaSlicer
  • Omplir un 15%
  • Sense assistència
  • Sense vora

Pas 3: Circuit

Circuit
Circuit

Pas 4: soldar

Soldadura
Soldadura
Soldadura
Soldadura
Soldadura
Soldadura

Advertència: Utilitzeu un multímetre per assegurar-vos que el reforç DC-DC MT3608 produeix 5V. En primer lloc, abans de mesurar, gireu la guarnició en sentit horari fins al final (fent clic). Quan es connecta la tensió (3, 7V) a l'entrada, ha de donar aproximadament el mateix valor. Gireu en sentit contrari a les agulles del rellotge (necessitareu 10-20 girs complets) i, de sobte, augmenteu la tensió. Estableix 5V a la sortida suaument. (foto)

Mireu la part inferior impresa del cub. Cada component té el seu propi forat. Defineix el temps que necessiteu els cables entre cada component (no utilitzeu cables extra llargs, en cas contrari, obtindreu filferro). (foto)

Cables de soldar entre Arduino Nano i anell LED només (3 cables: vermell 5V - 5V, negre GND - GND, blau D6 - DI). Executeu la prova de funcionalitat de l'anell LED des del capítol següent. (foto)

Si tot està bé, continueu afegint Gyro MPU6050 (5 cables: vermell 5V - VCC, negre GND - GND, blau A4 - SDA, verd A5 - SCL, groc D2 - INT). Pengeu el codi ColorCube.ino i proveu-ho (els altres components només són per a la bateria i la càrrega). (foto)

Si tot està bé, afegiu la resta de components. Només hi ha cables vermells (+) i negres (-). Seleccioneu els pins de la dreta al botó de bloqueig automàtic (no connectats quan no es prem). Prova la funcionalitat de la bateria i la càrrega de la bateria. (foto)

Els LED vermells s’encenen al TP4056 quan es carrega i els LED blaus quan estan completament carregats. El forat situat a sobre del TP4056 a la part impresa del mig passa la llum LED a la part superior de ColorCube i podeu reconèixer la fase de càrrega. (foto)

Pas 5: Codi

En primer lloc, heu de descarregar les biblioteques necessàries.

Hi ha instruccions detallades per a la biblioteca Adafruit Neopixel:

Prova de funcionalitat de l'anell LED: podeu provar el vostre circuit amb un exemple inclòs a la biblioteca. Obriu el fitxer des de Fitxer / Exemples / Adafruit NeoPixels / simple i pengeu-lo (no oblideu configurar correctament aquesta línia per nombre de píxels que utilitzeu: #define NUMPIXELS 16).

I2Cdev i MPU6050: descarregueu i descomprimiu el fitxer i2cdevlib-master.zip de https://github.com/jrowberg/i2cdevlib. Copieu la carpeta descomprimida del formulari i2cdevlib-master / Arduino dues subcarpetes: I2Cdev i MPU6050. Tots dos copien a la carpeta de la biblioteca Arduino IDE (Documents / Arduino / biblioteques si s’instal·la per defecte).

No oblideu reiniciar Arduino IDE després de copiar les biblioteques.

#include #ifdef _AVR_ #include // Required for 16 MHz Adafruit Trinket #endif #include "Wire.h" include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" MPU6050 mpu; #define INTERRUPT_PIN 2 // utilitzeu el pin 2 a Arduino Uno i la majoria de taules #define PIN 6 #define NUMPIXELS 16 // Estableix el nombre correcte de LED Adafruit_NeoPixel píxels (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); uint32_t activeColor, oldActiveColor = 0; bool dmpReady = fals; uint8_t mpuIntStatus; uint8_t devStatus; uint16_t packetSize; uint16_t fifoCount; uint8_t fifoBuffer [64]; Quaternió q; Gravetat VectorFloat; rotor de flotació [3]; int x, y, z; bool volàtil mpuInterrupt = fals; void dmpDataReady () {mpuInterrupt = true; } void setup () {Serial.begin (115200); pixels.begin (); pixels.clear (); pixels.setBrightness (128); #if definit (_ AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // unir-se al bus I2C (la biblioteca I2Cdev no ho fa automàticament) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin (); Wire.setClock (400000); // Rellotge I2C de 400 kHz. Comenteu aquesta línia si teniu dificultats de compilació #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire:: setup (400, true); #endif while (! Serial); Serial.println (F ("Inicialització de dispositius I2C …")); mpu.initialize (); pinMode (INTERRUPT_PIN, INPUT); // verificar la connexió Serial.println (F ("Prova de connexions del dispositiu …")); Serial.println (mpu.testConnection ()? F ("connexió MPU6050 correcta"): F ("connexió MPU6050 fallida")); // espera a punt // Serial.println (F ("\ nEnvia qualsevol caràcter per iniciar la programació DMP i la demostració:")); // while (Serial.available () && Serial.read ()); // buid buffer // while (! Serial.available ()); // espera dades // mentre (Serial.available () && Serial.read ()); // buideu de nou el buffer // carregueu i configureu el DMP Serial.println (F ("Inicialització de DMP …")); devStatus = mpu.dmpInitialize (); // proporcioneu aquí les vostres pròpies compensacions giroscòpiques, ajustades per a la sensibilitat mínima mpu.setXGyroOffset (0); mpu.setYGyroOffset (0); mpu.setZGyroOffset (0); mpu.setZAccelOffset (1688); // 1688 per defecte de fàbrica per al meu xip de prova // assegureu-vos que funcionés (retorna 0 si és així) si (devStatus == 0) {// Temps de calibració: genereu compensacions i calibreu el nostre MPU6050 mpu. CalibrateAccel (6); mpu. CalibrateGyro (6); mpu. PrintActiveOffsets (); // activeu el DMP, ara que ja està a punt Serial.println (F ("Activació de DMP …")); mpu.setDMPEnabled (cert); // habilita la detecció d'interrupcions Arduino Serial.print (F ("Activació de la detecció d'interrupcions (interrupció externa Arduino")); Serial.print (digitalPinToInterrupt (INTERRUPT_PIN)); Serial.println (F (") …")); attachInterrupt (digitalPinToInterrupt (INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); // configureu el nostre indicador DMP Ready perquè la funció loop principal () sàpiga que està bé utilitzar-la Serial.println (F ("DMP llest! Esperant la primera interrupció …")); dmpReady = cert; // obtenir la mida esperada del paquet DMP per a una comparació posterior packetSize = mpu.dmpGetFIFOPacketSize (); } else {// ERROR! // 1 = Ha fallat la càrrega inicial de la memòria // 2 = Ha fallat l'actualització de la configuració de DMP // (si es trencarà, normalment el codi serà 1) Serial.print (F ("L'inicialització de DMP ha fallat (codi")); Sèrie. print (devStatus); Serial.println (F (")")); }} void loop () {if (! dmpReady) retorna; if (mpu.dmpGetCurrentFIFOPacket (fifoBuffer)) {// Obtén el paquet més recent // mostra els angles d'Euler en graus mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpGetGravity (& gravetat, & 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 = rotace [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); // Vermell quan es gira cap a un costat} else if (x <-45 && abs (x) <135 && (abs (y) 135)) {activeColor = pixels. Color (0, 255, 0); // Verd quan gireu cap al segon costat} else if (y> 45 && abs (y) <135 && (abs (x) 135)) {activeColor = pixels. Color (255, 255, 0); // Groc quan gireu cap al tercer costat} else if (y <-45 && abs (y) <135 && (abs (x) 135)) {activeColor = pixels. Color (0, 0, 255); // Blau quan gireu cap al quart costat} else if (abs (y)> 135 && abs (x)> 135) {activeColor = pixels. Color (0, 0, 0); // Negre quan està cap per avall} if (activeColor! = OldActiveColor) {pixels.clear (); pixels.fill (activeColor); pixels.show (); oldActiveColor = activeColor; }}

Finalment, podeu obrir i penjar el fitxer ColorCube.ino. Col·loqueu ColorCube de superfície plana i engegueu-lo. No el moveu fins que comenci la llum amb color blanc després del calibratge (pocs segons). A continuació, podeu posar el ColorCube al costat i el color canviarà (cada cara té el seu propi color): vermell, verd, blau, groc. El ColorCube s'apaga quan està capgirat.

Pas 6: Muntatge

Muntatge
Muntatge
Muntatge
Muntatge
Muntatge
Muntatge

Sigues suau durant el muntatge. Els cables i totes les parts no els agrada el comportament aspre.

Part impresa del botó 3d: poseu el botó suaument al forat de la part impresa inferior (tal com es mostra a la imatge), ha d’entrar i sortir sense problemes, si no utilitzeu bisturí o ganivet afilat o paper de sorra per eliminar tot el material sobrant (sobretot a part superior d’un forat circular a la part inferior). (foto)

Col·loqueu MPU-6050, Arduino Nano, TP4056 i MT3608 als seus forats. La caixa té ressalts sota els quals inseriu MPU-6050 i MT3608. Col·loqueu els connectors USB d'Arduino Nano i TP4056 als forats de les parets laterals de la caixa. (foto)

Utilitzeu un pany imprès en 3D per fixar els components (assegureu-vos que tots els components estiguin ben fixats a la part inferior). És important perquè segur que algú intentarà jugar amb el vostre ColorCube com amb els daus. (foto)

Introduïu la bateria i fixeu-la al forat si no es manté ferma.

Poseu el botó autoblocant al forat preparat de la part inferior. El botó autoblocador ha d'estar en posició ON (curt). Premeu suaument el botó cap avall. Funcionalitat de prova amb el botó imprès en 3D. (fotografies)

Utilitzeu dos cargols M2 per fixar l'anell LED a la part impresa del centre. És bo utilitzar l'orientació de l'anell on els contactes de filferro es troben al forat arrodonit de la part impresa del mig. (fotografies)

Opcional: utilitzeu una gota de cola calenta aquí i allà: connexió de cables per sonar, per cables massa llargs, si alguna cosa no està prou ajustada, etc. Pot fer que el vostre ColorCube sigui més durador.

Col·loqueu els cables a l'interior de ColorCube perquè no siguin pessigats per les parts impreses. Poseu la part central a la part inferior. Utilitzeu un cargol M3 per solucionar-lo. (foto)

Finalment, empenyeu suaument la part impresa superior cap a la inferior. (foto)

Pas 7: Fet

Enhorabona. Diverteix-te.

Recomanat: