Sommario:
- Passaggio 1: materiali
- Passaggio 2: stampa
- Passaggio 3: circuito
- Passaggio 4: saldatura
- Passaggio 5: codice
- Passaggio 6: Assemblaggio
- Passaggio 7: fatto
Video: ColorCube: 7 passaggi (con immagini)
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:01
Ho realizzato questa lampada per mia nipote quando stava imparando i colori. Sono stato ispirato dal progetto MagicCube ma alla fine ho creato tutte le parti da zero. È facile da stampare e da assemblare e imparerai come funziona il modulo giroscopico.
Passaggio 1: materiali
parte Arduino:
- Arduino Nano (meglio senza pin di intestazione a saldare)
- Modulo giroscopico a 3 assi MPU-6050
- Modulo caricabatteria micro USB TP4056
- MT3608 Modulo amplificatore di potenza potenziato
- Batteria LiPo 902936 900 mA o 503035 3,7 V 500 mA. Puoi usare qualsiasi batteria LiPo con 3, 7V e dimensioni inferiori a 35x30x15mm ma devi fissare la batteria nel foro.
- Il pulsante autobloccante PS-22F28 o il pulsante autobloccante PS-22F27 si adatta perfettamente alla parte stampata.
- Anello LED RGB WS2812B – 16 LED diametro esterno 68mm - puoi usare qualsiasi anello anche con un numero diverso di LED (devi cambiare una costante nel codice – #define NUMPIXELS 16) con diametro massimo di 76 mm (puoi anche usare un Neopixel Stick con 8x LED o qualsiasi striscia LED con WS2812b).
Esempi di anelli:8 LED 32mm12 LED 38mm12 LED 50mm16 LED 60mm24 LED 66 mm16 LED 44mm
Per il montaggio è possibile utilizzare uno qualsiasi dei fori stampati nella parte centrale. Coprono quasi tutte le opzioni (non è necessario avere l'anello centrato al 100%).
fili
Cubo
- Filamento PLA per la parte superiore del cubo: usa il colore bianco perché il trasparente non è buono (i LED sono visibili e il colore non è uniforme), il mio consiglio è Prusament Vanilla White
- Filamento PLA per le parti inferiore, centrale e dei pulsanti: usa il colore scuro perché alcuni moduli Arduino hanno luci nella parte superiore e non si adatta ai colori dei LED a cubo, la mia raccomandazione è Prusament Galaxy Black
- 1x vite autofilettante M3x5 - La lunghezza (10 mm) e la forma della testa non sono critiche - la vite non è visibile
- 2x Vite autofilettante M2x3 - La lunghezza (5 mm) e la forma della testa non sono critiche - le viti non sono visibili
Utensili
- stampante 3d
- Multimetro
- Saldatore
- Cacciavite
Passaggio 2: stampa
Tutte le parti di ColorCube sono state progettate in Autodesk Fusion360. Il file f3d è allegato.
Il ColorCube è stato stampato sulla stampante Prusa i3 MK3S con tutte le impostazioni predefinite e non mi aspetto modifiche necessarie su stampanti diverse. Usa le tue impostazioni preferite per il PLA (se stampato su PLA, nessun problema con PETG o ASA).
Parametri di stampa 3D:
- Strato 0,2 mm (impostazioni di QUALITÀ 0,2 mm su PrusaSlicer)
- Impostazioni del filamento PLA Prusament su PrusaSlicer
- riempimento 15%
- Nessun supporto
- senza falda
Passaggio 3: circuito
Passaggio 4: saldatura
Avvertenza: utilizzare un multimetro per assicurarsi che il booster DC-DC MT3608 emetta 5V. Per prima cosa, prima di misurare, ruotare il trim in senso orario fino alla fine (click). Quando si collega la tensione (3, 7V) all'ingresso deve dare circa lo stesso valore. Ruota in senso antiorario (avrai bisogno di 10-20 giri completi) e improvvisamente la tensione aumenta. Impostare 5V in uscita dolcemente. (foto)
Dai un'occhiata alla parte inferiore stampata del cubo. Ogni componente ha il suo buco. Definisce la lunghezza dei fili tra ciascun componente di cui avrai bisogno (non utilizzare fili extra lunghi altrimenti otterrai una giungla di fili). (foto)
Fili di saldatura solo tra Arduino Nano e anello LED (3 fili: rosso 5V - 5V, nero GND – GND, blu D6 - DI). Eseguire il test di funzionalità dell'anello LED dal capitolo successivo. (foto)
Se tutto è a posto, continuare con l'aggiunta del Gyro MPU6050 (5 fili: rosso 5V - VCC, nero GND - GND, blu A4 - SDA, verde A5 – SCL, giallo D2 - INT). Carica il codice ColorCube.ino e prova (gli altri componenti sono solo per la batteria e la ricarica). (foto)
Se tutto OK aggiungi il resto dei componenti. Ci sono solo fili rosso (+) e nero (-). Selezionare i pin di destra sul pulsante autobloccante (non connesso se non premuto). Funzionalità di test sulla batteria e sulla ricarica della batteria. (foto)
Il LED rosso si accende su TP4056 durante la ricarica e il LED blu si accende quando è completamente carico. Il foro sopra TP4056 nella parte centrale stampata passa la luce LED alla parte superiore di ColorCube e puoi riconoscere la fase di ricarica. (foto)
Passaggio 5: codice
Per prima cosa devi scaricare le librerie necessarie.
Ci sono istruzioni dettagliate per la libreria Adafruit Neopixel:
Test di funzionalità dell'anello LED: puoi testare il tuo circuito con l'esempio incluso nella libreria. Apri il file da File/Esempi/Adafruit NeoPixels/simple e carica (non dimenticare di impostare correttamente questa riga per numero di pixel che stai utilizzando: #define NUMPIXELS 16).
I2Cdev e MPU6050: scarica e decomprimi il file i2cdevlib-master.zip da https://github.com/jrowberg/i2cdevlib. Copia dalla cartella decompressa i2cdevlib-master/Arduino due sottocartelle: I2Cdev e MPU6050. Entrambi copiano nella cartella della libreria IDE di Arduino (Documents/Arduino/libraries se l'installazione è predefinita).
Non dimenticare di riavviare Arduino IDE dopo aver copiato le librerie.
#include #ifdef _AVR_ #include // Richiesto per Adafruit Trinket a 16 MHz #endif #include "Wire.h" include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" MPU6050 mpu; #define INTERRUPT_PIN 2 // usa il pin 2 su Arduino Uno e sulla maggior parte delle schede #define PIN 6 #define NUMPIXELS 16 //Imposta il numero corretto di LED Adafruit_NeoPixel pixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); uint32_t activeColor, oldActiveColor=0; bool dmpReady = false; uint8_t mpuIntStatus; uint8_t devStatus; uint16_t dimensione pacchetto; uint16_t fifoCount; uint8_t fifoBuffer[64]; Quaternione q; VettoreGravità flottante; rotazione del galleggiante[3]; int x, y, z; volatile bool mpuInterrupt = false; void dmpDataReady() { mpuInterrupt = true; } void setup() { Serial.begin(115200); pixel.begin(); pixel.clear(); pixel.setLuminosità (128); #se definito(_AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set(clock_div_1); #endif // entra nel bus I2C (la libreria I2Cdev non lo fa automaticamente) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin(); Wire.setClock(400000); // Orologio I2C a 400kHz. Commenta questa riga se hai difficoltà di compilazione #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire::setup(400, true); #endif while (!Serial); Serial.println(F("Inizializzazione dispositivi I2C…")); mpu.initialize(); pinMode(INTERRUPT_PIN, INPUT); // verifica connessione Serial.println(F("Verifica connessioni dispositivo…")); Serial.println(mpu.testConnection() ? F("Connessione MPU6050 riuscita"): F("Connessione MPU6050 non riuscita")); // attendi pronto // Serial.println(F("\nInvia qualsiasi carattere per iniziare la programmazione DMP e la demo: ")); // while (Serial.available() && Serial.read()); // buffer vuoto // while (!Serial.available()); // attendi i dati // while (Serial.available() && Serial.read()); // svuota nuovamente il buffer // carica e configura la DMP Serial.println(F("Inizializzazione DMP…")); devStatus = mpu.dmpInitialize(); // fornisci qui i tuoi offset giroscopici, scalati per la sensibilità minima mpu.setXGyroOffset(0); mpu.setYGyroOffset(0); mpu.setZGyroOffset(0); mpu.setZAccelOffset(1688); // 1688 default di fabbrica per il mio chip di prova // assicurati che abbia funzionato (restituisce 0 in caso affermativo) if (devStatus == 0) { // Calibration Time: genera offset e calibra il nostro MPU6050 mpu. CalibrateAccel(6); mpu. CalibrateGyro(6); mpu. PrintActiveOffsets(); // attiva il DMP, ora che è pronto Serial.println(F("Abilitazione DMP…")); mpu.setDMPEnabled(true); // abilita il rilevamento degli interrupt di Arduino Serial.print(F("Abilitazione del rilevamento degli interrupt (Arduino external interrupt ")); Serial.print(digitalPinToInterrupt(INTERRUPT_PIN)); Serial.println(F(")…")); attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus(); // imposta il nostro flag DMP Ready in modo che la funzione main loop() sappia che va bene usarlo Serial.println(F("DMP ready! Waiting for first interrupt…")); dmpReady = vero; // ottiene la dimensione del pacchetto DMP prevista per un confronto successivo packetSize = mpu.dmpGetFIFOPacketSize(); } else { // ERRORE! // 1 = caricamento della memoria iniziale non riuscito // 2 = aggiornamenti della configurazione DMP non riusciti // (se si interrompe, di solito il codice sarà 1) Serial.print(F("Inizializzazione DMP non riuscita (codice ")); Serial. print(devStatus); Serial.println(F(")")); } } void loop() { if (!dmpReady) return; if (mpu.dmpGetCurrentFIFOPacket(fifoBuffer)) { // Ottieni l'ultimo pacchetto // visualizza gli angoli di Eulero in gradi mpu.dmpGetQuaternion(&q, fifoBuffer); mpu.dmpGetGravity(&gravity, &q); mpu.dmpGetYawPitchRoll(rotazione, &q, &gravità); } Serial.print("X "); Serial.print(rotazione[2] * 180/M_PI); Serial.print(" \t Y "); Serial.print(rotazione[1] * 180/M_PI); Serial.print("\tZ"); Serial.println(rotace[0] * 180/M_PI); x=ruota[2] * 180/M_PI; y=ruota[1] * 180/M_PI; z=ruota[0] * 180/M_PI; if(abs(x)<45 && abs(y)45 && abs(x)<135 && (abs(y)135)){ activeColor=pixels. Color(255, 0, 0); //Rosso quando si gira di lato }else if(x<-45 && abs(x)<135 && (abs(y)135)){ activeColor=pixels. Color(0, 255, 0); //Verde quando si passa al secondo lato }else if(y>45 && abs(y)<135 && (abs(x)135)){ activeColor=pixels. Color(255, 255, 0); //Giallo quando si passa al terzo lato }else if(y<-45 && abs(y)<135 && (abs(x)135)){ activeColor=pixels. Color(0, 0, 255); //Blu quando si passa al quarto lato }else if(abs(y)>135 && abs(x)>135){ activeColor=pixels. Color(0, 0, 0); // Nero quando capovolto } if(activeColor != oldActiveColor){ pixels.clear(); pixels.fill(activeColor); pixel.mostra(); oldActiveColor=activeColor; } }
Finalmente puoi aprire e caricare il file ColorCube.ino. Metti ColorCube su una superficie piana e accendilo. Non spostarlo finché non si accende con il colore bianco dopo la calibrazione (pochi secondi). Quindi puoi mettere il ColorCube sul lato e il colore cambierà - ogni lato ha il suo colore - rosso, verde, blu, giallo. Il ColorCube si spegne quando viene capovolto.
Passaggio 6: Assemblaggio
Sii gentile durante il montaggio. I cavi e tutte le parti non amano il comportamento approssimativo.
Parte stampata in 3D del pulsante: metti delicatamente il pulsante nel foro nella parte inferiore stampata (come mostrato nell'immagine), deve entrare e uscire senza problemi, in caso contrario utilizzare un bisturi o un coltello affilato o carta vetrata per rimuovere tutto il materiale in eccesso (principalmente all'interno su superiore di un foro circolare sulla parte inferiore). (foto)
Metti MPU-6050, Arduino Nano, TP4056 e MT3608 nei loro buchi. La scatola ha delle sporgenze sotto le quali inserire MPU-6050 e MT3608. Metti i connettori USB di Arduino Nano e TP4056 nei loro fori nelle pareti laterali della scatola. (foto)
Usa il lucchetto stampato in 3D per fissare i componenti (assicurati che tutti i componenti poggino saldamente sulla parte inferiore). È importante perché qualcuno proverà sicuramente a giocare con il tuo ColorCube come con i dadi. (foto)
Metti e fissa la batteria nel suo foro se non tiene saldamente.
Mettere il pulsante autobloccante nel foro predisposto nella parte inferiore. Il pulsante autobloccante deve essere in posizione ON (corto). Spingere delicatamente il pulsante verso il basso. Funzionalità di test con pulsante stampato in 3D. (fotografie)
Utilizzare due viti M2 per fissare l'anello LED alla parte stampata centrale. È bene utilizzare l'orientamento dell'anello in cui i contatti del filo si trovano nel foro arrotondato della parte centrale stampata. (fotografie)
Opzionale: usa una goccia di colla a caldo qua e là – collegamento dei fili all'anello, per fili troppo lunghi, se qualcosa non è abbastanza stretto, ecc. Può rendere il tuo ColorCube più durevole.
Disporre i fili all'interno di ColorCube in modo che non vengano pizzicati dalle parti stampate. Metti la parte centrale in quella inferiore. Usa la vite M3 per fissarlo. (foto)
Infine spingi delicatamente la parte superiore stampata su quella inferiore. (foto)
Passaggio 7: fatto
Congratulazioni. Divertiti.
Consigliato:
Come installare Raspberry PI 4 Headless (VNC) con Rpi-imager e immagini: 7 passaggi (con immagini)
Howto: installazione di Raspberry PI 4 Headless (VNC) con Rpi-imager e immagini: ho intenzione di utilizzare questo Rapsberry PI in una serie di progetti divertenti nel mio blog. Sentiti libero di dare un'occhiata. Volevo tornare a usare il mio Raspberry PI ma non avevo una tastiera o un mouse nella mia nuova posizione. Era un po' che non installavo un Raspberry
Intelligenza artificiale e riconoscimento delle immagini con HuskyLens: 6 passaggi (con immagini)
Intelligenza artificiale e riconoscimento delle immagini con HuskyLens: Ehi, come va, ragazzi! Akarsh qui da CETech. In questo progetto, daremo un'occhiata all'HuskyLens di DFRobot. È un modulo fotocamera basato sull'intelligenza artificiale in grado di eseguire diverse operazioni di intelligenza artificiale come Face Recognitio
Riconoscimento delle immagini con schede K210 e Arduino IDE/Micropython: 6 passaggi (con immagini)
Riconoscimento immagine con schede K210 e Arduino IDE/Micropython: ho già scritto un articolo su come eseguire demo OpenMV su Sipeed Maix Bit e ho anche realizzato un video di demo di rilevamento oggetti con questa scheda. Una delle tante domande che le persone hanno posto è: come posso riconoscere un oggetto che la rete neurale non è tr
Telecomando wireless con modulo NRF24L01 da 2,4 Ghz con Arduino - Nrf24l01 Ricevitore trasmettitore 4 canali / 6 canali per quadricottero - Elicottero Rc - Aereo RC con Arduino: 5 passaggi (con immagini)
Telecomando wireless con modulo NRF24L01 da 2,4 Ghz con Arduino | Nrf24l01 Ricevitore trasmettitore 4 canali / 6 canali per quadricottero | Elicottero Rc | Aereo radiocomandato con Arduino: per far funzionare un'auto radiocomandata | Quadricottero | Drone | Aereo RC | Barca RC, abbiamo sempre bisogno di un ricevitore e trasmettitore, supponiamo che per RC QUADCOPTER abbiamo bisogno di un trasmettitore e ricevitore a 6 canali e quel tipo di TX e RX è troppo costoso, quindi ne faremo uno sul nostro
Come smontare un computer con semplici passaggi e immagini: 13 passaggi (con immagini)
Come smontare un computer con semplici passaggi e immagini: questa è un'istruzione su come smontare un PC. La maggior parte dei componenti di base sono modulari e facilmente smontabili. Tuttavia è importante che tu sia organizzato al riguardo. Questo ti aiuterà a non perdere parti e anche a rendere più facile il rimontaggio