Mundarija:

ColorCube: 7 qadam (rasmlar bilan)
ColorCube: 7 qadam (rasmlar bilan)

Video: ColorCube: 7 qadam (rasmlar bilan)

Video: ColorCube: 7 qadam (rasmlar bilan)
Video: How to solve color box puzzle in seconds 😍 #puzzle #boxpuzzle #easytrick #solution #games #viral 2024, Dekabr
Anonim
Image
Image
ColorCube
ColorCube
ColorCube
ColorCube

Men bu chiroqni nevaram ranglarni o'rganayotganda yasaganman. Men MagicCube loyihasidan ilhomlandim, lekin oxir -oqibat barcha qismlarni noldan yaratdim. Chop etish oson va yig'ish oson, siz gyro modulining qanday ishlashini bilib olasiz.

1 -qadam: materiallar

Materiallar
Materiallar

Arduino qismi:

  • Arduino Nano (lehim boshi pimsiz)
  • MPU-6050 3 o'qli gyro moduli
  • TP4056 Micro USB batareya zaryadlovchi moduli
  • MT3608 Step Up Power Booster moduli
  • LiPo batareyasi 902936 900mA yoki 503035 3.7V 500mA. Siz har qanday LiPo batareyasini 3, 7V va o'lchamlari 35x30x15 mm dan kichikroq ishlatishingiz mumkin, lekin batareyani teshikka mahkamlashingiz kerak.
  • PS-22F28 O'z-o'zidan qulflanadigan tugma yoki PS-22F27 o'z-o'zidan qulflanadigan tugma bosilgan qismga juda mos keladi.
  • LED RGB WS2812B uzuk - tashqi diametri 16 ta LED - har xil sonli LEDlar bo'lsa ham har qanday halqadan foydalanishingiz mumkin (kodda bitta konstantani o'zgartirish kerak - #define NUMPIXELS 16), maksimal diametri 76 mm (siz Neopixel tayoqchasidan ham foydalanishingiz mumkin) 8x LED yoki WS2812b bilan har qanday LED tasmasi).

Ring misollari: 8 LED 32mm12 LED 38mm12 LED 50mm16 LED 60mm24 LED 66 mm16 LED 44mm

O'rnatish uchun siz o'rtada bosilgan har qanday teshikdan foydalanishingiz mumkin. Ular deyarli har qanday variantni qamrab oladi (halqaning 100% markazlashtirilgan bo'lishi shart emas).

Simlar

Kub

  • Kubning yuqori qismi uchun PLA filamenti - oq rangdan foydalaning, chunki shaffof yaxshi emas (LEDlar ko'rinadi va rangi silliq emas), mening tavsiyam Prusament Vanilla White
  • Pastki, o'rta va tugma qismlari uchun PLA filamenti - quyuq rangdan foydalaning, chunki ba'zi Arduino modullarining yuqori qismida chiroqlar bor va u kubikli LED ranglariga mos kelmaydi, mening tavsiyam Prusament Galaxy Black
  • 1x M3x5 o'z -o'zidan tejamkor vint - uzunligi (10 mm) va bosh shakli muhim emas - vida ko'rinmaydi
  • 2x M2x3 o'z -o'zidan tejamkor vint - uzunligi (5 mm) va bosh shakli muhim emas - vintlar ko'rinmaydi

Asboblar

  • 3D printer
  • Ko'p metrli
  • Lehimlash temir
  • Tornavida

2 -qadam: Chop etish

Bosib chiqarish
Bosib chiqarish
Bosib chiqarish
Bosib chiqarish

ColorCube -ning barcha qismlari Autodesk Fusion360 -da yaratilgan. f3d fayli biriktirilgan.

ColorCube Prusa i3 MK3S printerida barcha standart sozlamalar bilan chop etilgan va men har xil printerlarda kerakli o'zgarishlarni kutmayman. PLA uchun sevimli sozlamalaringizdan foydalaning (agar PLA -da chop etilgan bo'lsa, PETG yoki ASA -dan foydalanish muammosiz).

3D bosib chiqarish parametrlari:

  • Qatlam 0,2 mm (PrusaSlicer -da 0,2 mm QUALITY sozlamalari)
  • PrusaSlicer -da Prusament PLA filament sozlamalari
  • 15% to'ldirish
  • Qo'llab -quvvatlash yo'q
  • Chegara yo'q

3 -qadam: O'chirish

O'chirish
O'chirish

4 -qadam: Lehimlash

Lehimlash
Lehimlash
Lehimlash
Lehimlash
Lehimlash
Lehimlash

Ogohlantirish: MT3608 DC-DC kuchaytirgichi 5V chiqishiga ishonch hosil qilish uchun ko'p o'lchagichdan foydalaning. Birinchidan - o'lchashdan oldin - qirrani soat yo'nalishi bo'yicha oxirigacha aylantiring (bosish). Kirish uchun kuchlanishni (3, 7V) ulaganda, u taxminan bir xil qiymatni berishi kerak. Soat yo'nalishi bo'yicha teskari aylantiring (sizga 10-20 to'liq burilish kerak bo'ladi) va to'satdan kuchlanish ko'tariladi. 5V kuchlanishni sekin qo'ying. (rasm)

Kubning pastki qismiga qarang. Har bir komponentning o'z teshiklari bor. U har bir komponent orasidagi qancha uzunlikdagi simlar kerakligini aniqlaydi (ortiqcha simlardan foydalanmang, aks holda siz simli o'rmon olasiz). (rasm)

