הופכים מקרן ישן לחכם,מחברים אותו לwifi עם esp8266 (משוחזר 12.06.2016)

נתחיל מזה שיש לי מקרן, שאנחנו רואים עליו סרטים, סדרות, Game of Thrones וDirt3 🙂
המקרן דיי ישן, viewsonic pj658, ישן ישן אבל עושה עבודה טובה.

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

לאחר חפירה ארוכה במעמקי האינטרנט, מצאתי את אחיו התאום Dukane ImagePro 8776, מסתבר שיש לו עוד כמה אחים כאלה, אבל מה שמיוחד בManual שלו הוא שיש שם פירוט רחב של כל הפרוטוקול 🙂

ישר חיברתי ארדואינו למחשב ולמקרן, פותח טרמינל, שולח פקודה ובום! לא עובד
למה זה לא עובד? לאחר כמה ניסיונות כושלים, הבנתי שזה לא עובד ועזבתי את זה..
ביום למחרת הבנתי את הטעות שלי, ארדואינו מדבר בסריאל TTL שזה סיגנלים של LOW וHIGH, כלומר 0V עד 3.3V/5V או כל דבר אחר. פרוטוקול RS-232 עובד על סיגנלים של 13V- עד 13V+
או האמת כל מתח שבין 3V-25V, בטח שזה לא יעבוד, מופתע שזה לא הרג לי את הארדואינו בכלל.
על ההבדלים אפשר לקרוא פה https://www.sparkfun.com/tutorials/215

אז חיברתי את זה לCOM של המחשב שעובד בפרוטוקול המתאים, שולח פקודה והמקרן נדלק 🙂

אין יותר מאושר ממני, פותח גוגל, תוך 10 שניות מוצא את MAX3232, ממיר תקשורת TTL-RS232
תוך עוד כמה דקות מחפש איך אני שם ידי על IC כזה, איביי, אנשים מהקבוצה, קונה בארץ?? כן, קונה בארץ! מהיום למחר איסוף עצמי ו9 שקלים חדשים (תודה לאלכס מ4Project על העסק שלו).

הmax3232 אולי נראה קצת מפחיד, אבל מעיף מבט לרגע בPDF, מחווט את הכל, מחבר למקרן, שולח פקודה ובום! זה עובד/

יאללה עכשיו WIFI

לא חשבתי יותר מידי ונזכרתי ב esp-link, זו קושחה שהופכת את המודול האהוב לwifi serial bridge.
מה זה אומר? זה אומר שברגע שאני פותח telnet מול הesp ושולח מידע, המידע יוצא מהפורט הסריאלי של הesp, שזה מושלם לתפקיד,כי בסופו של דבר רציתי להדליק ולכבות את המקרן בלחיצת כפתור במחשב.

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

עם קצת עיקובים עם esp-02 שקושחה לא רצה עליו באופן מושלם, עברתי לesp-12, צרבתי עליו את הקושחה, חיברתי אותו ל max3232 שעובד גם במתח 3.3V, חיברתי את הesp למקרן, פתחתי telnet, שלחתי פקודה ובום! זה עובד

מצורף תרשים לכל המעוניין:

מה עכשיו?

עכשיו צריך ממשק נוח לשלוט עליו, בעזרת #c בסופו של דבר זה הגיע לזה:

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

פה זה נגמר?

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

צפו לעדכונים 🙂

הכירו את פרויקט AquaTank – מבוא. (משוחזר 22.06.2015)

כבר כמה זמן אני משחרר פה ושם, בבלוג, בפייסבוק, בmakers.co.il, כל מיני פיצ'רים שקשורים לפרויקט, אבל אף פעם לא הצגתי אותו באופן רשמי, אז: הכירו את סדרת הפרויקטים AquaTank.
הכל התחיל מאקווריום, אחד פשוט, עם פילטר, אור, אויר וגוף חימום, לפני 13 שנה.
לאט לאט האקווריום עבר שדרוגים והגיע הרצון הטבעי לאוטומציה של האור והאויר.
בזמנו 2 טיימרים בתוך קופסת פיקוד פתרו את העניין ועבדו יפה מאוד.אבל אז הגיע הCO2, למי שלא יודע, אסביר בקצרה, שבאקווריום משלבים מערכת שממיסה גז CO2 במים, המטרה היא ליצור חומצות פחמניות במים ולאפשר לצמחים לעשות פוטוסינטזה בכמה רמות גבוהה יותר, עשירה יותר, לתחזק צמחים בריאים ואקסקלוסיביים ובו זמנית להעשיר את המים בחמצן שנוצר בתהליך, הגז נמצא בתוך בלון מיוחד, עובר לווסת לחץ וממנו לשסתום חשמלי 24V. הכירו את AquaTank v1:


פיצ'רים: 2 טיימרים לכיבוי והדלקה של האור, האויר וCO2, מפסקים להדלקה וכיבוי (יותר לכיבוי) ולדים לחיווי, ה24V מסופק מספק כוח של מחשב ישן, ע"י ניצול מסילות ה 12V ו 12V- ,אשר יוצרים פוטנציאל של 24V, כל זה בקופסא של אל-פסק ישן ששופצרה למידה הנכונה. מהר מאוד AquaTank v1 שבק חיים, הספק בפנים יותר נכון, הפסיק להביא מתח תקין לשסתום, ובמהרה גם הלך אחד הטיימרים לעולמו, כל זה קרא לשדרוג!
הכירו את AquaTank v2:


harder, better, faster, stronger
ספק חדש, טיימר חדש, קופסא חדשה (גם אל-פסק בעברו 🙂 ) שימוש בממסרים להדלקה וכיבוי!
עבד שנים רבות… באמת!, אבל הוא מזדקן, גם פה הטיימר נשרף והוחלף אחרי זה, הכפתורים לא עובדים כמו שצריך, חלק מהלדים נשרפו. ואז הגיע הארדואינו.
כן, לפני כבר חצי שנה אולי יותר, התחלתי להזמין חלקים לפרויקט חדש, AquaTank v4:



איפה v3? ובכן v3 קפא, ולא סיים את דרכו לעולם, הוא היה מבוסס על Arduino Mega, עם מסך LCD גראפי 128×64 פיקסלים, הפרויקט נגנז לתקופה.
והתעורר מחדש עם Arduino DUE, מסך LCD TFT צבעוני 2.8", עם ממשק צבעוני.
כולל בתוכו: RTC, מד pH שנעשה לו האק כדי לתקשר עם הארדואינו, חיישני טמפרטורה דיגיטלים, ממסרים, eeprom חיצוני ועוד.. הסטטוס והtodo שלו כרגע:

  • מחכה לתיקוני קוד מינוריים
  • קצת תיקוני חומרה
  • בניית קופסא חדשה ומתאימה שתכיל את כל מה שנראה למעלה.

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

תחנת מזג אויר יציבה – עדכון. (משוחזר 20.06.2015)

החלטתי לכתוב עדכון קצר כדי להתפנות לדברים אחרים, במשך השבוע שנתקלתי בבעיות רציניות בתחנת מזג האויר, הבקר כל הזמן קרס, עם שגיאה של fatal exception.
חיפשתי וחיפשתי וכל דבר שמצאתי היה קשור או לבעיות מתח או לבעיות קושחה.
בעיות מתח? יכול להיות! הוספתי קבל על היציאה של המתח המיוצב כדי להבטיח הגנה מפני קפיצות רציניות, בהתחלה שמתי קבל 4.7uF, שזה יותר ממה שמבקשים בדף נתונים של המייצב, אחרי שזה לא עזר, נדלקה לי הנורה של האוברקיל, שמתי קבל 100uF, אבל עדיין קיבלתי קריסות ראנדומלייות.
עשיתי stress test למערכת מבחינת טמפרטורה ומתח, וקיבלתי תוצאות מעניינות:
חיממתי הכל טוב טוב עד לטמפרטורה של 56 מעלות למשך כרבע שעה ושיניתי זמן עידכון לפעם ב2 שניות, ובמשך רבע שעה – כלום! יציב כמו שור.
בשלב מסויים בטמפרטורה כזאת הסוללה הסינית המזוייפת התחילה להתרוקן מהר, המתח נפל, וגם עדכון פעם ב 2 שניות תרם להתרוקנות שלה, והתוצאה המפתיעה היא שהבקר הצליח להתחבר לראוטר ולשרת ולעדכן במתח סוללה 2.47V, עם עוד dropout voltage של 0.5V של המייצב, זה אומר שהבקר הצליח לעבוד במתח קצת פחות מ 2V, מרשים =O

אז מתח זאת לא הבעיה, וגם לא זרם, וגם לא טמפרטורה.

אז זה חייב להיות משהו בקושחה, נכנסתי לgithub של הesp8266 Arduino IDE, ראיתי שיש שינויים שוטפים בקוד ועדכונים שלא מתקבלים דרך הBoards Manager הפשוט, אז הורדתי גרסא ידנית ואיחדתי אותה עם גרסא 1.6.4 standalone של Arduino IDE.

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

תהליך ידני (כי הקוראים ביקשו):
1. להוריד Windows ZIP file for non admin install מהאתר Arduino.cc
2. להוריד את הקבצים המעודכנים של esp8266 מGitHub, בלחיצה על Download ZIP בצד ימין.
3. לחלץ את הקבצים של הIDE לתקייה מסויימת.
4. לחלץ את הקבצים של הesp8266 לתוך אותה תקייה.
5. להפעיל arduino.exe ולבדוק שיש esp8266 ברשימה של הלוחות.
6. סיימנו. Profit!

הטעינה הסולארית עובדת!

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

הקופסא לא טובה.

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

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

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

תחנת מזג האויר עוברת שדרוג – Work in progress. (משוחזר 16.06.2015)

מה עכשיו? ובכן צ'יינג' לוג קצר:

  1. הבקר הוחלף ל esp8266-201 עם מוד למייצב 3.3V onboard (שאכתוב עליו עוד מעט).
  2. הוחלף החיישן DHT11 התקול לאחד חדש, טרם שודרג לDHT22.
  3. טעינה סולארית!!
  4. ההתקן עבר לגור לביתו החדש.

אז נתחיל משדרוג הבקר, עברתי ל esp8266-201 כי הוא יותר נוח, יותר לבן, יותר מגניב ויותר יורה לייזרים מהעיניים, וברצינות הוא נוח, ועשיתי לו מוד קטן והחלמתי על הלוח מייצב MIC5219 3.3v, מייצב פצפון באריזת sot-223-5 ויש לו ultra low quiescent current, כלומר הוא עצמו צורך מעט מאוד זרם, מה שתורם לשינה מאוד חסכונית באנרגיה של כל ההתקן, כמה חסכונית? 74 מיקרו-אמפר בלבד כאשר מקור המתח הוא סוללת ליטיום יון 3.7V. (בבדיקה הקודמת קיבלתי 18.8 מיקרו-אמפר וזה נראה לי נמוך מידי ולא תקין, 74 כבר יותר דומה למציאות).

על הDHT11 אין יותר מידי מה לפרט, הוא היה דפוק, כל קריאה קפצה, אז החלפתי, בעתיד הוא ישודרג לDHT22, כי הוא יותר מדוייק, וטווח הלחות שהוא מסוגל למדוד הוא מלא, יחסית ל20%-80% של הDHT11.

טעינה סולארית

זה החלק המעניין, הוספתי לו פאנל סולארי, שנתוניו הם 5V ו0.2W, בטח תגידו, מה זה? זה כלום! זה לא מספיק! ובכן, זה גם מה שאני חושב, אבל עשיתי כל מיני חישובים:
במצב ער כל המעגל צורך בממוצע 80mA עם קפיצות.
הוא ער כל פעם 8 שניות ומתעורר כל רבע שעה אז זה 0.00888889 של שעה.
במצב ישן בשעשועון "הצריכה הרנדומלית בכל פעם שאני מקרב מלחם לדבר הזה" כרגע הבקר צורך 0.141mA וזה קורה בזמן של 0.99111111 של שעה.
אז בממוצע מקבלים צריכה של 0.85mA.
במתח 3.3v נקבל הספק של 0.002805W.
הפאנל הסולארי בעל הספק מקסימלי של 0.2W, אז זה פי 71.3 יותר מהספק ההתקן.
כאשר מומלץ פי 5 מהספק המערכת.

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

אגב למי שעוקב, הסוללה הספיקה לשבוע, היא מתה היום, בגלל זה כל השדרוג, אז? 150mAh אולי.. גם את זה נבדוק בפעם אחרת.

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

בית חדש אבל זמני.

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

יחד עם זאת זה לא מושלם:
– הוא לא באמת מגן על האלקטרוניקה מפני גשם חזק (אולי רק טיפטוף) אז נקרא לזה בית קיץ 😀
– אני לא בטוח מה יהיו ההשלכות של הפוליקרבונט לגבי אילו קרניים הוא חוסם שיפריעו לפאנל הסולארי לנצל 100% ממה שהוא אמור לקבל.
– האוורור – לא בטוח לגביו…

והרי התוצאות:

מקווה שנהנתם וקיבלתם רעיונות 🙂

עשה זאת בעצמך: חיישן לחות אדמה קיבולי. (משוחזר 11.06.2015)

הבעיה:

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

הפיתרון:

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

בחיישן שלנו הלוחות לא מקבילים אחד מעל השני אלא אחד לצד השני והמבודד הוא לא רק הSolder Mask שעל הPCB אלא גם הסביבה שלו – ובמקרה שלנו המבודד הולך להיות מים (מוזר הא?)
המים לא באמת מבודדים בין הלוחות, אין להם מגע עם הלוחות בכלל.
אבל מים בתור מבודד יכולים להגדיל את הקיבול עד פי 100 מאשר בחומר אחר. 

מתוך MDPI

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

כמה קשה זה יכול להיות

החומרים:

  • סרט קפטון – אפשר גם סלוטייפ אבל קפטון הוא יותר עמיד ונוח לעבוד איתו
  • תבנית אלומיניום חד פעמית לאפיה – חומר עבה וקל לעבוד איתו
  • מספריים
  • דבק חם
  • חוטי חשמל

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

מה עושים עם זה?

כל זה מגניב, בניתי קבל, אבל מה עושים איתו?
זה קבל! צריך למדוד את הקיבוליות שלו! ניקח ארדואינו לעזרתינו, ונבנה מעגל טעינה ופריקה של הקבל, נתזמן את העניין ונדע מה הקיבול של הקבל בכל רגע נתון.
בשביל זה טעינה ופריקה של קבל זה חומר של כיתה י' בשיעור פיזיקה, צריך נגד לטעינה.
את המעגל שהשתמשתי בו ניתן לראות כאן: http://www.arduino.cc/en/Tutorial/CapacitanceMeter
בשביל העבודה, שמתי קבל טעינה של 4.7 מגה אוהם, הקיבול של הקבל יהיה קטן ולכן כדי למדוד את זמן הטעינה אני צריך שהוא יהיה ארוך, לפריקה השתמשתי בנגד 220 כמו שמופעי באתר.

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

הקוד:

בדיקות:

מהבדיקות שנערכו קיבלתי את התוצאות הבאות:
זמן טעינה כאשר החיישן יבש: 600 מיקרו-שניות
זמן טעינה כאשר החיישן מושרה במים: 4000 מיקרו-שניות

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

מה שנשאר לעשות הוא לנסות את זה בתוך אדמה אמיתית… המשך יבוא.

תחנת מזג אויר, low power, מבוססת esp8266. (משוחזר 10.06.2015)

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

מי שיודע וזוכר, בניתי כבר דבר כזה (קישור לפורום מייקרס) שמבוסס ארדואינו ובנוסף גם esp8266 עם קושחת AT, שהיה מקבל פקודות AT מהארדואינו על מנת להעלות את הנתונים, למה לא להשאיר את זה ככה?
ככה! סתם, דבר ראשון גיליתי שesp8266 יכול לבד, הוא בקר בפני עצמו, עם נתונים מרשימים ויכולות wifi :D, סיבה נוספת היא שגם הארדואינו צורך לא מעט אנרגיה, והסיבה הכי גדולה היא שלא אהבתי את ממשק הAT של הesp8266, הוא עשה לי בעיות, היה קשה לדבר איתו, קשה לדבג, והוא בשום פנים באופן לא רצה להתחבר לשרת שלי ישירות, כדי להעלות נתונים לשרת שלי, נרשמתי לשירות אחסון חינמי שאיתו הesp8266 כן הסכים לדבר והוא כבר העביר את הנתונים לשרת שלי, מסובך הא?

עם המעבר לesp8266 השתדרגתי טיפה, הוספתי חיישן לחץ ברומטרי, אך היו גם דברים שהייתי צריך לוותר עליהים, כמו מד מתח לפאנל הסולארי, וכל דבר נוסף שנמדד באמצאות ADC, כי לesp8266 יש רק ערוץ אחד.
ובסופו של דבר נמאס לי שהכל תקוע בbreadboard עם מלא כבלים מגשרים שנגמרו לי כבר, וכל זה עלה על לוח הלחמות 5X7, ועכשיו זה ראוי להיקרא אבטיפוס.

אז מה יש לנו?

  • בקר esp8266 -01 משופצר, עם גישה ל ADC ועוד 3 פינים דיגיטאליים
  • מד אור דיגיטאלי BH1750 (מודד בlux)
  • מד לחץ ברומטרי BMP180 – מודד גם טמפרטורה בדיוק של 2 ספרות אחרי הנקודה
  • מד לחות וטמפרטורה DHT11 – מודד לחות בלבד, הוא גם תקול – הנתונים משתגעים, ישודרג ל DHT22
  • סוללה, ליטיום-יון 3.7V, רשום 1000mAh, אני לא מאמין לזה, יבדק (פרטים בהמשך)
  • מודול הגנה וטעינה לסוללה, יחובר לפאנל סולארי לטעינה בעתיד.

עוד פרטים

עוד נתון שהיחידה מספקת חוץ מהנתונים הברורים היא מתח הסוללה, נעשה שימוש בADC שבפין TOUT, יש לו רפרנס פנימי בטווח 0-1V, לפי מה שראיתי הדיוק שלו מזעזע, אני משתמש בחלק מתח כדי לחלק 4.2V לפחות מ1V, כשאני מנסה לחסוך באנרגיה ולשים ערכים גבוהים בנגדים הוא מאבד הכל לגמרי, בשינוי המתח משתנה גם השגיאה.. לא ברור בכלל.
שלושת החיישנים מחוברים דרך טרנזיסטור לפין דיגיטאלי בesp8266, והם נדלקים רק כאשר הבקר ער – חיסכון בסוללה.
תקשורות – מד האור ומד הלחץ מתקשרים בi2c, הDHT11, מדבר בשפה שלו..
i2c מומש בקלות בעזרת ספריית wire.

Low Power

מילים גדולות… בוt נראה מה קורה שם עם האנרגיה.
טוב אז יש לנו מקור מתח, סוללת ליטיום-יון 3.7V קטנה וחמודה, למי שלא יודע, מתח של סוללת ליטיום-יון 3.7V הוא לא בהכרח 3.7V, למען האמת המתח הוא 4.2V כשהיא מלאה ו3.0V כשהיא ריקה לחלותין, לחדים שבמגירה ששמו לב שאין לי שום מייצב מתח ביחידה – נכון אין מייצב מתח, מייצב מתח רגיל זולל 10mA ואפשר לשכוח מהמושג low power, אני החלטתי לשים דיודה, אחת, שתפיל את המתח, שמתי דיודה 1N4001 פשוטה והיא מפילה לי מ4.2V ל3.7V, בדף הנתונים של הesp8266 מצויין שהוא מסוגל לעבוד בטווח בריא של 3.0-3.6V בVCC, נכון 0.1V מעל המותר,ועל זה יש לי להגיד "נחייה ונראה",שלא תחשבו שאני לא רציני יש לזה פיתרון, אבל צריך למצוא אחד מתאים, יש מייצבי מתח עם, מה שנקרא "low quiescent current", שזה אומר שהזרם שצורך המייצב לעצמו נמוך מאוד, רק צריך למצוא מייצב מתח 3.3V שמסוגל להביא 300-500mA וגם הזרם שהוא עצמו צורך נמוך.
הלאה – שינה, כמו שכבר רשמתי בעבר, הesp8266 ישן, וישן טוב, 18.8 מיקרו אמפר בשינה עמוקה, אבל לא רק הבקר בתמונה, יש לי מחלק מתח שצורך, וחיישנים שצורכים, וגם צריכה פרזיטית לא מוסברת, על bread board עם ספק כוח, כל המעגל צרך 76 מיקרו אמפר בשינה, אחרי הרכבה, הלחמה ושימוש בסוללה הזרם בשינה עלה ל 99 מיקרו אמפר, הסבר הגיוני הוא שהמתח שהמעגל מקבל לא יתקבל בשום מקום כפיתרון רלוונתי! דיודה?! באמת?! = המתח יורד, הזרם יורד ולהיפך.

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

בזמן שהבקר ער הזרם קופץ בין 30-70-150mA, כדי לחשב זמן סוללה  הנחתי בממוצע 80mA
אז זה 80 כפול 8 שניות, 4 פעמים בשעה, שזה 32 שניות, שזה 0.00888889 שעה
ועוד 0.099 כפול 3568 שניות שהבקר ישן בשעה שזה 0.99111111 שעה
ונקבל זרם ממוצע 0.81mA בשעה

עכשיו הסוללה – סוללה מאיביי במסגרת זיוף הסוללות הגדול = אני לא באמת יודע מה הקיבולת שלה,
ואת זה אנחנו יכולים לבדוק, אני הנחתי שהקיבולת שלה היא 300mAh.
300mAh לחלק ב0.81mA יוצא 370.4 שעות, שזה 15 ימים ו6 שעות, כמובן שזו הערכה גסה.
והיום חיברתי את היחידה לסוללה טעונה במלואה, ונראה לכמה זמן היא תספיק.

את כל הנתונים אפשר לראות בכתובת weather2.alexshu.com

To Do

  • לשדרג DHT11 לDHT22
  • לשלב טעינה סולארית
  • להכין מעטפת נורמאלית ליחידה
  • לשדרג את האתר
  • לסיים ולפרסם מעגל וקוד.

תודה שקראתם.

מרחיבים gpio לesp-01 esp8266, ומתאימים לbreadboard. אע, יש גם באגים. (משוחזר 06.06.2015)

בזמן שאני מחכה לesp-201 שיגיע, שכולל breakout של כל הפינים שרק רציתם, רציתי אני להתקדם טיפה בהסבת תחנת מזג האויר שלי לesp8266 בלבד, הבעיה היא שיש לesp-01 רק 2 פינים דיגיטליים (לא כולל TX ו RX), וזה לא מספיק לי!

אני צריך אנאלוגי, ולפחות עוד דיגיטאלי אחד, נו, אז מה עושים?הפינים עדיין על השבב, אז לוקחים מלחם ומרחיבים!
אני לא אדבר הרבה, אני אתן לתמונות לדבר בעצמן (ויש הרבה):

 ועכשיו באמת.

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

אני צריך ADC, והוא קיים בשבב, בפין מספר 6 – TOUT, הADC עובד ברפרנס פנימי בטווח 0V-1V (שימו לב).
ועוד פינים דיגיטאליים, אני בחרתי את 9,10,12,13 שהם GPIO14,GPIO12,GPIO13,GPIO15 (בהתאמה, הסדר נכון, בדקתי, תבדקו גם אתם בקישור), השימוש בהם הוא פשוט כמו של ארדואינו,
pinMode(14, OUTPUT);z  וגם digitalWrite(14, HIGH);z
בחרתי אותם כי הם הכי קרובים להאדרים ויהיה קל יותר להלחים.

לא קל יותר להלחים!

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

אפשר להמשיך

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

בינתיים ההסבה החלה.

האק לשינה בesp8266 esp-01 (משוחזר 03.06.2015)

בעודי ממשיך במשחקים עם הesp8266 כבקר בפני עצמו ושימוש בArduino IDE לפיתוח אליו, הייתי צריך שהוא ישן, שינה עמוקה וטובה,כדי שיפסיק לזלול 80mA בIdle..
שינה בesp8266 זה לא דבר חדש..אבל, כדי לאפשר לו להתעורר הוא צריך גישה לפין Reset של עצמו מפין GPIO אחר.. כן גם אני לא הבנתי.. אבל זה מה יש, אם לדייק, צריך שGPIO16 יהיה מחובר לפין Reset, מה הבעיה?

GPIO16 לא נגיש בלוח esp-01

והבעיה היא לא רק בesp-01, למעשה הוא נגיש רק בלוחות 03,04,06,07,08,11,12,201.
אז 01,02,05,09,10 לא יכולים לישון בלי התערבות בחומרה.
מכיוון שאני מהחבר'ה שרק תתנו להם להתערב .. לקחתי מלחם, בדיל, חוט חשמל דק ויד יציבה וניגשתי לעבודה, כמה יציבה היד? יציבה מאוד!
למען האמת צריך קצת יותר ממלחם, בדיל וחוט חשמל.. שמתי למלחם ראש שפיץ מחט, בדיל 0.3מ"מ, חוט חשמל הכי דק שמצאתי, חשפתי אותו, הפרדתי סיב אחד ואת כל השאר חתכתי – העדפתי את שאר החוט להשאיר בתוך הבידוד כדי שלא יקצר עם שום דבר בדרך לפין הReset.
יד שלישית שתחזיק את הesp8266, פינצטה להחזיק איתה את החוט ויאללה…
עם ציוד מתאים זה לא קשה כמו שזה נראה 🙂
ניתן לתמונה לדבר ..

חיסכון מוחלט

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

איך ישנים?

השינה עובדת גם בסביבת עבודה NodeMCU, וגם Arduino IDE.
בגלל שאני עובד עם הAdruino IDE אפרט עליו, אבל החבר'ה של הNodeMCU לא ישארו מאחור.

פקודת השינה היא:

ESP.deepSleep(microseconds, mode);

שימו לב שזה מיקרו-שניות, ולא מילי-שניות כמו שאתם רגילים..
מצבי השינה הם:
WAKE_RF_DEFAULT – התעוררות ברירת מחדל (אפשר להרחיב על זה אבל זה ממש מתקדם)
WAKE_RFCAL – התעוררות וביצוע כיול לרדיו – צורך יותר זרם
WAKE_NO_RFCAL – התעוררות ללא ביצוע כיול לרדיו – צורך פחות זרם
WAKE_RF_DISABLED – התעוררות וכיבוי רדיו – בעצם כיבוי הWIFI – צריכת זרם נמוכה – כ13mA

מה זה נתן?

לאחר העבודה ובמהלכה עשיתי כמה מדידות והתוצאות להלן:
עבודה במצב Idle – זרם 70mA ומעלה – בשידור הזרם עולה
שינה עמוקה עם הלד – 353uA – מיקרו-אמפר!, כבר מרשים
שינה עמוקה ללא הלד – 18.8uA – כן, 18.8 מיקרו אמפר.

הבחור שעשה את זה לראשונה קיבל תוצאה של 78 מיקרו-אמפר, אני קיבלת הרבה פחות, אולי זה קשור גם לקושחה ולסביבת עבודה.

לא כמו המוכרים של Atmel שישנים ב9 מיקרו-אמפר ומטה, אבל 18.8 זה עדיין נתון מאוד משמח, יחסית לזללן שהוא כאשר הוא עובד רגיל, הוא ישן ממש טוב, מה שמאפשר לנו להשתמש בו למטרות Low Power IoT, וזה חדשות טובות לתחנת מזג האויר שלי שהולכת לעבור הסבה מלאה לesp8266 בלבד.

מקורות:
http://tim.jagenberg.info/2015/01/18/low-power-esp8266/
https://github.com/esp8266/Arduino
https://github.com/nodemcu/nodemcu-firmware/wiki/nodemcu_api_en

eeprom חיצוני בתקשורת I2C לארדואינו (משוחזר 02.06.2015)

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

הגעתי לשלב מאוד מתקדם מבחינת הקוד בפרויקט, שאפשר להגיד שאני כמעט בשלבי סיום, מעט מאוד דברים נשארו בTodo, והוספת זיכרון בלתי נדיף הוא אחד מהם.
מאחר שכבר עשיתי משהו כזה פעם עם ארדואינו אונו, פשוט כתבתי את מה שאני רוצה לזכור לeeprom, אז צברתי כוחות ויצאתי לטיול ב4K שורות של הקוד שלי ועברתי על פני משתנים, ופנקציות ומצבים בהם אני רוצה לשמור את השינויים ואת ההגדרות בeeprom, חשוב לזכור שהeeprom מוגבל במספר הכתיבות אליו, לכן צריך לכתוב אליו רק כאשר באמת צריכים וכאשר באמת יש שינוי.
עשיתי עבודה יוצאת מן הכלל במשך שעה, ופשוט הוספתי את הפיצ'ר של "לזכור" לקוד שלי, לחיצה על קומפילציה כמובן זרקה שגיאות פה ושם שתוקנו בזריזות, אבל אז קפצה שגיאה שלקח לי כמה רגעים להבין…

לארדואינו DUE אין eeprom

כן, מה שקראתם, אין לו! למה אני מופתע בכלל?! זה מעבד ARM, מה הקשר לו ולארדואינו אונו.
חיפוש זריז באינטרנט הביא לי כמה פתרונות מעניינים ויצירתיים ביותר:

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

24LC01B

זהו ג'וק eeprom חיצוני שמדבר בתקשורת i2c, של חברת microchip.
הוא מכיל 1kbit זיכרון, שזה בלוק אחד של 128x8bit של זיכרון, כלומר יכול לשמור 128 בטים, כלומר יכול לשמור 128 ערכים של 0-255, מה שתפור עלי!
מה שיותר תפור עלי, זה שהיה לי כאלה, ממש במקרה, פעם הזמנתי בשביל לעשות האק למצלמת gopro, שלא יצא לפועל – או יותר נכון יצא לפועל בצורה אחרת, ואז איבדתי אותה בים, ועכשיו היא שייכת לפוסידון.

כשחיפשתי דוגמאות וספריות נתקלתי במלא דברים שסתם מסבכים את החיים, אז החלטתי לכתוב לבד בעזרת ספריית wire.h שנועה לתקשורת בi2c.
למזלי הערכים שאני צריך לכתוב הם משפרים שלמים קטנים – פחות מ255
משתנים בוליאנים שהשפה ממירה לבד בין true,flase ו 0,1.
והחלק הטיפה מסובך הוא מספרים עשרוניים- float, שצריך לבצע בהם מניפולציה קטנה:
נניח יש לי מספר – 28.5, נכפול ב 10 ונקבל 285 – כבר יותר יפה, אבל עדיין לא נכנס בבייט.
טריק שהשתמשתי בו פעם כדי לשמור קילובייט (1024) בשני בתים הוא לחלק את המספר ב4, כי 255 נכנס ב1024 בדיוק 4 פעמים, לקחת את החלק השלם של החילוק ב4 ולשמור בבייט אחד ולקחת את המודולו ב4 ולשמור בבייט שני.
לדוגמא, 285/4 = 71 (החלק השלם), ו285%4 = 1 (שארית החלוקה)
להרכיב מחדש זה 71*4 ועוד 1 = 285
במקרה שלי חילקתי גם ב 10 וקיבלתי 28.5 בחזרה.

את הקוד שרשמתי אפשר לראות פה כדוגמא:

חיבור הeeprom לארדואינו – ממש פשוט vcc,gnd,sda,scl וזהו, find & replace זריז על כל הקוד כדי להחליף את השם של הפונקציה שקוראת וכותבת לזיכרון, והוספת זיכרון בלתי נדיף לפרויק00ט שלי הושלמה.

לחברת microchip, יש עוד מגוון צ'יפים כאלה נם נפחים הרבה יותר גדולים, כמו 256kbit ו512kbit u ואפילו 1024, בנוסף גם במגוון תקשורות, את כל אלה ניתן לראות בקישור פה.

מקווה שזה תרם למישהו.

רשם טמפרטורה ולחות על esp8266 כדונגל USB (משוחזר 01.06.2015)

רשם = logger;

בפעם הקודמת התחלתי לשחק עם הesp8266 בתור בקר עצמאי ותכנותו בעזרת הArduino IDE, זרקתי את הesp8266 על breadboard ועם חיישן DS18B20 וספק כוח חיצוני ל3.3V וכמה כבלים הרצתי סקץ' פשוט שעבד יופי – וכל חצי דקה העלה את הנתונים ל thingspeak.com.
התלהבתי מזה מעט, ואז בא לי הרעיון הבא, באתי לפרק את העניין והתבאסתי, מה כזה דבר נחמד אני אפרק? אבל מה אני אשאיר את זה ככה? מחובר לשנאי DC וחוטים וזה ..
מפה לשם החלטתי שזה עולה על PCB חורים אבל עם חיישן טמפרטורה ולחות DHT11 (כי יש לי מלא) ויעבוד כדונגל USB! שיחובר למטען של טלפון 🙂

המעגל פשוט ביותר – מייצב מתח באריזת TO-92 יחד עם 2 קבלים בכניסה וביציאה, מספק 3.3V לVCC של הesp8266 ושל הDHT11, כמובן gnd לgnd ופין data של החיישן לאחת מרגלי gpio בesp8266, כל זה על PCB קטן ובראשו חיבור USB זכר מכבל שזמנו הגיע.
הניסיון שלי לעשות האת ה PCB בצבע super stealth black כשל כמו שאתם רואים 🙂

והקוד, שהורכב מ2 דוגמאות וקצת שינויים (קוד מלוכלך שלא היה לי כוח לסדר, אז תסלחו לי 🙂 )
בקוד תצתרכו לשנות את שורות 14,15 ו 18, שהם הssid הסיסמא של הרשת והkey של הערוץ בthingspeak.com.

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

אם עשיתם גם, תשתפו גם..
תהנו 8)