Tabla de contenido:

ColorCube: 7 pasos (con imágenes)
ColorCube: 7 pasos (con imágenes)

Video: ColorCube: 7 pasos (con imágenes)

Video: ColorCube: 7 pasos (con imágenes)
Video: Introducing the Color Cube! 2024, Diciembre
Anonim
Image
Image
ColorCube
ColorCube
ColorCube
ColorCube

Hice esta lámpara para mi nieta cuando estaba aprendiendo colores. Me inspiré con el proyecto MagicCube pero finalmente creé todas las partes desde cero. Es fácil de imprimir y fácil de montar y obtendrá conocimientos sobre cómo funciona el módulo giroscópico.

Paso 1: Materiales

Materiales
Materiales

Parte de Arduino:

  • Arduino Nano (mejor sin pines de cabezal de soldadura)
  • Módulo giroscópico de 3 ejes MPU-6050
  • Módulo cargador de batería micro USB TP4056
  • Módulo elevador de potencia MT3608 Step Up
  • Batería LiPo 902936 900mA o 503035 3.7V 500mA. Puede usar cualquier batería LiPo con 3, 7V y un tamaño inferior a 35x30x15 mm, pero debe asegurar la batería en el orificio.
  • El botón de autobloqueo PS-22F28 o el botón de autobloqueo PS-22F27 se ajustan perfectamente a la pieza impresa.
  • Anillo LED RGB WS2812B: 16 LED de 68 mm de diámetro exterior: puede usar cualquier anillo incluso con un número diferente de LED (debe cambiar una constante en el código: #define NUMPIXELS 16) con un diámetro máximo de 76 mm (también puede usar un Neopixel Stick con 8x LED o cualquier tira de LED con WS2812b).

Ejemplos de anillos: 8 LED 32 mm 12 LED 38 mm 12 LED 50 mm 16 LED 60 mm 24 LED 66 mm 16 LED 44 mm

Para el montaje puede utilizar cualquiera de los agujeros impresos en la parte central. Cubren casi cualquier opción (no es necesario tener el anillo centrado al 100%).

Alambres

Cubo

  • Filamento PLA para la parte superior del cubo: use color blanco porque la transparencia no es buena (los LED son visibles y el color no es suave), mi recomendación es Prusament Vanilla White
  • Filamento PLA para partes inferiores, medias y de botón: use color oscuro porque algunos módulos Arduino tienen luces en la parte superior y no encajan con los colores de LED de cubo, mi recomendación es Prusament Galaxy Black
  • 1x tornillo autorroscante M3x5: la longitud (10 mm) y la forma de la cabeza no son críticas; el tornillo no es visible
  • 2x tornillos autorroscantes M2x3: la longitud (5 mm) y la forma de la cabeza no son críticas; los tornillos no son visibles

Instrumentos

  • impresora 3d
  • Multímetro
  • Soldador
  • Destornillador

Paso 2: Imprimir

Impresión
Impresión
Impresión
Impresión

Todas las partes de ColorCube se diseñaron en Autodesk Fusion360. Se adjunta un archivo f3d.

El ColorCube se imprimió en la impresora Prusa i3 MK3S con todas las configuraciones predeterminadas y no espero ningún cambio necesario en diferentes impresoras. Use sus configuraciones favoritas para PLA (si está impreso en PLA, no hay problema para usar PETG o ASA).

Parámetros de impresión 3d:

  • Capa de 0,2 mm (ajustes de CALIDAD de 0,2 mm en PrusaSlicer)
  • Configuración del filamento PLA Prusament en PrusaSlicer
  • Relleno 15%
  • Sin soporte
  • Sin ala

Paso 3: circuito

Circuito
Circuito

Paso 4: soldadura

Soldadura
Soldadura
Soldadura
Soldadura
Soldadura
Soldadura

Advertencia: Utilice un multímetro para asegurarse de que el amplificador DC-DC MT3608 emite 5V. En primer lugar, antes de medir, gire el borde en el sentido de las agujas del reloj hasta el final (haciendo clic). Cuando conecte el voltaje (3, 7 V) a la entrada, debe dar aproximadamente el mismo valor. Gire en sentido contrario a las agujas del reloj (necesitará de 10 a 20 vueltas completas) y de repente aumentará el voltaje. Configure 5V en la salida suavemente. (Foto)

Eche un vistazo a la parte inferior impresa del cubo. Cada componente tiene su propio agujero. Define la longitud de cables entre cada componente que necesitará (no use cables extra largos, de lo contrario obtendrá una jungla de cables). (Foto)

Suelde los cables entre Arduino Nano y el anillo LED solamente (3 cables: rojo 5V - 5V, negro GND - GND, azul D6 - DI). Ejecute la prueba de funcionalidad del anillo LED del siguiente capítulo. (Foto)

Si todo está bien, continúe agregando Gyro MPU6050 (5 cables: rojo 5V - VCC, negro GND - GND, azul A4 - SDA, verde A5 - SCL, amarillo D2 - INT). Cargue el código ColorCube.ino y pruebe (otros componentes son solo para batería y carga). (Foto)

Si todo está bien, agregue el resto de componentes. Solo hay cables rojo (+) y negro (-). Seleccione los pines derechos en el botón de autobloqueo (no conectado cuando no está presionado). Pruebe la funcionalidad de la batería y la carga de la batería. (Foto)

El LED rojo se enciende en TP4056 durante la carga y el LED azul se enciende cuando está completamente cargado. El orificio sobre TP4056 en la parte impresa del medio pasa la luz LED a la parte superior de ColorCube y puede reconocer la fase de carga. (Foto)

Paso 5: Código

En primer lugar, debe descargar las bibliotecas necesarias.

Hay instrucciones detalladas para la biblioteca Adafruit Neopixel:

Prueba de funcionalidad del anillo LED: puede probar su circuito con un ejemplo incluido en la biblioteca. Abra el archivo de Archivo / Ejemplos / Adafruit NeoPixels / simple y cárguelo (no olvide configurar correctamente esta línea por el número de píxeles que está usando: #define NUMPIXELS 16).

I2Cdev y MPU6050: descargue y descomprima el archivo i2cdevlib-master.zip de https://github.com/jrowberg/i2cdevlib. Copie el formulario descomprimido de la carpeta i2cdevlib-master / Arduino en dos subcarpetas: I2Cdev y MPU6050. Ambos se copian en la carpeta de la biblioteca Arduino IDE (Documentos / Arduino / bibliotecas si la instalación es predeterminada).

No olvide reiniciar Arduino IDE después de copiar las bibliotecas.

#include #ifdef _AVR_ #include // Requerido para Adafruit Trinket de 16 MHz #endif #include "Wire.h" include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" MPU6050 mpu; #define INTERRUPT_PIN 2 // use el pin 2 en Arduino Uno y la mayoría de las placas #define PIN 6 #define NUMPIXELS 16 // Establezca el número correcto de LEDs Adafruit_NeoPixel píxeles (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); uint32_t activeColor, oldActiveColor = 0; bool dmpReady = falso; uint8_t mpuIntStatus; uint8_t devStatus; uint16_t packetSize; uint16_t FIFoCount; uint8_t FIFoBuffer [64]; Quaternion q; VectorFloat gravity; flotador rotace [3]; int x, y, z; volátil bool mpuInterrupt = false; void dmpDataReady () {mpuInterrupt = verdadero; } configuración vacía () {Serial.begin (115200); pixels.begin (); píxeles.clear (); píxeles.setBrightness (128); #si está definido (_ AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // unirse al bus I2C (la biblioteca I2Cdev no hace esto automáticamente) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin (); Wire.setClock (400000); // Reloj I2C de 400 kHz. Comente esta línea si tiene dificultades de compilación #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire:: setup (400, true); #endif while (! Serial); Serial.println (F ("Inicializando dispositivos I2C …")); mpu.initialize (); pinMode (INTERRUPT_PIN, ENTRADA); // verifica la conexión Serial.println (F ("Probando las conexiones del dispositivo …")); Serial.println (mpu.testConnection ()? F ("Conexión MPU6050 exitosa"): F ("Error de conexión MPU6050")); // espera a que esté listo // Serial.println (F ("\ nEnviar cualquier carácter para comenzar la programación y demostración DMP:")); // while (Serial.available () && Serial.read ()); // búfer vacío // while (! Serial.available ()); // esperar datos // while (Serial.available () && Serial.read ()); // vaciar el búfer de nuevo // cargar y configurar DMP Serial.println (F ("Inicializando DMP…")); devStatus = mpu.dmpInitialize (); // proporcione aquí sus propias compensaciones giroscópicas, escaladas para sensibilidad mínima mpu.setXGyroOffset (0); mpu.setYGyroOffset (0); mpu.setZGyroOffset (0); mpu.setZAccelOffset (1688); // 1688 predeterminado de fábrica para mi chip de prueba // asegúrese de que funcionó (devuelve 0 si es así) if (devStatus == 0) {// Tiempo de calibración: genere compensaciones y calibre nuestro MPU6050 mpu. CalibrateAccel (6); mpu. CalibrateGyro (6); mpu. PrintActiveOffsets (); // enciende el DMP, ahora que está listo Serial.println (F ("Habilitando DMP…")); mpu.setDMPEnabled (verdadero); // habilita la detección de interrupciones de Arduino Serial.print (F ("Habilitando la detección de interrupciones (interrupción externa de Arduino")); Serial.print (digitalPinToInterrupt (INTERRUPT_PIN)); Serial.println (F (")…")); attachInterrupt (digitalPinToInterrupt (INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); // establece nuestro indicador DMP Ready para que la función main loop () sepa que está bien usarlo Serial.println (F ("DMP listo! Esperando la primera interrupción …")); dmpReady = verdadero; // obtener el tamaño de paquete DMP esperado para una comparación posterior packetSize = mpu.dmpGetFIFOPacketSize (); } else {// ¡ERROR! // 1 = falló la carga de memoria inicial // 2 = fallaron las actualizaciones de la configuración DMP // (si se va a romper, normalmente el código será 1) Serial.print (F ("DMP Initialization failed (code")); Serial. print (devStatus); Serial.println (F (")")); }} void loop () {if (! dmpReady) return; if (mpu.dmpGetCurrentFIFOPacket (fifoBuffer)) {// Obtiene el último paquete // muestra los ángulos de Euler en grados mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpGetGravity (& gravedad, & 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); // Rojo cuando se gira hacia el lado} else if (x <-45 && abs (x) <135 && (abs (y) 135)) {activeColor = pixels. Color (0, 255, 0); // Verde cuando pasa al segundo lado} else if (y> 45 && abs (y) <135 && (abs (x) 135)) {activeColor = pixels. Color (255, 255, 0); // Amarillo cuando pasa al tercer lado} else if (y <-45 && abs (y) <135 && (abs (x) 135)) {activeColor = pixels. Color (0, 0, 255); // Azul cuando pasa al cuarto lado} else if (abs (y)> 135 && abs (x)> 135) {activeColor = pixels. Color (0, 0, 0); // Negro cuando está boca abajo} if (activeColor! = OldActiveColor) {pixels.clear (); pixels.fill (activeColor); pixels.show (); oldActiveColor = activeColor; }}

Finalmente, puede abrir y cargar el archivo ColorCube.ino. Coloque ColorCube de superficie plana y enciéndalo. No lo mueva hasta que comience a iluminarse con un color blanco después de la calibración (unos segundos). A continuación, puede colocar el ColorCube a un lado y el color cambiará; cada lado tiene su propio color: rojo, verde, azul, amarillo. El ColorCube se apaga cuando se pone boca abajo.

Paso 6: Montaje

Montaje
Montaje
Montaje
Montaje
Montaje
Montaje

Sea amable durante el montaje. A los cables y todas las partes no les gusta el comportamiento brusco.

Botón de la parte impresa en 3D: coloque suavemente el botón en el orificio de la parte inferior impresa (como se muestra en la imagen), tiene que entrar y salir sin problemas, de lo contrario, use un bisturí o un cuchillo afilado o papel de lija para eliminar todo el material sobrante (principalmente dentro de parte superior de un agujero circular en la parte inferior). (Foto)

Coloque MPU-6050, Arduino Nano, TP4056 y MT3608 en sus agujeros. La caja tiene protuberancias debajo de las cuales inserta MPU-6050 y MT3608. Coloque los conectores USB de Arduino Nano y TP4056 en sus orificios en las paredes laterales de la caja. (Foto)

Utilice un candado impreso en 3D para fijar los componentes (asegúrese de que todos los componentes estén colocados firmemente en la parte inferior). Es importante porque seguramente alguien intentará jugar con su ColorCube como con los dados. (Foto)

Coloque y asegure la batería en su orificio si no se sujeta bien.

Coloque el botón de autobloqueo en el orificio preparado en la parte inferior. El botón de autobloqueo debe estar en posición ON (corto). Presione suavemente el botón. Pruebe la funcionalidad con el botón impreso en 3D. (fotos)

Utilice dos tornillos M2 para fijar el anillo LED a la parte impresa del medio. Es bueno usar la orientación del anillo donde los contactos de los cables están en el orificio redondeado de la parte impresa del medio. (fotos)

Opcional: Use una gota de pegamento caliente aquí y allá: conexión de cables al anillo, para cables demasiado largos, si algo no está lo suficientemente apretado, etc. Puede hacer que su ColorCube sea más duradero.

Disponga los cables dentro de ColorCube para que no queden pellizcados por las piezas impresas. Ponga la parte del medio en la parte inferior. Utilice un tornillo M3 para fijarlo. (Foto)

Finalmente, empuje suavemente la parte superior impresa hacia la inferior. (Foto)

Paso 7: Listo

Enhorabuena. Divertirse.

Recomendado: