Talaan ng mga Nilalaman:

ColorCube: 7 Hakbang (na may Mga Larawan)
ColorCube: 7 Hakbang (na may Mga Larawan)

Video: ColorCube: 7 Hakbang (na may Mga Larawan)

Video: ColorCube: 7 Hakbang (na may Mga Larawan)
Video: Ang Titik Dd | Pagsulat at Pag-aaral sa tunog ng Titik Dd | Mga Salitang Nagsisimula sa Titik Dd 2024, Hulyo
Anonim
Image
Image
ColorCube
ColorCube
ColorCube
ColorCube

Ginawa ko ang lampara na ito para sa aking apo kapag natututo siya ng mga kulay. Naging inspirasyon ako sa proyekto ng MagicCube ngunit sa wakas nilikha ang lahat ng mga bahagi mula sa simula. Madaling mai-print at madaling mag-ipon at makakakuha ka ng kaalaman kung paano gumagana ang gyro module.

Hakbang 1: Mga Kagamitan

Mga Kagamitan
Mga Kagamitan

Bahagi ng Arduino:

  • Arduino Nano (mas mabuti nang walang solder header pin)
  • MPU-6050 3-Axis Gyro Module
  • TP4056 Micro USB Battery Charger Module
  • MT3608 Hakbang Up Power Booster Module
  • LiPo Battery 902936 900mA o 503035 3.7V 500mA. Maaari mong gamitin ang anumang baterya ng LiPo na may 3, 7V at laki na mas mababa sa 35x30x15mm ngunit kailangan mong i-secure ang baterya sa butas.
  • PS-22F28 Self-locking button o PS-22F27 Self-locking button na parehong magkakasya sa naka-print na bahagi nang perpekto.
  • LED RGB WS2812B Ring - 16 LED 68mm panlabas na lapad - maaari mong gamitin ang anumang singsing kahit na may iba't ibang bilang ng mga LED (kailangang baguhin ang isang pare-pareho sa code - # tukuyin ang NUMPIXELS 16) na may pinakamataas na diameter ng 76mm (maaari mo ring gamitin ang isang Neopixel Stick na may 8x LED o anumang LED strip na may WS2812b).

Mga halimbawa ng singsing: 8 LED 32mm12 LED 38mm12 LED 50mm16 LED 60mm24 LED 66 mm16 LED 44mm

Para sa montage maaari mong gamitin ang anuman sa mga butas na naka-print sa gitnang bahagi. Saklaw nila ang halos anumang pagpipilian (hindi kinakailangan na magkaroon ng singsing na 100% na nakasentro).

Mga wire

Cube

  • PLA Filament para sa tuktok na bahagi ng kubo - gumamit ng puting kulay dahil hindi maganda ang transparent (nakikita ang mga LED at hindi makinis ang kulay), ang aking rekomendasyon ay Prusament Vanilla White
  • Ang PLA Filament para sa mga bahagi sa ibaba, gitna at pindutan - gumamit ng madilim na kulay dahil ang ilang mga module ng Arduino ay may ilaw sa itaas at hindi ito akma sa mga kulay ng mga cube LEDs, ang aking rekomendasyon ay Prusament Galaxy Black
  • 1x M3x5 Self Tapping Screw - Ang haba (10mm) at ang hugis ng ulo ay hindi kritikal - ang tornilyo ay hindi nakikita
  • 2x M2x3 Self Tapping Screw - Ang haba (5mm) at ang hugis ng ulo ay hindi kritikal - ang mga turnilyo ay hindi nakikita

Mga kasangkapan

  • 3d printer
  • Multi-meter
  • Panghinang
  • Screwdriver

Hakbang 2: Pagpi-print

Pagpi-print
Pagpi-print
Pagpi-print
Pagpi-print

Ang lahat ng mga bahagi ng ColorCube ay idinisenyo sa Autodesk Fusion360. nakalakip ang f3d file.

Ang ColorCube ay naka-print sa Prusa i3 MK3S printer na may lahat ng mga default na setting at hindi ko inaasahan ang anumang kinakailangang mga pagbabago sa iba't ibang mga printer. Gamitin ang iyong mga paboritong setting para sa PLA (kung naka-print sa PLA, walang problema na gumamit ng PETG o ASA).

Mga parameter ng pag-print ng 3d:

  • Layer 0.2 mm (mga setting ng QUALITY na 0.2mm sa PrusaSlicer)
  • Mga setting ng Prusament PLA Filament sa PrusaSlicer
  • Maglagay ng 15%
  • Walang supporta
  • Walang Brim

Hakbang 3: Circuit

Circuit
Circuit

Hakbang 4: Paghihinang

Paghihinang
Paghihinang
Paghihinang
Paghihinang
Paghihinang
Paghihinang

Babala: Gumamit ng isang multi-meter upang matiyak na ang DC-DC booster MT3608 ay naglalabas ng 5V. Una - bago sukatin - i-turn ang trim na pakaliwa sa dulo (pag-click). Kapag kumonekta boltahe (3, 7V) upang mag-input kailangang magbigay tungkol sa parehong halaga. Lumiko sa counter-pakanan (kakailanganin mo ng 10-20 buong liko) at biglang pagtaas ng boltahe. Itakda nang mahina ang 5V sa output. (larawan)

Tingnan ang naka-print sa ilalim na bahagi ng kubo. Ang bawat sangkap ay may kanya-kanyang butas. Tinutukoy nito kung gaano katagal ang mga wire sa pagitan ng bawat sangkap na kakailanganin mo (huwag gumamit ng mga sobrang haba na mga wire kung hindi man ay nakakakuha ka ng jungle jungle). (larawan)

Ang mga wire ng panghinang sa pagitan ng Arduino Nano at LED ring lamang (3 wires: pulang 5V - 5V, itim na GND - GND, asul na D6 - DI). Patakbuhin ang pagsubok sa pagpapaandar ng singsing na LED mula sa susunod na kabanata. (larawan)

Kung ang lahat ay OK magpatuloy sa pagdaragdag ng Gyro MPU6050 (5 wires: red 5V - VCC, black GND - GND, asul A4 - SDA, berde A5 - SCL, dilaw D2 - INT). Mag-upload ng ColorCube.ino code at pagsubok (ang iba pang mga bahagi ay para lamang sa baterya at singilin). (larawan)

Kung ang lahat ng OK idagdag ang natitirang mga bahagi. Mayroon lamang mga pula (+) at itim (-) na mga wire. Piliin ang mga tamang pin sa self-locking button (hindi nakakonekta kapag hindi pinindot). Subukan ang pagpapaandar sa pagsingil ng baterya at baterya. (larawan)

Mga pulang ilaw na LED sa TP4056 kapag nagcha-charge at asul na mga ilaw ng LED kapag ganap na nasingil. Ang butas sa itaas ng TP4056 sa gitnang naka-print na bahagi ay pumasa sa LED light sa tuktok na bahagi ng ColorCube at makikilala mo ang yugto ng pagsingil. (larawan)

Hakbang 5: Code

Una kailangan mong mag-download ng mga kinakailangang aklatan.

Mayroong mga detalyadong tagubilin para sa Adafruit Neopixel library:

Pagsubok sa pag-andar ng LED ring: Maaari mong subukan ang iyong circuit sa pamamagitan ng halimbawang kasama sa library. Buksan ang file mula sa File / Mga Halimbawa / Adafruit NeoPixels / simple at i-upload (huwag kalimutang i-set up nang tama ang linyang ito sa pamamagitan ng bilang ng mga pixel na iyong ginagamit: # tukuyin ang NUMPIXELS 16).

I2Cdev at MPU6050: Mag-download at i-unzip ang i2cdevlib-master.zip file mula sa https://github.com/jrowberg/i2cdevlib. Kopyahin ang form na naka-zip zip sa i2cdevlib-master / Arduino dalawang mga subfolder: I2Cdev at MPU6050. Parehong kopya sa folder ng library ng Arduino IDE (Mga Dokumento / Arduino / aklatan kung default na pag-install).

Huwag kalimutang i-restart ang Arduino IDE pagkatapos makopya ang mga aklatan.

#include #ifdef _AVR_ #include // Kinakailangan para sa 16 MHz Adafruit Trinket #endif #include "Wire.h" isama ang "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" MPU6050 mpu; #define INTERRUPT_PIN 2 // use pin 2 on Arduino Uno & most boards #define PIN 6 #define NUMPIXELS 16 // Itakda ang tamang bilang ng mga LEDs 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 packetSize; uint16_t fifoCount; uint8_t fifoBuffer [64]; Quaternion q; VectorFloat gravity; float rotace [3]; int x, y, z; pabagu-bago ng isip bool mpuInterrupt = false; void dmpDataReady () {mpuInterrupt = true; } void setup () {Serial.begin (115200); pix.begin (); pix.clear (); pix.setBightness (128); # Kung tinukoy (_ AVR_ATtiny85_) && (F_CPU == 16000000) orasan_prescale_set (orasan_div_1); #endif // sumali sa I2C bus (hindi awtomatiko itong ginagawa ng I2Cdev library) #kung I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin (); Wire.setClock (400000); // 400kHz I2C na orasan. Komento sa linyang ito kung nagkakaroon ng mga paghihirap sa pagtitipon #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire:: setup (400, true); #endif habang (! Serial); Serial.println (F ("Initializing I2C device …")); mpu.initialize (); pinMode (INTERRUPT_PIN, INPUT); // verify koneksyon Serial.println (F ("Mga koneksyon sa aparato sa pagsubok …")); Serial.println (mpu.testConnection ()? F ("Matagumpay ang koneksyon sa MPU6050"): F ("Nabigo ang koneksyon sa MPU6050")); // wait for ready // Serial.println (F ("\ n Magpadala ng anumang character upang simulan ang DMP programming at demo:")); // habang (Serial.available () && Serial.read ()); // walang laman na buffer // habang (! Serial.available ()); // wait for data // habang (Serial.available () && Serial.read ()); // walang laman na buffer muli // i-load at i-configure ang DMP Serial.println (F ("Initializing DMP …")); devStatus = mpu.dmpInitialize (); // supply your own gyro offset here, scaled for min sensitivity mpu.setXGyroOffset (0); mpu.setYGyroOffset (0); mpu.setZGyroOffset (0); mpu.setZAccelOffset (1688); // 1688 factory default for my test chip // siguraduhing gumana ito (nagbabalik ng 0 kung gayon) kung (devStatus == 0) {// Calibration Time: bumuo ng mga offset at i-calibrate ang aming MPU6050 mpu. CalibrateAccel (6); mpu. CalibrateGyro (6); mpu. PrintActiveOffsets (); // turn on the DMP, ngayong handa na ito Serial.println (F ("Enabling DMP …")); mpu.setDMPEn pinagana (totoo); // paganahin ang Arduino makagambala ng pagtuklas ng Serial.print (F ("Pagpapagana ng pagtuklas ng nakakagambala (Arduino panlabas na makagambala")); Serial.print (digitalPinToInterrupt (INTERRUPT_PIN)); Serial.println (F (")…")); attachInterrupt (digitalPinToInterrupt (INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); // itakda ang aming DMP Ready flag kaya alam ng pangunahing pag-andar ng loop na) okay na gamitin ito Serial.println (F ("Handa na ang DMP! Naghihintay para sa unang makagambala …")); dmpReady = totoo; // makakuha ng inaasahang laki ng packet ng DMP para sa paglaon sa paghahambing packetSize = mpu.dmpGetFIFOPacketSize (); } iba pa {// ERROR! // 1 = Nabigo ang paunang pag-load ng memorya // 2 = Nabigo ang mga pag-update ng pagsasaayos ng DMP // (kung masisira ito, karaniwang ang code ay magiging 1) Serial.print (F ("Nabigo ang Initialization ng DMP (code")); Serial. i-print (devStatus); Serial.println (F (")")); }} void loop () {kung (! dmpReady) bumalik; kung (mpu.dmpGetCurrentFIFOPacket (fifoBuffer)) {// Kunin ang Pinakabagong packet // display Euler angles sa degree mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpGetGravity (& gravity, & 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; kung (abs (x) <45 && abs (y) 45 && abs (x) <135 && (abs (y) 135)) {activeColor = pixel. Color (255, 0, 0); // Red kapag lumiko sa gilid} iba pa kung (x <-45 && abs (x) <135 && (abs (y) 135)) {activeColor = pixel. Color (0, 255, 0); // Green kapag lumiko sa pangalawang bahagi} iba pa kung (y> 45 && abs (y) <135 && (abs (x) 135)) {activeColor = pixel. Color (255, 255, 0); // Dilaw kapag lumiko sa ikatlong panig} iba pa kung (y <-45 && abs (y) <135 && (abs (x) 135)) {activeColor = pixel. Color (0, 0, 255); // Blue kapag lumiko sa ika-apat na bahagi} iba pa kung (abs (y)> 135 && abs (x)> 135) {activeColor = pixel. Color (0, 0, 0); // Itim kapag nakabaligtad} kung (activeColor! = OldActiveColor) {pix.clear (); pix.fill (activeColor); pix.show (); oldActiveColor = activeColor; }}

Sa wakas maaari mong buksan at i-upload ang ColorCube.ino file. Ilagay ang ColorCube ng patag na ibabaw at buksan ito. Huwag ilipat ito hanggang magsimula itong magaan na may puting kulay pagkatapos ng pagkakalibrate (ilang segundo). Susunod maaari mong ilagay ang ColorCube sa gilid at magbabago ang kulay - bawat panig ay may sariling kulay - pula, berde, asul, dilaw. Ang ColorCube ay napupunta kapag ito ay nakabaligtad.

Hakbang 6: Pagtitipon

Pagtitipon
Pagtitipon
Pagtitipon
Pagtitipon
Pagtitipon
Pagtitipon

Maging banayad habang nag-iipon. Ang mga wire at lahat ng bahagi ay hindi gusto ng magaspang na pag-uugali.

Button 3d naka-print na bahagi - marahang ilagay ang pindutan sa butas sa ilalim na naka-print na bahagi (tulad ng ipinakita sa larawan), kailangan itong lumabas at lumabas nang maayos, kung hindi gumagamit ng scalpel o matalim na kutsilyo o buhangin na papel upang alisin ang lahat ng labis na materyal (karamihan sa loob ng tuktok ng isang butas ng bilog sa ilalim na bahagi). (larawan)

Ilagay ang MPU-6050, Arduino Nano, TP4056 at MT3608 sa kanilang mga butas. Ang kahon ay may mga protrusion kung saan mo ipinasok ang MPU-6050 at MT3608. Ilagay ang mga konektor ng USB ng Arduino Nano at TP4056 sa kanilang mga butas sa mga gilid na dingding ng kahon. (larawan)

Gumamit ng 3d naka-print na lock upang ayusin ang mga bahagi (siguraduhin na ang lahat ng mga bahagi ay mahuhusay na inilalagay sa ilalim na bahagi). Ito ay mahalaga sapagkat ang isang tao ay tiyak na susubukan upang i-play sa iyong ColorCube tulad ng sa dice. (larawan)

Ilagay at i-secure ang baterya sa butas nito kung hindi ito mahigpit na hawakan.

Ilagay ang pindutan ng Self-locking sa handa na butas sa ibabang bahagi. Ang pindutan ng self-locking ay dapat na nasa posisyon na ON (maikli). Dahan-dahang itulak ang button pababa. Subukan ang pagpapaandar na may pindutang naka-print na 3d. (larawan)

Gumamit ng dalawang M2 na turnilyo upang ayusin ang LED Ring sa gitnang naka-print na bahagi. Mahusay na gamitin ang oryentasyon ng singsing kung saan ang mga contact sa wire ay nasa bilugan na butas ng gitnang naka-print na bahagi. (larawan)

Opsyonal: Gumamit ng isang patak ng mainit na pandikit dito at doon - koneksyon sa mga wire sa pag-ring, para sa masyadong mahabang mga wire, kung ang anumang bagay ay hindi sapat na masikip atbp Maaari itong gawing mas matibay ang iyong ColorCube.

Ayusin ang mga wire sa loob ng ColorCube upang hindi maipit sa pamamagitan ng mga naka-print na bahagi. Ilagay ang gitnang bahagi sa ilalim ng isa. Gumamit ng M3 screw upang ayusin ito. (larawan)

Panghuli dahan-dahang itulak ang itaas na naka-print na bahagi sa ilalim ng isa. (larawan)

Hakbang 7: Tapos Na

Pagbati. Magsaya ka

Inirerekumendang: