- חומרים הנדרשים עבור מד מתח ESP32
- מד יעילות מבוסס Arduino ו- ESP32 - דיאגרמת מעגלים
- תכנון PCB עבור מד יעילות מבוסס Arduino ו- ESP32
- מד יעילות מבוסס Arduino ו- ESP32 - קוד
- בדיקת מד יעילות מבוסס Arduino ו- ESP32
- שיפורים נוספים
כולנו מודעים למד מתח, מד זרם ואט וואט בסיסיים, שלושת הדברים הבסיסיים הדרושים לכם כדי למדוד ערכים בכל פרויקטים או מעגלים אלקטרוניים. מדידת מתח וזרם בעזרת מולטימטר יכולה להיות דרך טובה להתחיל, אך אחת הבעיות הגדולות ביותר איתן אני מתמודד בעת בדיקת מעגל היא מדידת יעילות הספק. לכן, היום נפתור את הבעיה על ידי בניית מד יעילות מבוסס Arduino ו- ESP32 שיכול למדוד מתח כניסה, זרם כניסה, מתח יציאה וזרם יציאה. לפיכך, הוא יכול למדוד את עוצמת הקלט ואת עוצמת הפלט בו זמנית, ועם ערכים אלה נוכל למדוד יעילות בקלות. בעבר, עשינו גם משהו דומה מאוד בפרויקט Wattmeter מבוסס Arduino שלנו, אך כאן נמדוד גם את עוצמת הקלט וגם את עוצמת הפלט לחשב יעילות הספק.
במקום לרכוש ארבעה מטרים לתפקיד, נוכל לפתור בעיה זו על ידי שילוב היכולות של כל ארבעת המטרים לאחד. בניית המונה הדיגיטלי שלך לא רק מפחיתה את העלות אלא גם מעניקה לך מקום להתנועע לשדרוגים ושיפורים. כאשר אנו משתמשים ב- ESP32 לבניית פרויקט זה, אנו יכולים להפוך את ה- IoT של מד זה בקלות לביצוע ולרשום נתונים באינטרנט, וזה הנושא לפרויקט העתידי. עם כל היסודות הניקויים, בואו ניכנס לזה.
הערה: מד הספק זה מיועד למעגלי DC. אם אתה מעוניין למדוד זרם זרם חשמל ליעילות מתח מחושבת, אתה יכול לבדוק את מד האנרגיה החשמלית המבוססת על IoT ופרויקטים מד האנרגיה ששולמו מראש.
חומרים הנדרשים עבור מד מתח ESP32
התמונה למטה מציגה את החומרים המשמשים לבניית המעגל. מכיוון שזו עשויה ברכיבים כלליים מאוד, אתה אמור להיות מסוגל למצוא את כל החומרים הרשומים בחנות התחביבים המקומית שלך.
פירטתי גם את הרכיבים שלהלן יחד עם הכמות הנדרשת. אם אתה בונה את המעגל בעצמך, מומלץ מאוד להשיג את כל החומרים מהרשימה שלמטה.
- לוח ESP32 - 1
- 128X64 OLED - 1
- ACS712-20 IC - 2
- שקע חבית DC - 1
- קבל 100uF - 2
- 104pF - 2
- 102pF - 2
- 10K, 1% - 4
- 68K, 1% - 2
- 6.8K, 1% - 2
מד יעילות מבוסס Arduino ו- ESP32 - דיאגרמת מעגלים
התרשים של מד היעילות מבוסס Arduino ו- ESP32 מוצג להלן. יצירת מעגל זה היא פשוטה מאוד ומשתמשת ברכיבים גנריים.
פעולת המעגל פשוטה מאוד. אנו נמדוד את המתח והזרם בפרויקט זה אך באופן ייחודי. אנו מודדים מתח וזרם עבור הקלט והפלט, ומכאן נוכל לראות את יעילות המעגל. זה שימושי מאוד עבור פרויקטים מסוימים. דוגמה יכולה להיות ממיר DC ל- DC שבו מדידת יעילות הופכת לחובה. אופן הפעולה של מעגל זה מתואר להלן.
ACS712 חיישן הנוכחי IC:
כפי שניתן לראות בתמונה לעיל, אנו משתמשים ב- ACS712 זרם חיישן IC למדידת זרם. זהו IC מעניין מאוד מכיוון שהוא משתמש באפקט Hall כדי למדוד את הזרם, יש שלוש גרסאות של IC זה שנמצא בשוק f (או 5A, 20A ו- 30A). אנו משתמשים בגרסת 20A של זה והוא מתויג כ- ACS712-20.
גיליון הנתונים ACS712 ממליץ על טווח מתח של 4.5 - 5.5 לפעול בצורה חלקה. וכשאנחנו הולכים למדוד את הזרם באמצעות ESP32, זה סובלני רק 3.3V, ולכן השתמשתי במחלק מתח עם שני נגדי 10K כדי להוריד את מתח המוצא של ACS712 IC. כשאין זרם שזורם דרך ה- IC, הוא מוציא 2.5 וולט, וכאשר כמות זרם כלשהי זורמת דרך ה- IC, הוא מוריד את המתח או שהוא מגדיל את המתח בהתאם לכיוון הזרימה הנוכחי. השתמשנו בשניים ממכשירים אלה למדידת זרם קלט ופלט. בדוק את הפרויקטים הקודמים שלנו (למטה) בהם השתמשנו בחיישן ACS712 זה.
- מד אנרגיית חשמל מבוסס IoT באמצעות מודול ה- Wi-Fi של Arduino ו- ESP8266
- מעגל מד זרם דיגיטלי באמצעות מיקרו-בקר PIC ו- ACS712
איפה דנו בפירוט על עבודתם של חיישנים אלה. אתה יכול לבדוק את אלה אם אתה רוצה לדעת יותר על חיישנים אלה.
מחלק המתח:
כדי למדוד את מתח הכניסה והפלט, יש לנו שני מחיצות מתח בכניסה ובצד היציאה של המעגל. המתח המרבי שהמעגל יכול למדוד הוא 35 וולט, אך ניתן לשנותו בקלות על ידי שינוי ערכי הנגד עבור מחלק המתח.
רגולטור המתח:
מווסת מתח כללי LM7805 משמש להפעלת מכשירי ה- IC ESP32, OLED ו- ACS712. כשאנחנו מפעילים את זה בעוצמה נקייה למדי, לא משתמשים בקבלים של ניתוק ניתוק, אבל השתמשנו בקבלים של 100uF הן בקלט והן בפלט כדי לייצב את ה- IC.
ESP32 IC ותצוגת OLED:
השתמשנו ב- ESP32 כמעבד הראשי, האחראי על כל הקריאות, החישובים, התשומות והפלטים. כמו כן, השתמשנו בתצוגת OLED 128X64 כדי לדעת את הערכים.
תכנון PCB עבור מד יעילות מבוסס Arduino ו- ESP32
ה- PCB למדוד היעילות מבוסס Arduino ו- ESP32 שלנו מתוכנן על לוח חד צדדי. השתמשתי בנשר כדי לעצב את ה- PCB שלי אבל אתה יכול להשתמש בכל תוכנת עיצוב לפי בחירתך. תמונת הדו-ממד של עיצוב הלוח שלי מוצגת למטה.
נעשה שימוש במעקב קרקע מספיק ליצירת חיבורי קרקע נכונים בין כל הרכיבים. כמו כן, הקפדנו להשתמש במעקב תקין של 5 וולט ו -3.3 וולט להפחתת רעש ולשיפור היעילות.
- הורד קבצי עיצוב PCB ו- GERBER מד יעילות מבוסס Arduino ו- ESP32
PCB בעבודת יד:
לנוחיות ובדיקות הכנתי את הגרסה בעבודת יד שלי ל- PCB והיא מוצגת למטה. בגרסה הראשונה עשיתי כמה טעויות שתיקנתי באמצעות כמה חוטי מגשר. אבל בגרסה הסופית, תיקנתי אותם, אתה יכול פשוט להוריד את הקבצים ולהשתמש בהם.
מד יעילות מבוסס Arduino ו- ESP32 - קוד
עכשיו, כשיש לנו הבנה טובה של צד החומרה של הדברים, אנחנו יכולים לפתוח את ה- Arduino IDE ולהתחיל את הקידוד שלנו. מטרת הקוד היא לקרוא את המתח האנלוגי מפין 35 ו -33 בלוח ESP32. כמו כן, אנו קוראים את המתח מ- 32 ו- 34 פינים שהוא הערך הנוכחי. ברגע שנעשה זאת, נוכל להכפיל את אלה בכדי לקבל הספק כניסה וכוח יציאה, ולשים אותו על נוסחת היעילות נוכל להשיג את היעילות.
לבסוף, אנו מציגים אותו על גבי מסך ה- LCD. התוכנית המלאה לעשות את אותו הדבר ניתנת בסוף, אשר יכולה לשמש ככזו לחומרה שנדונה לעיל. יתר על כן, הקוד מחולק לתוספות קטנות ומוסבר.
מאחר שאנו משתמשים תצוגת OLED 128X64, אנחנו צריכים את ספריית Adafruit_GFX ואת ספריית Adafruit_SSD1306 לתקשר עם התצוגה. אתה יכול להוריד את שניהם ממסוף מנהל הלוחות המוגדר כברירת מחדל של Arduino; אם אתה נתקל בבעיות כלשהן בחלק החלק של מועצת המנהלים, תוכל גם להוריד ולכלול את הספריות ממאגר GitHub המשויך לה, המופיע להלן.
- הורד את ספריית Adafruit_GFX
- הורד את ספריית Adafruit_SSD1306
כמו תמיד, אנו מתחילים את הקוד שלנו בהכללת כל הספריות הנדרשות. לאחר מכן אנו מגדירים את כל הסיכות והמשתנים הדרושים שכולם מוצגים להלן.
#לִכלוֹל
SCREEN_WIDTH & SCREEN_HEIGHT ההגדרות משמשות להגדיר את גודל המסך. בשלב הבא הגדרנו את כל הפינים הדרושים, דרכם נמדוד את המתח והזרם. לאחר מכן, הגדרנו את ערכי הנגד המשמשים את החומרה כפי שניתן לראות מהתרשים. אם אין לך ערכים אלה או אם ברצונך לשנות את טווח המונה, תוכל לשנות ערכים אלה, הקוד יעבוד בסדר גמור.
כאשר אנו משתמשים ב- ACS712 למדידת הזרם, אנו זקוקים לערך mVperAmp כדי לחשב את הזרם מהמתח. כשאני משתמש במודול 20A ACS712, הערך mV / A הוא 100 כפי שניתן בגליון הנתונים. אבל מכיוון שאנחנו משתמשים ב- ESP32 ובמחלק מתח, יהיה לנו מחצית מהערך שהוא 50, ולכן הכנסנו את ערך mV / AMP.
ACSoffset הוא הקיזוז הדרוש לחישוב הזרם מהמתח. מכיוון ש- ICS712 IC מופעל מ- 5V, מתח הקיזוז הוא 2.5V. אך כאשר אנו משתמשים במחלק מתח, הוא יורד ל -1.25 וולט. אולי כבר ידעתם על ה- ADC המחורבן של ה- ESP32, אז הייתי צריך להשתמש בערך של 1136. אם יש לכם בעיות כיול, תוכלו לשנות את הערכים ולפצות על ה- ADC.
לבסוף, אנו מסיימים את החלק הזה על ידי יצירת אובייקט תצוגה של Adafruit_SSD1306 והעברת רוחב המסך, הגובה, תצורת I 2 C והפרמטר -1 האחרון משמש להגדרת פונקציונליות האיפוס. אם לתצוגה שלך אין סיכת איפוס חיצונית (שהיא בהחלט עבור התצוגה שלי), עליך להשתמש ב- -1 עבור הטיעון האחרון.
הגדרת חלל () {Serial.begin (115200); אם (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// כתובת 0x3D עבור 128x64 Serial.println (F ("הקצאת SSD1306 נכשלה")); ל (;;); } display.clearDisplay (); display.setRotation (2); display.setTextSize (1); עיכוב (100); }
לאחר מכן, יש לנו את סעיף ההגדרה () בחלק זה אנו מאפשרים איתור באגים סדרתי, אנו בודקים אם תצוגת I 2 C זמינה או לא בעזרת שיטת ההתחלה של אובייקט התצוגה. כמו כן, קבענו את כתובת I 2 C. לאחר מכן, ניקוי התצוגה בשיטת clearDisplay () . כמו כן, אנו מסובבים את התצוגה בשיטת setRotation , בגלל שאני פישלתי בעיצוב ה- PCB שלי. לאחר מכן, שמנו עיכוב של 100 אלפיות השנייה לפונקציות שייכנסו לתוקף. ברגע שזה נעשה, כעת נוכל לעבור לפונקציית הלולאה. אבל לפני שתמשיך פונקצית הלולאה, עלינו לדון בשתי פונקציות אחרות אשר return_voltage_value () , ולאחר return_current_value () .
return_voltage_value כפול (int pin_no) {tmp כפול = 0; ADCVoltage כפול = 0; כניסה קלט כפול = 0; ממוצע כפול = 0; עבור (int i = 0; i <150; i ++) {tmp = tmp + analogRead (pin_no); } ממוצע = tmp / 150; ADCVoltage = ((ממוצע * 3.3) / (4095)) + 0.138; inputVoltage = ADCVoltage / (R2_VOLTAGE / (R1_VOLTAGE + R2_VOLTAGE)); הנוסחה // לחישוב המתח כלומר ב- GND Return inputVoltage; }
Return_voltage_value () הפונקציה משמשת כדי למדוד את המתח שנכנס ADC, וזה לוקח את pin_no כטיעון. בפונקציה זו, אנו מתחילים בהכרזה על כמה משתנים שהם tmp, ADCVoltage, inputVoltage ו- avg. המשתנה tmp משמש לאחסון ערך ה- ADC הזמני שאנו מקבלים מהפונקציה analogRead (), ואז אנו ממוצעים 150 פעמים במעגל for, ואנו שומרים את הערך למשתנה הנקרא ממוצע. לאחר מכן אנו מחשבים את מתח ה- ADC מהנוסחה הנתונה, ולבסוף אנו מחשבים את מתח הכניסה ומחזירים את הערכים. הערך +0.138 שאתה רואה הוא ערך הכיול שהשתמשתי בו בכיול רמת המתח, שחק עם הערך הזה אם אתה מקבל שגיאות כלשהן.
return_current_value כפול (int pin_no) {tmp כפול = 0; ממוצע כפול = 0; ADCVoltage כפול = 0; מגברים כפולים = 0; עבור (int z = 0; z <150; z ++) {tmp = tmp + analogRead (pin_no); } ממוצע = tmp / 150; ADCVoltage = ((ממוצע / 4095.0) * 3300); // מקבל לך מגברי mV = ((ADCVoltage - ACSoffset) / mVperAmp); מגברים חוזרים; }
לאחר מכן, יש לנו את הפונקציה return_current_value () . פונקציה זו לוקחת גם pin_no כארגומנט. בפונקציה זו יש לנו ארבעה משתנים, כלומר. tmp, avg, ADCVoltage, ומגברים
לאחר מכן אנו קוראים את הסיכה עם הפונקציה AnalogRead () וממוצע אותה 150 פעמים, לאחר מכן נשתמש בנוסחה לחישוב ה- ADCvoltage, עם זה אנו מחשבים את הזרם ומחזירים את הערך. עם זאת, אנו יכולים לעבור לחלק הלולאה.
לולאה בטלה () {float input_voltage = abs (return_voltage_value (INPUT_VOLTAGE_SENSE_PIN)); צף input_current = abs (return_current_value (INPUT_CURRENT_SENSE_PIN)); פלט output_voltage = abs (return_voltage_value (OUTPUT_VOLTAGE_SENSE_PIN)); צף output_current = abs ((return_current_value (OUTPUT_CURRENT_SENSE_PIN))); input_current = input_current - 0.025; Serial.print ("מתח כניסה:"); Serial.print (קלט_מתח); Serial.print ("- זרם קלט:"); Serial.print (קלט_זרם); Serial.print ("- מתח יציאה:"); Serial.print (output_voltage); Serial.print ("- זרם פלט:"); Serial.println (output_current); עיכוב (300); display.clearDisplay (); display.setCursor (0, 0); display.print ("I / PV:"); display.setCursor (37, 0); display.print (קלט_מתח); display.setCursor (70, 0); לְהַצִיג.הדפס ("V"); }
אנו מתחילים את קטע הלולאה בהכרזה והגדרה של כמה משתנים לצוף, בכל ארבעת המשתנים. אנו קוראים לפונקציות המתאימות, מעבירים pin_no כארגומנט, מכיוון שמודול ACS712 יכול להחזיר את הערכים הנוכחיים בשלילה. אנו משתמשים בפונקציית abs () של ספריית המתמטיקה כדי להפוך את הערך השלילי לחיובי. לאחר מכן אנו מדפיסים סדרתי את כל הערכים לניפוי באגים. לאחר מכן, ננקה את התצוגה, הגדר את הסמן והדפס את הערכים. אנו עושים זאת עבור כל הדמויות המוצגות בתצוגה. מה שמסמן את סוף פונקציית הלולאה והתוכנית.
בדיקת מד יעילות מבוסס Arduino ו- ESP32
כפי שניתן לראות את הגדרת הבדיקה שלי בתמונה לעיל. יש לי שנאי 30 וולט כקלט, ויש לי את המונה שלי מחובר ללוח הבדיקה. אני משתמש בלוח ממיר באק מבוסס LM2596 ולמטען ואני משתמש בשלושה נגדי 10 אוהם, במקביל.
כפי שניתן לראות בתמונה שלעיל, התחברתי למרובי מטרים כדי לבדוק את מתח הכניסה והפלט. השנאי מייצר כמעט 32 וולט והספק ממיר הדולר הוא 3.95 וולט.
התמונה כאן מציגה את זרם הפלט שנמדד על ידי מד היעילות שלי והמולטימטר. כפי שאתה יכול לראות, המולטימטר מציג.97 מגברים, ואם אתה מתקרב מעט, הוא מראה 1.0A, זה מעט כבוי בגלל אי ליניאריות הקיימת במודול ACS712 אך זה משרת את מטרתנו. לקבלת הסבר מפורט ובדיקה, תוכלו לבדוק את הסרטון במדור הווידיאו שלנו.
שיפורים נוספים
לצורך הדגמה זו, המעגל מיוצר על גבי PCB בעבודת יד אך ניתן לבנות את המעגל בקלות ב- PCB באיכות טובה. בניסוי שלי, גודל ה- PCB גדול מאוד בגלל גודל הרכיב, אך בסביבת ייצור ניתן לצמצם אותו באמצעות רכיבי SMD זולים. למעגל אין גם שום תכונת הגנה מובנית, כך שכלול מעגל הגנה ישפר את היבט הבטיחות הכללי של המעגל. כמו כן, בעת כתיבת הקוד שמתי לב שה- ADC של ה- ESP32 אינו כל כך נהדר. הכללת ADC חיצוני כמו מודול ADS1115 תגדיל את היציבות והדיוק הכללי.
אני מקווה שאהבת את המאמר הזה ולמדת ממנו משהו חדש. אם יש לך ספק, אתה יכול לשאול בתגובות למטה או להשתמש בפורומים שלנו לדיון מפורט.