Kazalo:

ColorCube: 7 korakov (s slikami)
ColorCube: 7 korakov (s slikami)

Video: ColorCube: 7 korakov (s slikami)

Video: ColorCube: 7 korakov (s slikami)
Video: Sipahi 7. Bölüm 2024, December
Anonim
Image
Image
ColorCube
ColorCube
ColorCube
ColorCube

To svetilko sem naredil za vnukinjo, ko se je učila barv. Navdihnil me je projekt MagicCube, vendar sem vse dele končno ustvaril iz nič. Enostaven je za tiskanje in enostaven za sestavljanje in spoznali boste, kako deluje žiroskopski modul.

1. korak: Materiali

Materiali
Materiali

Arduino del:

  • Arduino Nano (bolje brez zatičev za spajkanje glave)
  • 3-osni žiroskopski modul MPU-6050
  • Modul za polnjenje baterij TP4056 Micro USB
  • Modul za povečanje moči MT3608
  • LiPo baterija 902936 900mA ali 503035 3.7V 500mA. Uporabite lahko katero koli LiPo baterijo s 3, 7V in velikostjo manjšo od 35x30x15 mm, vendar morate baterijo pritrditi v luknjo.
  • Samozaklepni gumb PS-22F28 ali samozaklepni gumb PS-22F27 se popolnoma prilegata tiskanemu delu.
  • LED RGB WS2812B obroč - 16 LED 68 mm zunanji premer - lahko uporabite kateri koli obroč tudi z različnim številom LED (spremeniti morate eno konstanto v kodi - #define NUMPIXELS 16) z največjim premerom 76 mm (lahko uporabite tudi neopixel palico z 8x LED ali kateri koli LED trak z WS2812b).

Primeri prstanov: 8 LED 32 mm12 LED 38 mm 12 LED 50 mm 16 LED 60 mm 24 LED 66 mm 16 LED 44 mm

Za montažo lahko uporabite katero koli luknjo, natisnjeno v srednjem delu. Zajemajo skoraj vse možnosti (ni nujno, da je prstan 100% centriran).

Žice

Kocka

  • PLA nit za zgornji del kocke - uporabite belo barvo, ker prozorna ni dobra (LED so vidne in barva ni gladka), moje priporočilo je Prusament Vanilla White
  • PLA nit za spodnje, srednje in gumbne dele - uporabite temno barvo, ker imajo nekateri Arduino moduli na vrhu luči in se ne ujemajo z barvami LED kock, moje priporočilo je Prusament Galaxy Black
  • 1x samorezni vijak M3x5 - Dolžina (10 mm) in oblika glave nista kritični - vijak ni viden
  • 2x samorezni vijak M2x3 - Dolžina (5 mm) in oblika glave nista kritični - vijaki niso vidni

Orodja

  • 3D tiskalnik
  • Večmetrski
  • Spajkalnik
  • Izvijač

2. korak: Tiskanje

Tiskanje
Tiskanje
Tiskanje
Tiskanje

Vsi deli ColorCube so bili zasnovani v Autodesk Fusion360. Priložena je datoteka f3d.

ColorCube je bil natisnjen na tiskalniku Prusa i3 MK3S z vsemi privzetimi nastavitvami in ne pričakujem potrebnih sprememb na različnih tiskalnikih. Uporabite svoje najljubše nastavitve za PLA (če je natisnjeno na PLA, brez težav uporabite PETG ali ASA).

Parametri 3D tiskanja:

  • Sloj 0,2 mm (0,2 mm nastavitve KAKOVOSTI na PrusaSlicer)
  • Prusament PLA Nastavitve filamentov na PrusaSlicerju
  • Izpolnite 15%
  • Brez podpore
  • Brez Brima

3. korak: Vezje

Vezje
Vezje

4. korak: Spajkanje

Spajkanje
Spajkanje
Spajkanje
Spajkanje
Spajkanje
Spajkanje

Opozorilo: Z večmetrom se prepričajte, da ojačevalnik DC-DC MT3608 oddaja 5V. Najprej - pred merjenjem - obrnite obrobo v smeri urinega kazalca do konca (klik). Ko priključite napetost (3, 7V) na vhod, mora dati približno enako vrednost. Obrnite v nasprotni smeri urinega kazalca (potrebovali boste 10-20 polnih obratov) in nenadoma se dvigne napetost. Tiho nastavite 5V na izhod. (fotografija)

Oglejte si natisnjen spodnji del kocke. Vsaka komponenta ima svojo luknjo. Določa, kako dolge žice med posameznimi komponentami boste potrebovali (ne uporabljajte zelo dolgih žic, sicer pride do žične džungle). (fotografija)

Spajkalne žice samo med Arduino Nano in LED obročem (3 žice: rdeča 5V - 5V, črna GND - GND, modra D6 - DI). Zaženite preizkus funkcionalnosti LED obroča iz naslednjega poglavja. (fotografija)

Če je vse v redu, nadaljujte z dodajanjem žiroskopa MPU6050 (5 žic: rdeča 5V - VCC, črna GND - GND, modra A4 - SDA, zelena A5 - SCL, rumena D2 - INT). Naložite kodo ColorCube.ino in preizkusite (druge komponente so samo za baterijo in polnjenje). (fotografija)

Če je vse v redu, dodajte preostale komponente. Obstajajo samo rdeče (+) in črne (-) žice. Izberite desne zatiče na samozaklepnem gumbu (niso povezani, če jih ne pritisnete). Preizkusite funkcionalnost baterije in polnjenja baterije. (fotografija)

Rdeče LED lučke na TP4056 pri polnjenju in modre LED lučke, ko so popolnoma napolnjene. Luknja nad TP4056 v srednjem tiskanem delu prepušča LED luč na zgornji del ColorCube in lahko prepoznate fazo polnjenja. (fotografija)

5. korak: Koda

Najprej morate prenesti potrebne knjižnice.

Podrobna navodila za knjižnico Adafruit Neopixel:

Test funkcionalnosti LED obroča: Svoje vezje lahko preizkusite na primeru, vključenem v knjižnico. Odprite datoteko iz Datoteka/Primeri/Adafruit NeoPixels/preprosto in naložite (ne pozabite pravilno nastaviti te vrstice glede na število slikovnih pik, ki jih uporabljate: #define NUMPIXELS 16).

I2Cdev in MPU6050: Prenesite in razpakirajte datoteko i2cdevlib-master.zip s spletnega mesta https://github.com/jrowberg/i2cdevlib. Kopirajte razpakirano mapo i2cdevlib-master/Arduino dve podmapi: I2Cdev in MPU6050. Oba kopirata v mapo knjižnice Arduino IDE (Dokumenti/Arduino/knjižnice, če je privzeta namestitev).

Po kopiranju knjižnic ne pozabite znova zagnati Arduino IDE.

#include #ifdef _AVR_ #include // Zahtevano za 16 MHz Adafruit Trinket #endif #include "Wire.h" include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" MPU6050 mpu; #define INTERRUPT_PIN 2 // uporabite pin 2 na Arduino Uno in večini plošč #define PIN 6 #define NUMPIXELS 16 // Nastavite pravilno število LED diod Adafruit_NeoPixel slikovnih pik (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]; Kvaternion q; Gravitacija VectorFloat; plavajoče vrtenje [3]; int x, y, z; hlapna bool mpuInterrupt = false; void dmpDataReady () {mpuInterrupt = true; } void setup () {Serial.begin (115200); pixels.begin (); piksli.clear (); pixels.setBrightness (128); #če je definirano (_ AVR_ATtiny85_) && (F_CPU == 16000000) nastavitev_časov_predmetov (ura_div_1); #endif // pridruži se vodilu I2C (knjižnica I2Cdev tega ne stori samodejno) #če je I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin (); Wire.setClock (400000); // Ura I2C 400kHz. Komentirajte to vrstico, če imate težave pri sestavljanju #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire:: setup (400, res); #endif while (! Serijsko); Serial.println (F ("Inicializiranje naprav I2C …")); mpu.initialize (); pinMode (INTERRUPT_PIN, INPUT); // preverimo povezavo Serial.println (F ("Preverjanje povezav naprav …")); Serial.println (mpu.testConnection ()? F ("Povezava MPU6050 uspešna"): F ("Povezava MPU6050 ni uspela")); // čakanje na pripravljenost // Serial.println (F ("\ nPošlji kateri koli znak za začetek programiranja in predstavitve DMP:")); // while (Serial.available () && Serial.read ()); // prazen medpomnilnik // while (! Serial.available ()); // počakajte na podatke // while (Serial.available () && Serial.read ()); // znova izpraznite vmesnik // naložite in konfigurirajte DMP Serial.println (F ("Inicializiranje DMP …")); devStatus = mpu.dmpInitialize (); // tukaj vnesite lastne odmike žiroskopov, prilagojene za minimalno občutljivost mpu.setXGyroOffset (0); mpu.setYGyroOffset (0); mpu.setZGyroOffset (0); mpu.setZAccelOffset (1688); // 1688 tovarniško privzeto za moj preskusni čip // preverite, ali je deloval (vrne 0, če je tako) if (devStatus == 0) {// Calibration Time: generirajte odmike in umerite naš MPU6050 mpu. CalibrateAccel (6); mpu. CalibrateGyro (6); mpu. PrintActiveOffsets (); // vklopite DMP, ko je pripravljen Serial.println (F ("Omogočanje DMP …")); mpu.setDMPEnabled (true); // omogočimo zaznavanje prekinitev Arduino Serial.print (F ("Omogočanje zaznavanja prekinitev (Arduino zunanji prekinitev")); Serial.print (digitalPinToInterrupt (INTERRUPT_PIN)); Serial.println (F (") …")); attachInterrupt (digitalPinToInterrupt (INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); // nastavimo zastavo DMP Ready, tako da funkcija main loop () ve, da je v redu, če jo uporabljamo Serial.println (F ("DMP pripravljen! Čakanje na prvo prekinitev …")); dmpReady = res; // dobimo pričakovano velikost paketa DMP za kasnejšo primerjavo packetSize = mpu.dmpGetFIFOPacketSize (); } else {// NAPAKA! // 1 = začetna obremenitev pomnilnika ni uspela // 2 = posodobitve konfiguracije DMP niso uspele // (če se bo prekinil, bo običajno koda 1) Serial.print (F ("DMP Initialization failed (code")); Serial. print (devStatus); Serial.println (F (")")); }} void loop () {if (! dmpReady) return; if (mpu.dmpGetCurrentFIFOPacket (fifoBuffer)) {// Pridobite najnovejši paket // prikažete Eulerjeve kote v stopinjah mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpGetGravity (& gravity, & q); mpu.dmpGetYawPitchRoll (rotacija, & q, & gravitacija); } Serial.print ("X"); Serial.print (rotacija [2] * 180/M_PI); Serial.print ("\ t Y"); Serial.print (rotacija [1] * 180/M_PI); Serial.print ("\ t Z"); Serial.println (rotacija [0] * 180/M_PI); x = vrtenje [2] * 180/M_PI; y = vrtenje [1] * 180/M_PI; z = vrtenje [0] * 180/M_PI; if (abs (x) <45 && abs (y) 45 && abs (x) <135 && (abs (y) 135)) {activeColor = pik. Color (255, 0, 0); // rdeča, ko se obrnemo na stran} else if (x <-45 && abs (x) <135 && (abs (y) 135)) {activeColor = pixels. Color (0, 255, 0); // zeleno, ko se obrnemo na drugo stran} drugače če (y> 45 && abs (y) <135 && (abs (x) 135)) {activeColor = pixels. Color (255, 255, 0); // rumena, ko se obrnemo na tretjo stran} drugače if (y <-45 && abs (y) <135 && (abs (x) 135)) {activeColor = pixels. Color (0, 0, 255); // Modra, ko se obrnemo na četrto stran} drugače če (abs (y)> 135 && abs (x)> 135) {activeColor = pixels. Color (0, 0, 0); // Črna, ko je na glavo} if (activeColor! = OldActiveColor) {pixels.clear (); pixels.fill (activeColor); piksli.show (); oldActiveColor = activeColor; }}

Končno lahko odprete in naložite datoteko ColorCube.ino. ColorCube postavite na ravno površino in ga vklopite. Ne premikajte ga, dokler po kalibraciji (nekaj sekund) ne začne svetlobe bele barve. Nato lahko ColorCube postavite na stran in barva se bo spremenila - vsaka stran ima svojo barvo - rdečo, zeleno, modro, rumeno. ColorCube ugasne, ko je obrnjen na glavo.

Korak 6: Sestavljanje

Sestavljanje
Sestavljanje
Sestavljanje
Sestavljanje
Sestavljanje
Sestavljanje

Med sestavljanjem bodite nežni. Žice in vsi deli ne marajo grobega obnašanja.

Gumb s 3D tiskanim delom - gumb rahlo potisnite do luknje v spodnjem tiskanem delu (kot je prikazano na sliki), gladko mora vstopiti in izstopiti, če ne odstranite vsega odvečnega materiala s skalpelom ali ostrim nožem ali brusnim papirjem (večinoma znotraj na vrhu krožne luknje na spodnjem delu). (fotografija)

MPU-6050, Arduino Nano, TP4056 in MT3608 postavite v njihove luknje. Škatla ima izbokline, pod katere vstavite MPU-6050 in MT3608. Priključke USB Arduino Nano in TP4056 vstavite v luknje na stranskih stenah škatle. (fotografija)

Za pritrditev komponent uporabite 3D tiskano ključavnico (prepričajte se, da so vse komponente tesno položene na spodnji del). Pomembno je, ker se bo nekdo zagotovo poskusil igrati z vašim ColorCubeom kot s kockami. (fotografija)

Baterijo vstavite in pritrdite v luknjo, če se ne drži tesno.

Na pripravljeno luknjo v spodnjem delu postavite samozaporni gumb. Samozaporni gumb mora biti v položaju ON (kratek). Nežno pritisnite gumb navzdol. Preizkusite funkcionalnost s 3D tiskanim gumbom. (fotografije)

Z dvema vijakoma M2 pritrdite LED obroč na srednji tiskani del. Dobro je uporabiti orientacijo obroča, kjer so žični kontakti v zaobljeni luknji na sredini tiskanega dela. (fotografije)

Neobvezno: Tu in tam uporabite kapljico vročega lepila - žice povežite z obročem, za predolge žice, če kaj ni dovolj tesno itd. Lahko naredi vaš ColorCube bolj trpežen.

Žice znotraj ColorCube razporedite tako, da jih tiskani deli ne stisnejo. Srednji del položite na spodnjega. Za pritrditev uporabite vijak M3. (fotografija)

Na koncu previdno potisnite zgornji natisnjeni del na spodnjega. (fotografija)

7. korak: Končano

Čestitam. Zabavaj se.

Priporočena: