Përmbajtje:

ColorCube: 7 hapa (me fotografi)
ColorCube: 7 hapa (me fotografi)

Video: ColorCube: 7 hapa (me fotografi)

Video: ColorCube: 7 hapa (me fotografi)
Video: How To Solve 3 BY 3 cube in 20 seconds (TAMIL) ADVANCED METHOD CFOP: PART1 CROSS 2024, Dhjetor
Anonim
Image
Image
ColorCube
ColorCube
ColorCube
ColorCube

Unë e bëra këtë llambë për mbesën time kur ajo po mësonte ngjyra. Unë u frymëzova me projektin MagicCube, por më në fund i krijova të gjitha pjesët nga e para. Easyshtë e lehtë për tu printuar dhe e lehtë për tu montuar dhe do të merrni njohuri se si funksionon moduli xhiro.

Hapi 1: Materialet

Materiale
Materiale

Pjesa Arduino:

  • Arduino Nano (më mirë pa kunjat e lidhjes së kokës)
  • MPU-6050 3-Bosht Gyro Modul
  • Moduli i ngarkuesit të baterisë TP4056 Micro USB
  • MT3608 Moduli i Ngritjes së Fuqisë së Fuqisë
  • Bateria LiPo 902936 900mA ose 503035 3.7V 500mA. Ju mund të përdorni çdo bateri LiPo me 3, 7V dhe madhësi më të vogël se 35x30x15mm, por ju duhet ta siguroni baterinë në vrimë.
  • Butoni i vetë-kyçjes PS-22F28 ose butoni i vetë-kyçjes PS-22F27 i përshtaten të dy në mënyrë të përsosur pjesës së printuar.
  • Unaza LED RGB WS2812B - 16 LED 68 mm diametër të jashtëm - mund të përdorni çdo unazë edhe me numër të ndryshëm LED (duhet të ndryshoni një konstante në kod - #përcaktoni NUMPIXELS 16) me diametër maksimal 76mm (gjithashtu mund të përdorni një shkop Neopixel me 8x LED ose ndonjë shirit LED me WS2812b).

Shembuj unazash: 8 LED 32mm12 LED 38mm12 LED 50mm16 LED 60mm24 LED 66 mm16 LED 44mm

Për montim mund të përdorni ndonjë nga vrimat e shtypura në pjesën e mesme. Ato mbulojnë pothuajse çdo opsion (nuk është e nevojshme që unaza të jetë 100% në qendër).

Telat

Kubi

  • Filament PLA për pjesën e sipërme të kubit - përdorni ngjyrë të bardhë sepse transparenca nuk është e mirë (LED janë të dukshme dhe ngjyra nuk është e lëmuar), rekomandimi im është Prusament Vanilla White
  • Filament PLA për pjesët e poshtme, të mesme dhe të butonave - përdorni ngjyrë të errët sepse disa module Arduino kanë drita në krye dhe nuk përshtatet me ngjyrat e LED -ve të kubit, rekomandimi im është Prusament Galaxy Black
  • 1x M3x5 Vidë për Vidhosje - Gjatësia (10mm) dhe forma e kokës nuk është kritike - vida nuk është e dukshme
  • 2x M2x3 Vidë për Vidhosje - Gjatësia (5mm) dhe forma e kokës nuk është kritike - vidhat nuk janë të dukshme

Mjetet

  • Printer 3D
  • Shumë metra
  • Makine per ngjitjen e metalit
  • Kaçavidë

Hapi 2: Shtypja

Shtypja
Shtypja
Shtypja
Shtypja

Të gjitha pjesët e ColorCube u krijuan në Autodesk Fusion360. skedari f3d është i bashkangjitur.

ColorCube u shtyp në printerin Prusa i3 MK3S me të gjitha cilësimet e paracaktuara dhe nuk pres ndonjë ndryshim të nevojshëm në printerë të ndryshëm. Përdorni cilësimet tuaja të preferuara për PLA (nëse printohen në PLA, nuk ka problem të përdorni PETG ose ASA).

Parametrat e printimit 3D:

  • Shtresa 0.2 mm (Cilësimet e cilësisë 0.2mm në PrusaSlicer)
  • Cilësimet e Filamentit Prusament PLA në PrusaSlicer
  • Mbush 15%
  • Pa mbështetje
  • Jo buzë

Hapi 3: Qarku

Qarku
Qarku

Hapi 4: Saldimi

Bashkim
Bashkim
Bashkim
Bashkim
Bashkim
Bashkim

Paralajmërim: Përdorni një metër të shumëfishtë për t'u siguruar që përforcuesi DC-DC MT3608 po lëshon 5V. Së pari - para matjes - kthejeni zbukurimin në drejtim të akrepave të orës deri në fund (klikimi). Kur lidhni tensionin (3, 7V) në hyrje, duhet të japë afërsisht të njëjtën vlerë. Ktheni kundër akrepave të orës (do t'ju duhet 10-20 kthesa të plota) dhe papritmas tensioni ngrihet. Vendosni butësisht 5V në dalje. (Foto)

Hidhini një sy pjesës së poshtme të shtypur të kubit. Çdo komponent ka vrimën e vet. Përcakton se sa tela të gjatë midis secilit komponent do t'ju nevojiten (mos përdorni tela ekstra të gjatë, përndryshe ju merrni xhungël teli). (Foto)

Telat e saldimit midis Arduino Nano dhe unazës LED vetëm (3 tela: e kuqe 5V - 5V, e zezë GND - GND, blu D6 - DI). Drejtoni testin e funksionalitetit të unazës LED nga kapitulli tjetër. (Foto)

Nëse gjithçka është në rregull, vazhdoni me shtimin e Gyro MPU6050 (5 tela: e kuqe 5V - VCC, e zezë GND - GND, blu A4 - SDA, jeshile A5 - SCL, e verdhë D2 - INT). Ngarko kodin ColorCube.ino dhe provo (përbërësit e tjerë janë vetëm për bateri dhe karikim). (Foto)

Nëse gjithçka është në rregull, shtoni pjesën tjetër të përbërësve. Ka vetëm tela të kuq (+) dhe të zinj (-). Zgjidhni kunjat e djathtë në butonin e vetë-kyçjes (nuk lidhen kur nuk shtypen). Testoni funksionalitetin në ngarkimin e baterisë dhe baterisë. (Foto)

Dritat LED të kuqe ndizen në TP4056 kur ngarkohen dhe dritat blu blu kur ngarkohen plotësisht. Vrima mbi TP4056 në pjesën e mesme të shtypur kalon dritën LED në pjesën e sipërme të ColorCube dhe ju mund të njihni fazën e karikimit. (Foto)

Hapi 5: Kodi

Së pari ju duhet të shkarkoni bibliotekat e nevojshme.

Ka udhëzime të hollësishme për bibliotekën Adafruit Neopixel:

Testi i funksionalitetit të unazës LED: Mund ta provoni qarkun tuaj me shembullin e përfshirë në bibliotekë. Hapni skedarin nga Skedari/Shembuj/Adafruit NeoPixels/thjeshtë dhe ngarkoni (mos harroni të vendosni saktë këtë linjë sipas numrit të pikselave që përdorni: #define NUMPIXELS 16).

I2Cdev dhe MPU6050: Shkarkoni dhe hapni skedarin i2cdevlib-master.zip nga https://github.com/jrowberg/i2cdevlib. Kopjoni formularin e palidhur me dosjen i2cdevlib-master/Arduino dy nën-dosje: I2Cdev dhe MPU6050. Të dy kopjoni në dosjen e bibliotekës Arduino IDE (Dokumentet/Arduino/bibliotekat nëse instalimi i paracaktuar).

Mos harroni të rinisni Arduino IDE pasi bibliotekat të jenë kopjuar.

#include #ifdef _AVR_ #include // Kërkohet për 16 MHz Adafruit Trinket #endif #include "Wire.h" përfshijnë "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" MPU6050 mpu; #define INTERRUPT_PIN 2 // përdorni pin 2 në Arduino Uno dhe shumicën e tabelave #përcaktoni PIN 6 #përcaktoni NUMPIXELS 16 // Vendosni numrin e saktë të LEDs Pixel Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); uint32_t activeColor, oldActiveColor = 0; bool dmpReady = false; uint8_t mpuIntStatus; uint8_t devStatus; pako uint16_tSize; uint16_t fifoCount; uint8_t fifoBuffer [64]; Kuaternion q; VectorGravitacioni i notit; rrotullimi notues [3]; int x, y, z; bool i paqëndrueshëm mpuInterrupt = false; void dmpDataReady () {mpuInterrupt = e vërtetë; } void setup () {Serial.begin (115200); piksele.filloj (); piksele.qartë (); pixels.setBrightness (128); #nëse përcaktohet (_ AVR_ATtiny85_) && (F_CPU == 16000000) seti i orës_preskale (ora_div_1); #endif // bashkohet me autobusin I2C (biblioteka I2Cdev nuk e bën këtë automatikisht) #nëse I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin (); Wire.setClock (400000); // Ora 400kHz I2C. Komentoni këtë rresht nëse keni vështirësi në përpilim #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire:: konfigurimi (400, e vërtetë); #endif ndërsa (! Serial); Serial.println (F ("Fillimi i pajisjeve I2C …")); mpu.initialize (); pinMode (INTERRUPT_PIN, INPUT); // verifikoni lidhjen Serial.println (F ("Testimi i lidhjeve të pajisjes …")); Serial.println (mpu.testConnection ()? F ("Lidhja MPU6050 e suksesshme"): F ("Lidhja MPU6050 dështoi")); // prisni gati // Serial.println (F ("\ nDërgo çdo karakter për të filluar programimin dhe demonstrimin DMP:")); // ndërsa (Serial.disponueshëm () && Serial.lex ()); // tampon bosh // ndërsa (! Serial.i disponueshëm ()); // prisni për të dhënat // ndërsa (Serial.disponueshëm () && Serial.read ()); // zbraz sërish tamponin // ngarkoni dhe konfiguroni DMP Serial.println (F ("Initializing DMP …")); devStatus = mpu.dmpInitialize (); // furnizoni kompensimet tuaja xhiro këtu, të shkallëzuara për ndjeshmërinë minimale mpu.setXGyroOffset (0); mpu.setYGyroOffset (0); mpu.setZGyroOffset (0); mpu.setZAccelOffset (1688); // 1688 parazgjedhje e fabrikës për çipin tim të provës // sigurohuni që ka punuar (kthen 0 nëse është kështu) nëse (devStatus == 0) {// Koha e kalibrimit: gjeneroni kompensime dhe kalibroni MPU6050 mpu. CalibrateAccel (6); mpu. CalibrateGyro (6); mpu. PrintActiveOffsets (); // ndizni DMP, tani që është gati Serial.println (F ("Aktivizimi i DMP …")); mpu.setDMPE aktivizuar (e vërtetë); // aktivizoni zbulimin e ndërprerjes Arduino Serial.print (F ("Aktivizimi i zbulimit të ndërprerjes (ndërprerja e jashtme Arduino")); Serial.print (digitalPinToInterrupt (INTERRUPT_PIN)); Serial.println (F (")…")); attachInterrupt (digitalPinToInterrupt (INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); // vendosni flamurin tonë DMP Ready në mënyrë që funksioni kryesor i lakut () të dijë se është në rregull ta përdorni atë Serial.println (F ("DMP gati! Duke pritur ndërprerjen e parë …")); dmpReady = e vërtetë; // merrni madhësinë e pritshme të paketës DMP për pakot e krahasimit të mëvonshëmSize = mpu.dmpGetFIFOPacketSize (); } tjetër {// GABIM! // 1 = Ngarkesa fillestare e kujtesës dështoi // 2 = Përditësimet e konfigurimit të DMP dështuan // (nëse do të prishet, zakonisht kodi do të jetë 1) Serial.print (F ("Inicimi i DMP dështoi (kodi")); Serial. print (devStatus); Serial.println (F (")")); }} void loop () {if (! dmpReady) kthehet; if (mpu.dmpGetCurrentFIFOPacket (fifoBuffer)) {// Merr paketën më të fundit // shfaq këndet e Euler në gradë mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpGetra graviteti (& graviteti, & q); mpu.dmpGetYawPitchRoll (rrotullim, & q, & graviteti); } Serial.print ("X"); Serial.print (rrotullimi [2] * 180/M_PI); Serial.print ("\ t Y"); Serial.print (rrotullimi [1] * 180/M_PI); Serial.print ("\ t Z"); Serial.println (rrotullimi [0] * 180/M_PI); x = rrotullim [2] * 180/M_PI; y = rrotullimi [1] * 180/M_PI; z = rrotullimi [0] * 180/M_PI; nëse (abs (x) <45 && abs (y) 45 && abs (x) <135 && (abs (y) 135)) {activeColor = pixels. Color (255, 0, 0); // E kuqe kur kthehet në anën} tjetër nëse (x <-45 && abs (x) <135 && (abs (y) 135)) {activeColor = pixels. Color (0, 255, 0); // E gjelbër kur ktheheni në anën e dytë} tjetër nëse (y> 45 && abs (y) <135 && (abs (x) 135)) {activeColor = pixels. Color (255, 255, 0); // E verdhë kur ktheheni në anën e tretë} tjetër nëse (y <-45 && abs (y) <135 && (abs (x) 135)) {activeColor = pixels. Color (0, 0, 255); // Blu kur kthehet në anën e katërt} tjetër nëse (abs (y)> 135 && abs (x)> 135) {activeColor = pixels. Color (0, 0, 0); // E zezë kur përmbyset} nëse (activeColor! = OldActiveColor) {pixels.clear (); piksele.mbush (activeColor); piksele.shfaq (); oldActiveColor = activeColor; }}

Më në fund mund të hapni dhe ngarkoni skedarin ColorCube.ino. Vendosni ColorCube me sipërfaqe të sheshtë dhe ndizeni atë. Mos e lëvizni derisa të ndizet me ngjyrë të bardhë pas kalibrimit (disa sekonda). Tjetra mund ta vendosni ColorCube anash dhe ngjyra do të ndryshojë - çdo anë ka ngjyrën e vet - e kuqe, jeshile, blu, e verdhë. ColorCube fiket kur kthehet përmbys.

Hapi 6: Montimi

Montimi
Montimi
Montimi
Montimi
Montimi
Montimi

Jini të butë gjatë montimit. Telave dhe të gjitha pjesëve nuk u pëlqen sjellja e ashpër.

Pjesa e shtypur me buton 3d - butoni vendos butësisht në vrimën në pjesën e poshtme të shtypur (siç tregohet në figurë), ajo duhet të hyjë dhe të dalë pa probleme, nëse nuk përdorni bisturi ose thikë të mprehtë ose letër rëre për të hequr të gjithë materialin e tepërt (kryesisht brenda në krye të një vrime rrethi në pjesën e poshtme). (Foto)

Vendosni MPU-6050, Arduino Nano, TP4056 dhe MT3608 në vrimat e tyre. Kutia ka zgjatime nën të cilat futni MPU-6050 dhe MT3608. Vendosni lidhësit USB të Arduino Nano dhe TP4056 në vrimat e tyre në muret anësore të kutisë. (Foto)

Përdorni bllokues të printuar 3D për të rregulluar përbërësit (sigurohuni që të gjithë përbërësit të jenë të shtrirë në pjesën e poshtme fort). Importantshtë e rëndësishme sepse dikush me siguri do të përpiqet të luajë me ColorCube tuaj si me zare. (Foto)

Vendoseni dhe sigurojeni baterinë në vrimën e saj nëse nuk mbahet fort.

Vendoseni butonin Vetë-mbyllës në vrimën e përgatitur në pjesën e poshtme. Butoni i vetë-mbylljes duhet të jetë në pozicionin ON (i shkurtër). Butësisht shtypni butonin poshtë. Testoni funksionalitetin me butonin e printuar 3D. (Fotografitë)

Përdorni dy vida M2 për të fiksuar Unazën LED në pjesën e mesme të shtypur. Goodshtë mirë të përdoret orientimi i unazës ku kontaktet e telit janë në vrimën e rrumbullakosur të pjesës së mesme të shtypur. (Fotografitë)

Opsionale: Përdorni një pikë zam të nxehtë këtu dhe atje - telat lidhen me unazën, për tela shumë të gjatë, nëse diçka nuk është mjaft e ngushtë etj. Kjo mund ta bëjë ColorCube -in tuaj më të qëndrueshëm.

Rregulloni telat brenda ColorCube që të mos kapen nga pjesët e printuara. Vendoseni pjesën e mesme në pjesën e poshtme. Përdorni vidën M3 për ta rregulluar atë. (Foto)

Më në fund shtyjeni butësisht pjesën e printuar sipër në pjesën e poshtme. (Foto)

Hapi 7: U krye

Urime. Argëtohu.

Recommended: