הכירו את פרויקט AquaTank – מבוא.

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

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

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

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

    הסטטוס והtodo שלו כרגע:

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

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

eeprom חיצוני בתקשורת I2C לארדואינו

הכל התחיל מזה שיצאתי נוב, בפרויקט 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, שלא יצא לפועל – או יותר נכון יצא לפועל בצורה אחרת, ואז איבדתי אותה בים, ועכשיו היא שייכת לפוסידון.

main

כשחיפשתי דוגמאות וספריות נתקלתי במלא דברים שסתם מסבכים את החיים, אז החלטתי לכתוב לבד בעזרת ספריית 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ט שלי הושלמה.

multi

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

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