תוכן עניינים:
וִידֵאוֹ: ColorCube: 7 שלבים (עם תמונות)
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:13
הכנתי מנורה זו לנכדתי כשהיא למדה צבעים. קיבלתי השראה מפרויקט MagicCube אך לבסוף יצרתי את כל החלקים מאפס. זה קל להדפסה וקל להרכבה ותקבל ידע כיצד עובד מודול הג'ירו.
שלב 1: חומרים
חלק Arduino:
- Arduino Nano (עדיף ללא סיכות ראש הלחמה)
- מודול ג'ירו 3-ציר MPU-6050
- מודול מטען סוללות מיקרו USB TP4056
- מודול מגביר כוח Power3608
- סוללת LiPo 902936 900mA או 503035 3.7V 500mA. אתה יכול להשתמש בכל סוללת LiPo עם 3, 7V וגודל פחות מ 35x30x15mm אבל אתה צריך לאבטח את הסוללה בחור.
- כפתור נעילה עצמית PS-22F28 או כפתור נעילה עצמית PS-22F27 שניהם מתאימים לחלק המודפס בצורה מושלמת.
- טבעת LED RGB WS2812B - 16 LED קוטר חיצוני 68 מ"מ - אתה יכול להשתמש בכל טבעת גם עם מספר נוריות שונה (צריך לשנות קבוע אחד בקוד - #define NUMPIXELS 16) בקוטר מקסימלי של 76 מ"מ (אתה יכול גם להשתמש במקל Neopixel עם 8x LED או כל רצועת LED עם WS2812b).
דוגמאות לטבעת: 8 LED 32mm12 LED 38mm12 LED 50mm16 LED 60mm24 LED 66 mm16 LED 44mm
עבור מונטאז 'אתה יכול להשתמש בכל החורים המודפסים בחלק האמצעי. הם מכסים כמעט כל אפשרות (אין צורך שהטבעת תהיה מרוכזת ב -100%).
חוטים
קוּבִּיָה
- נימה PLA לחלק העליון של הקוביה - השתמשו בצבע לבן מכיוון שקוף אינו טוב (נוריות נראות והצבע אינו חלק), ההמלצה שלי היא Prusament וניל לבן
- נימה PLA לחלקים תחתונים, אמצעיים ולחצנים - השתמשו בצבע כהה מכיוון שבחלק ממודולי ארדואינו יש אורות בחלקו העליון והוא אינו מתאים לצבעי נוריות קוביה, ההמלצה שלי היא Prusament Galaxy Black
- 1x M3x5 בורג הקשה עצמית - האורך (10 מ"מ) וצורת הראש אינם קריטיים - הבורג אינו נראה
- 2x M2x3 בורג הקשה עצמית - האורך (5 מ"מ) וצורת הראש אינם קריטיים - הברגים אינם נראים
כלים
- מדפסת תלת מימד
- רב מטר
- מלחם
- מברג
שלב 2: הדפסה
כל חלקי ColorCube תוכננו ב- Autodesk Fusion360. מצורף קובץ f3d.
ColorCube הודפס במדפסת Prusa i3 MK3S עם כל הגדרות ברירת המחדל ואני לא מצפה לשינויים נחוצים במדפסות שונות. השתמש בהגדרות המועדפות עליך עבור PLA (אם מודפס על PLA, אין בעיה להשתמש ב- PETG או ASA).
פרמטרים להדפסה תלת מימדית:
- שכבה 0.2 מ"מ (הגדרות QUALITY 0.2 מ"מ ב- PrusaSlicer)
- הגדרות נימה של Prusament PLA ב- PrusaSlicer
- מילוי 15%
- אין תמיכה
- אין שוליים
שלב 3: מעגל
שלב 4: הלחמה
אזהרה: השתמש במספר מטרים כדי לוודא כי מגבר DC-DC 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: אתה יכול לבדוק את המעגל שלך על ידי דוגמה הכלולה בספרייה. פתח קובץ מקובץ/דוגמאות/Adafruit NeoPixels/פשוט והעלה (אל תשכח להגדיר נכון את השורה הזו לפי מספר הפיקסלים שאתה משתמש: #define NUMPIXELS 16).
I2Cdev ו- MPU6050: הורד ופרק את הקובץ i2cdevlib-master.zip מתוך https://github.com/jrowberg/i2cdevlib. העתק טופס לא רוכסן תיקיה i2cdevlib-master/Arduino שתי תיקיות משנה: I2Cdev ו- MPU6050. שניהם מעתיקים לתיקיית ספריית Arduino IDE (מסמכים/Arduino/ספריות אם התקנת ברירת מחדל).
אל תשכח להפעיל מחדש את Arduino IDE לאחר העתקת ספריות.
#include #ifdef _AVR_ #include // נדרש עבור תכשיט Adafruit 16 מגה -הרץ #endif #כלול "Wire.h" כולל "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" MPU6050 mpu; #define INTERRUPT_PIN 2 // השתמש בסיכה 2 ב- Arduino Uno ורוב הלוחות #הגדר PIN 6 #הגדר NUMPIXELS 16 // הגדר את המספר הנכון של נוריות Adafruit_NeoPixel פיקסלים (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; כוח הכבידה של VectorFlot; צף סיבוב [3]; int x, y, z; בול נדיף mpuInterrupt = false; void dmpDataReady () {mpuInterrupt = true; } הגדרת חלל () {Serial.begin (115200); פיקסלים.התחל (); pixels.clear (); pixels.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); // שעון I2C של 400kHz. הגיבו על שורה זו אם יש לכם קשיי הידור #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire:: setup (400, true); #endif while (! Serial); Serial.println (F ("אתחול התקני I2C …")); mpu.initialize (); pinMode (INTERRUPT_PIN, INPUT); // אמת את החיבור Serial.println (F ("חיבורי התקן בדיקה …")); Serial.println (mpu.testConnection ()? F ("חיבור MPU6050 מוצלח"): F ("חיבור MPU6050 נכשל")); // המתן למוכן // Serial.println (F ("\ n שלח כל תו כדי להתחיל בתכנות והדגמת DMP:")); // while (Serial.available () && Serial.read ()); // מאגר ריק // while (! Serial.available ()); // המתן לנתונים // while (Serial.available () && Serial.read ()); // מאגר ריק שוב // טען והגדר את ה- DMP Serial.println (F ("אתחול DMP …")); devStatus = mpu.dmpInitialize (); // ספקו כאן קיזוזי גירו משלכם, בקנה מידה לרגישות מינימלית 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 ("הפעלת DMP …")); mpu.setDMPEnabled (true); // הפעל את זיהוי הפרעות Arduino Serial.print (F ("הפעלת זיהוי הפרעות (Arduino interrupt extern")); Serial.print (digitalPinToInterrupt (INTERRUPT_PIN)); Serial.println (F (") …")); attachInterrupt (digitalPinToInterrupt (INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); // הגדר את הדגל Ready DMP שלנו כך שפונקציית הלולאה () הראשית תדע שזה בסדר להשתמש בו Serial.println (F ("DMP מוכן! מחכה להפסקה ראשונה …")); dmpReady = true; // קבל את גודל חבילת DMP הצפויה להשוואה מאוחר יותר packetSize = mpu.dmpGetFIFOPacketSize (); } אחר {// שגיאה! // 1 = טעינת הזיכרון הראשונית נכשלה // 2 = עדכוני תצורת DMP נכשלו // (אם הוא עומד להישבר, בדרך כלל הקוד יהיה 1) Serial.print (F ("אתחול DMP נכשל (קוד")); סידורי. print (devStatus); Serial.println (F (")")); }} לולאת void () {if (! dmpReady) החזרה; if (mpu.dmpGetCurrentFIFOPacket (fifoBuffer)) {// קבל את החבילה האחרונה // הצג זוויות Euler במעלות mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpGetGravity (& כוח הכבידה, & q); mpu.dmpGetYawPitchRoll (rotace, & q, & כוח הכבידה); } 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; 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 (); pixels.fill (activeColor); pixels.show (); oldActiveColor = activeColor; }}
לבסוף תוכל לפתוח ולהעלות קובץ ColorCube.ino. שים את ColorCube של משטח שטוח והפעל אותו. אין להזיז אותו עד שהוא מתחיל בהיר עם צבע לבן לאחר הכיול (כמה שניות). לאחר מכן תוכל לשים את ColorCube בצד והצבע ישתנה - לכל צד יש צבע משלו - אדום, ירוק, כחול, צהוב. ה- ColorCube נכבה כשהוא הופך.
שלב 6: הרכבה
היו עדינים במהלך ההרכבה. חוטים וכל החלקים אינם אוהבים התנהגות גסה.
כפתור חלק מודפס תלת -ממדי - הכפתור בעדינות לחור בחלק המודפס התחתון (כפי שמוצג בתמונה), הוא חייב להיכנס ולצאת בצורה חלקה, אם לא להשתמש באזמל או בסכין חדה או בנייר חול כדי להסיר את כל החומרים העודפים (בעיקר בפנים על החלק העליון של חור עיגול בחלק התחתון). (תמונה)
שים את החורים MPU-6050, Arduino Nano, TP4056 ו- MT3608. לקופסה בליטות שמתחתיהן מכניסים MPU-6050 ו- MT3608. שים מחברי USB של Arduino Nano ו- TP4056 לחורים שלהם בקירות הצדדיים של התיבה. (תמונה)
השתמש במנעול מודפס תלת -ממדי כדי לתקן רכיבים (ודא שכל הרכיבים מונחים היטב בחלק התחתון). זה חשוב כי מישהו בוודאי ינסה לשחק עם ה- ColorCube שלך כמו עם קוביות. (תמונה)
שים ואבטח את הסוללה בחור שלה אם היא לא מחזיקה חזק.
שים את לחצן הנעילה העצמית אל החור המוכן בחלק התחתון. כפתור הנעילה העצמית חייב להיות במצב ON (קצר). לחץ בעדינות על הכפתור כלפי מטה. בדיקת פונקציונליות עם כפתור מודפס בתלת מימד. (תמונות)
השתמש בשני ברגי M2 כדי לתקן את טבעת LED לחלק המודפס באמצע. טוב להשתמש בכיוון הטבעת כאשר מגעי החוט נמצאים בחור מעוגל של החלק המודפס האמצעי. (תמונות)
אופציונלי: השתמש בטיפת דבק חם לכאן ולכאן - חיבור חוטים לטבעת, לחוטים ארוכים מדי, אם משהו לא מהודק מספיק וכו 'זה יכול להפוך את ה- ColorCube לעמיד יותר.
מסדרים חוטים בתוך ColorCube כדי לא להיצמד על ידי חלקים מודפסים. שים את החלק האמצעי לחלק התחתון. השתמש בבורג M3 כדי לתקן את זה. (תמונה)
לבסוף דחפו בעדינות את החלק המודפס העליון לחלק התחתון. (תמונה)
שלב 7: בוצע
ברכות. תעשה חיים.
מוּמלָץ:
צלם תמונות נהדרות באמצעות אייפון: 9 שלבים (עם תמונות)
צלם תמונות נהדרות עם אייפון: רובנו נושאים איתנו סמארטפון לכל מקום בימים אלה, לכן חשוב לדעת כיצד להשתמש במצלמת הסמארטפון שלך לצלם תמונות נהדרות! היה לי רק סמארטפון במשך כמה שנים, ואהבתי להחזיק מצלמה ראויה לתיעוד דברים שאני
מחזיק תמונות עם רמקול מובנה: 7 שלבים (עם תמונות)
מחזיק תמונות עם רמקול מובנה: הנה פרוייקט נהדר לביצוע בסוף השבוע, אם אתה רוצה ליצור רמקול משלך שיכול להכיל תמונות/גלויות או אפילו רשימת מטלות. כחלק מהמבנה אנו הולכים להשתמש ב- Raspberry Pi Zero W כלב הפרויקט, ו
בינה מלאכותית וזיהוי תמונות באמצעות האסקי לנס: 6 שלבים (עם תמונות)
בינה מלאכותית וזיהוי תמונות באמצעות HuskyLens: היי, מה קורה חבר'ה! אקרש כאן מ- CETech. בפרויקט זה, נסתכל על האסקי לנס מ- DFRobot. זהו מודול מצלמה המונע על ידי AI המסוגל לבצע מספר פעולות בינה מלאכותית כגון זיהוי פנים
שעון תמונות Google: 7 שלבים (עם תמונות)
שעון תמונות של Google: מדריכים אלה מראים כיצד להשתמש ב- ESP32 ו- LCD ליצירת שעון דיגיטלי עם תצוגת תמונות אקראית ברקע בכל דקה. התמונות הגיעו משיתוף אלבום תמונות Google שלך, פשוט הזן את קישור השיתוף ESP32 יעשה את העבודה; >
מסגרת תמונות Raspberry Pi בפחות מ -20 דקות: 10 שלבים (עם תמונות)
מסגרת תמונות Raspberry Pi בפחות מ -20 דקות: כן, זו עוד מסגרת צילום דיגיטלית! אבל רגע, הוא מלוטש יותר, וכנראה המהיר ביותר להרכבה ולריצה