Índice:

ColorCube: 7 etapas (com imagens)
ColorCube: 7 etapas (com imagens)

Vídeo: ColorCube: 7 etapas (com imagens)

Vídeo: ColorCube: 7 etapas (com imagens)
Vídeo: How to Solve a 3x3 Rubik's Cube In No Time | The Easiest Tutorial 2024, Dezembro
Anonim
Image
Image
ColorCube
ColorCube
ColorCube
ColorCube

Fiz este abajur para minha neta quando ela estava aprendendo cores. Eu me inspirei no projeto MagicCube, mas finalmente criei todas as partes do zero. É fácil de imprimir e montar e você terá conhecimento de como funciona o módulo giroscópio.

Etapa 1: Materiais

Materiais
Materiais

Parte do Arduino:

  • Arduino Nano (melhor sem pinos de solda)
  • Módulo giroscópio de 3 eixos MPU-6050
  • Módulo carregador de bateria micro USB TP4056
  • Módulo de aumento de potência MT3608
  • Bateria LiPo 902936 900mA ou 503035 3,7 V 500mA. Você pode usar qualquer bateria LiPo com 3, 7V e tamanho menor que 35x30x15mm, mas você deve proteger a bateria no orifício.
  • O botão de travamento automático PS-22F28 ou o botão de travamento automático PS-22F27 se encaixa perfeitamente na parte impressa.
  • Anel LED RGB WS2812B - 16 LED 68 mm de diâmetro externo - você pode usar qualquer anel mesmo com um número diferente de LEDs (tem que alterar uma constante no código - #define NUMPIXELS 16) com diâmetro máximo de 76 mm (você também pode usar um bastão de neopixel com 8x LED ou qualquer faixa de LED com WS2812b).

Exemplos de anéis: 8 LED 32mm12 LED 38mm12 LED 50mm16 LED 60mm24 LED 66 mm16 LED 44mm

Para a montagem você pode usar qualquer um dos furos impressos na parte do meio. Eles cobrem quase todas as opções (não é necessário ter o anel 100% centralizado).

Fios

Cubo

  • Filamento PLA para a parte superior do cubo - use a cor branca porque transparente não é bom (LEDs são visíveis e a cor não é lisa), minha recomendação é Prusament Vanilla White
  • PLA Filament para as partes inferior, intermediária e de botão - use a cor escura porque alguns módulos Arduino têm luzes na parte superior e não se encaixam nas cores dos LEDs do cubo, minha recomendação é Prusament Galaxy Black
  • 1x Parafuso auto-roscante M3x5 - O comprimento (10 mm) e o formato da cabeça não são críticos - o parafuso não é visível
  • 2x Parafuso auto-roscante M2x3 - O comprimento (5 mm) e o formato da cabeça não são críticos - os parafusos não são visíveis

Ferramentas

  • impressora 3d
  • Multímetro
  • Ferro de solda
  • Chave de fenda

Etapa 2: impressão

Impressão
Impressão
Impressão
Impressão

Todas as partes do ColorCube foram projetadas no Autodesk Fusion360. O arquivo f3d está anexado.

O ColorCube foi impresso na impressora Prusa i3 MK3S com todas as configurações padrão e não espero nenhuma mudança necessária em impressoras diferentes. Use suas configurações favoritas para PLA (se impresso em PLA, não há problema em usar PETG ou ASA).

Parâmetros de impressão 3D:

  • Camada de 0,2 mm (configurações de QUALIDADE de 0,2 mm no PrusaSlicer)
  • Configurações do Prusament PLA Filament no PrusaSlicer
  • Infill 15%
  • Sem suporte
  • Sem borda

Etapa 3: circuito

O circuito
O circuito

Etapa 4: Solda

De solda
De solda
De solda
De solda
De solda
De solda

Aviso: Use um multímetro para se certificar de que o Booster DC-DC MT3608 está produzindo 5V. Primeiramente - antes de medir - gire o trim no sentido horário até o fim (clique). Ao conectar a tensão (3, 7 V) à entrada, ela deve fornecer aproximadamente o mesmo valor. Gire no sentido anti-horário (você precisará de 10-20 voltas completas) e de repente a tensão subir. Defina 5 V na saída suavemente. (foto)

Dê uma olhada na parte inferior impressa do cubo. Cada componente tem seu próprio furo. Ele define o comprimento dos fios entre cada componente que você vai precisar (não use fios extralongos, caso contrário, você terá uma confusão de fios). (foto)

Soldar os fios entre o Arduino Nano e o anel LED apenas (3 fios: vermelho 5V - 5V, preto GND - GND, azul D6 - DI). Execute o teste de funcionalidade do anel de LED a partir do próximo capítulo. (foto)

Se tudo estiver OK, continue adicionando Gyro MPU6050 (5 fios: vermelho 5V - VCC, preto GND - GND, azul A4 - SDA, verde A5 - SCL, amarelo D2 - INT). Carregue o código ColorCube.ino e teste (outros componentes são apenas para bateria e carregamento). (foto)

Se estiver tudo bem, adicione o resto dos componentes. Existem apenas fios vermelhos (+) e pretos (-). Selecione os pinos direitos no botão de travamento automático (não conectado quando não pressionado). Teste a funcionalidade da bateria e do carregamento da bateria. (foto)

O LED vermelho acende no TP4056 ao carregar e o LED azul acende quando está totalmente carregado. O orifício acima do TP4056 no meio da parte impressa passa a luz LED para a parte superior do ColorCube e você pode reconhecer a fase de carregamento. (foto)

Etapa 5: Código

Em primeiro lugar, você deve baixar as bibliotecas necessárias.

Existem instruções detalhadas para a biblioteca Adafruit Neopixel:

Teste de funcionalidade do anel de LED: Você pode testar seu circuito por exemplo incluído na biblioteca. Abra o arquivo em Arquivo / Exemplos / Adafruit NeoPixels / simples e faça o upload (não se esqueça de configurar corretamente esta linha pelo número de pixels que você está usando: #define NUMPIXELS 16).

I2Cdev e MPU6050: Baixe e descompacte o arquivo i2cdevlib-master.zip em https://github.com/jrowberg/i2cdevlib. Copie a pasta descompactada i2cdevlib-master / Arduino duas subpastas: I2Cdev e MPU6050. Ambos são copiados para a pasta da biblioteca do Arduino IDE (Documentos / Arduino / bibliotecas se a instalação padrão).

Não se esqueça de reiniciar o Arduino IDE após as bibliotecas copiadas.

#include #ifdef _AVR_ #include // Requerido para 16 MHz Adafruit Trinket #endif #include "Wire.h" include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" MPU6050 mpu; #define INTERRUPT_PIN 2 // use o pino 2 no Arduino Uno e na maioria das placas #define PIN 6 #define NUMPIXELS 16 // Defina o número correto de pixels de LEDs Adafruit_NeoPixel (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; Gravidade VectorFloat; float rotace [3]; int x, y, z; bool volátil mpuInterrupt = false; void dmpDataReady () {mpuInterrupt = true; } void setup () {Serial.begin (115200); pixels.begin (); pixels.clear (); pixels.setBrightness (128); #if definido (_ AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // ingressar no barramento I2C (a biblioteca I2Cdev não faz isso automaticamente) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin (); Wire.setClock (400000); // Clock I2C de 400 kHz. Comente esta linha se estiver tendo dificuldades de compilação #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire:: setup (400, true); #endif while (! Serial); Serial.println (F ("Inicializando dispositivos I2C …")); mpu.initialize (); pinMode (INTERRUPT_PIN, INPUT); // verificar a conexão Serial.println (F ("Testing device connections…")); Serial.println (mpu.testConnection ()? F ("MPU6050 conexão bem-sucedida"): F ("MPU6050 conexão falhou")); // aguardar pronto // Serial.println (F ("\ nEnviar qualquer caractere para iniciar a programação DMP e demonstração:")); // while (Serial.available () && Serial.read ()); // buffer vazio // while (! Serial.available ()); // espera pelos dados // while (Serial.available () && Serial.read ()); // esvaziar o buffer novamente // carregar e configurar o DMP Serial.println (F ("Inicializando DMP…")); devStatus = mpu.dmpInitialize (); // forneça seus próprios offsets de giroscópio aqui, dimensionados para sensibilidade mínima mpu.setXGyroOffset (0); mpu.setYGyroOffset (0); mpu.setZGyroOffset (0); mpu.setZAccelOffset (1688); // 1688 padrão de fábrica para meu chip de teste // certifique-se de que funcionou (retorna 0 em caso afirmativo) if (devStatus == 0) {// Tempo de calibração: gera deslocamentos e calibra nosso MPU6050 mpu. CalibrateAccel (6); mpu. CalibrateGyro (6); mpu. PrintActiveOffsets (); // liga o DMP, agora que está pronto Serial.println (F ("Ativando DMP…")); mpu.setDMPEnabled (true); // habilita a detecção de interrupção do Arduino Serial.print (F ("Habilitando a detecção de interrupção (interrupção externa do Arduino")); Serial.print (digitalPinToInterrupt (INTERRUPT_PIN)); Serial.println (F (")…")); attachInterrupt (digitalPinToInterrupt (INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); // define nosso sinalizador DMP Ready para que a função loop () principal saiba que está tudo bem em usá-lo Serial.println (F ("DMP pronto! Aguardando a primeira interrupção …")); dmpReady = true; // obtém o tamanho do pacote DMP esperado para comparação posterior packetSize = mpu.dmpGetFIFOPacketSize (); } else {// ERROR! // 1 = falha no carregamento inicial da memória // 2 = falha nas atualizações de configuração do DMP // (se houver falha, normalmente o código será 1) Serial.print (F ("Falha na inicialização do DMP (código")); Serial. imprimir (devStatus); Serial.println (F (")")); }} void loop () {if (! dmpReady) return; if (mpu.dmpGetCurrentFIFOPacket (fifoBuffer)) {// Obtenha o pacote mais recente // exibe os ângulos de Euler em graus 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 = rotação [2] * 180 / M_PI; y = rotação [1] * 180 / M_PI; z = rotação [0] * 180 / M_PI; if (abs (x) <45 && abs (y) 45 && abs (x) <135 && (abs (y) 135)) {activeColor = pixels. Color (255, 0, 0); // Vermelho quando virar para o lado} else if (x <-45 && abs (x) <135 && (abs (y) 135)) {activeColor = pixels. Color (0, 255, 0); // Verde quando virar para o segundo lado} else if (y> 45 && abs (y) <135 && (abs (x) 135)) {activeColor = pixels. Color (255, 255, 0); // Amarelo quando virar para o terceiro lado} else if (y <-45 && abs (y) <135 && (abs (x) 135)) {activeColor = pixels. Color (0, 0, 255); // Azul quando virar para o quarto lado} else if (abs (y)> 135 && abs (x)> 135) {activeColor = pixels. Color (0, 0, 0); // Preto quando de cabeça para baixo} if (activeColor! = OldActiveColor) {pixels.clear (); pixels.fill (activeColor); pixels.show (); oldActiveColor = activeColor; }}

Finalmente, você pode abrir e fazer upload do arquivo ColorCube.ino. Coloque o ColorCube de uma superfície plana e ligue-o. Não o mova até que comece a clarear com a cor branca após a calibração (alguns segundos). Em seguida, você pode colocar o ColorCube na lateral e a cor mudará - cada lado tem sua própria cor - vermelho, verde, azul, amarelo. O ColorCube apaga quando é virado de cabeça para baixo.

Etapa 6: montagem

Montagem
Montagem
Montagem
Montagem
Montagem
Montagem

Seja gentil durante a montagem. Fios e todas as peças não gostam de comportamento áspero.

Parte impressa do botão 3d - coloque o botão suavemente no orifício na parte inferior da parte impressa (como mostrado na imagem), ele deve entrar e sair suavemente, se não usar bisturi ou faca afiada ou lixa para remover todo o material excedente (principalmente dentro em topo de um orifício circular na parte inferior). (foto)

Coloque MPU-6050, Arduino Nano, TP4056 e MT3608 em seus orifícios. A caixa tem saliências sob as quais você insere MPU-6050 e MT3608. Coloque os conectores USB do Arduino Nano e TP4056 em seus orifícios nas paredes laterais da caixa. (foto)

Use a trava impressa em 3D para fixar os componentes (certifique-se de que todos os componentes estejam bem firmes na parte inferior). É importante porque alguém certamente tentará jogar com seu ColorCube como com dados. (foto)

Coloque e fixe a bateria em seu orifício se ela não estiver bem presa.

Coloque o botão de travamento automático no orifício preparado na parte inferior. O botão de travamento automático deve estar na posição LIGADO (curto). Pressione suavemente o botão para baixo. Teste a funcionalidade com o botão impresso em 3D. (fotos)

Use dois parafusos M2 para fixar o anel de LED na parte impressa do meio. É bom usar a orientação do anel onde os contatos dos fios ficam no orifício arredondado da parte impressa do meio. (fotos)

Opcional: use uma gota de cola quente aqui e ali - conexão dos fios ao anel, para fios muito longos, se algo não estiver apertado o suficiente etc. Isso pode tornar seu ColorCube mais durável.

Organize os fios dentro do ColorCube para não serem amassados pelas peças impressas. Coloque a parte do meio na parte inferior. Use o parafuso M3 para consertá-lo. (foto)

Por fim, empurre suavemente a parte superior impressa para a inferior. (foto)

Etapa 7: Concluído

Parabéns. Divirta-se.

Recomendado: