תוכן עניינים:
וִידֵאוֹ: מנורת מצב רוח LED 1 $ עם ATtiny13 ו- WS2812: 7 שלבים
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:11
מאת arduinocelentano עקוב אחר מאת המחבר:
זוהי מנורת מצב רוח בעלות נמוכה עם ארבעה מצבים.
1. ניצוץ קשת. ניצוץ אור נע פעם אחר פעם כלפי מעלה ומשנה את הצבע בהדרגה.
2. זוהר קשת. זוהר יציב שמשנה את הצבע בהדרגה.
3. הדמיית אש לנרות.
4. כבוי.
תוכל להחליף מצבים על ידי הקשה על כפתור מגע למעלה. המצב הנוכחי נשמר בזיכרון EEPROM לאחר כיבוי.
כמה זעיר ATtiny13?
הרעיון היה להשיג תכונות מקסימליות מחומרה מינימלית, משהו מורכב יותר מאשר מתג אוטומטי או מדחום, פרויקט קרוב לקצה המיקרו -בקר הזעיר הזה. אחרי הכל, ההגבלות גורמות לך לחשוב יצירתי, נכון? ובכן, זה נראה כך בהתחלה.
המאתגר ביותר בפרויקט זה היה לדחוף את כל הקוד לתוך ATtiny13. לבקר המיקרו יש פלאש של 1K בתים ורק 64 בתים RAM. כן, כשאני אומר "בתים", אני מתכוון לאלה המורכבים משמונה סיביות. 64 בתים עבור כל המשתנים המקומיים וערימת השיחות שלך. כדי להבהיר, שקול שעלינו לשלוט על 8 נוריות RGB. כל אחד מהם מוגדר על ידי 3 בתים (אחד לערוץ אדום, ירוק וכחול בהתאמה). אז, רק כדי לאחסן את מצב 8 הנורות, נצטרך ליישם מערך של 8 מבנים 3 בתים כל אחד ומצביע לתחילת המערך הזה ייקח עוד בית. לפיכך, 25 מתוך 64 בתים יוצאים. רק השתמשנו ב -39% של זיכרון RAM ועדיין לא התחלנו באמת. בנוסף, כדי לאחסן שבעה צבעי קשת בסיסיים, תזדקק ל 7 × 3 = 21 בתים, כך ש- 72% מהזיכרון RAM נגמר. ובכן, באשר לצבעים בסיסיים, אני מגזים: אנחנו לא צריכים את כולם בו זמנית ב- RAM והם אף פעם לא משתנים, כך שהם עשויים להיות מיושמים כמערך קבוע כדי להיות מאוחסן בפלאש במקום ב- RAM. בכל מקרה, זה נותן רושם כללי לגבי חומרה משומשת.
נזכרתי בהצהרתו של קנוט בנוגע לאופטימיזציה מוקדמת, והתחלתי לאבות טיפוס של שלושה מצבי מנורה בנפרד כדי לראות מה קורה. בדקתי אותם בנפרד כדי לוודא שהם עובדים כראוי וכל אחד מתאים למיקרו -בקר שלי. נדרשו כמה ערבים כדי להשיג את זה והכל הלך כשורה … עד שניסיתי להרכיב אותם בתוך הצהרת מתגים. כלי השירות avr-size דיווח על גודל קטע טקסט של 1.5 קילוגרם (עם דגל -s של avr-gcc). באותו רגע הכוונה המקורית שלי הייתה לתפוס קצת ATtiny25 עם פלאש 2Kb וזה יכול היה להיות הסוף הטוב של הסיפור הזה.
אבל איכשהו הרגשתי שאחרי אופטימיזציה ניכרת אוכל להצליח לכווץ את הקוד המחורבן הזה ל- 1Kb. עם זאת, לקח עוד שבוע אחד להבין שזה בלתי אפשרי ועוד שבוע אחד להשיג את זה. הייתי צריך לחתוך קשת לחמישה צבעים בסיסיים (ללא הבדל חזותי משמעותי). נפטרתי מהודעות מקרה והשתמשתי בשרשרת של אם-אז-אם כדי להקטין את גודל הקוד הבינארי. אנימציה לאש זקוקה למחולל מספר pseudorandom שהוא די מגושם, אז יישמתי גרסה פשוטה של LFSR עם ערך התחלתי קבוע. לא אכפת לי מאורך המחזור המלא של PRNG ורק מחפש איזון ירידה בין גודל הקוד ל"אנימציה אש מציאותית ". יישמתי גם הרבה אופטימיזציות קלות שאני לא זוכר כרגע ואפילו הצלחתי להבהב את כל המצבים חוץ מאש לתוך השבב. כשנגמרו לי הרעיונות, סך כל הקוד שלי היה בערך 1200 בתים.
לקחתי פסק זמן וקראתי הרבה על ייעול קוד AVR. הייתי קרוב לוותר ולשכתב הכל בשפת הרכבה אבל נתתי לזה את ההזדמנות האחרונה. במהלך העומס הסופי לאופטימיזציה, חתכתי קשת לשלושה צבעי יסוד וגרמתי לחישובים אחרים לטוס, בדקתי הכל ועקבתי אחר המלצות ייעול AVR ולבסוף …
avrdude: כתיבת פלאש (1004 בתים):
כתיבה | ################################################### | 100% 0.90s
אין צורך לומר כי השתמשתי כמעט בכל הזיכרון RAM ובייט אחד בלבד של EEPROM לאחסון המצב הנוכחי. אני לא רומז שמדובר ביישום אידיאלי ואולטימטיבי. זה פשוט עובד ומתאים למיקרו -בקר. אני בטוח שאתה יכול לעשות את זה טוב יותר. אני באמת. אני רק רוצה לחלוק את הכיף שבפתרון בעיה לכאורה בלתי מעשית שלדעתך היא כמעט בלתי אפשרית בהתחלה. "לפיכך פירושו פריצה לחקור את גבולות האפשרי …" -ריצ'רד סטלמן.
אספקה:
1x ATtiny13 MCU ($ 0.28 = 0.24 $ עבור MCU בחבילה SOP-8 ו- $ 0.04 עבור מתאם DIP8)
8x נוריות WS2812 RGB (אני ממליץ על לוח או פיסת פס LED) ($ 0.42)
1x כפתור מגע TTP223 ($ 0.10)
1x מתאם מיקרו USB ל- DIP ($ 0.14)
נגד 10kΩ (<0.01 $)
קבל קרמיקה 100nF (<0.01 $)
קבל אלקטרוליטי 10–47 μF (<0.01 $)
סה"כ <0.97 $
שלב 1: התקנת תוכנה
תצטרך שרשרת כלים avr-gcc לעריכת קוד המקור וכלי השירות avrdude להעלאת ROM של בקר מיקרו. תהליך ההתקנה די פשוט ופשוט, אך תלוי במערכת ההפעלה שלך. אם אתה משתמש בסוג של GNU/Linux, כנראה שכבר יש לך חבילות מתאימות בעץ המאגר שלך. ניתן להוריד את קוד המקור של פרויקט זה כאן:
github.com/arduinocelentano/t13_ws2812_lamp
תזדקק גם לספריית light_ws2812:
github.com/cpldcpu/light_ws2812
לאחר שקיבלת את שרשרת הכלים avr-gcc ומקורות הפרויקט, הפעל את הטרמינל והקלד את הקוד הבא:
נתיב cd/אל/פרוייקט
עשה
שלב 2: תכנות המיקרו -בקר
אם יש לך איזה מתכנת USBASP, פשוט חבר אותו ל- Attiny בהתאם ל- pinout שלו. בדרך כלל זה היה נראה כך אבל אני ממליץ בחום לבדוק את הסיכה האמיתית שלך!
לחלופין, תוכל להשתמש בלוח Arduino כמתכנת. פתח את Arduino IDE ומצא את דוגמת ספק האינטרנט של Arduino בתפריט "קובץ → דוגמאות". לאחר העלאת הסקיצה, לוח ה- Arduino שלך מתפקד כמתכנת. ההערות בקוד הסקיצה היו נותנות לך מושג להצגה.
עכשיו רוץ
לעשות פלאש
כדי להבהב את ה- MCU ו-
לעשות נתיך
כדי להגדיר פיסות פיוז.
מוּמלָץ:
מנורת מצב רוח LED מודפסת תלת -ממדית: 15 שלבים (עם תמונות)
מנורת מצב רוח LED מודפסת תלת מימדית: תמיד היה לי הקסם הזה עם מנורות, כך שהיכולת לשלב בין הדפסה תלת מימדית וארדואינו לנורות הייתה משהו שהייתי צריך להמשיך. הרעיון פשוט מאוד והתוצאה היא אחת הוויזואליות המספקות ביותר חוויות שאתה יכול לשים
מנורת מצב רוח עם LED RGB: 4 שלבים
מנורת מצב רוח עם RGB LED: Este proyecto se trató de hacer una lampara de * sentimientos * utilizando un Arduino Uno. Primero se necesitan varios materiales como jumpers, leds RGB o Neopixel, dependiendo de cómo se desee hacer. En este caso utilizaremos led RGB con ánodo común
רמקול מצב רוח- רמקול רב עוצמה לנגינת מצב רוח על סמך טמפרטורת הסביבה: 9 שלבים
רמקול מצב רוח- רמקול רב עוצמה לנגינת מצב רוח על סמך טמפרטורת הסביבה: היי! לפרויקט בית הספר שלי ב- MCT Howest Kortrijk, הכנתי רמקול מצב רוח זה מכשיר רמקול Bluetooth חכם עם חיישנים שונים, LCD ו- WS2812b רצועת LED כלולה. הרמקול מנגן מוזיקת רקע המבוססת על הטמפרטורה אך יכול
מנורת מצב רוח LED נמוכה פולי: 9 שלבים (עם תמונות)
מנורת מצב רוח LED נמוכה פולי: תוספת נהדרת לכל שולחן, מדף או שולחן! הכפתור הדיסקרטי הממוקם בבסיס מאפשר לך לעבור בין דפוסי תאורת LED שונים. זה לא משנה אם אתה רוצה להשתמש במנורה שלך ללימוד, להירגע או אפילו למסיבה … יש כבדים
מנורת מצב רוח LED: 9 שלבים (עם תמונות)
מנורת מצב רוח LED: לאחרונה נתקלתי בקוביית LED של גרג דוויל. זו יצירת אמנות נהדרת. קיבלתי השראה מזה, אפילו רציתי להכין משהו כזה. אבל זו הייתה דרך לצאת מהליגה שלי. החלטתי לעשות צעד אחד בכל פעם ועשיתי דרך קטנה יותר