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

מדידת אנרגיה ארדואינו: 10 שלבים (עם תמונות)
מדידת אנרגיה ארדואינו: 10 שלבים (עם תמונות)

וִידֵאוֹ: מדידת אנרגיה ארדואינו: 10 שלבים (עם תמונות)

וִידֵאוֹ: מדידת אנרגיה ארדואינו: 10 שלבים (עם תמונות)
וִידֵאוֹ: אנשים שנפלו לתוך כלובים של חיות מסוכנות | טופטן 2024, יולי
Anonim
Image
Image
מדידת אנרגיה ארדואינו
מדידת אנרגיה ארדואינו
מדידת אנרגיה ארדואינו
מדידת אנרגיה ארדואינו

[נגן סרטון]

אני שייך לכפר אודישה, הודו, שם נפוצה מאוד הפסקת חשמל. זה מעכב את חייו של כל אחד. במהלך ימי ילדותי המשך הלימודים אחרי הדמדומים היה אתגר של ממש. בשל בעיה זו עיצבתי מערכת סולארית לביתי על בסיס ניסיוני. השתמשתי בפאנל סולארי של 10 וואט, 6V להדלקת כמה נוריות בהירות. לאחר התמודדות עם הרבה קשיים הפרויקט הצליח. ואז החלטתי לעקוב אחר המתח, הזרם, ההספק והאנרגיה הכרוכים במערכת. זה הביא את הרעיון של עיצוב ENERGY METER. השתמשתי ב- ARDUINO כלב ליבו של הפרויקט הזה מכיוון שקל מאוד לכתוב קוד ב- IDE שלו וישנם מספר עצום של ספריית קוד פתוח באינטרנט שניתן להשתמש בו על פי דרישה.ניסיתי את הפרויקט עבור מערכת סולארית בעלת דירוג קטן מאוד (10 וואט) אך ניתן לשנות זאת בקלות לשימוש עבור מערכת דירוג גבוהה יותר.

אתה יכול למצוא את כל הפרויקטים שלי ב:

תכונה: ניטור אנרגיה על ידי תצוגת 1. LCD 2. באמצעות אינטרנט (העלאה Xively) 3. רישום נתונים בכרטיס SD

אתה יכול לראות את הבקר החדש של ARDUINO MPPT SOLAR CHARGE CHARGE החדש (גרסה 3.0)

אתה יכול גם לראות את ההוראות האחרות שלי ב

בקרת טעינה סולארית של ARDUINO (גרסה 2.0)

בקרת טעינה סולארית של ARDUINO (גרסה 1)

שלב 1: חלקים דרושים:

חלקים דרושים
חלקים דרושים

1. ARDUINO UNO (אמזון) 2. ARDUINO ETHERNET SHIELD (אמזון)

3. 16x2 LCD Character (אמזון)

4. חיישן ACS 712 הנוכחי (אמזון) 4. נגדים (10k, 330ohm) (אמזון) 5. 10K פוטנציום (אמזון) 6. חוטי מגשר (אמזון) 7. כבל אתרנט (אמזון) 8. לוח לחם (אמזון)

שלב 2: כוח ואנרגיה

הספק: כוח הוא תוצר של מתח (וולט) וזרם (אמפר) P = VxI יחידת הספק היא וואט או KW אנרגיה: אנרגיה היא תוצר של הספק (וואט) וזמן (שעה) E = יחידת אנרגיה Pxt היא שעה ואט או קילוואט שעה (קוט ש) מהנוסחה שלעיל ברור שכדי למדוד אנרגיה צריך שלושה פרמטרים 1. מתח 2. זרם 3. זמן

שלב 3: מדידת מתח

מדידת מתח
מדידת מתח
מדידת מתח
מדידת מתח
מדידת מתח
מדידת מתח

המתח נמדד בעזרת מעגל מחלק מתח. מכיוון שמתח הכניסה האנלוגי של ARDUINO מוגבל ל- 5V תכננתי את מחלק המתח בצורה כזו שמתח היציאה ממנו צריך להיות פחות מ -5V. הסוללה שלי משמשת לאחסון הספק מהפאנל הסולארי הוא 6v, 5.5Ah. אז אני צריך להוריד את 6.5v זה למתח נמוך מ -5V. השתמשתי ב- R1 = 10k ו- R2 = 10K. הערך של R1 ו- R2 יכול להיות נמוך יותר אך הבעיה היא שכאשר ההתנגדות נמוכה זרם זרם גבוה יותר כתוצאה מכך כמות גדולה של כוח (P = I^2R) מתפוגגת בצורה של חום. כך שניתן לבחור ערך התנגדות שונה אך יש להקפיד למזער את אובדן הכוח על פני ההתנגדות. Vout = R2/(R1+R2)*Vbat Vbat = 6.5 כאשר הוא טעון במלואו R1 = 10k ו- R2 = 10k Vout = 10/(10+10)*6.5 = 3.25v שהוא נמוך מ- 5v ומתאים לפין אנלוגי של ARDUINO הערה I הראו סוללת 9 וולט במעגל הלוח החשוף היא רק למשל לחיבור החוטים. אבל הסוללה בפועל שהשתמשתי בה היא סוללת חומצת עופרת של 6 וולט, 5.5Ah. כיול מתח: כאשר הסוללה טעונה במלואה (6.5 וולט) נקבל a Vout = 3.25v וערך נמוך יותר עבור מתח סוללה נמוך יותר. AEDUINO ADC ממיר אות אנלוגי לקירוב דיגיטלי תואם. כאשר מתח הסוללה הוא 6.5v קיבלתי 3.25v ממחלק המתח ומדגם 1 = 696 במסך טורי, כאשר מדגם 1 הוא ערך ADC תואם 3.25v להבנה טובה יותר צירפתי את סימולציית הזמן בזמן אמת על ידי מעגל 123D. למדידת מתח כיול: 3.25v שווה ל 696 1 שווה ל- 3.25/696 = 4.669mv Vout = (4.669*מדגם 1)/1000 וולט מתח הסוללה בפועל = (2*Vout) voltARDUINO CODE: // לוקח 150 דגימות ממחלק מתח עם מרווח של 2 שניות ולאחר מכן ממוצע נתוני הדגימות שנאספו עבור (int i = 0; i <150; i ++) {sample1 = sample1+analogRead (A2); // קרא את המתח מהעיכוב במעגל המפריד (2); } sample1 = sample1/150; מתח = 4.669*2*מדגם 1/1000;

שלב 4: מדידה נוכחית

מדידה נוכחית
מדידה נוכחית
מדידה נוכחית
מדידה נוכחית

למדידת זרם השתמשתי בחיישן זרם Hall Effect ACS 712 (20 A).ישנם חיישן ACS712 מסוג טווח זרמים שונים הזמינים בשוק, אז בחר בהתאם לדרישתך. בתרשים לוח הלחם הצגתי LED כעומס אך העומס בפועל שונה.עקרון עבודה: אפקט האולם הוא ייצור הפרש מתח (מתח האולם) על פני מוליך חשמלי, רוחבי לזרם חשמלי במוליך ו שדה מגנטי בניצב לזרם. למידע נוסף על חיישן Hall Effect לחץ כאן גליון הנתונים של חיישן ACS 712 נמצא כאן מתוך גליון 1. ACS 712 מודד חיובי ושלילי 20 אמפר, המתאים לפלט האנלוגי 100mV/A 2. אין זרם בדיקה דרך מתח היציאה VCC/2 = 5v/2 = 2.5V כיול: קריאה אנלוגית מייצרת ערך של 0-1023, המשווה ל 0v עד 5v אז קריאה אנלוגית 1 = (5/1024) V = 4.89mv Value = (4.89*ערך קריאה אנלוגי)/ 1000 V אבל לפי גיליונות הנתונים הקיזוז הוא 2.5V (כאשר האפס הנוכחי תקבל 2.5V מפלט החיישן) ערך בפועל = (ערך-2.5) V הנוכחי במגבר = ערך בפועל*10ARDUINO CODE: // לוקח 150 דגימות מ חיישנים עם מרווח של 2 שניות ולאחר מכן ממוצע נתוני הדגימות שנאספו עבור (int i = 0; i <150; i ++) {sample2+= analogRead (A3); // קרא את הזרם מעיכוב חיישן (2); } sample2 = sample2/150; val = (5.0*sample2) /1024.0; actualval = val-2.5; // מתח הקיזוז הוא 2.5V אמפר = actualval*10;

שלב 5: מדידת זמן

למדידת זמן אין צורך בחומרה חיצונית כלשהי, מכיוון של- ARDUINO עצמה יש טיימר מובנה. הפונקציה millis () מחזירה את מספר האלפיות השנייה מאז שהלוח של Arduino החל להריץ את התוכנית הנוכחית. COARDUINO CODE: long milisec = millis (); // לחשב זמן באלפיות השנייה זמן = מיליסק/1000; // להמיר מילי שניות לשניות

שלב 6: כיצד מחשבים ARDUINO כוח ואנרגיה

טוטמפס = טוטמפס+אמפר; // לחשב סך אמפר avgamps = totamps/time; // ממוצע אמפר אמפר = (אווגאמפ*זמן)/3600; // אמפר-שעה ואט = מתח*אמפר; // כוח = מתח*אנרגיה נוכחית = (וואט*זמן)/3600; Watt-sec שוב הופך ל- Watt-Hr על ידי חלוקת 1 שעה (3600 שניות) // אנרגיה = (ואט*זמן)/(1000*3600); לקריאה בקוט ש

שלב 7: פלט חזותי

פלט חזותי
פלט חזותי

ניתן להציג את כל התוצאות בצג הטורי או באמצעות LCD. השתמשתי במסך LCD בגודל 16x2 כדי להציג את כל התוצאות שהתקבלו בשלבים הקודמים. לתרשימים עיין במעגל לוח הלחם המוצג למעלה. חבר LCD עם ARDUINO כפי שניתן להלן: LCD -> Arduino 1. VSS -> Arduino GND 2. VDD - > Arduino + 5v 3. VO -> Pin Arduino GND + Resistor or Potentiometer 4. RS -> Arduino pin 8 5. RW -> Pin Arduino 7 6. E -> Arduino pin 6 7. D0 -> Arduino -לא מחובר 8. D1 -> Arduino -לא מחובר 9. D2 -> Arduino -לא מחובר 10. D3 -> Arduino -לא מחובר 11. D4 -> סיכת Arduino 5 12. D5 -> סיכת Arduino 4 13. D6 -> סיכה Arduino 3 14. D7 -> סיכת Arduino 2 15. A -> Pin Arduino 13 + הנגד (עוצמת תאורה אחורית) 16. K -> Arduino GND (קרקע תאורה אחורית) קוד ARDUINO: לצג סידורי:

Serial.print ("VOLTAGE:"); Serial.print (מתח); Serial.println ("וולט"); Serial.print ("CURRENT:"); Serial.print (אמפר); Serial.println ("אמפר"); Serial.print ("POWER:"); Serial.print (וואט); Serial.println ("וואט"); Serial.print ("צריכת אנרגיה:"); Serial.print (אנרגיה); Serial.println ("שעה-ואט"); Serial.println (""); // הדפס את קבוצות הפרמטרים הבאות לאחר עיכוב בשורה ריקה (2000); עבור LCD: לתצוגת LCD עליך לייבא תחילה את ספריית "LiquidCrystal" בקוד. למידע נוסף על ספריית LequidCrystal לחץ כאן להדרכת LCD לחץ כאן הקוד הבא הוא פורמט להצגת LCD כל החישוב עבור כוח ואנרגיה #כולל lcd (8, 7, 6, 5, 4, 3, 2); int backLight = 9; הגדרת void () {pinMode (backLight, OUTPUT); // הגדר את סיכה 9 כפלט analogWrite (backLight, 150); // שולט בעוצמת התאורה האחורית 0-254 lcd.begin (16, 2); // עמודות שורות. גודל התצוגה lcd.clear (); // נקה את המסך} לולאת חלל () {lcd.setCursor (16, 1); // הגדר את הסמן מחוץ למספר התצוגה lcd.print (""); // הדפס עיכוב תווים ריק (600); //////////////////////////////////////// ///////////////////////////////////// (1, 0); // הגדר את הסמן בעמודה הראשונה ובשורה הראשונה lcd.print (וואט); lcd.print ("W"); lcd.print (מתח); lcd.print ("V"); lcd.setCursor (1, 1); // הגדר את הסמן בעמודה הראשונה ובשורה השנייה lcd.print (אנרגיה); lcd.print ("WH"); lcd.print (אמפר); lcd.print ("A"); }

שלב 8: העלאת נתונים ל- Xively.com

העלאת נתונים ל- Xively.com
העלאת נתונים ל- Xively.com
העלאת נתונים ל- Xively.com
העלאת נתונים ל- Xively.com
העלאת נתונים ל- Xively.com
העלאת נתונים ל- Xively.com

עיין בצילומי המסך לעיל כדי להבין טוב יותר את המצב. להעלאת נתונים ל- xively.com להורדה הראשונה של הספרייה הבאה HttpClient: לחץ כאן Xively: לחץ כאן SPI: ייבוא מארדואינו IDE (סקיצה -> ייבוא ספרייה …..) אתרנט: ייבוא מארדואינו IDE ((סקיצה -> ייבוא ספרייה …..) פתח חשבון ב- https://xively.com (לשעבר pachube.com ו- cosm.com) הירשם לחשבון מפתח בחינם בכתובת

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

לאחר מכן לחץ על קישור ההפעלה כדי להפעיל את החשבון שלך. לאחר פתיחת החשבון בהצלחה תועבר לדף התקני פיתוח

  • לחץ על התיבה +הוסף מכשיר
  • תן שם למכשיר ולתיאור (למשל, מעקב אחר אנרגיה) ·
  • בחר נתונים פרטיים או ציבוריים (אני בוחר פרטי) ·
  • לחץ על הוסף מכשיר

לאחר הוספת המכשיר אתה מופנה לדף חדש שבו יש מידע רב וחשוב

  • מזהה מוצר, סוד המוצר, מספר סידורי, קוד הפעלה ·
  • מזהה עדכון, FeedURL, נקודת סיום API (מזהה הזנה משמש בקוד ARDUINO)
  • הוסף ערוצים (IChoose ENERGY ו- POWER, אך תוכל לבחור לפי בחירתך) תן יחידה וסמל עבור הפרמטר ·
  • הוסף את המיקום שלך ·
  • מפתחות API (בשימוש בקוד ARDUINO, הימנע משיתוף מספר זה) ·
  • מפעילים (דף ping aweb כאשר קרה אירוע, למשל כאשר צריכת האנרגיה חורגת ממגבלה מסוימת)

שלב 9: קוד Xively ו- ARDUINO

כאן צירפתי את הקוד המלא (גרסת בטא) למד אנרגיה למעט רישום נתוני כרטיסי SD אשר מצורף בנפרד בשלב הבא. / ** העלה נתוני ניטור אנרגיה ל- xively **/ #include #include #include #include #define API_KEY "xxxxxxxx" // הזן את מפתח ה- API שלך Xively #הגדר FEED_ID xxxxxxxxx // הזן את מזהה ההזנה שלך Xively // כתובת MAC עבור Byte shield byte mac = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // סיכה אנלוגית שאנו עוקבים אחריה (0 ו- 1 משמשים את מגן ה- Ethernet) int sensorPin = 2; unsigned long lastConnectionTime = 0; // בפעם האחרונה שהתחברנו ל- Cosm const חיבור ארוך לא חתוםInterval = 15000; // עיכוב בין החיבור ל- Cosm באלפיות השנייה // אתחל את ספריית Cosm // הגדר את המחרוזת עבור מזהה זרם הנתונים שלנו char sensorId = "POWER"; char sensorId2 = "אנרגיה"; XstreamDatastream datastreams = {XivelyDatastream (sensorId, strlen (sensorId), DATASTREAM_FLOAT), XivelyDatastream (sensorId2, strlen (sensorId2), DATASTREAM_FLOAT), DATASTREAM_FLOAT),}; // עטפו את זרם הנתונים להזנת XivelyFeed הזנה (FEED_ID, datastreams, 2/ * מספר זרמי הנתונים */); לקוח EthernetClient; XivelyClient xivelyclient (לקוח); הגדרת void () {Serial.begin (9600); Serial.println ("אתחול רשת"); while (Ethernet.begin (mac)! = 1) {Serial.println ("שגיאה בקבלת כתובת IP באמצעות DHCP, ניסיון שוב …"); עיכוב (15000); } Serial.println ("אתחול רשת"); Serial.println (); } לולאת void () {if (millis () - lastConnectionTime> connectionInterval) {sendData (); // שלח נתונים ל- getData () xively; // קראו את זרם הנתונים בחזרה מ xively lastConnectionTime = millis (); // עדכן את זמן החיבור כך שנמתין לפני החיבור שוב}} voD sendData () {int sensor1 = watt; int sensor2 = אנרגיה; datastreams [0].setFloat (sensor1); // power datatreams streams [1].setFloat (sensor2); // ערך אנרגיה Serial.print ("כוח קריאה"); Serial.println (datastreams [0].getFloat ()); Serial.print ("קריאת אנרגיה"); Serial.println (datastreams [1].getFloat ()); Serial.println ("העלאה ל- Xively"); int ret = xivelyclient.put (פיד, API_KEY); Serial.print ("קוד החזרה PUT:"); Serial.println (ret); Serial.println (); } // לקבל את הערך של זרם הנתונים מ- xively, להדפיס את הערך שקיבלנו voD getData () {Serial.println ("קריאת נתונים מ- Xively"); int ret = xivelyclient.get (פיד, API_KEY); Serial.print ("קבל קוד החזרה:"); Serial.println (ret); if (ret> 0) {Serial.print ("Datastream is:"); Serial.println (הזנה [0]); Serial.print ("ערך ההספק הוא:"); Serial.println (הזנה [0].getFloat ()); Serial.print ("Datastream is:"); Serial.println (הזנה [1]); Serial.print ("ערך האנרגיה הוא:"); Serial.println (הזנה [1].getFloat ()); } Serial.println ();

שלב 10: רישום נתונים בכרטיס SD

לאחסון נתונים בכרטיס SD עליך לייבא את ספריית ה- SD למדריך לחץ כאן למידע נוסף על ספריית ה- SD לחץ כאן הקוד לאחסון נתונים בכרטיס SD נכתב בנפרד מכיוון שאין לי מספיק זיכרון ב- ARDUINO UNO שלי לאחר כתיבת קוד לתצוגת LCD והעלאת נתונים xively.com. אבל אני מנסה לשפר את קוד גרסת הבטא כך שקוד אחד יכול להכיל את כל התכונות (תצוגת LCD, העלאת נתונים Xively ואחסון נתונים בכרטיס SD). הקוד לרישום נתונים מצורף להלן. אם מישהו כותב קוד טוב יותר על ידי שינוי הקוד שלי אנא שתף אותי. זהו ההוראה הטכנית הראשונה שלי, אם מישהו מוצא טעות כלשהי, אל תהסס להגיב.. כדי שאוכל לשפר את עצמי. אם אתה מוצא תחומי שיפור בפרויקט זה אנא הערה או שלח לי הודעה, כך שהפרויקט יהיה חזק יותר. אני חושב שהוא יועיל לאחרים כמו גם לי.

תחרות מעגלים 123D
תחרות מעגלים 123D
תחרות מעגלים 123D
תחרות מעגלים 123D

פרס שלישי בתחרות מעגלים 123D

מוּמלָץ: