תוכן עניינים:
- שלב 1: סכמטים וחומרה
- שלב 2: הפיכת ה- PCB לאירוח הנוריות
- שלב 3: הכנת הקופסה
- שלב 4: הכנת העניבה
- שלב 5: הדבקת ה- Fiberoptics
- שלב 6: הכנסת סיבים אופטיים דרך העניבה
- שלב 7: הדבקת Fiberoptics לעניבה
- שלב 8: הקוד
- שלב 9: מוצר סופי
וִידֵאוֹ: עניבה לד כוכבים שמיים: 9 שלבים (עם תמונות)
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:15
לפני זמן מה מצאתי בחנות דולר צעצוע של ילדים עם סיבים אופטיים והתחלתי לחשוב מה אני יכול לעשות עם זה.
אחד הרעיונות המטורפים שהיו לי היה לעשות עניבה עם אפקט של שמיים זרועי כוכבים.
עדיין היו לי כמה מיני arduino pro mini, לוחות אדפרוט וסוללות שהיו מתאימים כנראה לפרויקט הזה.
אז ברגע שמצאתי עניבה רחבה נחמדה בבית המשכון בעיר שלי ומצאתי קופסה שעשויה להתאים לחומרה, החלטתי ללכת על זה ולנסות לבנות אותה.
המדריך הזה מראה לך איך הצלחתי.
הוא פועל על arduino pro mini, מטען powerboost 500 של adafruit, emmerich icr 18650nh-sp ו -5 נוריות LED לבנות. הקוד הופך את בהירות השינוי של ה- LED לאקראית. (40 השניות הראשונות של הסרטון הן מהירות פי 3)
שלב 1: סכמטים וחומרה
אני משתמש בחומרה הבאה:
- PCB עם נוריות לבנות קרח ונגדים של 220 אוהם.
-Arduino pro mini (השתמשתי בנוקאוף)
-מטען Adafruit Powerboost 500
-Emmerich Li-ion accu ICR-18650NH-SP
- סיבים אופטיים (בגדלים שונים)
שלב 2: הפיכת ה- PCB לאירוח הנוריות
חתכתי רצועה מ- PCB בכדי להחזיק את הלדים והשתמשתי בסיכות הלד כדי להלחים אותו אל ה- PCB הראשי.
חיבר את כל הקתודות (-) ל- GND, והשתמש בחצי מהסיכות כדי להלחם אותו דבק במחשב הלוח הראשי.
חיבר את כל האנודות (+) לנגדים, ועם כבלים לארדואינו.
נוריות כל אחת חייבות להיות מחוברות לאחת מיציאות ה- PWM הבאות: 3, 5, 6, 9, 10, 11
אני מטופש עשה הרבה טעויות עם הפרויקט הזה ושכחתי לבדוק את יציאות PWM הנכונות, אז נאלצתי לפתור כמה מאוחר יותר. נבדק עם גבוה/נמוך אז שמתי לב לזה רק מאוחר יותר.
התחלתי עם 7 נוריות LED, אך היו רק 6 יציאות PWM ואחד מנורות ה- LED שהחלטתי נפטר. שמרתי רק על 5 נוריות העבודה הפועלות ואני לא משתמש בשישי.
שלב 3: הכנת הקופסה
השתמשתי ב- Bosch GRO (כמו Dremel) ובמקדחה כדי לחתוך את צורת הסוללה, הכפתור, יציאת המיקרו-USB, הכותרות מהארדואינו וסיבי האופטיקה. (השתמש במסכת אבק!)
הדבק את הסוללה למארז עם 2 להקות.
השתמשו בברגים להתקנת הלוח של Adafruit וה- PCB.
חיכוך מפתיחה וסגירה פגע בכמה חוטים. הייתי צריך לפתור אותם ולהשתמש בדבק כדי למנוע מהדבר לחזור.
שלב 4: הכנת העניבה
הסיר את התפירה מהחלק התחתון של העניבה כך שיתאים ליריעת הגומי.
כדי להסתיר את החומרה ועדיין להיות מסוגל לגשת אליה במידת הצורך החלטתי להשתמש ברוכסן.
לא טוב לי עם מכונת תפירה, אז אמא המתוקה שלי שמה רוכסן בחלק האחורי של העניבה.
אחרי שזה נעשה, הדבקתי את יריעת הגומי בעניבה. פחדתי להשתמש יותר מדי דבק שירווי את הבד ויהיה גלוי מלפנים, אז ניסיתי לאזן אותו ולא להשתמש יותר מדי. בסך הכל זה נראה טוב, אבל בכמה מקומות שמתי לב ליותר מדי או פחות מדי דבק, כי זה הגיע דרך הבד או שלא הדביק את הבד טוב במיוחד. למרבה המזל זה נראה בקושי ממרחק קרוב באור עז.
הקופסה והעניבה סיימו כעת. הגיע הזמן להדביק את הסיבים האופטיים!
שלב 5: הדבקת ה- Fiberoptics
לצעצוע היו חוטי סיב אופטי אחד צרור גדול שהתפרק בקלות. ניסיתי להדביק אותם אחד אחד בהתחלה, אך עד מהרה שמתי לב שעדיף להכין צרורות קטנים ולהדביק אותם מיד לדלורית. כך יהיה קל יותר לשמור אותו יציב עד שהדבק יתייבש. בלגן את ה- LED הראשון שהבין זאת.
הקפד להשתמש בדבק שקוף! זה שהשתמשתי בו התייבש לאט מאוד והדבק המתייבש במהירות שניסיתי על הלד הראשון הפך ללבן, מה שהופך כמה סיבים מהנורית הראשונה פחות בהירים.
הדבקתי יריעות גומי שחורות קטנות כדי למנוע דליפת אור מלמעלה וכדי להפריד בין הלדים.
אחד הסדינים מנע את סגירת המארז ולכן הוספתי גומייה כדי לסגור את המכסה.
שלב 6: הכנסת סיבים אופטיים דרך העניבה
מהתחתית, צבטתי חורים בעזרת מחט והכנסתי את הסיבים בזה אחר זה. כל סיבי הלד מתפשטים באופן אקראי על פני העניבה.
הדבקתי פס שחור על הגב שאמור היה להגיע עד לחלק הקטן יותר של העניבה כדי לשמור על משקל הקופסה, אבל אחרי שהכנסתי את כל החוטים והרגשתי את המתח של החוטים החלטתי להדביק הכל לעניבה היה רעיון טוב יותר וחתכו את הרצועה.
מכיוון שחוטי הסיבים האופטיים מהצעצוע היו כה קצרים, היה קשה להתאים אותם לכל העניבה. הייתי מוגבל במיקום התיבה והתקשיתי להפוך את הכל לשטוח כמו שרציתי.
שלב 7: הדבקת Fiberoptics לעניבה
הדבקתי את כל חוטי הסיבים האופטיים על יריעת הגומי כדי למנוע מהחוטים להישלף מדף הגומי וכדי להפוך את העניבה שטוחה.
כדי לוודא שלא הדבקתי את המהדק לעניבה בעת הפעלת לחץ עליה הכנסתי נייר בין לבין. זה לא נראה כל כך נהדר אבל עובד טוב. ואתה לא רואה את זה כשהוא סגור.
לאחר שהדבק התייבש, ניתקתי את החוטים בחזית וניתקתי מעט את יריעת הגומי ממש מעל החוט הגבוה ביותר, כי העניבה הייתה קצת ארוכה מדי.
תמונות עם החולצה הלבנה נעשות לפני שאני חותך את פיסת הגומי האחרונה.
שלב 8: הקוד
מתחת לקוד שכתבתי לעניבה.
לכל הלדים יש "ממוצע" קבוע (בעצם לא ממוצע אלא בהירות בינונית).
ברגע שהוא יגיע לממוצע זה, הוא יחליט עם סיכוי 3/4 ללכת לבהירות נמוכה יותר. הוא גם קובע אקראית בהירות מינימלית חדשה, בהירות מרבית, זמן המתנה לבהירות מינימלית ומקסימלית והמהירות שהיא מגדילה או יורדת בכל סיבוב (1-255) מ -5 ערכים שנקבעו מראש. ואז הוא יעשה מחזור עד שהוא יגיע שוב לממוצע. רק 2 נוריות LED יכולות להיות במחזור גבוה בו זמנית.
כל מדינה מיוצגת על ידי ערך שלם (1-7) הקובע אם הוא יורד ממוצע נמוך, ממוצע נמוך, מחכה נמוך, מעדכן וכו '.
למידע על העלאת קוד לארדואינו, עיין באתר www.arduino.cc
/ * עניבת שמיים מכוכבים * * זהו תסריט לדהיית אקראית של 5 נוריות LED מממוצע עד בהירות נמוכה יותר * או גבוהות יותר עם הגדרות אקראיות נמוכות יותר, גבוהות יותר ועיתוי * כדי להיראות כמו שמיים זרועי כוכבים בשימוש עם סיבים אופטיים. * במקרה זה ייושמו בשוויון. * * סיכוי למעלה/למטה = 1/4 למעלה, 3/4 למטה, עם מקסימום של 2 * לעלות במקסימום במקביל. * * הממוצע נשאר זהה. * אפשרויות המינימום, המקסימום והתזמון משתנות באופן אקראי * מ -5 אפשרויות בכל פעם שמד LED מגיע לממוצע שוב. * * נוצר על ידי בילי ג'ספרס, מאי 2019. *
/ הצהרת סיכות
int LED01 = 3; int LED02 = 5; int LED03 = 6; int LED04 = 9; int LED05 = 11;
// משתני זמן
currentTime long unsigned; זמן המתנה ארוך ללא חתום [5]; unsRong long lastRound;
// משתני LED
int brightMin [5] = {10, 10, 10, 10, 10}; // בהירות מינימלית int brightAvg [5] = {200, 200, 200, 200, 200}; // בהירות ממוצעת int brightMax [5] = {240, 240, 240, 240, 240}; // בהירות מרבית int timeWaitLow [5] = {1000, 1000, 1000, 1000, 1000}; // זמן המתנה int timeWaitAvg [5] = {5000, 5000, 5000, 5000, 5000}; // זמן המתנה int timeWaitMax [5] = {4000, 3000, 3000, 3000, 3000}; // תוספת זמן המתנה [5] = {2, 5, 4, 5, 2}; // תוספת בהירות int currentBright [5] = {200, 230, 210, 210, 235}; // בהירות נוכחית
// משתני LED אפשרויות
int brightMinPos [5] = {5, 20, 40, 5, 20}; // מינימליות בהירות int brightMaxPos [5] = {240, 245, 230, 225, 245}; // אפשרויות בהירות מרביות int timeLowPos [5] = {3000, 5000, 4000, 2000, 1000}; // זמן המתנה על אפשרויות בהירות נמוכה int timeHighPos [5] = {3000, 1000, 500, 2000, 4000}; // זמן המתנה על אפשרויות בהירות גבוהה int timeAvgPos [5] = {3000, 5000, 4000, 7000, 8000}; // זמן המתנה על אפשרויות בהירות ממוצעות int incrementPos [5] = {2, 4, 5, 3, 1}; // עלייה באפשרויות הבהירות
// משתנים
bool startup = true; // האם צריך להתחיל את הגדרות ההתחלה?
// משתני כיוון
/* 0 = ממתין בממוצע 1 = הולך ממוצע לשפל 2 = ממתין נמוך 3 = יורד לממוצע 4 = עובר ממוצע למקס 5 = ממתין למקס 6 = עובר גבוה ל- ממוצע 7 = מעדכן משתנים*/ int statusLED [5] = {0, 0, 0, 0, 0}; int amountHighLED = 0; int refreshRate = 50; bool statusWaiting [5] = {false, false, false, false, false}; // האם הלד מחכה?
// משתנים אקראיים
long randomNumber; // ארוך לאחסון מספר אקראי ארוך randomNumberTwo; // ארוך לאחסן את המספר האקראי השני
// מונים
int i = 0; // מונה ללולאה ראשית
הגדרת בטל () {
Serial.begin (115200); // התחל randomSeed טורי (analogRead (A0)); // הגדר זרע אקראי
// הכריז על תפוקות
pinMode (LED01, OUTPUT); pinMode (LED02, OUTPUT); pinMode (LED03, OUTPUT); pinMode (LED04, OUTPUT); pinMode (LED05, OUTPUT); }
// כתוב נתונים ללדים
void writeToLED () {analogWrite (LED01, currentBright [0]); analogWrite (LED02, currentBright [1]); analogWrite (LED03, currentBright [2]); analogWrite (LED04, currentBright [3]); analogWrite (LED05, currentBright [4]); }
// לולאה ראשית
לולאת void () {if (אתחול) {// הגדרות אתחול lastRound = millis (); // הגדר lastRound עבור אתחול writeToLED (); // כתוב נתוני התחלה ל- Startup = false; // כבה את ההפעלה} currentTime = millis (); // הגדר את השעה הנוכחית
if (currentTime - lastRound> = refreshRate) {
עבור (i = 0; i <5; i ++) {if (statusLED == 7) {// -7- עדכון Led randomNumber = random (5); brightMin = brightMinPos [randomNumber]; // הגדר ערך אקראי עבור בהירות מינימלית randomNumber = random (5); brightMax = brightMaxPos [randomNumber]; // הגדר ערך אקראי להבהירות מרבית randomNumber = random (5); timeWaitLow = timeLowPos [randomNumber]; // הגדר ערך אקראי לזמן המתנה נמוך randomNumber = random (5); timeWaitMax = timeHighPos [randomNumber]; // הגדר ערך אקראי לזמן המתנה גבוה randomNumber = random (5); timeWaitAvg = timeAvgPos [randomNumber]; // הגדר ערך אקראי לזמן המתנה ממוצע randomNumber = random (5); increment = incrementPos [randomNumber]; // הגדר ערך אקראי לערך התוספת randomNumber = random (2); // הגדר ערך אקראי לכיוון randomNumberTwo = random (2); // הגדר ערך אקראי לכיוון if (randomNumber == 1 && randomNumberTwo == 0 && amountHighLED = brightAvg ) {statusLED = 0; // אם בנקודה הנמוכה ביותר: עבור אל המתנה ממוצעת} else {currentBright = currentBright +תוספת ; // אחרת: בהירות גבוהה יותר}} אחרת אם (statusLED == 2) {// -2- המתנה נמוכה אם (! StatusWaiting ) {// אם לא מחכה: waitingTime = מיליס (); // הגדר statusWaiting = נכון; // התחל לחכות} אחרת אם (statusWaiting && currentTime-waitingTime > = timeWaitLow ) {// אם המתנה ו- timeWaitAvg חלפה: statusWaiting = false; // סטטוס ההמתנה LED = 3; // הגדר statusLed ל- Waiting for update}} אחרת אם (statusLED == 1) {// -1- הולך ממוצע לשפל אם (currentBright <= brightMin ) {statusLED = 2; // אם בנקודה הנמוכה ביותר: עבור אל Waiting Low} אחר {currentBright = currentBright -increment ; // אחרת: בהירות נמוכה}} אחרת אם (statusLED == 6) {// -6- מעבר מקסימלי לממוצע אם (currentBright = timeWaitMax ) {// אם המתנה והזמן WaitAvg חלף: statusWaiting = false; // סטטוס ההמתנה LED = 6; // הגדר statusLed ל- Waiting for update}} else if (statusLED == 4) {// -4- מעבר ממוצע למקס אם (currentBright > = brightMax ) {statusLED = 5; // אם בנקודה הנמוכה ביותר: עבור אל Waiting High} אחר {currentBright = currentBright +תוספת ; // אחר: בהירות גבוהה יותר}} אחרת אם (statusLED == 0) {// -0- ממתין בממוצע אם (! StatusWaiting ) {// אם לא מחכה: waitingTime = מיליס (); // הגדר statusWaiting = נכון; // התחל לחכות} אחרת אם (statusWaiting && currentTime-waitingTime > = timeWaitAvg ) {// אם המתנה ו- timeWaitAvg חלפה: statusWaiting = false; // הפסקת ההמתנה LED = 7; // הגדר statusLed ל- Waiting for update}}} i = 0; lastRound = millis (); // קבעו את סיום הסיבוב האחרון. writeToLED (); // כתוב את כל הנתונים לנוריות}}
שלב 9: מוצר סופי
אני חושב שזה הסתדר טוב. העניבה לא עבה מדי, נוקשה, ארוכה או כבדה ואפקט הכוכב נראה מדהים.
מוּמלָץ:
זיהוי כוכבים באמצעות מחשב ראייה (OpenCV): 11 שלבים (עם תמונות)
זיהוי כוכבים באמצעות מחשב ראייה (OpenCV): הוראה זו תתאר לך כיצד ליצור תוכנית ראיית מחשב לזיהוי אוטומטי של דפוסי כוכבים בתמונה. השיטה משתמשת בספריית OpenCV (Open-Source Computer Vision) ליצירת קבוצה של מפלי HAAR מאומנים שיכולים להיות
עשה זאת כך! מחשב מיני הנדסי מסע בין כוכבים TNG: 11 שלבים (עם תמונות)
עשה זאת כך! מסע בין כוכבים TNG מחשב מיני הנדסי: סקירה כללית גדלתי כשצפיתי במסע בין כוכבים: הדור הבא. תמיד רציתי לבנות מכשיר בנושא מסע בין כוכבים, אז סוף סוף יצא לי לערבב מחדש את אחד הפרויקטים הישנים שלי כדי ליצור מסוף תצוגה של מסע בין כוכבים. הטרמינל מספק את המידע הבא
שומר זמן עניבה: 6 שלבים (עם תמונות)
שומר זמן עניבה: חשוב להיות מסוגל לספר את השעה אך לא כולם אוהבים לענוד שעון ולוקחים את הטלפון החכם שלנו רק כדי לבדוק שהזמן נראה קצת מיותר. אני אוהב להשאיר את הידיים נקיות מטבעות, צמידים ושעונים כשאני פועל אצל אנשי מקצוע
גשש כוכבים 'סקוצ'ט מאונט' המופעל על ידי ארדואינו לאסטרופוטוגרפיה: 7 שלבים (עם תמונות)
ארדואינו מונע כוכב 'סקוטש מאונט' לאסטרופוטוגרפיה: למדתי על הר הסקוטי כשהייתי צעיר יותר ועשיתי אחד עם אבא שלי כשהייתי בן 16. זו דרך זולה ופשוטה להתחיל עם אסטרופוטוגרפיה, שמכסה את היסודות שלפניכם היכנס לענייני הטלסקופ המסובכים של ראש הממשלה
עיצוב טופר עץ כוכבים בעל 8 סיביות ב- Fusion 360: 7 שלבים (עם תמונות)
עיצוב טופר עץ כוכבים בעל 8 סיביות ב- Fusion 360: הוסף דמות לעץ חג המולד שלך השנה עם ציפוי עץ כוכב בעל 8 סיביות מודפס בתלת מימד. עקוב אחרי כשאני מראה לך עד כמה פשוט לעצב את הכוכב ב- Fusion 360. הבאתי כאן גם קישור לקובץ STL כך שתוכל להדפיס את הדגם שלי