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

מיני תחנת מזג אוויר עם Attiny85: 6 שלבים (עם תמונות)
מיני תחנת מזג אוויר עם Attiny85: 6 שלבים (עם תמונות)

וִידֵאוֹ: מיני תחנת מזג אוויר עם Attiny85: 6 שלבים (עם תמונות)

וִידֵאוֹ: מיני תחנת מזג אוויר עם Attiny85: 6 שלבים (עם תמונות)
וִידֵאוֹ: שעון דיגיטלי 2024, יולי
Anonim
מיני תחנת מזג אוויר עם Attiny85
מיני תחנת מזג אוויר עם Attiny85
מיני תחנת מזג אוויר עם Attiny85
מיני תחנת מזג אוויר עם Attiny85
מיני תחנת מזג אוויר עם Attiny85
מיני תחנת מזג אוויר עם Attiny85

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

למעשה, אם אשלב שני הוראות קודמות שכתבתי:

ממשק LCD דו חוטי עבור Arduino או Attiny וקבלת ושליחת נתונים בין Attiny85 (Arduino IDE 1.06) אז רוב העבודה כבר נעשתה. צריך רק להתאים קצת את התוכנה.

בחרתי בפתרון lcd דו -חוטי עם רגיסטר shift, ולא ב- I2C LCD מכיוון שב- Attiny קל יותר ליישם את רשימת המשמרות מאשר באוטובוס I2C. עם זאת … אם אתה רוצה לקרוא למשל חיישן לחץ BMP180 או BMP085, אתה צריך I2C בשביל זה בכל מקרה, כך שגם אתה יכול להשתמש ב- LCD I2C. TinyWireM היא ספרייה טובה עבור I2C ב- Attiny (אך היא דורשת שטח נוסף).

BOM המשדר: מודול משדר DHT11 Attiny85 10 k נגד 433MHz

מקלט Attiny85 10k נגד מקלט 433 מגה -הרץ

הצג 74LS164 משמרת רשם 1N4148 דיודה 2x1k הנגד 1x1k משתנה תצוגת LCD 2x16

שלב 1: תחנת מזג אוויר מיני עם Attiny85: המשדר

מיני תחנת מזג אוויר עם Attiny85: המשדר
מיני תחנת מזג אוויר עם Attiny85: המשדר
מיני תחנת מזג אוויר עם Attiny85: המשדר
מיני תחנת מזג אוויר עם Attiny85: המשדר
מיני תחנת מזג אוויר עם Attiny85: המשדר
מיני תחנת מזג אוויר עם Attiny85: המשדר
מיני תחנת מזג אוויר עם Attiny85: המשדר
מיני תחנת מזג אוויר עם Attiny85: המשדר

המשדר הוא תצורה בסיסית מאוד של ה- Attiny85 עם נגד מעלה בקו האיפוס. מודול משדר מחובר לפין הדיגיטלי '0' וסיכת הנתונים DHT11 מתחברת לפין הדיגיטלי 4. צרף חוט של 17.2 ס מ כאנטנה (לקבלת אנטנה טובה בהרבה ראה שלב 5). התוכנה היא כדלקמן:

// יעבוד על Attiny // RF433 = סיכה D0 5

// DHT11 = סיכת D4 3 // ספריות #כלול // מאת רוב טילארט #כלול dht DHT11; #define DHT11PIN 4 #define TX_PIN 0 // סיכה שבה המשדר שלך מחובר // משתנים float h = 0; לצוף t = 0; int transmit_t = 0; int transmit_h = 0; int transmit_data = 0; הגדרת void () {pinMode (1, INPUT); man.setupTransmit (TX_PIN, MAN_1200); } לולאת חלל () {int chk = DHT11.read11 (DHT11PIN); h = DHT11. לחות; t = DHT11. טמפרטורה; // אני יודע, אני משתמש כאן ב -3 משתנים שלמים // שבהם אני יכול להשתמש ב 1 // אבל זה רק כך שקל יותר לעקוב אחרי transmit_h = 100* (int) h; transmit_t = (int) t; transmit_data = transmit_h+transmit_t; man.transmit (transmit_data); עיכוב (500); }

התוכנה משתמשת בקוד מנצ'סטר לשליחת הנתונים. הוא קורא את DHT11 ומאחסן את הטמפרטורה והלחות בשתי מצופים נפרדים. מכיוון שקוד מנצ'סטר לא שולח מצופים, אלא מספר שלם, יש לי מספר אפשרויות: 1- לפצל את המצופים לשני מספרים שלמים כל אחד ולשלוח את אלה 2- לשלוח כל מצוף כמספר שלם 3- לשלוח את שני המצופים כמספר אחד עם אפשרות 1 אני צריך לשלב המספרים השלמים לצפים שוב במקלט ואני צריך לזהות איזה מספר שלם הוא מה, מה שהופך את הקוד למפותל עם אפשרות 2 אני עדיין צריך לזהות איזה מספר שלם הוא ללחות ואילו לטמפרטורה. אני לא יכול ללכת לפי רצף לבד במקרה שמספר שלם אחד יאבד בשידור, אז אצטרך לשלוח מזהה המצורף למספר השלם. עם אפשרות 3, אני יכול לשלוח רק מספר שלם אחד. ברור שזה הופך את הקריאות למעט פחות מדויקות - בתוך מעלה אחת - ואי אפשר לשלוח מתחת לאפס טמפרטורות, אבל זה רק קוד פשוט ויש דרכים לעקוף את זה. בינתיים זה בערך העיקרון. אז מה שאני עושה זה שאני הופך את המצופים למספרים שלמים ואני מכפיל את הלחות עם 100. ואז אני מוסיף את הטמפרטורה ללחות המרובה. בהתחשב בעובדה שהלחות לעולם לא תהיה 100% המספר המרבי שאקבל הוא 9900. בהתחשב בעובדה שהטמפרטורה גם לא תהיה מעל 100 מעלות, המספר המרבי יהיה 99, לכן המספר הגבוה ביותר שאשלח הוא 9999 וקל להפריד בצד המקלט. כמובן החישוב שלי בו אני משתמש בשלושה מספרים שלמים הוא מוגזם מכיוון שניתן היה לעשות אותו בקלות עם משתנה אחד. רק רציתי להפוך את הקוד לקל יותר לעקוב. הקוד מתאסף כעת כדלקמן:

גודל סקיצה בינארית: 2, 836 בתים (של מקסימום 8, 192 בתים) כך שיתאים ל- Attiny 45 או 85 הערה הספרייה של dht.h שבה אני משתמשת היא זו של רוב טילארט. ספרייה זו מתאימה גם ל- DHT22. אני משתמש בגרסה 1.08. עם זאת, ל- Attiny85 ייתכנו בעיות בקריאת DHT22 עם גרסאות נמוכות יותר של הספרייה. אושר לי כי 1.08 ו- 1.14 - למרות שעובדים על ארדואינו רגיל - מתקשים לקרוא DHT22 ב- Attiny85. אם ברצונך להשתמש ב- DHT22 ב- Attiny85, השתמש בגרסת 1.20 של ספרייה זו. הכל צריך לעשות עם תזמון. גרסת 1.20 של הספרייה היא קריאה מהירה יותר. (תודה על חווית המשתמש הזו Jeroen)

שלב 2: תחנת מזג אוויר מיני עם Attiny85: המקלט

מיני תחנת מזג אוויר עם Attiny85: המקלט
מיני תחנת מזג אוויר עם Attiny85: המקלט

שוב Attiny85 משמש בתצורה בסיסית כאשר סיכת האיפוס מושכת גבוה עם נגד 10 k. מודול המקלט מחובר לסיכה דיגיטלית 1 (סיכה 6 בשבב). ה- LCD מחובר לפינים הדיגיטליים 0 ושניים. צרף חוט של 17.2 ס מ כאנטנה. הקוד הוא כדלקמן:

#לִכלוֹל

#include LiquidCrystal_SR lcd (0, 2, TWO_WIRE); #define RX_PIN 1 // = פין פין 6 הגדרת חלל () {lcd.begin (16, 2); lcd.home (); man.setupReceive (RX_PIN, MAN_1200); man.beginReceive (); } לולאת void () {if (man.receiveComplete ()) {uint16_t m = man.getMessage (); man.beginReceive (); lcd.print ("לח:"); lcd.print (m/100); lcd.setCursor (0, 1); lcd.print ("טמפ '"); lcd.print (מ%100); }}

הקוד פשוט למדי: המספר השלם המועבר מתקבל ומאוחסן במשתנה 'm'. הוא מחולק ב -100 כדי לתת לחות והמודולו של 100 נותן את הטמפרטורה. נניח שהמספר השלם שהתקבל היה 33253325/100 = 333325 % 100 = 25 קוד זה מתאסף כ- 3380 בתים ולכן ניתן להשתמש בו רק עם attiny85, לא עם 45

שלב 3: תחנת מזג אוויר מיני עם Attiny85/45: התצוגה

מיני תחנת מזג אוויר עם Attiny85/45: התצוגה
מיני תחנת מזג אוויר עם Attiny85/45: התצוגה
מיני תחנת מזג אוויר עם Attiny85/45: התצוגה
מיני תחנת מזג אוויר עם Attiny85/45: התצוגה

עבור התצוגה עדיף שאפנה למדריך שלי על צג דו חוטי. בקיצור, צג נפוץ בגודל 16x2 משתמש ב- shiftregister כך שהוא יכול לפעול עם שני סיכות דיגיטליות. כמובן אם אתה מעדיף להשתמש בתצוגה מוכנה ל- I2C, כלומר אפשרי גם, אבל אז אתה צריך ליישם פרוטוקול I2C על ה- Attiny. פרוטוקול Tinywire יכול לעשות זאת. למרות שכמה מקורות אומרים שזה מצפה לשעון של 1 מגה -הרץ, לא הייתה לי שום בעיה (בפרויקט אחר) להשתמש בו ב- 8Mhz בכל מקרה פשוט לא טרחתי כאן והשתמשתי במרשם משמרות.

שלב 4: תחנת מזג אוויר מיני עם Attiny85/45: אפשרויות/מסקנות

מיני תחנת מזג אוויר עם Attiny85/45: אפשרויות/מסקנות
מיני תחנת מזג אוויר עם Attiny85/45: אפשרויות/מסקנות
מיני תחנת מזג אוויר עם Attiny85/45: אפשרויות/מסקנות
מיני תחנת מזג אוויר עם Attiny85/45: אפשרויות/מסקנות
מיני תחנת מזג אוויר עם Attiny85/45: אפשרויות/מסקנות
מיני תחנת מזג אוויר עם Attiny85/45: אפשרויות/מסקנות

כאמור, הפכתי את זה להוראה להראות שאפשר ליצור תחנת מזג אוויר מיני עם שני attiny85 (אפילו עם attiny85+ 1 attiny45). זה שולח רק לחות וטמפרטורה באמצעות DHT11. עם זאת, ל- Attiny יש 5 סיכות דיגיטליות לשימוש, 6 אפילו עם קצת תחבולות. לכן אפשר לשלוח נתונים מחיישנים נוספים. בפרויקט שלי- כפי שניתן לראות בתמונות בלוח החשמל וב- PCB מקצועי (OSHPark)- אני שולח/מקבל נתונים מ- DHT11, מ- LDR ומ- PIR, הכל באמצעות הגבלה בשימוש ב- attiny85 כמקלט היא הצגת הנתונים בסגנון נוצץ. מכיוון שהזיכרון מוגבל: טקסטים כמו 'טמפרטורה, לחות, רמת אור, נושא מתקרב' ימלאו שטח זיכרון יקר למדי, אך אין סיבה להשתמש בשני של Arduino רק כדי לשלוח/לקבל טמפרטורה ולחות. בנוסף, אפשר כדי שהמשדר ילך לישון ורק יתעורר לשלוח נתונים אומרים כל 10 דקות ובכך להאכיל אותו מתא כפתור. מדידות לחות הקרקע גם כן, או הוספת מד -מד או מד גשם

שלב 5: תחנת מזג אוויר מיני: האנטנה

תחנת מזג אוויר מיני: האנטנה
תחנת מזג אוויר מיני: האנטנה

האנטנה היא חלק חשוב מכל התקנה של 433 מגה -הרץ. ניסיתי עם אנטנת 'מוט' הסטנדרטית בגודל 17.2 ס מ והייתה לי פלירטוט קצר עם אנטנת סליל. העיצוב הוא של בן שואלר וככל הנראה פורסם במגזין 'אלקטור'. קל לעקוב אחר קובץ PDF עם התיאור של 'אנטנת 433 מגה -הרץ המקוררת באוויר'. (הקישור נעלם, בדוק כאן)

שלב 6: הוספת BMP180

הוספת BMP180
הוספת BMP180

רוצה להוסיף חיישן לחץ ברומטרי כמו BMP180? בדוק את ההנחיות האחרות שלי בנושא.

מוּמלָץ: