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

מנורת שמש נטענת המופעלת על ידי XOD: 9 שלבים (עם תמונות)
מנורת שמש נטענת המופעלת על ידי XOD: 9 שלבים (עם תמונות)

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

וִידֵאוֹ: מנורת שמש נטענת המופעלת על ידי XOD: 9 שלבים (עם תמונות)
וִידֵאוֹ: פנס סולארי | 100 נורות LED | אספקה טכנית | תאורה סולארית | צור מרקט 2024, יולי
Anonim
מנורת שמש נטענת המופעלת על ידי XOD
מנורת שמש נטענת המופעלת על ידי XOD

ישנן מנורות גן/שבילים לא זולות ברוב החנויות לבית ולחנויות חומרה. אבל כפי שאומרים הפתגם הישן, בדרך כלל אתה מקבל את מה שאתה משלם עבורו. מעגלי הטעינה וההארה הרגילים שבהם הם משתמשים הם פשוטים וזולים, אך תפוקת האור שתקבל היא כמעט מרשימה (ובקושי מספיקה לכל מי שמשתמש בשביל שלך לראות לאן הוא הולך!)

זהו הניסיון שלי לעצב מודול תאורה מחוץ לרשת המהווה שיפור משמעותי, אך עדיין זול יחסית לביצוע. בכך שנתן לו כמה "מוחות". XOD.io הוא IDE חדש התואם את פלטפורמת הפיתוח המשובצת של Arduino, שבה אתה יכול "לכתוב" קוד באופן גרפי. הסביבה מעבירה את הסקיצה הגרפית שלך ל- C ++ המודרנית, היעילה להפליא ביצירת קוד קומפקטי, ומייצרת מקור תואם במלאי Arduino IDE ללא צורך בתלות חיצונית נוספת. כך ניתן להשתמש גם בבקרי מיקרו קטנים וזולים עם משאבי תוכנה ואחסון נתונים מוגבלים לביצוע משימות מורכבות.

פרויקט זה מראה כיצד ניתן להשתמש בשני מיקרו-בקרי ATTiny85 תואמי Arduino העובדים יחד לניהול דרישות הכוח של המנורה. המעבד הראשון מטפל בנתוני סביבת חישה מהחומרה החיצונית, והשני מנסה לצבור את מירב האנרגיה מהשמש שהוא יכול במהלך היום, ולאחר מכן לשלוט בתאורה של LED רב עוצמה כשסוללת אחסון פורקת בלילה. המעבד השני מבצע את תפקידו באמצעות יישום קומפקטי של בקרת "לוגיקה מטושטשת". התוכנה לשני השבבים פותחה אך ורק בתוך סביבת ה- XOD.

שלב 1: חומרים נדרשים

Arduino IDE, הגרסה האחרונה, עם תוסף ATTinyCore מותקן ממנהל "לוחות"

מתכנת Sparkfun USBTinyISP ATTiny, 11801 או דף מוצר שווה ערך של Sparkfun

ממיר דחיפה מתכוונן של Pololu בעל מתח נמוך עם כניסת כיבוי, U1V11A או דף מוצר מקביל של Pololu

לבן חזק או LED RGB עם גוף קירור, אנודה משותפת, Adafruit 2524 או דף מוצר מקביל של Adafruit

שבב ATTiny85 באריזת DIP עם 8 פינים, דף מוצר 2 Mouser

שקעי DIP 8 פינים, 2

קבל אחסון בתפזורת, 16 וולט 220 uF

קבל פלט, 6.3v 47uF

נגדים המגבילים זרם, 50 אוהם 1/4 וואט

נגדי משיכה i2c, 4.7k, 2

נגדי מחיצת מתח מתח לוח, 1/4 וואט, 100k, 470k

נגד החושים הנוכחי, 10 אוהם 1⁄2 וואט 1% סובלנות

קבלים עוקפים, קרמיקה 0.1uF, 2

2 סוללת ליתיום-יון 3.7 v 100mAh נטענת, PKCELL LP401 או שווה ערך

שקע כניסת תקע חבית ללוח, 1

מיני בלוקי מסוף בגודל 3 "x3" לוח הלחמה וחוט דק עם ליבות מוצקות ליצירת חיבורים

אספקת חשמל של אוסצילוסקופ, מולטימטר וספסל יידרשו כמעט בוודאות לבדיקה

שלב 2: הגדרת סביבה

הגדרת סביבה
הגדרת סביבה

סביבת XOD אינה תומכת בסדרת המעבדים ATTiny מחוץ לקופסה, אך באמצעות כמה ספריות של צד שלישי מהיקום Arduino פשוט להוסיף תמיכה בסדרת AVR זו. השלב הראשון הוא התקנת הספרייה "ATTinyCore" מהתפריט הנפתח "כלים → לוח → מנהל לוח" של Arduino IDE. וודא שההגדרות כפי שמוצגות בתמונה הכלולה נכונות - זכור שעליך ללחוץ על "צריבת מטען אתחול" כדי לשנות את נתיכי ההגדרה ומהירות השעון לפני העלאת קוד כלשהו!

קוד המקור לספרייה זו זמין בכתובת:

ספרייה מועילה נוספת מהמאגר היא "FixedPoints", המהווה יישום זמן הידור של מתמטיקה בנקודה קבועה עבור מעבדים הנתמכים על ידי Arduino. ל- ATTiny יש זיכרון SRAM וזיכרון תוכניות מוגבל, והוא עוזר מאוד בכווץ גודל הסקיצה הסופי לשימוש במספר שלם של 2 בתים לאחסון נתונים כללי, ולא בסוג נקודה צפה, הדורש 4 בתים במכשיר ה- AVR. יש לשפר גם את מהירות הביצוע מכיוון של- ATTiny אין יחידת ריבוי חומרה, הרבה פחות נקודה צפה של חומרה!

קוד המקור זמין בכתובת:

ההדרכה כיצד ליצור, לשדר ולפרוס סקיצות גרפיות של XOD בכתובת: https://github.com/Pharap/FixedPointsArduino תעזור רבות בהבנה כיצד נוצרו קבצי המקור הכלולים.

שלב 3: סקירת עיצוב

סקירת עיצוב
סקירת עיצוב
סקירת עיצוב
סקירת עיצוב

על הלוח שני מעבדי ATTiny85 מחוברים באמצעות ממשק i2c, ומשמשים אותם יחד כדי לנהל את חישת המתח של הפאנל הסולארי, הזרם הזורם לתוך הסוללה מממיר ההגברה בזמן שהפאנל מואר, מתח הסוללה והסוללה. טֶמפֶּרָטוּרָה.

ממיר הדחיפה הוא מודול מדף המבוסס על טקסס אינסטרומנטס TPS6120 IC, שיכול לקחת מתח כניסה נמוך עד 0.5 וולט ולהגביר אותו לכל מקום בין 2 וולט ל -5 וולט. ליבת החיישן כוללת מספר בלוקים פונקציונליים. השעון הראשי מתחיל לפעול ברגע שהחשמל מופעל על ממיר ההגברה מכניסת פאנל סולארי. זה מתחיל את ביצוע הסקיצה, והדבר הראשון הוא לקבוע אם הלוח מואר מספיק כדי לספק זרם טעינה לסוללה.

המתח של הלוח הסולארי מועבר למרות שני מסננים דיגיטליים, ואם הוא עולה על סף מסוים המערכת קובעת שהפאנל מואר ומחברת את שעון האב לצג החוש הנוכחי. זהו ערוץ ממיר אנלוגי לדיגיטלי של השבב, המוגדר באופן דיפרנציאלי, החוש את המתח על פני נגד סובלנות של 10 אוהם 1% המחובר בסדרה בין הפלט של ממיר ההגברה לכניסת הסוללה. כאשר הלוח אינו מואר ATTiny זה שולח אות ל- ATTiny השני שאומר לו לפקח על כוח LED במקום על טעינת כוח, ולכבות את ממיר ההגברה ולבודד את הכניסה כך שהסוללה לא תשלח זרם בחזרה דרך הלוח..

הליבה השנייה של ATTiny היא המקום שבו מבצעים את ה- LED ומערכת ניטור טעינת הסוללה. מתח הלוח, מתח הסוללה ונתוני זרם הטעינה של הסוללה נשלחים לליבה זו לעיבוד באמצעות רשת לוגית מטושטשת, המנסה ליצור אות PWM מתאים להחיל על סיכת SHTDN, ובכך לשלוט בכמות הזרם הנשלחת לסוללה. כדי לטעון אותו כשהוא מואר-צורה בסיסית של מעקב אחר נקודות כוח מרביות (MPPT.) הוא גם מקבל אות מגרעין החיישן המודיע לו אם עליו להדליק או לכבות את הנורית, בהתאם לתפוקת יום הליבה של החיישן/ כפכף לילה.

כאשר נורית LED פעילה בלילה, ATTiny זה עוקב אחר נתוני מתח הסוללה הנשלחים אליה מחברו וחיישן הטמפרטורה שלו על השבב, כדי לקבל הערכה גסה על כמה כוח נדחף לתוך הנורית (מתח הסוללה יורד וטמפרטורת השבבים עולה עם הזרם שנמשך מהסיכות שלו.) הרשת-לוגית המטושטשת הקשורה לתיקון ה- PWM LED מנסה לשפוט כמה כוח הסוללה עדיין זמין, ולהפחית את עוצמת ה- LED כשהכל סוללה מרוקנת.

שלב 4: יצירת תיקונים מותאמים אישית מספריית הליבה של XOD

יצירת תיקונים מותאמים אישית מספריית הליבה של XOD
יצירת תיקונים מותאמים אישית מספריית הליבה של XOD
יצירת תיקונים מותאמים אישית מספריית הליבה של XOD
יצירת תיקונים מותאמים אישית מספריית הליבה של XOD

מספר צמתים מותאמים אישית שימשו לעיצוב זה, חלקם ניתנים לבנייה בקלות לחלוטין מצמתי XOD כלולים, וחלקם יושמו ב- C ++.

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

מבנה הצומת בתמונה הוא רק ייצוג גרפי ישיר של פונקציית ההעברה במאמר, המחובר יחד באמצעות קישורים מהתשומות המתאימות ליציאות. יש צומת דחייה מהספרייה המאפשר ליצור לולאת משוב (XOD יזהיר אותך אם תיצור לולאת משוב מבלי להכניס עיכוב בלולאה, כמתואר במודל הביצוע של XOD.) עם פרט זה הקפד על התיקון עובד טוב, זה פשוט.

צומת התיקון המותאם אישית השני הוא וריאציה על כפכף המניות הכלול ב- XOD, המוזן במתח הלוח המסונן. הוא ננעל גבוה או נמוך בהתאם לאות הקלט שהוא מעל או מתחת לסף מסוים. צמתים יצוקים משמשים להמרת ערכי פלט בוליאני לסוג נתוני הדופק כדי להפעיל את הכפכף, כאשר המצב עובר מנמוך לגבוה. העיצוב של צומת התיקון הזה אמור בתקווה להיות קצת מסביר את עצמו מצילום המסך.

שלב 5: יצירת תיקונים מותאמים אישית באמצעות C ++

יצירת תיקונים מותאמים אישית באמצעות C ++
יצירת תיקונים מותאמים אישית באמצעות C ++

לדרישות מיוחדות שבהן הפונקציונליות של הצומת תהיה מורכבת מדי מכדי לתאר בצורה גרפית בקלות, או שמסתמכות על ספריות ארדואינו שאינן ילידות בסביבת הארדואינו, XOD מקל על בעלי ידע/C +++ לכתוב נתחים בגודל ביס קוד שניתן לאחר מכן לשלב אותו בתיקון זהה לכל צומת אחר שנוצר על ידי משתמש או מלאי. בחירה באפשרות "צור תיקון חדש" מתפריט הקבצים יוצרת גיליון ריק לעבודה, וניתן לגרור צמתי קלט ופלט ממקטע "הצמתים" של ספריית הליבה. לאחר מכן ניתן לגרור את הצומת "לא מיושם ב- xod", ולחיצה עליו תביא לעורך טקסט שבו ניתן ליישם את הפונקציונליות הנדרשת ב- C ++. כיצד להתמודד עם מצב פנימי וגישה ליציאות הקלט והפלט מקוד C ++ מכוסה כאן.

כדוגמה ליישום תיקונים מותאמים אישית ב- C ++, שני תיקונים מותאמים אישית נוספים עבור ליבת הנהג משמשים להוצאת אומדן של מתח האספקה וטמפרטורת הליבה של ליבת הנהג. יחד עם הרשת המטושטשת שלה זה מאפשר הערכה גסה של כוח הסוללה הנותר הזמין להנעת הלדים כאשר הוא חשוך.

תיקון חיישן הטמפרטורה ניזון גם מהפלט של חיישן מתח האספקה כדי לקבל אומדן טוב יותר - טמפרטורת הליבה החשה מאפשרת לנו לקבל הערכה גסה של כמה כוח נשרף בנורות הלדים, ומשולבת עם קריאת מתח האספקה כאשר הפעלת הסוללה הערכה גסה נוספת לכמות הסוללה שנותרה. זה לא חייב להיות מדויק במיוחד; אם הליבה "יודעת" שהנוריות שואבות הרבה זרם אך מתח הסוללה יורד במהירות סביר להניח שספק הסוללה לא יחזיק הרבה יותר זמן, והגיע הזמן לכבות את המנורה.

שלב 6: בנייה

בְּנִיָה
בְּנִיָה
בְּנִיָה
בְּנִיָה
בְּנִיָה
בְּנִיָה

בניתי את הפרויקט על חתיכה קטנה של לוח אב טיפוס עם רפידות נחושת לחלקי חורים. שימוש בשקעים עבור ה- IC עוזר רבות לתכנות/שינוי/בדיקות; לספק האינטרנט USBTiny מ- Sparkfun יש שקע דומה על הלוח שלו כך שתכנות שני השבבים מורכבת רק מחיבור המתכנת ליציאת USB למחשב, העלאת קוד ה- XOD שהועבר מקובצי ה- Arduino הכלולים הכלולים עם הגדרות הלוח והתכנת המתאימות, וכן לאחר מכן הסר בעדינות את השבבים משקע המתכנת והכנס אותם לשקעי הפרוטובארד.

מודול ממיר ההגברה מבוסס Pololu TPS6120 מגיע על לוח riser מולחם בלוח הפרוטובור על כותרות סיכות, כך שניתן לחסוך מקום על ידי הרכבה של כמה רכיבים מתחת. על אב הטיפוס שלי שמתי מתחת את שני נגדי הקולולפ 4.7k. אלה נדרשים כדי שאוטובוס i2c בין השבבים יפעל כהלכה - תקשורת לא תעבוד כמו שצריך בלעדיהם! בצד ימין של הלוח נמצא שקע הכניסה לתקע של הפאנל הסולארי וקבל אחסון הכניסה. עדיף לנסות לחבר את השקע ואת המכסה הזה ישירות יחד באמצעות "ריצות" של הלחמה, לא חוט חיבור, כדי לקבל מסלול התנגדות נמוך ככל האפשר. לאחר מכן משתמשים בהרצות של הלחמה מוצקה לחיבור הטרמינל החיובי של קבל האחסון ישירות למסוף מתח הכניסה של מודול ההגברה, וסיכת הקרקע של מודול ההגברה ישירות לסיכה הארקה של השקע.

מימין ומשמאל של השקעים עבור שני ATTinys נמצאים קבלים של 0.1uF despike/deglitching. רכיבים אלה חשובים גם לא להשאיר בחוץ, ויש לחבר אותם למעגלי ה- IC ולסיכות הקרקע דרך קצרה וישרה ככל האפשר. הנגד החוש הנוכחי של 10 אוהם נמצא בצד שמאל, הוא מחובר בהתאם לפלט מממיר ההגברה וכל צד מחובר לסיכת קלט של חיישן - סיכות אלה מוגדרות לפעול כ- ADC דיפרנציאלי למדידה עקיפה של זרם לתוך הסוללה. ניתן לבצע חיבורים בין סיכות IC לאוטובוס i2c ובין סיכת כיבוי ממיר ההגברה וכו 'באמצעות חוט חיבור בצד התחתון של הלוח, חוט חיבור דק מאוד בעל ליבות מוצקות פועל נהדר לכך. זה מקל על השינויים וגם נראה הרבה יותר מסודר מאשר ריצת מגשרים בין חורים בחלק העליון.

מודול ה- LED בו השתמשתי היה יחידת RGB בשלושה צבעים, התכנון שלי היה שכל שלושת הלדים יהיו פעילים לייצר לבן כשהסוללה כמעט טעונה במלואה, ולאט לאט ידהה את הנורית הכחולה לצהוב כאשר הטעינה מתרוקנת. אך תכונה זו טרם יושמה. נורית LED לבנה אחת עם נגד אחד המגביל את הזרם תעבוד גם היא.

שלב 7: בדיקה, חלק 1

בדיקה, חלק 1
בדיקה, חלק 1

לאחר שתכנת את שני ה- IC של ATTiny עם קבצי הסקיצה המצורפים באמצעות מתכנת ה- USB מהסביבה של Arduino, זה עוזר לבדוק ששתי הליבות באב הטיפוס פועלות כראוי לפני שניסה להטעין את הסוללה מהפאנל הסולארי. באופן אידיאלי זה דורש אספקת חשמל בסיסית, מולטימטר וספסל.

הדבר הראשון שצריך לבדוק הוא שאין מעגלים קצרים בשום מקום בלוח לפני חיבור המעגלים, הסוללה והפאנל לשקעיהם כדי למנוע נזק אפשרי! הדרך הקלה ביותר לעשות זאת היא להשתמש בספק כוח ספסל שיכול להגביל את זרם הפלט שלו לערך בטוח במקרה של מצב זה. השתמשתי באספקת הספסל שלי המוגדרת על 3 וולט ומגבלה של 100 mA המחוברת למסופי כניסת כניסת הפאנל הסולארי למפעילי החשמל החיוביים והשליליים. בלי שום דבר אחר מאשר הרכיבים הפסיביים המותקנים, בעצם לא אמור להיות רשום זרם זרם על הצג הנוכחי של ספק הכוח שאפשר לדבר עליו. אם יש זרימת זרם משמעותית, או שהאספקה נכנסת להגבלת זרם, משהו השתבש ויש לבדוק את הלוח כדי לוודא שאין חיבורים קבלים או קבלים בעלי קוטביות הפוכה.

השלב הבא הוא לוודא שממיר ההגברה פועל כראוי. יש לוח פוטנציומטר על הלוח, כאשר ספק הכוח עדיין מחובר וארבעה מהסיכות של הממיר מחוברים כראוי יש לסובב את הפוטנציומטר בעזרת קצה מברג קטן עד שהמתח במסוף הפלט של המודול יגיע סביב 3.8 עד 3.9 וולט. ערך DC זה לא ישתנה במהלך הפעולה, ליבת הנהג תשלוט במתח המוצא הממוצע באמצעות פעולת סיכת הכיבוי של המודול.

שלב 8: בדיקה, חלק 2

בדיקה, חלק 2
בדיקה, חלק 2
בדיקה, חלק 2
בדיקה, חלק 2

הדבר הבא שצריך לבדוק הוא שתקשורת i2c פועלת תקין, כאשר הלוח פועל מהספסל ניתן להתקין את ליבת החיישן IC. באוסילוסקופ אמורים להיות אותות פועמים הן על סיכה 5 והן על סיכה 7 של השבב הפיזי, הנהג i2c זה על השבב מנסה לשלוח נתונים לחברו. לאחר כיבוי ליבת הדרייבר ניתן להתקין ולבדוק שוב את החיבור עם אוסצילוסקופ, צריך להיות רצף גדול יותר של פולסים הנראים בשני הקווים. המשמעות היא שהשבבים מתקשרים נכון.

זה עוזר להטעין מעט את הסוללה לקראת הבדיקה המלאה האחרונה. ניתן להשתמש באספקת הספסל גם לשם כך, כשהגבול הנוכחי מוגדר לכ- 50 mA והמתח עדיין על 3.8 וולט, ומשאיר את סוללת ה- LiPo מחוברת ישירות למספר דקות.

השלב האחרון הוא לבדוק את המערכת המלאה - כשהכל מחובר אם הלוח מכוסה במשך עשר או 15 שניות האור צריך להידלק כשהוא מונע באמצעות פלט ה- PWM של ליבת הנהג. כאשר הלוח באור שמש בהיר, הסוללה אמורה להיטען מפלט ממיר ההגברה. ניתן לבדוק בעקיפין את רשת ההיגיון המטושטשת כדי לבדוק אם היא פועלת כראוי על ידי הסתכלות על קו ה- PWM המניע את סיכת הכיבוי של ממיר ההגברה; ככל שהתאורה עולה עם סוללה עם מצב טעינה נמוך רוחב הדופק אמור להגדיל, מה שמראה שככל שיותר כוח יגיע לאור השמש, ליבת הנהג מאותתת כי יש לשלוח יותר חשמל לסוללה!

שלב 9: נספח בנושא לוגיקה מטושטשת

נספח בנושא Fuzzy Logic
נספח בנושא Fuzzy Logic

לוגיקה מטושטשת היא טכניקת למידת מכונה שניתן להשתמש בה בשליטה על מערכות חומרה כאשר אי הוודאות קיימת ברבים מהפרמטרים של המערכת הנשלטת, מה שהופך קלט מפורש לפלט בקרת הפלט במטרה שקשה לרשום מתמטית. זה מושג על ידי שימוש בערכים הגיוניים הנמצאים איפשהו בין 0 (שקר) ל -1 (נכון), ומבטאים אי ודאות בערך דומה יותר לאופן שבו בן אדם ("לרוב נכון" או "לא ממש נכון") ומאפשר אזור אפור בין אמירות שהן 100% נכונות ו -100% שקר. הדרך להשיג זאת היא באמצעות לקיחת הדגימות הראשונות של משתני הקלט שעליהם יש להתבסס על החלטה ו"להסיר "אותן.

ליבה של כל מערכת לוגית מטושטשת הוא "זיכרון אסוציאטיבי מטושטש". זה מזכיר מטריצה, כאשר במקרה של מעגל טעינת הסוללה מאוחסנת ערכת 3x3 ערכים הנעים בין 0 ל -1. הערכים במטריצה יכולים להיות קשורים באופן גס לאופן שבו בן אדם יחשוב לגבי מה גורם הגורם PWM השולט בסיכת SHTDN של ממיר ההגברה, בהתאם לאופן שבו פונקציית החברות לעיל מתאימה קבוצה נתונה של תשומות. לדוגמה, אם מתח הכניסה ללוח גבוה, אך הזרם הנמשך לסוללה נמוך, זה כנראה אומר שאפשר למשוך יותר כוח והגדרת ה- PWM אינה אופטימלית ויש להגדיל אותה. לעומת זאת, אם מתח הלוח ירד אך המטען עדיין מנסה לדחוף זרם גדול לסוללה גם הוא יתבזבז, לכן עדיף להקטין את אות ה- PWM לממיר ההגברה. ברגע שאותות הקלט "מעורפלים" לתוך קבוצה מטושטשת, הם מוכפלים בערכים אלה, בדומה לאופן בו מכפילים את הווקטור במטריצה, כדי ליצור קבוצה שהופכת לייצוג של מידת התא הכבד של "הידע". של המטריצה צריך להיחשב בפונקציית השילוב הסופית.

שימוש בצומת "לא מיושם ב- xod" המאפשר לצמתים של XOD המיישמים פונקציונליות מותאמת אישית מסובכת מכדי שיהיה סביר להכין מאבני הבניין, ומעט C ++ בסגנון ארדואינו, הזיכרון האסוציאטיבי, פונקציית השקלול, ו " fuzzifier "הדומה לבלוקים המתוארים בהפניה זו: https://www.drdobbs.com/cpp/fuzzy-logic-in-c/184408940 הם פשוטים להכנה והרבה יותר קל להתנסות בהם.

מוּמלָץ: