สารบัญ:
- ขั้นตอนที่ 1: วัสดุ
- ขั้นตอนที่ 2: การพิมพ์
- ขั้นตอนที่ 3: วงจร
- ขั้นตอนที่ 4: การบัดกรี
- ขั้นตอนที่ 5: รหัส
- ขั้นตอนที่ 6: การประกอบ
- ขั้นตอนที่ 7: เสร็จสิ้น
วีดีโอ: ColorCube: 7 ขั้นตอน (พร้อมรูปภาพ)
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:03
ฉันทำโคมไฟนี้ให้หลานสาวของฉันตอนที่เธอกำลังเรียนสี ฉันได้รับแรงบันดาลใจจากโครงการ 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: เสร็จสิ้น
ขอแสดงความยินดี มีความสุข.
แนะนำ:
DIY 37 Leds เกมรูเล็ต Arduino: 3 ขั้นตอน (พร้อมรูปภาพ)
DIY 37 Leds เกมรูเล็ต Arduino: รูเล็ตเป็นเกมคาสิโนที่ตั้งชื่อตามคำภาษาฝรั่งเศสหมายถึงวงล้อเล็ก
หมวกนิรภัย Covid ส่วนที่ 1: บทนำสู่ Tinkercad Circuits!: 20 ขั้นตอน (พร้อมรูปภาพ)
Covid Safety Helmet ตอนที่ 1: บทนำสู่ Tinkercad Circuits!: สวัสดีเพื่อน ๆ ในชุดสองตอนนี้ เราจะเรียนรู้วิธีใช้วงจรของ Tinkercad - เครื่องมือที่สนุก ทรงพลัง และให้ความรู้สำหรับการเรียนรู้เกี่ยวกับวิธีการทำงานของวงจร! หนึ่งในวิธีที่ดีที่สุดในการเรียนรู้คือการทำ ดังนั้น อันดับแรก เราจะออกแบบโครงการของเราเอง: th
Bolt - DIY Wireless Charging Night Clock (6 ขั้นตอน): 6 ขั้นตอน (พร้อมรูปภาพ)
Bolt - DIY Wireless Charging Night Clock (6 ขั้นตอน): การชาร์จแบบเหนี่ยวนำ (เรียกอีกอย่างว่าการชาร์จแบบไร้สายหรือการชาร์จแบบไร้สาย) เป็นการถ่ายโอนพลังงานแบบไร้สาย ใช้การเหนี่ยวนำแม่เหล็กไฟฟ้าเพื่อจ่ายกระแสไฟฟ้าให้กับอุปกรณ์พกพา แอปพลิเคชั่นที่พบบ่อยที่สุดคือ Qi Wireless Charging st
4 ขั้นตอน Digital Sequencer: 19 ขั้นตอน (พร้อมรูปภาพ)
4 ขั้นตอน Digital Sequencer: CPE 133, Cal Poly San Luis Obispo ผู้สร้างโปรเจ็กต์: Jayson Johnston และ Bjorn Nelson ในอุตสาหกรรมเพลงในปัจจุบัน ซึ่งเป็นหนึ่งใน “instruments” เป็นเครื่องสังเคราะห์เสียงดิจิตอล ดนตรีทุกประเภท ตั้งแต่ฮิปฮอป ป๊อป และอีฟ
ป้ายโฆษณาแบบพกพาราคาถูกเพียง 10 ขั้นตอน!!: 13 ขั้นตอน (พร้อมรูปภาพ)
ป้ายโฆษณาแบบพกพาราคาถูกเพียง 10 ขั้นตอน!!: ทำป้ายโฆษณาแบบพกพาราคาถูกด้วยตัวเอง ด้วยป้ายนี้ คุณสามารถแสดงข้อความหรือโลโก้ของคุณได้ทุกที่ทั่วทั้งเมือง คำแนะนำนี้เป็นการตอบสนองต่อ/ปรับปรุง/เปลี่ยนแปลงของ: https://www.instructables.com/id/Low-Cost-Illuminated-