Faqat Arduino Nano va LED halqasi orasidagi lehim simlari (3 ta sim: qizil 5V - 5V, qora GND - GND, ko'k D6 - DI). Keyingi bobdan LED halqasining ishlashini tekshiring. (rasm)

Agar hamma narsa yaxshi bo'lsa, Gyro MPU6050 (5 sim: qizil 5V - VCC, qora GND - GND, ko'k A4 - SDA, yashil A5 - SCL, sariq D2 - INT) qo'shishni davom ettiring. ColorCube.ino kodini yuklang va test qiling (boshqa komponentlar faqat batareya va zaryad uchun). (rasm)

Agar hamma narsa OK bo'lsa, qolgan komponentlarni qo'shing. Faqat qizil (+) va qora (-) simlar mavjud. O'z-o'zidan qulflash tugmachasidagi o'ng pinlarni tanlang (bosilmaganda ulanmagan). Batareya va batareyaning zaryadlanishini tekshiring. (rasm)

Zaryad olayotganda TP4056 qizil LED chiroqlari va to'liq zaryadlanganda ko'k LED chiroqlar. O'rta bosilgan qismdagi TP4056 ustidagi teshik LED chiroqni ColorCube -ning yuqori qismiga o'tkazadi va siz zaryadlash bosqichini aniqlay olasiz. (rasm)

5 -qadam: kod

Avval siz kerakli kutubxonalarni yuklab olishingiz kerak.

Adafruit Neopixel kutubxonasi uchun batafsil ko'rsatmalar mavjud:

LED halqasining funksionalligi testi: Siz kutubxonaga kiritilgan misol orqali o'z davrangizni sinab ko'rishingiz mumkin. Faylni Fayl/Misollar/Adafruit NeoPixels/dan oching va yuklang (bu qatorni siz foydalanayotgan piksellar soniga to'g'ri sozlashni unutmang: #define NUMPIXELS 16).

I2Cdev va MPU6050: https://github.com/jrowberg/i2cdevlib saytidan i2cdevlib-master.zip faylini yuklab oling va oching. I2cdevlib-master/Arduino ikkita pastki jildni ochilmagan papkasini nusxalash: I2Cdev va MPU6050. Ikkalasi ham Arduino IDE kutubxona papkasiga nusxa ko'chiriladi (agar standart o'rnatish bo'lsa, Hujjatlar/Arduino/kutubxonalari).

Kutubxonalar nusxalanganidan so'ng Arduino IDE -ni qayta ishga tushirishni unutmang.

#include #ifdef _AVR_ #include // 16 MGts uchun zarur Adafruit Trinket #endif #include "Wire.h" o'z ichiga "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" MPU6050 mpu; #define INTERRUPT_PIN 2 // 2 -pinni Arduino Uno -da ishlating va ko'pchilik taxtalarda #PIN -kodni belgilang 6 #NUMPIXELS 16 -ni aniqlang // Adafruit_NeoPixel piksellarining to'g'ri sonini o'rnating (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); uint32_t activeColor, oldActiveColor = 0; bool dmpReady = noto'g'ri; uint8_t mpuIntStatus; uint8_t devStatus; uint16_t packetSize; uint16_t fifoCount; uint8_t fifoBuffer [64]; Quaternion q; VectorFloat tortishish kuchi; suzuvchi aylanma [3]; int x, y, z; o'zgaruvchan bool mpuInterrupt = false; void dmpDataReady () {mpuInterrupt = rost; } void setup () {Serial.begin (115200); piksel.begin (); piksellar aniq (); piksel.setBrightness (128); #if aniqlangan (_ AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // I2C avtobusiga qo'shilish (I2Cdev kutubxonasi buni avtomatik ravishda qilmaydi) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin (); Wire.setClock (400000); // 400 kHz chastotali I2C. Kompilyatsiya qilishda qiyinchiliklar bo'lsa, bu qatorga izoh bering #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire:: setup (400, true); #endif while (! Serial); Serial.println (F ("I2C qurilmalarini ishga tushirish …")); mpu.initialize (); pinMod (INTERRUPT_PIN, INPUT); // ulanishni tekshirish Serial.println (F ("Qurilma ulanishlarini sinab ko'rish …")); Serial.println (mpu.testConnection ()? F ("MPU6050 ulanishi muvaffaqiyatli"): F ("MPU6050 ulanishi bajarilmadi")); // tayyor bo'lishni kuting // Serial.println (F ("\ nDMP dasturlash va demoni boshlash uchun istalgan belgini yuboring:")); // while (Serial.available () && Serial.read ()); // bo'sh bufer // while (! Serial.available ()); // ma'lumotlarni kuting // while (Serial.available () && Serial.read ()); // bo'sh tampon yana // DMP Serial.println -ni yuklang va sozlang (F ("DMP boshlanmoqda …")); devStatus = mpu.dmpInitialize (); // bu erda minimal sezgirlik uchun o'lchangan, o'z gyro ofsetlarini etkazib bering mpu.setXGyroOffset (0); mpu.setYGyroOffset (0); mpu.setZGyroOffset (0); mpu.setZAccelOffset (1688); // sinov chipi uchun 1688 zavod standarti // uning ishlaganligiga ishonch hosil qiling (agar shunday bo'lsa, 0 qaytariladi) if (devStatus == 0) {// Kalibrlash vaqti: ofsetlarni hosil qiling va MPU6050 mpu. CalibrateAccel (6); mpu. CalibrateGyro (6); mpu. PrintActiveOffsets (); // DMP -ni yoqing, endi u tayyor Serial.println (F ("DMP -ni yoqish …")); mpu.setDMPEnabled (haqiqiy); // Arduino uzilishini aniqlashni yoqish Serial.print (F ("Uzilishlarni aniqlashni yoqish (Arduino tashqi uzilish")); Serial.print (digitalPinToInterrupt (INTERRUPT_PIN)); Serial.println (F (")…")); attachInterrupt (digitalPinToInterrupt (INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); // DMP Ready bayrog'ini o'rnating, shunda asosiy loop () funktsiyasi uni ishlatishni biladi Serial.println (F ("DMP tayyor! Birinchi uzilish kutilmoqda …")); dmpReady = rost; // keyinchalik taqqoslash uchun kutilgan DMP paket hajmini oling packetSize = mpu.dmpGetFIFOPacketSize (); } boshqa {// XATO! // 1 = xotira yuklanmadi // 2 = DMP konfiguratsiyasini yangilab bo'lmadi // (agar u buzilsa, odatda kod 1 bo'ladi) Serial.print (F ("DMP ishga tushirilmadi (kod")); Seriya. chop etish (devStatus); Serial.println (F (")")); }} void loop () {if (! dmpReady) qaytish; if (mpu.dmpGetCurrentFIFOPacket (fifoBuffer)) {// Oxirgi paketni olish // Euler burchaklarini gradusda ko'rsatish mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpGetGravity (& tortish kuchi, & q); mpu.dmpGetYawPitchRoll (aylanish, & q, & tortishish); } Serial.print ("X"); Serial.print (aylanish [2] * 180/M_PI); Serial.print ("\ t Y"); Serial.print (aylanish [1] * 180/M_PI); Serial.print ("\ t Z"); Serial.println (aylanish [0] * 180/M_PI); x = aylanma [2] * 180/M_PI; y = aylanma [1] * 180/M_PI; z = aylanma [0] * 180/M_PI; if (abs (x) <45 && abs (y) 45 && abs (x) <135 && (abs (y) 135)) {activeColor = piksellar. Color (255, 0, 0); // Qizil yon tomonga burilganda} else if if (x <-45 && abs (x) <135 && (abs (y) 135)) {activeColor = piksel. Color (0, 255, 0); // Ikkinchi tomonga burilganda yashil}} if if if (y> 45 && abs (y) <135 && (abs (x) 135)) {activeColor = piksellar. Color (255, 255, 0); // Uchinchi tomonga burilganda sariq}} if if if (y <-45 && abs (y) <135 && (abs (x) 135)) {activeColor = piksellar. Color (0, 0, 255); // To'rtinchi tomonga o'girilganda ko'k} else if else (abs (y)> 135 && abs (x)> 135) {activeColor = piksel. Color (0, 0, 0); // Qora teskari bo'lganda} if (activeColor! = OldActiveColor) {piksel.clear (); piksel.fill (faolColor); piksel.show (); oldActiveColor = faol rang; }}

Oxir -oqibat siz ColorCube.ino faylini ochishingiz va yuklashingiz mumkin. ColorCube -ni tekis yuzaga qo'ying va uni yoqing. Kalibrlashdan keyin (bir necha soniya) oq rang bilan ochilguncha uni qimirlatmang. Keyin ColorCube -ni yon tomonga qo'yishingiz mumkin va rang o'zgaradi - har bir tomonning o'ziga xos rangi bor - qizil, yashil, ko'k, sariq. ColorCube teskari o'girilganda o'chadi.

6 -qadam: yig'ish

Yig'ish
Yig'ish
Yig'ish
Yig'ish
Yig'ish
Yig'ish

O'rnatish paytida yumshoq bo'ling. Simlar va barcha qismlar qo'pol xatti -harakatlarni yoqtirmaydi.

Tugmachali 3D bosilgan qism - tugmani bosilgan pastki qismidagi teshikka yumshoq joylashtiring (rasmda ko'rsatilgandek), u hamma narsadan ortiqcha materialni olib tashlash uchun skalpel yoki o'tkir pichoq yoki qum qog'ozidan foydalanmasa, silliq kirishi va chiqib ketishi kerak. pastki qismida aylana teshigining yuqori qismi). (rasm)

MPU-6050, Arduino Nano, TP4056 va MT3608-ni teshiklariga qo'ying. Qutida chiqishlar bor, uning ostiga siz MPU-6050 va MT3608 ni qo'yasiz. Arduino Nano va TP4056 USB ulagichlarini qutining yon devorlaridagi teshiklariga joylashtiring. (rasm)

Komponentlarni tuzatish uchun 3d bosma qulfdan foydalaning (barcha komponentlar pastki qismga mahkam joylashtirilganligiga ishonch hosil qiling). Bu juda muhim, chunki kimdir sizning ColorCube bilan zar bilan o'ynagani aniq. (rasm)

Batareyani mahkam ushlamasa, uning teshigiga qo'ying va mahkamlang.

O'z-o'zidan qulflash tugmachasini pastki qismidagi teshikka joylashtiring. O'z-o'zidan qulflash tugmasi ON holatida bo'lishi kerak (qisqa). Tugmani sekin pastga bosing. 3D bosilgan tugma yordamida funksionallikni tekshirish. (rasmlar)

LED halqasini o'rta bosilgan qismga mahkamlash uchun ikkita M2 vintni ishlating. O'rtacha bosilgan qismning dumaloq teshigida simli aloqa bo'ladigan halqaning yo'nalishini ishlatish yaxshidir. (rasmlar)

Majburiy emas: bu erda va u erda bir tomchi issiq elim ishlating - simlar uzukka ulanadi, juda uzun simlar uchun, agar biror narsa etarlicha qattiq bo'lmasa va hokazo. Bu sizning ColorCube -ni yanada mustahkam qiladi.

ColorCube ichidagi simlarni bosilgan qismlar qisilmasligi uchun joylashtiring. O'rta qismini pastki qismiga qo'ying. Uni tuzatish uchun M3 vintini ishlating. (rasm)

Nihoyat, yuqoridan bosilgan qismni sekin pastga suring. (rasm)

7 -qadam: bajarildi

Tabrik. Maza qiling.

Tavsiya: