विषयसूची:

ColorCube: 7 कदम (चित्रों के साथ)
ColorCube: 7 कदम (चित्रों के साथ)

वीडियो: ColorCube: 7 कदम (चित्रों के साथ)

वीडियो: ColorCube: 7 कदम (चित्रों के साथ)
वीडियो: color matching game tricks 2024, दिसंबर
Anonim
Image
Image
कलरक्यूब
कलरक्यूब
कलरक्यूब
कलरक्यूब

मैंने यह दीपक अपनी पोती के लिए तब बनाया था जब वह रंग सीख रही थी। मैं मैजिकक्यूब परियोजना से प्रेरित था लेकिन अंत में सभी भागों को खरोंच से बनाया। यह प्रिंट करना आसान है और इकट्ठा करना आसान है और आपको ज्ञान मिलेगा कि जाइरो मॉड्यूल कैसे काम करता है।

चरण 1: सामग्री

सामग्री
सामग्री

अरुडिनो भाग:

  • Arduino नैनो (सोल्डर हेडर पिन के बिना बेहतर)
  • एमपीयू -6050 3-एक्सिस गायरो मॉड्यूल
  • TP4056 माइक्रो USB बैटरी चार्जर मॉड्यूल
  • एमटी३६०८ स्टेप अप पावर बूस्टर मॉड्यूल
  • लीपो बैटरी 902936 900mA या 503035 3.7V 500mA। आप 3, 7V और 35x30x15mm से कम आकार वाली किसी भी LiPo बैटरी का उपयोग कर सकते हैं लेकिन आपको बैटरी को छेद में सुरक्षित करना होगा।
  • PS-22F28 सेल्फ-लॉकिंग बटन या PS-22F27 सेल्फ-लॉकिंग बटन दोनों ही प्रिंटेड हिस्से पर पूरी तरह से फिट होते हैं।
  • LED RGB WS2812B रिंग - 16 LED 68mm बाहरी व्यास - आप किसी भी रिंग का उपयोग विभिन्न संख्या में LED के साथ भी कर सकते हैं (कोड में एक स्थिरांक बदलना होगा - #define NUMPIXELS 16) 76mm के अधिकतम व्यास के साथ (आप एक Neopixel स्टिक का भी उपयोग कर सकते हैं 8x एलईडी या WS2812b के साथ कोई एलईडी पट्टी)।

रिंग उदाहरण: 8 एलईडी 32 मिमी 12 एलईडी 38 मिमी 12 एलईडी 50 मिमी 16 एलईडी 60 मिमी 24 एलईडी 66 मिमी 16 एलईडी 44 मिमी

असेंबल के लिए आप मध्य भाग में छपे किसी भी छेद का उपयोग कर सकते हैं। वे लगभग किसी भी विकल्प को कवर करते हैं (रिंग को 100% केंद्रित करने के लिए आवश्यक नहीं)।

तारों

घनक्षेत्र

  • क्यूब के शीर्ष भाग के लिए पीएलए फिलामेंट - सफेद रंग का उपयोग करें क्योंकि पारदर्शी अच्छा नहीं है (एलईडी दिखाई दे रहे हैं और रंग चिकना नहीं है), मेरी सिफारिश है प्रूसामेंट वेनिला व्हाइट
  • नीचे, मध्य और बटन भागों के लिए पीएलए फिलामेंट - गहरे रंग का उपयोग करें क्योंकि कुछ Arduino मॉड्यूल में शीर्ष पर रोशनी होती है और यह क्यूब एलईडी रंगों के साथ फिट नहीं होती है, मेरी सिफारिश प्रूसामेंट गैलेक्सी ब्लैक है
  • 1x M3x5 सेल्फ टैपिंग स्क्रू - लंबाई (10 मिमी) और सिर का आकार महत्वपूर्ण नहीं है - स्क्रू दिखाई नहीं दे रहा है
  • 2x M2x3 सेल्फ टैपिंग स्क्रू - लंबाई (5 मिमी) और सिर का आकार महत्वपूर्ण नहीं है - स्क्रू दिखाई नहीं दे रहे हैं

उपकरण

  • थ्री डी प्रिण्टर
  • मल्टी मीटर
  • सोल्डरिंग आयरन
  • पेंचकस

चरण 2: मुद्रण

मुद्रण
मुद्रण
मुद्रण
मुद्रण

ColorCube के सभी भागों को Autodesk Fusion360 में डिज़ाइन किया गया था। f3d फ़ाइल संलग्न है।

ColorCube सभी डिफ़ॉल्ट सेटिंग्स के साथ प्रूसा i3 MK3S प्रिंटर पर मुद्रित किया गया था और मुझे विभिन्न प्रिंटरों पर किसी भी आवश्यक परिवर्तन की उम्मीद नहीं है। पीएलए के लिए अपनी पसंदीदा सेटिंग्स का उपयोग करें (यदि पीएलए पर मुद्रित है, तो पीईटीजी या एएसए का उपयोग करने में कोई समस्या नहीं है)।

3 डी प्रिंटिंग पैरामीटर:

  • परत 0.2 मिमी (PrusaSlicer पर 0.2 मिमी गुणवत्ता सेटिंग्स)
  • प्रूसा स्लाइसर पर प्रूसामेंट पीएलए फिलामेंट सेटिंग्स
  • 15% इन्फिल करें
  • समर्थन नहीं
  • कोई ब्रिमो नहीं

चरण 3: सर्किट

सर्किट
सर्किट

चरण 4: सोल्डरिंग

टांकने की क्रिया
टांकने की क्रिया
टांकने की क्रिया
टांकने की क्रिया
टांकने की क्रिया
टांकने की क्रिया

चेतावनी: यह सुनिश्चित करने के लिए मल्टी-मीटर का उपयोग करें कि DC-DC बूस्टर MT3608 5V आउटपुट कर रहा है। सबसे पहले - मापने से पहले - ट्रिम को दक्षिणावर्त अंत तक घुमाएं (क्लिक करके)। जब वोल्टेज (3, 7V) को इनपुट से कनेक्ट करते हैं तो उसे लगभग समान मान देना होता है। वामावर्त मुड़ें (आपको 10-20 पूर्ण मोड़ की आवश्यकता होगी) और अचानक वोल्टेज बढ़ जाता है। धीरे से आउटपुट पर 5V सेट करें। (तस्वीर)

घन के मुद्रित निचले भाग पर एक नज़र डालें। प्रत्येक घटक का अपना छेद होता है। यह परिभाषित करता है कि आपको प्रत्येक घटक के बीच कितने लंबे तारों की आवश्यकता होगी (अतिरिक्त लंबे तारों का उपयोग न करें अन्यथा आपको तार जंगल मिल जाएगा)। (तस्वीर)

केवल Arduino नैनो और LED रिंग के बीच मिलाप तार (3 तार: लाल 5V - 5V, काला GND - GND, नीला D6 - DI)। अगले अध्याय से एलईडी रिंग कार्यक्षमता परीक्षण चलाएँ। (तस्वीर)

यदि सब कुछ ठीक है तो Gyro MPU6050 (5 तार: लाल 5V - VCC, काला GND - GND, नीला A4 - SDA, हरा A5 - SCL, पीला D2 - INT) जोड़ना जारी रखें। ColorCube.ino कोड और परीक्षण अपलोड करें (अन्य घटक केवल बैटरी और चार्जिंग के लिए हैं)। (तस्वीर)

यदि सब ठीक है तो शेष घटकों को जोड़ें। केवल लाल (+) और काले (-) तार हैं। सेल्फ़-लॉकिंग बटन पर दाएँ पिन का चयन करें (दबाए नहीं जाने पर कनेक्टेड नहीं)। बैटरी और बैटरी चार्जिंग पर परीक्षण कार्यक्षमता। (तस्वीर)

चार्ज होने पर TP4056 पर लाल एलईडी लाइट और पूरी तरह चार्ज होने पर नीली एलईडी लाइट। मध्य मुद्रित भाग में TP4056 के ऊपर का छेद ColorCube के शीर्ष भाग में एलईडी लाइट पास करता है और आप चार्जिंग के चरण को पहचान सकते हैं। (तस्वीर)

चरण 5: कोड

सबसे पहले आपको आवश्यक पुस्तकालयों को डाउनलोड करना होगा।

Adafruit Neopixel लाइब्रेरी के लिए विस्तृत निर्देश हैं:

एलईडी रिंग कार्यक्षमता परीक्षण: आप पुस्तकालय में शामिल उदाहरण के द्वारा अपने सर्किट का परीक्षण कर सकते हैं। फ़ाइल/उदाहरण/एडफ्रूट NeoPixels/simple से फ़ाइल खोलें और अपलोड करें (आपके द्वारा उपयोग किए जा रहे पिक्सेल की संख्या के अनुसार इस लाइन को सही ढंग से सेट करना न भूलें: #define NUMPIXELS 16)।

I2Cdev और MPU6050: https://github.com/jrowberg/i2cdevlib से i2cdevlib-master.zip फ़ाइल को डाउनलोड और अनज़िप करें। कॉपी फ़ॉर्म अनज़िप्ड फ़ोल्डर i2cdevlib-master/Arduino दो सबफ़ोल्डर: I2Cdev और MPU6050। दोनों Arduino IDE लाइब्रेरी फ़ोल्डर में कॉपी करते हैं (दस्तावेज़/Arduino/पुस्तकालय यदि डिफ़ॉल्ट स्थापना)।

पुस्तकालयों की प्रतिलिपि बनाने के बाद Arduino IDE को पुनरारंभ करना न भूलें।

#include #ifdef _AVR_ #include // 16 MHz Adafruit Trinket के लिए आवश्यक #endif #include "Wire.h" में "I2Cdev.h" शामिल है #include "MPU6050_6Axis_MotionApps20.h" MPU6050 mpu; #define INTERRUPT_PIN 2 // Arduino Uno और अधिकांश बोर्डों पर पिन 2 का उपयोग करें # पिन 6 को परिभाषित करें # NUMPIXELS 16 परिभाषित करें // LED की सही संख्या Adafruit_NeoPixel पिक्सल (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800) सेट करें; uint32_t सक्रिय रंग, पुराना सक्रिय रंग = 0; बूल डीएमपीरेडी = झूठा; uint8_t mpuIntStatus; uint8_t देवस्टैटस; uint16_t पैकेट आकार; uint16_t फीफोकाउंट; uint8_t फीफोबफर [64]; चतुर्धातुक क्यू; वेक्टर फ्लोट गुरुत्वाकर्षण; फ्लोट रोटेस [3]; इंट एक्स, वाई, जेड; अस्थिर बूल एमपीयूइंटरप्ट = झूठा; शून्य dmpDataReady () {mpuInterrupt = true; } शून्य सेटअप () {Serial.begin(११५२००); पिक्सल। शुरू (); पिक्सल.क्लियर (); पिक्सल.सेटब्राइटनेस (128); #if परिभाषित (_AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set(clock_div_1); #endif // I2C बस में शामिल हों (I2Cdev लाइब्रेरी स्वचालित रूप से ऐसा नहीं करती है) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin(); वायर.सेटक्लॉक (400000); // 400kHz I2C घड़ी। संकलन में कठिनाई होने पर इस पंक्ति पर टिप्पणी करें #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire::setup(400, true); #endif जबकि (! सीरियल); Serial.println(F("I2C डिवाइस को इनिशियलाइज़ कर रहा है…")); mpu.initialize (); पिनमोड (INTERRUPT_PIN, INPUT); // कनेक्शन सत्यापित करें Serial.println (F ("डिवाइस कनेक्शन का परीक्षण …")); Serial.println(mpu.testConnection() ? F("MPU6050 कनेक्शन सफल"): F("MPU6050 कनेक्शन विफल")); // तैयार होने की प्रतीक्षा करें // Serial.println(F("\nDMP प्रोग्रामिंग और डेमो शुरू करने के लिए कोई भी वर्ण भेजें: ")); // जबकि (सीरियल.उपलब्ध () && सीरियल.रीड ()); // खाली बफर // जबकि (! सीरियल.उपलब्ध ()); // डेटा के लिए प्रतीक्षा करें // जबकि (सीरियल.उपलब्ध () && सीरियल.रीड ()); // खाली बफर फिर से // लोड करें और डीएमपी सीरियल को कॉन्फ़िगर करें। प्रिंट्लन (एफ ("डीएमपी शुरू करना …")); devStatus = mpu.dmpInitialize (); // यहां अपने स्वयं के जाइरो ऑफसेट की आपूर्ति करें, न्यूनतम संवेदनशीलता के लिए स्केल किया गया mpu.setXGyroOffset(0); mpu.setYGyroOffset(0); mpu.setZGyroOffset(0); mpu.setZAccelOffset(1688); // मेरी टेस्ट चिप के लिए १६८८ फ़ैक्टरी डिफ़ॉल्ट एमपीयू.कैलिब्रेट गायरो(६); mpu. PrintActiveOffsets (); // डीएमपी चालू करें, अब यह तैयार है Serial.println(F("DMP को सक्षम करना…")); mpu.setDMPEnabled (सच); // Arduino इंटरप्ट डिटेक्शन को सक्षम करें Serial.print (F ("इंटरप्ट डिटेक्शन को सक्षम करना (Arduino एक्सटर्नल इंटरप्ट")); Serial.print (digitalPinToInterrupt (INTERRUPT_PIN)); Serial.println (F (")…")); अटैचइंटरप्ट (डिजिटलपिनटोइंटरप्ट (INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); // हमारे डीएमपी रेडी फ्लैग को सेट करें ताकि मुख्य लूप () फ़ंक्शन को पता चले कि इसका उपयोग करना ठीक है। Serial.println (F ("डीएमपी तैयार! पहले इंटरप्ट की प्रतीक्षा कर रहा है …")); डीएमपीरेडी = सच; // बाद में तुलना के लिए अपेक्षित डीएमपी पैकेट आकार प्राप्त करें पैकेट आकार = mpu.dmpGetFIFOPacketSize (); } और {//त्रुटि! // 1 = प्रारंभिक मेमोरी लोड विफल // 2 = डीएमपी कॉन्फ़िगरेशन अपडेट विफल // (यदि यह टूटने वाला है, तो आमतौर पर कोड 1 होगा) सीरियल.प्रिंट (एफ ("डीएमपी इनिशियलाइज़ेशन विफल (कोड")); Serial. प्रिंट (devStatus); Serial.println (F (")")); } } शून्य लूप () { अगर (! dmpReady) वापसी; if (mpu.dmpGetCurrentFIFOPacket(fifoBuffer)) {// नवीनतम पैकेट प्राप्त करें // डिग्री में यूलर कोण प्रदर्शित करें mpu.dmpGetQuaternion(&q, fifoBuffer); mpu.dmpGetGravity(&गुरुत्वाकर्षण, &q); mpu.dmpGetYawPitchRoll(rotace, &q, &gravity); } सीरियल.प्रिंट ("एक्स"); सीरियल.प्रिंट (रोटेस [2] * 180/एम_पीआई); सीरियल.प्रिंट ("\ टी वाई"); सीरियल.प्रिंट (रोटेस [1] * 180/एम_पीआई); सीरियल.प्रिंट ("\ टी जेड"); सीरियल.प्रिंट्लन (रोटेस [0] * 180/एम_पीआई); x=रोटेस[2] * १८०/एम_पीआई; y=रोटेस[1] * १८०/एम_पीआई; z=रोटेस[0] * १८०/एम_पीआई; if(abs(x)<45 && abs(y)45 && abs(x)<135 && (abs(y)135)){activeColor=pixels. Color(255, 0, 0); // लाल जब बारी बारी से} और अगर (x<-45 && abs(x)<135 && (abs(y)135)){activeColor=pixels. Color(0, 255, 0); // हरा जब दूसरी तरफ मुड़ें} और अगर (y>45 && abs(y)<135 && (abs(x)135)){activeColor=pixels. Color(255, 255, 0); // पीला जब तीसरी तरफ मुड़ें} और अगर (y<-45 && abs(y)<135 && (abs(x)135)){activeColor=pixels. Color(0, 0, 255); // नीला जब चौथी तरफ मुड़ें} और अगर (abs(y)>135 && abs(x)>135){activeColor=pixels. Color(0, 0, 0); // काला जब उल्टा हो } अगर (activeColor != oldActiveColor){ pixels.clear(); पिक्सल।फिल (सक्रिय रंग); पिक्सल.शो (); पुराना सक्रिय रंग = सक्रिय रंग; } }

अंत में आप ColorCube.ino फ़ाइल को खोल और अपलोड कर सकते हैं। समतल सतह का ColorCube डालें और इसे चालू करें। अंशांकन (कुछ सेकंड) के बाद सफेद रंग के साथ हल्का होने तक इसे तब तक न हिलाएं। इसके बाद आप ColorCube को किनारे पर रख सकते हैं और रंग बदल जाएगा - प्रत्येक पक्ष का अपना रंग होता है - लाल, हरा, नीला, पीला। ColorCube उल्टा होने पर बाहर निकल जाता है।

चरण 6: कोडांतरण

कोडांतरण
कोडांतरण
कोडांतरण
कोडांतरण
कोडांतरण
कोडांतरण

असेंबलिंग के दौरान कोमल रहें। तारों और सभी भागों को खुरदुरा व्यवहार पसंद नहीं है।

बटन 3डी प्रिंटेड पार्ट - बटन को नीचे के प्रिंट वाले हिस्से में छेद में डालें (जैसा कि चित्र में दिखाया गया है), इसे आसानी से अंदर और बाहर जाना है, अगर सभी अधिशेष सामग्री को हटाने के लिए स्केलपेल या तेज चाकू या सैंड पेपर का उपयोग नहीं करना है (ज्यादातर अंदर पर) नीचे के हिस्से पर एक सर्कल होल के ऊपर)। (तस्वीर)

उनके छेद में MPU-6050, Arduino Nano, TP4056 और MT3608 डालें। बॉक्स में प्रोट्रूशियंस हैं जिसके नीचे आप MPU-6050 और MT3608 डालते हैं। Arduino Nano और TP4056 के USB कनेक्टर को बॉक्स की साइड की दीवारों में उनके छेदों में लगाएं। (तस्वीर)

घटकों को ठीक करने के लिए 3डी प्रिंटेड लॉक का उपयोग करें (सुनिश्चित करें कि सभी घटक नीचे के हिस्से पर कसकर बिछाए गए हैं)। यह महत्वपूर्ण है क्योंकि कोई निश्चित रूप से आपके ColorCube के साथ पासा के साथ खेलने की कोशिश करेगा। (तस्वीर)

बैटरी को टाइट होल्ड न होने पर उसके छेद में डालें और सुरक्षित करें।

नीचे के हिस्से में तैयार होल में सेल्फ-लॉकिंग बटन लगाएं। सेल्फ़-लॉकिंग बटन को ON स्थिति (छोटा) में होना चाहिए। धीरे से बटन को नीचे दबाएं। 3डी प्रिंटेड बटन के साथ कार्यक्षमता का परीक्षण करें। (तस्वीरें)

एलईडी रिंग को मध्य मुद्रित भाग में ठीक करने के लिए दो एम 2 स्क्रू का उपयोग करें। रिंग के उन्मुखीकरण का उपयोग करना अच्छा है जहां तार संपर्क मध्य मुद्रित भाग के गोल छेद में हैं। (तस्वीरें)

वैकल्पिक: यहां और वहां गर्म गोंद की एक बूंद का उपयोग करें - रिंग से तारों का कनेक्शन, बहुत लंबे तारों के लिए, अगर कुछ भी पर्याप्त तंग नहीं है आदि। यह आपके ColorCube को अधिक टिकाऊ बना सकता है।

ColorCube के अंदर तारों को व्यवस्थित करें ताकि मुद्रित भागों द्वारा पिन न किया जा सके। बीच वाले हिस्से को नीचे से लगाएं। इसे ठीक करने के लिए M3 स्क्रू का उपयोग करें। (तस्वीर)

अंत में शीर्ष मुद्रित भाग को धीरे से नीचे की ओर धकेलें। (तस्वीर)

चरण 7: हो गया

बधाई। मज़े करो।

सिफारिश की: