Cuprins:

ColorCube: 7 pași (cu imagini)
ColorCube: 7 pași (cu imagini)

Video: ColorCube: 7 pași (cu imagini)

Video: ColorCube: 7 pași (cu imagini)
Video: Cum sa obții un machiaj al tenului rezistent | Budge Proof Makeup| Maria Lazar 2024, Decembrie
Anonim
Image
Image
ColorCube
ColorCube
ColorCube
ColorCube

Am făcut această lampă pentru nepoata mea când învăța culorile. M-am inspirat cu proiectul MagicCube, dar în cele din urmă am creat toate părțile de la zero. Este ușor de imprimat și ușor de asamblat și veți obține cunoștințe despre modul în care funcționează modulul giroscopic.

Pasul 1: Materiale

Materiale
Materiale

Partea Arduino:

  • Arduino Nano (mai bine fără știfturi de antet de lipit)
  • MPU-6050 3-Axy Gyro Module
  • TP4056 Modul de încărcător de baterii micro USB
  • MT3608 Step Up Power Booster Module
  • Baterie LiPo 902936 900mA sau 503035 3,7V 500mA. Puteți utiliza orice baterie LiPo cu 3, 7V și dimensiuni mai mici de 35x30x15mm, dar trebuie să fixați bateria în gaură.
  • Butonul autoblocant PS-22F28 sau butonul autoblocant PS-22F27 se potrivește perfect piesei imprimate.
  • LED RGB WS2812B Ring - 16 LED 68mm diametru exterior - puteți utiliza orice inel chiar și cu un număr diferit de LED-uri (trebuie să schimbați o constantă în cod - #define NUMPIXELS 16) cu diametrul maxim de 76mm (puteți utiliza și un Neopixel Stick cu 8x LED sau orice bandă LED cu WS2812b).

Exemple de inele: 8 LED 32mm12 LED 38mm12 LED 50mm16 LED 60mm24 LED 66 mm16 LED 44mm

Pentru montaj puteți utiliza oricare dintre găurile imprimate în partea de mijloc. Acestea acoperă aproape orice opțiune (nu este necesar pentru a avea inelul centrat 100%).

Fire

cub

  • Filament PLA pentru partea superioară a cubului - utilizați culoarea albă, deoarece transparenta nu este bună (LED-urile sunt vizibile și culoarea nu este netedă), recomandarea mea este Prusament Vanilla White
  • Filament PLA pentru piesele de jos, de mijloc și butoane - utilizați culoare închisă deoarece unele module Arduino au lumini în partea de sus și nu se potrivește cu culorile LED-urilor cub, recomandarea mea este Prusament Galaxy Black
  • 1x șurub autofiletant M3x5 - Lungimea (10mm) și forma capului nu sunt critice - șurubul nu este vizibil
  • 2 șuruburi autofiletante M2x3 - Lungimea (5 mm) și forma capului nu sunt critice - șuruburile nu sunt vizibile

Instrumente

  • imprimantă 3d
  • Multimetru
  • Ciocan de lipit
  • Şurubelniţă

Pasul 2: Tipărire

Tipărire
Tipărire
Tipărire
Tipărire

Toate părțile ColorCube au fost proiectate în Autodesk Fusion360. fișierul f3d este atașat.

ColorCube a fost tipărit pe imprimanta Prusa i3 MK3S cu toate setările implicite și nu mă aștept la modificările necesare pe diferite imprimante. Utilizați setările preferate pentru PLA (dacă este tipărit pe PLA, nu este nicio problemă să utilizați PETG sau ASA).

Parametrii de imprimare 3D:

  • Strat 0,2 mm (setări CALITATE 0,2 mm pe PrusaSlicer)
  • Setări filament PLA Prusament pe PrusaSlicer
  • Completați 15%
  • Fără asistență
  • Fără Brim

Pasul 3: Circuit

Circuit
Circuit

Pasul 4: lipire

Lipire
Lipire
Lipire
Lipire
Lipire
Lipire

Avertisment: Utilizați un multimetru pentru a vă asigura că amplificatorul DC-DC MT3608 produce 5V. În primul rând - înainte de măsurare - rotiți tăietura în sensul acelor de ceasornic până la capăt (făcând clic). Când conectați tensiunea (3, 7V) la intrare trebuie să dea aproximativ aceeași valoare. Rotiți în sens invers acelor de ceasornic (veți avea nevoie de 10-20 de ture complete) și brusc creșteți tensiunea. Setați 5V la ieșire ușor. (fotografie)

Aruncați o privire la partea de jos a cubului imprimată. Fiecare componentă are propria gaură. Acesta definește cât timp veți avea nevoie de fire între fiecare componentă (nu utilizați fire foarte lungi, altfel veți obține jungla de sârmă). (fotografie)

Sârmă de lipit între Arduino Nano și numai inelul LED (3 fire: roșu 5V - 5V, negru GND - GND, albastru D6 - DI). Rulați testul de funcționalitate a inelului LED din capitolul următor. (fotografie)

Dacă totul este în regulă, continuați cu adăugarea Gyro MPU6050 (5 fire: roșu 5V - VCC, negru GND - GND, albastru A4 - SDA, verde A5 - SCL, galben D2 - INT). Încărcați codul ColorCube.ino și testați (celelalte componente sunt doar pentru baterie și încărcare). (fotografie)

Dacă toate OK adăugați restul de componente. Există doar fire roșii (+) și negre (-). Selectați pinii din dreapta pe butonul de autoblocare (nu este conectat când nu este apăsat). Testați funcționalitatea bateriei și încărcarea bateriei. (fotografie)

LED-urile roșii pe TP4056 la încărcare și LED-urile albastre la încărcarea completă. Gaura de deasupra TP4056 din partea imprimată din mijloc trece lumina LED în partea superioară a ColorCube și puteți recunoaște faza de încărcare. (fotografie)

Pasul 5: Cod

În primul rând trebuie să descărcați bibliotecile necesare.

Există instrucțiuni detaliate pentru biblioteca Adafruit Neopixel:

Test de funcționalitate a inelului cu LED-uri: Puteți testa circuitul dvs. prin exemplul inclus în bibliotecă. Deschideți fișierul din Fișier / Exemple / Adafruit NeoPixels / simplu și încărcați (nu uitați să configurați corect această linie după numărul de pixeli pe care îl utilizați: #define NUMPIXELS 16).

I2Cdev și MPU6050: Descărcați și dezarhivați fișierul i2cdevlib-master.zip de la https://github.com/jrowberg/i2cdevlib. Copiați folderul dezarhivat formular i2cdevlib-master / Arduino două subfoldere: I2Cdev și MPU6050. Ambele copiază în dosarul bibliotecii Arduino IDE (Documente / Arduino / biblioteci dacă se instalează implicit).

Nu uitați să reporniți Arduino IDE după copierea bibliotecilor.

#include #ifdef _AVR_ #include // Obligatoriu pentru 16 MHz Adafruit Trinket #endif #include "Wire.h" include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" MPU6050 mpu; #define INTERRUPT_PIN 2 // utilizați pinul 2 pe Arduino Uno & majoritatea plăcilor #define PIN 6 #define NUMPIXELS 16 // Setați numărul corect de LED-uri Adafruit_NeoPixel pixeli (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); uint32_t activeColor, oldActiveColor = 0; bool dmpReady = fals; uint8_t mpuIntStatus; uint8_t devStatus; uint16_t pachet Dimensiune; uint16_t fifoCount; uint8_t fifoBuffer [64]; Cuaternion q; Gravitatea VectorFloat; float rotace [3]; int x, y, z; volatile bool mpuInterrupt = false; void dmpDataReady () {mpuInterrupt = true; } void setup () {Serial.begin (115200); pixeli.begin (); pixeli.clear (); pixeli.setBrightness (128); #if definit (_ AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // join I2C bus (I2Cdev library doesn't do this automaticamente) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin (); Wire.setClock (400000); // Ceas I2C 400kHz. Comentează această linie dacă ai dificultăți de compilare #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire:: setup (400, true); #endif while (! Serial); Serial.println (F ("Initializarea dispozitivelor I2C …")); mpu.initialize (); pinMode (INTERRUPT_PIN, INPUT); // verificați conexiunea Serial.println (F ("Testarea conexiunilor dispozitivului …")); Serial.println (mpu.testConnection ()? F ("conexiunea MPU6050 reușită"): F ("conexiunea MPU6050 a eșuat")); // așteptați gata // Serial.println (F ("\ nTrimiteți orice caracter pentru a începe programarea DMP și demo:")); // while (Serial.available () && Serial.read ()); // tampon gol // while (! Serial.available ()); // așteptați datele // while (Serial.available () && Serial.read ()); // goliți din nou tamponul // încărcați și configurați DMP Serial.println (F ("Inițializarea DMP …")); devStatus = mpu.dmpInitialize (); // furnizați aici propriile dvs. compensări giroscopice, scalate pentru sensibilitate minimă mpu.setXGyroOffset (0); mpu.setYGyroOffset (0); mpu.setZGyroOffset (0); mpu.setZAccelOffset (1688); // 1688 implicit din fabrică pentru cipul meu de testare // asigurați-vă că a funcționat (returnează 0 dacă da) dacă (devStatus == 0) {// Timp de calibrare: generați compensări și calibrați MPU6050 mpu. CalibrateAccel (6); mpu. CalibrateGyro (6); mpu. PrintActiveOffsets (); // porniți DMP, acum că este gata Serial.println (F („Activarea DMP …”)); mpu.setDMPEnabled (adevărat); // activați detectarea întreruperilor Arduino Serial.print (F ("Activarea detectării întreruperilor (întrerupere externă Arduino")); Serial.print (digitalPinToInterrupt (INTERRUPT_PIN)); Serial.println (F (") …")); attachInterrupt (digitalPinToInterrupt (INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); // setați steagul DMP Ready astfel încât funcția buclă principală () să știe că este în regulă să o utilizați Serial.println (F („DMP gata! Se așteaptă prima întrerupere …”)); dmpReady = adevărat; // obțineți dimensiunea așteptată a pachetului DMP pentru o comparație ulterioară packetSize = mpu.dmpGetFIFOPacketSize (); } altfel {// EROARE! // 1 = încărcarea inițială a memoriei a eșuat // 2 = Actualizările de configurare DMP au eșuat // (dacă se va sparge, de obicei codul va fi 1) Serial.print (F ("Inițializarea DMP a eșuat (cod")); Serial. print (devStatus); Serial.println (F (")")); }} void loop () {if (! dmpReady) return; if (mpu.dmpGetCurrentFIFOPacket (fifoBuffer)) {// Obțineți cel mai recent pachet // afișați unghiurile Euler în grade mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpGetGravity (& gravitate, & 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 = pixeli. Color (255, 0, 0); // Roșu când se întoarce în lateral} else if (x <-45 && abs (x) <135 && (abs (y) 135)) {activeColor = pixels. Color (0, 255, 0); // Verde când se întoarce la a doua parte} else if (y> 45 && abs (y) <135 && (abs (x) 135)) {activeColor = pixels. Color (255, 255, 0); // Galben când se întoarce spre a treia parte} else if (y <-45 && abs (y) <135 && (abs (x) 135)) {activeColor = pixels. Color (0, 0, 255); // Albastru când se întoarce la a patra parte} else if (abs (y)> 135 && abs (x)> 135) {activeColor = pixels. Color (0, 0, 0); // Negru când este invers} if (activeColor! = OldActiveColor) {pixels.clear (); pixels.fill (activeColor); pixels.show (); oldActiveColor = activeColor; }}

În cele din urmă puteți deschide și încărca fișierul ColorCube.ino. Puneți ColorCube pe suprafața plană și porniți-l. Nu mișcați-l până când începe calibrarea cu culoare albă după calibrare (câteva secunde). Apoi puteți pune ColorCube pe lateral și culoarea se va schimba - fiecare parte are culoarea sa - roșu, verde, albastru, galben. ColorCube se stinge când este răsturnat.

Pasul 6: Asamblarea

Asamblarea
Asamblarea
Asamblarea
Asamblarea
Asamblarea
Asamblarea

Fii blând în timpul asamblării. Sârmelor și tuturor părților nu le place comportamentul dur.

Piesa imprimată buton 3d - puneți ușor butonul în gaura din partea imprimată de jos (așa cum se arată în imagine), trebuie să intre și să iasă fără probleme, dacă nu folosiți bisturiu sau cuțit ascuțit sau hârtie de nisip pentru a elimina tot materialul partea de sus a unei găuri de cerc pe partea de jos). (fotografie)

Puneți MPU-6050, Arduino Nano, TP4056 și MT3608 în găurile lor. Cutia are proeminențe sub care introduceți MPU-6050 și MT3608. Puneți conectorii USB Arduino Nano și TP4056 în găurile lor din pereții laterali ai cutiei. (fotografie)

Utilizați blocare imprimată 3D pentru a fixa componentele (asigurați-vă că toate componentele sunt așezate strâns pe partea inferioară). Este important, deoarece cineva va încerca cu siguranță să se joace cu ColorCube ca la zaruri. (fotografie)

Puneți și fixați bateria în gaură dacă nu se ține strâns.

Puneți butonul de autoblocare în orificiul pregătit în partea de jos. Butonul de autoblocare trebuie să fie în poziția ON (scurt). Apăsați ușor butonul în jos. Testează funcționalitatea cu butonul imprimat 3D. (fotografii)

Folosiți două șuruburi M2 pentru a fixa inelul LED pe partea imprimată din mijloc. Este bine să folosiți orientarea inelului în cazul în care contactele de sârmă sunt în gaura rotunjită a părții imprimate din mijloc. (fotografii)

Opțional: utilizați o picătură de adeziv fierbinte ici și colo - conexiuni de cabluri pentru a suna, pentru fire prea lungi, dacă ceva nu este suficient de strâns etc. Vă poate face ColorCube mai durabil.

Aranjați firele din interiorul ColorCube să nu fie ciupite de piesele imprimate. Puneți partea de mijloc la una de jos. Folosiți șurubul M3 pentru a-l fixa. (fotografie)

În cele din urmă, împingeți ușor partea imprimată de sus în partea inferioară. (fotografie)

Pasul 7: Terminat

Felicitări. A se distra.

Recomandat: