Índice:
- Etapa 1: Materiais
- Etapa 2: impressão
- Etapa 3: circuito
- Etapa 4: Solda
- Etapa 5: Código
- Etapa 6: montagem
- Etapa 7: Concluído
Vídeo: ColorCube: 7 etapas (com imagens)
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:35
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
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
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
Etapa 4: 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
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:
Howto: Instalando Raspberry PI 4 Headless (VNC) com Rpi-imager e imagens: 7 etapas (com imagens)
Howto: Instalando Raspberry PI 4 Headless (VNC) com Rpi-imager e imagens: Eu pretendo usar este Rapsberry PI em um monte de projetos divertidos em meu blog. Sinta-se à vontade para dar uma olhada. Eu queria voltar a usar meu Raspberry PI, mas não tinha um teclado ou mouse no meu novo local. Já fazia um tempo desde que configurei um Raspberry
Gesture Hawk: robô controlado por gestos manuais usando interface baseada em processamento de imagens: 13 etapas (com imagens)
Gesture Hawk: Robô controlado por gestos manuais usando uma interface baseada em processamento de imagem: Gesture Hawk foi apresentado no TechEvince 4.0 como uma interface homem-máquina baseada em processamento de imagem simples. Sua utilidade reside no fato de que nenhum sensor adicional ou vestível, exceto uma luva, é necessário para controlar o carro robótico que funciona em diferentes
Como desmontar um computador com etapas e imagens fáceis: 13 etapas (com imagens)
Como desmontar um computador com etapas e imagens fáceis: Esta é uma instrução sobre como desmontar um PC. A maioria dos componentes básicos é modular e facilmente removível. No entanto, é importante que você seja organizado sobre isso. Isso ajudará a evitar que você perca peças e também a fazer a remontagem e
Salvando suas imagens para sua tarefa: 4 etapas (com imagens)
Salvando suas imagens para sua tarefa: 1. Abra um novo documento do Google e use esta página para proteger suas imagens.2. Use ctrl (control) e " c " chave para copy.3. Use ctrl (control) e " v " chave para colar
Fazendo imagens sem costura horizontal ou verticalmente apenas (para "The GIMP").: 11 etapas (com imagens)
Fazendo imagens sem costura horizontalmente ou verticalmente apenas (para "The GIMP") .: Se você tentar o plug-in "Make seamless" no GIMP, ele tornará a imagem contínua tanto horizontal quanto verticalmente ao mesmo tempo. Ele não permitirá que você faça isso perfeito em apenas uma dimensão. Este instrutível irá ajudá-lo a fazer ima