สารบัญ:

ColorCube: 7 ขั้นตอน (พร้อมรูปภาพ)
ColorCube: 7 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: ColorCube: 7 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: ColorCube: 7 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: โคตรพ่อโคตรแม่แห่งเกม Puzzle ทั้งปวงกับ Color Cube SUDOKU by More Than A Game 2024, ธันวาคม
Anonim
Image
Image
ColorCube
ColorCube
ColorCube
ColorCube

ฉันทำโคมไฟนี้ให้หลานสาวของฉันตอนที่เธอกำลังเรียนสี ฉันได้รับแรงบันดาลใจจากโครงการ MagicCube แต่ในที่สุดก็สร้างทุกส่วนตั้งแต่เริ่มต้น พิมพ์ง่ายและประกอบง่าย คุณจะได้รับความรู้ว่าโมดูลไจโรทำงานอย่างไร

ขั้นตอนที่ 1: วัสดุ

วัสดุ
วัสดุ

ส่วน Arduino:

  • Arduino Nano (ดีกว่าไม่มีหมุดหัวบัดกรี)
  • MPU-6050 โมดูลไจโร 3 แกน
  • TP4056 โมดูลเครื่องชาร์จแบตเตอรี่ Micro USB
  • MT3608 Step Up Power Booster Module
  • แบตเตอรี่ LiPo 902936 900mA หรือ 503035 3.7V 500mA คุณสามารถใช้แบตเตอรี่ LiPo ที่มีขนาด 3, 7V และขนาดน้อยกว่า 35x30x15 มม. แต่คุณต้องยึดแบตเตอรี่ไว้ในรู
  • PS-22F28 ปุ่มล็อคตัวเองหรือ PS-22F27 ปุ่มล็อคตัวเองทั้งสองปุ่มพอดีกับส่วนที่พิมพ์ได้อย่างลงตัว
  • LED RGB WS2812B Ring – 16 LED เส้นผ่านศูนย์กลางภายนอก 68 มม. - คุณสามารถใช้วงแหวนใดก็ได้แม้จะมีจำนวน LED ต่างกันก็ตาม (ต้องเปลี่ยนค่าคงที่หนึ่งค่าในรหัส – #define NUMPIXELS 16) โดยมีเส้นผ่านศูนย์กลางสูงสุด 76 มม. (คุณยังสามารถใช้ Neopixel Stick กับ 8x LED หรือแถบ LED ใดๆ ที่มี WS2812b)

ตัวอย่างวงแหวน:8 LED 32mm12 LED 38mm12 LED 50mm16 LED 60mm24 LED 66 mm16 LED 44mm

สำหรับการตัดต่อ คุณสามารถใช้รูใดก็ได้ที่พิมพ์ไว้ตรงกลาง ครอบคลุมเกือบทุกตัวเลือก (ไม่จำเป็นต้องให้แหวนอยู่ตรงกลาง 100%)

สายไฟ

คิวบ์

  • PLA Filament สำหรับส่วนบนของลูกบาศก์ – ใช้สีขาวเพราะโปร่งใสไม่ดี (มองเห็น LED และสีไม่เรียบ) คำแนะนำของฉันคือ Prusament Vanilla White
  • PLA Filament สำหรับชิ้นส่วนด้านล่าง ตรงกลาง และปุ่ม - ใช้สีเข้มเพราะโมดูล Arduino บางตัวมีไฟที่ด้านบนและไม่พอดีกับสี LED แบบลูกบาศก์ คำแนะนำของฉันคือ Prusament Galaxy Black
  • 1x M3x5 สกรูเกลียวปล่อย - ความยาว (10 มม.) และรูปร่างของหัวไม่สำคัญ - มองไม่เห็นสกรู
  • สกรูต๊าปตัวเอง M2x3 2x - ความยาว (5 มม.) และรูปร่างหัวไม่สำคัญ - มองไม่เห็นสกรู

เครื่องมือ

  • เครื่องพิมพ์ 3 มิติ
  • มัลติมิเตอร์
  • หัวแร้ง
  • ไขควง

ขั้นตอนที่ 2: การพิมพ์

การพิมพ์
การพิมพ์
การพิมพ์
การพิมพ์

ทุกส่วนของ ColorCube ได้รับการออกแบบใน Autodesk Fusion360 ไฟล์ f3d แนบมาด้วย

ColorCube พิมพ์บนเครื่องพิมพ์ Prusa i3 MK3S ด้วยการตั้งค่าเริ่มต้นทั้งหมด และฉันไม่คาดหวังการเปลี่ยนแปลงใดๆ ที่จำเป็นในเครื่องพิมพ์ที่แตกต่างกัน ใช้การตั้งค่าที่คุณชื่นชอบสำหรับ PLA (หากพิมพ์บน PLA ไม่มีปัญหาในการใช้ PETG หรือ ASA)

พารามิเตอร์การพิมพ์ 3 มิติ:

  • เลเยอร์ 0.2 มม. (การตั้งค่าคุณภาพ 0.2 มม. บน PrusaSlicer)
  • การตั้งค่า Prusament PLA Filament บน PrusaSlicer
  • เติม 15%
  • ไม่สนับสนุน
  • ไม่มีปีก

ขั้นตอนที่ 3: วงจร

วงจร
วงจร

ขั้นตอนที่ 4: การบัดกรี

บัดกรี
บัดกรี
บัดกรี
บัดกรี
บัดกรี
บัดกรี

คำเตือน: ใช้มัลติมิเตอร์เพื่อให้แน่ใจว่า DC-DC booster MT3608 กำลังเอาต์พุต 5V ประการแรก – ก่อนการวัด - หมุนขอบตามเข็มนาฬิกาไปจนสุด (คลิก) เมื่อต่อแรงดันไฟฟ้า (3, 7V) เข้ากับอินพุตจะต้องให้ค่าเท่ากัน หมุนทวนเข็มนาฬิกา (คุณจะต้องหมุนเต็ม 10-20 รอบ) และแรงดันไฟฟ้าก็เพิ่มขึ้นทันที ตั้งค่าเอาต์พุต 5V อย่างนุ่มนวล (รูปถ่าย)

ลองดูพิมพ์ส่วนล่างของลูกบาศก์ ทุกองค์ประกอบมีรูของตัวเอง มันกำหนดความยาวของสายไฟระหว่างแต่ละส่วนประกอบที่คุณต้องการ (อย่าใช้สายไฟที่ยาวเป็นพิเศษมิฉะนั้นคุณจะได้รับสายไฟป่า) (รูปถ่าย)

สายบัดกรีระหว่าง Arduino Nano และวงแหวน LED เท่านั้น (3 สาย: สีแดง 5V - 5V, สีดำ GND – GND, สีน้ำเงิน D6 - DI) เรียกใช้การทดสอบการทำงานของวงแหวน LED จากบทต่อไป (รูปถ่าย)

หากทุกอย่างเรียบร้อย ให้ดำเนินการต่อด้วยการเพิ่ม Gyro MPU6050 (5 สาย: สีแดง 5V - VCC, สีดำ GND - GND, สีน้ำเงิน A4 - SDA, สีเขียว A5 – SCL, สีเหลือง D2 - INT) อัปโหลดโค้ด ColorCube.ino และทดสอบ (ส่วนประกอบอื่นๆ ใช้สำหรับแบตเตอรี่และการชาร์จเท่านั้น) (รูปถ่าย)

หากตกลงทั้งหมดให้เพิ่มส่วนประกอบที่เหลือ มีเพียงสายสีแดง (+) และสีดำ (-) เลือกพินขวาบนปุ่มล็อคตัวเอง (ไม่ได้เชื่อมต่อเมื่อไม่ได้กด) ทดสอบการทำงานเกี่ยวกับการชาร์จแบตเตอรี่และการชาร์จแบตเตอรี่ (รูปถ่าย)

ไฟ LED สีแดงบน TP4056 เมื่อชาร์จและไฟ LED สีน้ำเงินเมื่อชาร์จเต็ม รูที่อยู่เหนือ TP4056 ในส่วนที่พิมพ์ตรงกลางจะส่งไฟ LED ไปยังส่วนบนของ ColorCube และคุณสามารถรับรู้เฟสของการชาร์จได้ (รูปถ่าย)

ขั้นตอนที่ 5: รหัส

ประการแรก คุณต้องดาวน์โหลดไลบรารีที่จำเป็น

มีคำแนะนำโดยละเอียดสำหรับไลบรารี Adafruit Neopixel:

การทดสอบการทำงานของวงแหวน LED: คุณสามารถทดสอบวงจรของคุณด้วยตัวอย่างที่รวมอยู่ในไลบรารี เปิดไฟล์จาก File/Examples/Adafruit NeoPixels/simple แล้วอัปโหลด (อย่าลืมตั้งค่าบรรทัดนี้อย่างถูกต้องตามจำนวนพิกเซลที่คุณใช้: #define NUMPIXELS 16)

I2Cdev และ MPU6050: ดาวน์โหลดและแตกไฟล์ i2cdevlib-master.zip จาก https://github.com/jrowberg/i2cdevlib คัดลอกโฟลเดอร์ที่แตกไฟล์แล้ว i2cdevlib-master/Arduino สองโฟลเดอร์ย่อย: I2Cdev และ MPU6050 ทั้งสองคัดลอกไปยังโฟลเดอร์ไลบรารี Arduino IDE (Documents/Arduino/libraries หากติดตั้งเริ่มต้น)

อย่าลืมรีสตาร์ท Arduino IDE หลังจากคัดลอกไลบรารี

#include #ifdef _AVR_ #include // จำเป็นสำหรับ Adafruit Trinket 16 MHz #endif #include "Wire.h" รวมถึง "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" MPU6050 mpu; #define INTERRUPT_PIN 2 // ใช้พิน 2 บน Arduino Uno และบอร์ดส่วนใหญ่ #define PIN 6 #define NUMPIXELS 16 // กำหนดจำนวนพิกเซล LED ที่ถูกต้อง Adafruit_NeoPixel พิกเซล (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); uint32_t activeColor, oldActiveColor=0; บูล dmpReady = เท็จ; uint8_t mpuIntStatus; uint8_t devStatus; uint16_t ขนาดแพ็คเก็ต; uint16_t fifoCount; uint8_t fifoBuffer[64]; ควอเทอร์เนียน q; VectorFloat แรงโน้มถ่วง; ลอย rotace[3]; int x, y, z; บูลผันผวน mpuInterrupt = false; เป็นโมฆะ dmpDataReady () { mpuInterrupt = true; } การตั้งค่าเป็นโมฆะ () { Serial.begin (115200); พิกเซล.begin(); พิกเซลชัดเจน (); พิกเซล.setBrightness (128); #if กำหนด (_AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // เข้าร่วมบัส I2C (ไลบรารี I2Cdev ไม่ทำโดยอัตโนมัติ) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin(); Wire.setClock(400000); // นาฬิกา 400kHz I2C แสดงความคิดเห็นบรรทัดนี้หากมีปัญหาในการรวบรวม #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire::setup(400, true); #endif ในขณะที่ (!Serial); Serial.println(F("กำลังเริ่มต้นอุปกรณ์ I2C…")); mpu.initialize(); โหมดพิน (INTERRUPT_PIN, INPUT); // ตรวจสอบการเชื่อมต่อ Serial.println(F("กำลังทดสอบการเชื่อมต่ออุปกรณ์…")); Serial.println(mpu.testConnection() ? F("การเชื่อมต่อ MPU6050 สำเร็จ"): F("การเชื่อมต่อ MPU6050 ล้มเหลว")); // wait for ready // Serial.println(F("\nSend any character to start DMP programming and demo: ")); // ในขณะที่ (Serial.available() && Serial.read()); // บัฟเฟอร์ว่าง // ในขณะที่ (!Serial.available()); // รอข้อมูล // ในขณะที่ (Serial.available() && Serial.read()); // บัฟเฟอร์ว่างเปล่าอีกครั้ง // โหลดและกำหนดค่า DMP Serial.println(F("Initializing DMP…")); devStatus = mpu.dmp เริ่มต้น (); // จัดหาไจโรออฟเซ็ตของคุณเองที่นี่ ปรับขนาดสำหรับความไวขั้นต่ำ mpu.setXGyroOffset(0); mpu.setYGyroOffset(0); mpu.setZGyroOffset(0); mpu.setZAccelOffset(1688); // 1688 ค่าเริ่มต้นจากโรงงานสำหรับชิปทดสอบของฉัน // ตรวจสอบให้แน่ใจว่ามันใช้งานได้ (คืนค่า 0 ถ้าใช่) ถ้า (devStatus == 0) { // เวลาสอบเทียบ: สร้างออฟเซ็ตและปรับเทียบ MPU6050 mpu. CalibrateAccel (6); mpu. CalibrateGyro(6); mpu. PrintActiveOffsets(); // เปิด DMP ตอนนี้ก็พร้อมแล้ว Serial.println(F("Enabled DMP…")); mpu.setDMPEnabled(จริง); // เปิดใช้งานการตรวจจับการขัดจังหวะ Arduino Serial.print (F ("การเปิดใช้งานการตรวจจับการขัดจังหวะ (Arduino ขัดจังหวะภายนอก")); Serial.print (digitalPinToInterrupt (INTERRUPT_PIN)); Serial.println (F (")…")); AttachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); // ตั้งค่าสถานะ DMP Ready ของเราเพื่อให้ฟังก์ชัน main loop() รู้ว่าสามารถใช้มันได้ Serial.println(F("DMP ready! Waiting for first interrupt…")); dmpReady = จริง; // รับขนาดแพ็คเก็ต DMP ที่คาดไว้สำหรับการเปรียบเทียบในภายหลัง packetSize = mpu.dmpGetFIFOPacketSize(); } อื่น ๆ { // ข้อผิดพลาด! // 1 = การโหลดหน่วยความจำเริ่มต้นล้มเหลว // 2 = การอัพเดตการกำหนดค่า DMP ล้มเหลว // (หากมันจะพัง โดยปกติรหัสจะเป็น 1) Serial.print(F("DMP Initialization failed (code ")); Serial.print พิมพ์ (devStatus); Serial.println (F(")")); } } void loop() { if (!dmpReady) กลับมา; if (mpu.dmpGetCurrentFIFOPacket (fifoBuffer)) { // รับแพ็กเก็ตล่าสุด // แสดงมุมออยเลอร์เป็นองศา mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpGetGravity(&แรงโน้มถ่วง &q); mpu.dmpGetYawPitchRoll(หมุน &q &แรงโน้มถ่วง); } Serial.print("X "); Serial.print(หมุน [2] * 180/M_PI); Serial.print(" \t Y "); Serial.print(หมุน [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; if(abs(x)<45 && abs(y)45 && abs(x)<135 && (abs(y)135)){ activeColor=pixels. Color(255, 0, 0); //สีแดงเมื่อหันไปด้านข้าง }else if(x<-45 && abs(x)<135 && (abs(y)135)){ activeColor=pixels. Color(0, 255, 0); // สีเขียวเมื่อหันไปด้านที่สอง }else if(y>45 && abs(y)<135 && (abs(x)135)){ activeColor=pixels. Color(255, 255, 0); // สีเหลืองเมื่อหันไปด้านที่สาม } else if(y<-45 && abs(y)<135 && (abs(x)135)){ activeColor=pixels. Color(0, 0, 255); // สีน้ำเงินเมื่อหันไปด้านที่สี่ } else if(abs(y)>135 && abs(x)>135){ activeColor=pixels. Color(0, 0, 0); // สีดำเมื่อกลับหัว } if(activeColor != oldActiveColor){ pixels.clear(); พิกเซล. เติม (activeColor); พิกเซล.show(); oldActiveColor=activeColor; } }

ในที่สุด คุณสามารถเปิดและอัปโหลดไฟล์ ColorCube.ino วาง ColorCube ของพื้นผิวเรียบแล้วเปิดเครื่อง อย่าเคลื่อนย้ายจนกว่าจะเริ่มสว่างเป็นสีขาวหลังจากการปรับเทียบ (ไม่กี่วินาที) ถัดไป คุณสามารถวาง ColorCube ที่ด้านข้างและสีจะเปลี่ยนไป – ทุกด้านมีสีของตัวเอง – สีแดง สีเขียว สีฟ้า สีเหลือง ColorCube ดับเมื่อพลิกคว่ำ

ขั้นตอนที่ 6: การประกอบ

การประกอบ
การประกอบ
การประกอบ
การประกอบ
การประกอบ
การประกอบ

มีความอ่อนโยนระหว่างการประกอบ สายไฟและทุกส่วนไม่ชอบพฤติกรรมหยาบ

ส่วนที่พิมพ์ 3 มิติของปุ่ม – ค่อยๆ ติดกระดุมที่รูในส่วนพิมพ์ด้านล่าง (ตามภาพ) ต้องเข้าและออกอย่างราบรื่น ถ้าไม่ใช้มีดผ่าตัด มีดคม หรือกระดาษทรายเพื่อขจัดวัสดุส่วนเกินออกทั้งหมด (ส่วนใหญ่อยู่ภายใน ด้านบนของรูวงกลมที่ส่วนล่าง) (รูปถ่าย)

ใส่ MPU-6050, Arduino Nano, TP4056 และ MT3608 ลงในรู กล่องมีส่วนยื่นใต้ที่คุณใส่ MPU-6050 และ MT3608 ใส่ขั้วต่อ USB ของ Arduino Nano และ TP4056 ลงในรูที่ผนังด้านข้างของกล่อง (รูปถ่าย)

ใช้ตัวล็อคที่พิมพ์ 3 มิติเพื่อแก้ไขส่วนประกอบ (ตรวจสอบให้แน่ใจว่าส่วนประกอบทั้งหมดวางที่ส่วนล่างอย่างแน่นหนา) เป็นสิ่งสำคัญเพราะใครบางคนจะพยายามเล่นกับ ColorCube ของคุณเหมือนกับลูกเต๋า (รูปถ่าย)

ใส่และใส่แบตเตอรี่ลงในรูถ้าไม่แน่น

วางปุ่มล็อคตัวเองเข้ากับรูที่เตรียมไว้ในส่วนล่าง ปุ่มล็อคตัวเองจะต้องอยู่ในตำแหน่งเปิด (สั้น) ค่อยๆ กดปุ่มลง ทดสอบการทำงานด้วยปุ่มพิมพ์ 3 มิติ (ภาพถ่าย)

ใช้สกรู M2 สองตัวเพื่อยึด LED Ring กับส่วนที่พิมพ์ตรงกลาง เหมาะที่จะใช้การวางแนวของวงแหวนที่หน้าสัมผัสลวดอยู่ในรูกลมของส่วนที่พิมพ์ตรงกลาง (ภาพถ่าย)

ทางเลือก: ใช้กาวร้อนหยดตรงนี้และตรงนั้น – ต่อสายไฟเข้ากับวงแหวน สำหรับสายไฟที่ยาวเกินไป หากมีสิ่งใดไม่แน่นเพียงพอ ฯลฯ จะทำให้ ColorCube ของคุณทนทานยิ่งขึ้น

จัดเรียงสายไฟภายใน ColorCube เพื่อไม่ให้ชิ้นส่วนที่พิมพ์ออกมาหนีบ ใส่ส่วนตรงกลางลงไปด้านล่าง ใช้สกรู M3 เพื่อแก้ไข (รูปถ่าย)

สุดท้ายค่อย ๆ ดันส่วนที่พิมพ์ด้านบนลงไปด้านล่าง (รูปถ่าย)

ขั้นตอนที่ 7: เสร็จสิ้น

ขอแสดงความยินดี มีความสุข.

แนะนำ: