תוכן עניינים:

עניבה לד כוכבים שמיים: 9 שלבים (עם תמונות)
עניבה לד כוכבים שמיים: 9 שלבים (עם תמונות)

וִידֵאוֹ: עניבה לד כוכבים שמיים: 9 שלבים (עם תמונות)

וִידֵאוֹ: עניבה לד כוכבים שמיים: 9 שלבים (עם תמונות)
וִידֵאוֹ: תפסתי אותה על חםםםם!!!!!! 2024, יולי
Anonim
Image
Image
עניבה לד Led Starry Sky
עניבה לד Led Starry Sky
עניבה לד Led Starry Sky
עניבה לד Led Starry Sky

לפני זמן מה מצאתי בחנות דולר צעצוע של ילדים עם סיבים אופטיים והתחלתי לחשוב מה אני יכול לעשות עם זה.

אחד הרעיונות המטורפים שהיו לי היה לעשות עניבה עם אפקט של שמיים זרועי כוכבים.

עדיין היו לי כמה מיני 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: מוצר סופי

Image
Image
מוצר סופי
מוצר סופי
מוצר סופי
מוצר סופי

אני חושב שזה הסתדר טוב. העניבה לא עבה מדי, נוקשה, ארוכה או כבדה ואפקט הכוכב נראה מדהים.

מוּמלָץ: