Turinys:
- 1 žingsnis: medžiagos
- 2 žingsnis: Spausdinimas
- 3 žingsnis: grandinė
- 4 žingsnis: litavimas
- 5 žingsnis: kodas
- 6 žingsnis: Surinkimas
- 7 žingsnis: Atlikta
Video: „ColorCube“: 7 žingsniai (su paveikslėliais)
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:45
Aš padariau šią lempą savo anūkei, kai ji mokėsi spalvų. Mane įkvėpė „MagicCube“projektas, bet galiausiai visas dalis sukūriau nuo nulio. Tai lengva spausdinti ir lengvai surinkti, ir jūs sužinosite, kaip veikia giroskopo modulis.
1 žingsnis: medžiagos
Arduino dalis:
- „Arduino Nano“(geriau be litavimo antgalių kaiščių)
- MPU-6050 3 ašių giroskopo modulis
- TP4056 mikro USB akumuliatoriaus įkroviklio modulis
- MT3608 „Step Up Power Booster“modulis
- LiPo baterija 902936 900mA arba 503035 3.7V 500mA. Galite naudoti bet kokią 3, 7 V LiPo bateriją, kurios dydis yra mažesnis nei 35x30x15 mm, tačiau turite ją pritvirtinti skylėje.
- PS-22F28 savaime užsifiksuojantis mygtukas arba PS-22F27 savaime užsifiksuojantis mygtukas puikiai tinka spausdinamai daliai.
- LED RGB WS2812B žiedas - 16 LED 68 mm išorinio skersmens - galite naudoti bet kokį žiedą net su skirtingu šviesos diodų skaičiumi (turite pakeisti vieną konstantą kode - #define NUMPIXELS 16), kurio maksimalus skersmuo yra 76 mm (taip pat galite naudoti „Neopixel Stick“su 8x LED arba bet kuri LED juostelė su WS2812b).
Žiedo pavyzdžiai: 8 LED 32mm12 LED 38mm12 LED 50mm16 LED 60mm24 LED 66 mm16 LED 44mm
Montuojant galite naudoti bet kurią skylę, išspausdintą vidurinėje dalyje. Jie apima beveik bet kurią parinktį (nebūtina, kad žiedas būtų 100% centre).
Laidai
kubas
- PLA siūlai viršutinei kubo daliai - naudokite baltą spalvą, nes permatoma nėra gerai (šviesos diodai matomi ir spalva nėra lygi), mano rekomendacija yra „Prusament Vanilla White“
- PLA siūlai apatinėms, vidurinėms ir mygtukų dalims - naudokite tamsią spalvą, nes kai kurių „Arduino“modulių viršuje yra žibintai ir jis netinka kubo šviesos diodų spalvoms, mano rekomendacija yra „Prusament Galaxy Black“
- 1x M3x5 savisriegio varžtas - ilgis (10 mm) ir galvos forma nėra kritiniai - varžtas nematomas
- 2x M2x3 savisriegio varžtas - ilgis (5 mm) ir galvos forma nėra svarbūs - varžtai nematomi
Įrankiai
- 3D spausdintuvas
- Kelių metrų
- Lituoklis
- Atsuktuvas
2 žingsnis: Spausdinimas
Visos „ColorCube“dalys buvo sukurtos „Autodesk Fusion360“. f3d failas pridedamas.
„ColorCube“buvo atspausdintas „Prusa i3 MK3S“spausdintuve, naudojant visus numatytuosius nustatymus, ir nesitikiu jokių būtinų pakeitimų skirtinguose spausdintuvuose. Naudokite mėgstamus PLA nustatymus (jei spausdinama ant PLA, nėra problemų naudoti PETG ar ASA).
3D spausdinimo parametrai:
- Sluoksnis 0,2 mm (0,2 mm KOKYBĖS nustatymai „PrusaSlicer“)
- „Prusament PLA“gijų nustatymai „PrusaSlicer“
- Užpildykite 15%
- Nėra paramos
- Nėra Brim
3 žingsnis: grandinė
4 žingsnis: litavimas
Įspėjimas: naudokite kelių metrų matuoklį, kad įsitikintumėte, jog nuolatinės srovės stiprintuvas MT3608 išleidžia 5 V įtampą. Pirmiausia - prieš matavimą - pasukite apdailą pagal laikrodžio rodyklę iki galo (spragtelėjimas). Prijungus įtampą (3, 7V) prie įvesties, ji turi pateikti maždaug tą pačią vertę. Pasukite prieš laikrodžio rodyklę (jums reikės 10–20 pilnų apsisukimų) ir staiga pakilsite įtampa. Švelniai nustatykite 5 V išėjimą. (nuotrauka)
Pažvelkite į atspausdintą apatinę kubo dalį. Kiekvienas komponentas turi savo skylę. Tai nustato, kiek ilgio laidų tarp kiekvieno komponento jums reikės (nenaudokite ypač ilgų laidų, kitaip gausite laidų džiungles). (nuotrauka)
Lituoti laidus tik tarp „Arduino Nano“ir LED žiedo (3 laidai: raudona 5V - 5V, juoda GND - GND, mėlyna D6 - DI). Kitame skyriuje atlikite LED žiedo funkcionalumo testą. (nuotrauka)
Jei viskas gerai, pridėkite „Gyro MPU6050“(5 laidai: raudona 5V - VCC, juoda GND - GND, mėlyna A4 - SDA, žalia A5 - SCL, geltona D2 - INT). Įkelkite „ColorCube.ino“kodą ir išbandykite (kiti komponentai skirti tik akumuliatoriui ir įkrovimui). (nuotrauka)
Jei viskas gerai, pridėkite likusius komponentus. Yra tik raudoni (+) ir juodi (-) laidai. Pasirinkite tinkamus kaiščius ant savaiminio fiksavimo mygtuko (neprijungtas, kai nespaudžiamas). Išbandykite baterijos ir akumuliatoriaus įkrovimo funkcionalumą. (nuotrauka)
Raudona LED lemputė šviečia TP4056 įkrovimo metu ir mėlyna LED lemputė, kai visiškai įkrauta. Skylė virš TP4056 vidurinėje spausdintoje dalyje perduoda LED lemputę į viršutinę „ColorCube“dalį ir galite atpažinti įkrovimo fazę. (nuotrauka)
5 žingsnis: kodas
Pirmiausia turite atsisiųsti reikiamas bibliotekas.
Yra išsamios Adafruit Neopixel bibliotekos instrukcijos:
Šviesos diodų žiedo funkcionalumo testas: galite patikrinti savo grandinę pagal bibliotekoje pateiktą pavyzdį. Atidarykite failą iš Failas/Pavyzdžiai/„Adafruit NeoPixels“/paprasta ir įkelkite (nepamirškite teisingai nustatyti šios eilutės pagal naudojamų taškų skaičių: #define NUMPIXELS 16).
„I2Cdev“ir „MPU6050“: atsisiųskite ir išpakuokite „i2cdevlib-master.zip“failą iš https://github.com/jrowberg/i2cdevlib. Nukopijuokite išarchyvuotą aplanką i2cdevlib-master/Arduino du poaplankius: I2Cdev ir MPU6050. Abu nukopijuojami į „Arduino IDE“bibliotekos aplanką (dokumentai/„Arduino“/bibliotekos, jei numatytasis diegimas).
Nepamirškite iš naujo paleisti „Arduino IDE“nukopijavus bibliotekas.
#include #ifdef _AVR_ #include // Reikalingas 16 MHz „Adafruit“niekučiui #endif #include "Wire.h" include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" MPU6050 mpu; #define INTERRUPT_PIN 2 // naudokite 2 kaištį „Arduino Uno“ir daugelyje plokščių #define PIN 6 #define NUMPIXELS 16 // Nustatykite teisingą šviesos diodų skaičių Adafruit_NeoPixel pixels (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); uint32_t activeColor, oldActiveColor = 0; bool dmpReady = klaidinga; uint8_t mpuIntStatus; uint8_t devStatus; uint16_t packetSize; uint16_t fifoCount; uint8_t fifoBuffer [64]; Kvaternionas q; „VectorFloat“gravitacija; plūdės rotacija [3]; int x, y, z; nepastovus bool mpuInterrupt = false; void dmpDataReady () {mpuInterrupt = tiesa; } void setup () {Serial.begin (115200); pixels.begin (); pixels.clear (); pikseliai.setBrightness (128); #if apibrėžta (_ AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // prisijungti prie I2C magistralės („I2Cdev“biblioteka to nedaro automatiškai) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin (); Wire.setClock (400000); // 400 kHz I2C laikrodis. Komentuokite šią eilutę, jei turite kompiliavimo sunkumų #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire:: setup (400, tiesa); #endif while (! Serial); Serial.println (F ("I2C įrenginių inicijavimas …")); mpu.initialize (); pinMode (INTERRUPT_PIN, INPUT); // patikrinti ryšį Serial.println (F ("Įrenginio jungčių tikrinimas …")); Serial.println (mpu.testConnection ()? F ("MPU6050 ryšys sėkmingas"): F ("MPU6050 ryšys nepavyko")); // laukti, kol bus paruoštas // Serial.println (F ("\ nSiųsti bet kokį simbolį, kad pradėtumėte DMP programavimą ir demonstraciją:")); // while (Serial.available () && Serial.read ()); // tuščias buferis // while (! Serial.available ()); // laukti duomenų // while (Serial.available () && Serial.read ()); // vėl tuščias buferis // įkelkite ir sukonfigūruokite DMP Serial.println (F ("DMP inicijavimas …")); devStatus = mpu.dmpInitialize (); // čia pateikite savo giroskopo poslinkius, skalę pagal minimalų jautrumą mpu.setXGyroOffset (0); mpu.setYGyroOffset (0); mpu.setZGyroOffset (0); mpu.setZAccelOffset (1688); // 1688 gamyklinė numatytoji mano bandymo mikroschema // įsitikinkite, kad ji veikė (grąžina 0, jei taip) if (devStatus == 0) {// Kalibravimo laikas: generuokite poslinkius ir kalibruokite mūsų MPU6050 mpu. CalibrateAccel (6); mpu. CalibrateGyro (6); mpu. PrintActiveOffsets (); // įjunkite DMP dabar, kai jis paruoštas Serial.println (F ("Įgalinamas DMP …")); mpu.setDMPEnabled (tiesa); // įgalinti „Arduino“pertraukimo aptikimą Serial.print (F („Įgalinamas pertraukimo aptikimas („ Arduino “išorinis pertraukimas“)); Serial.print (digitalPinToInterrupt (INTERRUPT_PIN)); Serial.println (F („)…“)); attachInterrupt (digitalPinToInterrupt (INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); // nustatykite mūsų DMP Ready vėliavą, kad pagrindinė ciklo () funkcija žinotų, jog ją naudoti yra gerai Serial.println (F ("DMP paruošta! Laukiama pirmo pertraukimo …")); dmpReady = tiesa; // gauti laukiamą DMP paketo dydį vėlesniam palyginimui packetSize = mpu.dmpGetFIFOPacketSize (); } else {// KLAIDA! // 1 = nepavyko įkelti pradinės atminties // 2 = nepavyko atnaujinti DMP konfigūracijos // (jei ji nutrūks, dažniausiai kodas bus 1) Serial.print (F ("DMP inicijavimas nepavyko (kodas))); Serijinis. spausdinti (devStatus); Serial.println (F (")")); }} void loop () {if (! dmpReady) return; if (mpu.dmpGetCurrentFIFOPacket (fifoBuffer)) {// Gaukite naujausią paketą // rodykite Eulerio kampus laipsniais mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpGetGravity (& gravitacija, & q); mpu.dmpGetYawPitchRoll (rotace, & q, & gravity); } Serial.print ("X"); Serijinis atspaudas (rotace [2] * 180/M_PI); Serial.print ("\ t Y"); Serijinis atspaudas (rotace [1] * 180/M_PI); Serial.print ("\ t Z"); Serial.println (rotace [0] * 180/M_PI); x = rotacija [2] * 180/M_PI; y = rotacija [1] * 180/M_PI; z = rotacija [0] * 180/M_PI; if (abs (x) <45 && abs (y) 45 && abs (x) <135 && (abs (y) 135)) {activeColor = pixels. Color (255, 0, 0); // Raudona, kai pasukama į šoną} else if (x <-45 && abs (x) <135 && (abs (y) 135)) {activeColor = pixels. Color (0, 255, 0); // Žalia, kai pasukama į antrąją pusę} else if (y> 45 && abs (y) <135 && (abs (x) 135)) {activeColor = pixels. Color (255, 255, 0); // Geltona, kai pasukama į trečiąją pusę} else if (y <-45 && abs (y) <135 && (abs (x) 135)) {activeColor = pixels. Color (0, 0, 255); // Mėlyna pasukus į ketvirtąją pusę} else if (abs (y)> 135 && abs (x)> 135) {activeColor = pixels. Color (0, 0, 0); // Juoda, kai aukštyn kojom} if (activeColor! = OldActiveColor) {pixels.clear (); pixels.fill (activeColor); pixels.show (); oldActiveColor = activeColor; }}
Galiausiai galite atidaryti ir įkelti „ColorCube.ino“failą. Uždėkite „ColorCube“plokščią paviršių ir įjunkite. Nejudinkite, kol po kalibravimo (kelias sekundes) jis nepradės šviesiai baltos spalvos. Tada galite įdėti „ColorCube“į šoną ir spalva pasikeis - kiekviena pusė turi savo spalvą - raudona, žalia, mėlyna, geltona. „ColorCube“išsijungia, kai yra apverstas aukštyn kojomis.
6 žingsnis: Surinkimas
Surinkimo metu būkite švelnus. Laidai ir visos dalys nemėgsta šiurkštaus elgesio.
Mygtuko 3D spausdinta dalis - švelniai uždėkite mygtuką prie skylės apatinėje spausdintoje dalyje (kaip parodyta paveikslėlyje), ji turi sklandžiai įeiti ir išeiti, jei nenaudokite skalpelio ar aštraus peilio ar švitrinio popieriaus, kad pašalintumėte visas perteklines medžiagas (dažniausiai viduje apskritimo skylės viršuje apatinėje dalyje). (nuotrauka)
Įdėkite MPU-6050, Arduino Nano, TP4056 ir MT3608 į skyles. Dėžutėje yra iškyšos, po kuriomis įdedate MPU-6050 ir MT3608. Įdėkite „Arduino Nano“ir TP4056 USB jungtis prie skylių dėžutės šoninėse sienelėse. (nuotrauka)
Norėdami pritvirtinti komponentus, naudokite 3D spausdintą užraktą (įsitikinkite, kad visi komponentai yra tvirtai uždėti ant apatinės dalies). Tai svarbu, nes kažkas tikrai bandys žaisti su jūsų „ColorCube“kaip su kauliuku. (nuotrauka)
Įdėkite ir užfiksuokite akumuliatorių į skylę, jei jis tvirtai nelaiko.
Uždėkite savaime užsifiksuojantį mygtuką prie paruoštos skylės apatinėje dalyje. Savaime užsifiksuojantis mygtukas turi būti ON padėtyje (trumpas). Švelniai paspauskite mygtuką. Patikrinkite funkcionalumą naudodami 3D spausdintą mygtuką. (nuotraukos)
Naudokite du M2 varžtus, kad pritvirtintumėte LED žiedą prie vidurinės spausdintos dalies. Tinka naudoti žiedo orientaciją ten, kur vielos kontaktai yra suapvalintoje vidurinės spausdintos dalies skylėje. (nuotraukos)
Pasirinktinai: čia ir ten naudokite lašą karštų klijų - laidų prijungimas prie žiedo, per ilgi laidai, jei kas nors nėra pakankamai sandarus ir pan. Tai gali padaryti jūsų „ColorCube“patvaresnį.
Išdėstykite laidus „ColorCube“viduje, kad jų nespaustų atspausdintos dalys. Įdėkite vidurinę dalį į apatinę. Norėdami jį pritvirtinti, naudokite M3 varžtą. (nuotrauka)
Galiausiai švelniai stumkite viršutinę spausdintą dalį į apačią. (nuotrauka)
7 žingsnis: Atlikta
Sveikinimai. Pasilinksmink.
Rekomenduojamas:
Rankinis PAGRINDINIS kompiuteris: 6 žingsniai (su paveikslėliais)
Rankinis BASIC kompiuteris: šioje instrukcijoje aprašomas mano procesas, kaip sukurti mažą rankinį kompiuterį, kuriame veikia BASIC. Kompiuteris sukurtas aplink ATmega 1284P AVR mikroschemą, kuri taip pat įkvėpė kvailą kompiuterio pavadinimą (HAL 1284). Šis kūrinys yra sunkiai įkvėptas
Sukurkite „Macintosh Plus“ROM: 3 žingsniai (su paveikslėliais)
Sukurkite „Macintosh Plus“ROM: ši instrukcija padės jums „nukopijuoti“EPROM vaizdai iš jūsų „Macintosh Plus“ROM lustų ir (arba) " įrašymas " vaizdus į naujas mikroschemas. Procesas iš esmės bus atliekamas du kartus, kad būtų sukurtos abi & quot
Nešiojamas „Bluetooth“garsiakalbis - „MKBoom DIY“rinkinys: 5 žingsniai (su paveikslėliais)
Nešiojamas „Bluetooth“garsiakalbis | „MKBoom DIY Kit“: Sveiki visi! Taip gera po ilgos pertraukos grįžti prie dar vieno garsiakalbio projekto. Kadangi daugumai mano kūrinių reikia nemažai įrankių, šį kartą nusprendžiau sukurti nešiojamąjį garsiakalbį, naudodamas rinkinį, kurį galite lengvai įsigyti. As pagalvojau
Seno garsiakalbio konvertavimas į „Bluetooth Boombox“: 8 žingsniai (su paveikslėliais)
Seno garsiakalbio konvertavimas į „Bluetooth Boombox“: Sveiki visi! Labai ačiū, kad prisijungėte prie manęs dėl šio kūrinio! Prieš pradėdami detaliau, apsvarstykite galimybę balsuoti už šį „Instructable“konkurso apačioje. Palaikymas yra labai vertinamas! Praėjo keli metai nuo tada, kai pradėjau
IoT Helovino moliūgas - Valdykite šviesos diodus naudodami „Arduino MKR1000“ir „Blynk“programą ???: 4 žingsniai (su paveikslėliais)
IoT Helovino moliūgas | Valdykite šviesos diodus naudodami „Arduino MKR1000“ir „Blynk“programą ???: Sveiki visi! Prieš kelias savaites buvo Helovinas ir, laikydamasi tradicijos, iškirpiau gražų moliūgą savo balkonui. Tačiau turėdama moliūgą lauke supratau, kad gana erzina, kad kiekvieną vakarą tenka išeiti uždegti žvakės. Ir aš