קניתי את לוח מודול החיישן הזה לקישור לננו של Arduino: http://www.ebay.com/itm/For-Arduino-Liquid-PH-Value-Detection-detect-Sensor-Module -Monitoring-Controller / 321764233326
הנחתי ששני הברגים מיועדים לכיול (נקודה נמוכה + שיפוע), אך נראה כי הפעולה שונה ואינני מצליח להבין כיצד. יש לי שני נוזלי הפניה ל- pH של 4.0 ו- 7.0. כשאני מכניס את החללית לאחת מהן, אני מקבל קריאות. נראה כי סיבוב אחד משני הברגים מקזז את הקריאה ולכן למשל היה לי pH 4 = 900 ו- pH 7 = 1000 (טווח 0 - 1023). סיבוב אחד משני הברגים יוריד מעט את הערך, אך הוא לעולם לא יורד מתחת ל -500 בערך.
אז מה שאני יכול לעשות זה למדוד שתי נקודות (4.0 ו 7.0) ואת ערכי המדידה שלהם בהתאמה. כך יכולתי לחשב נקודות בין לבין, אך עד כמה שידוע לי pH אינו סולם ליניארי, אלא לוגריתמי. אם אני טועה בזה, הקריאה אולי נראית נכונה אך רק מציגה 4.0 ו- 7.0 נכונה ולא את שאר הערכים (אין לי כרגע 10.0 נוזל התייחסות).
עכשיו על הבורג השני, נראה שאותו בהתחלה לא עושה כלום. אבל אז שמתי לב שהוא מגדיר איזשהו ערך סף, והדלקה ונכבה של נורית הלוח. נראה כי נורית ה- LED קשורה לערך הנקרא, אך מטרה נוספת? כִּיוּל? אין לי מושג.
אוקי אז במקרה הטוב למישהו יש מודול שווה ורוצה לפרט כיצד זה עובד. אחרת אולי לחלק מכם יש כמה רעיונות מבריקים לגבי מה שאוכל לנסות בכדי לגרום לזה לעבוד כמו שאני רוצה :)
עדכון 09-11-2015
קיבל משוב מהמוכר. היא שלחה לי את ה- ZIP הבא: http://1drv.ms/1MSk1DX. הוא מכיל כמה קבצים בסינית, אך באחד מהם היה קוד קוד. ניסיתי את זה על הארדואינו שלי אבל לצערי הערכים עדיין לא הגיוניים במיוחד. תלוי איך אני מפעיל את הכפתור בהדפסה, אני מקבל ערכים בין 9 ל -17 עבור נוזל שנמצא בחיים האמיתיים 7.0. לא ניסיתי אבל ספק אם לעשות קיזוז של -7 זה הגיוני.
הקוד עצמו די פשוט, וממוצע של 6 מרכזים של עשרה מדדים רצופים. השורות המעניינות הן אלה:
avgValue = 0; עבור (int i = 2; i<8; i ++) // קח את הערך הממוצע של 6 מדגם מרכז avgValue + = buf [i]; float phValue = (float) avgValue * 5.0 / 1024/6; // להמיר את האנלוגי למיליוולט phValue = 3.5 * phValue + Offset;
אולי מישהו יכול להבין את זה, כי אני לא יכול. אני לא מבין את הכפל 5.0 ואת 3.5 אחרי זה. מאיפה אלה באים? בכל מקרה, כשאני טובל את החללית לנוזל האחסון, המונה הרגיל שלי צונח ל- pH 0.5 בזמן שהתוכנה נותנת לי 17 (שזה ערך גבוה יותר מזה שקיבלתי מקריאת הנוזל 7.0 שלי) . אז או שהלוח שלי מקולקל או שקוד הדוגמה הזה חסר תועלת.
ניתן למצוא אגב סכימות בקובץ ה- ZIP.
עדכון 11-11-2015
עשה עוד ניסויים. ראשית גיליתי שהקריאות מהמודול גדלו לנוזל חומצי יותר. אז הפכתי את הערך על ידי שימוש ב
buf [i] = 1024 - analogRead (SensorPin);
אוקי, עכשיו הערכים היו יותר הגיוניים. ואז כיוונתי את הסיר כך שיהיה באמצע הטווח הזמין. טבלתי את החללית בנוזל 7.0, קראתי את הערך וכוונתי את הקיזוז. ואז טבל ב 4.0, התאים את הסיר כך שיתאים ל 4.00, להלן התוצאות:
התייחסות ל- pH 7.0 --> 6.27 קיזוז ל: 0.73pH 4.0 הפניה --> 5.17 התאים את הסיר אז ערך קרא התייחסות ל- 4.0pH 7.0 --> 5.86
אז כפי שציפיתי, התאמת הסיר מבלבלת גם את מדידת הייחוס 7.0. אז אם כי זה יכול להיות בגלל שיפוע הסיר (אם יהיה כזה), אז הלכתי לערך הנמוך ביותר כדי לקבל את ההבדל הכי פחות. שוב הקריאות:
התייחסות pH 7.0 --> 8.70 קוזז ל: -11.70pH 4.0 הפניה --> 5.17 התאים את הסיר כך שערך קרא 4.0
התייחסות ל- pH 7.0 --> 5.70
הדבר המעניין כאן הוא שערך 4.0 נקרא 5.17 בשני המקרים, למרות שהסיר היה במצב אחר. אני לא יכול להסביר מדוע.
כדי לוודא שהחללית בסדר כיולתי מחדש את מד ה- pH הרגיל שלי, פועל כרגיל. זה כולל גם שני סירים, אחד לכיול 7.0 ואחד לשיפוע 4.0. הכיול נעשה על ידי הגדרת 7.0, ואז מדידת 4.0 והתאמת סיר המדרון. מדוד 7.0 שוב, שנה 7.0 סיר, מדוד 4.0 שוב וכו 'עד שהערכים תואמים את נוזליהם. בדרך כלל לוקח לי בערך 3 - 4 לולאות כדי לקבל את זה נכון.
עדכון נוסף
לקח את שני מיכלי נוזלי הייחוס והתחיל לערבב. זה נתן לי מדידות בטווח של pH 4 - 7.5. נמדד גם את נוזל האחסון שיש לו pH של 1.00. התוצאות הן בגיליון אקסל: http://1drv.ms/1lkAO6e. השאלה הבאה היא כיצד להמיר זאת לנוסחה מתאימה?
עדכון 18-11-2015
עובד על הפיתרון של @ slash-dev, הנה מה שאני עשה:
תחילה סובבתי את הסיר עד למטה לערך הנמוך ביותר. הקריאות (עבור pH 7.0) הן כדלקמן: נמוך = 540 וגבוה = 1017. קוד כדלקמן:
int rawValue = analogRead (SensorPin); int buf [10]; // חיץ עבור אנלוגי קריאה (int i = 0; i<10; i ++) // קבל 10 ערך מדגם מהחיישן כדי להחליק את הערך {buf [i] = rawValue; עיכוב (10);} // מיון שנשאר בחוץ כדי להפחית את אורך הדגימה avgValue = 0; עבור (int i = 2; i<8; i ++) // קח את הערך הממוצע של 6 דגימות מרכז avgValue + = (buf [i] - CENTER);
בשלב זה אני מדפיס כמובן את הערך הגולמי.
את קיצור מחבר ה- BNC אני לא בדיוק מבין, האם עלי לקצר את החלק הפנימי (לאן שהסיכה עוברת) או את החלק החיצוני של המחבר? ולקצר את זה ל- GND? השתמשתי במקום זאת בפתרון הייחוס.
עכשיו הוספתי את הנוסחה לקביעת המתח. לערך הנמוך הנקרא 0.10. עכשיו הכנסתי את ערך המרכז של 540 שמביא את קריאת המתח ל -0.0, נראה טוב.
עכשיו לשלב 2 הנחתי את החללית לפיתרון הייחוס 4.0. המתח נקרא כעת 0.48, ערך גולמי 637. אני מתחיל להתאים את הסיר למקום בו המתח קורא 2.25, נסתלק מכוונון כלשהו. Raw עכשיו קורא 1000.
עכשיו מגיע החלק שאני לא בדיוק מקבל. אתה אומר שעכשיו אנחנו יכולים לחשב את ה- pH / V, אבל עם אילו משתנים? כלומר, -3 / 2.25 תמיד יביא ל- -1.33 אבל לא צריך להיות כאן משתנה תלוי עד כמה באמת התאמתי את הסיר?
כשאני מכניס כעת את הנוסחה לחישוב ה- pH כצפוי הוא קורא 4.0 לפתרון הייחוס 4.0. אך כעת הוא מברג את פתרון ה- 7.0 כאשר כיוונו את הסיר אך לא פיצינו עליו עד כמה שראיתי? ניסיתי גם את נוסחאות ה- pH המותאמות אבל אני מניח שאלה נועדו לקוד הראשון שהיה לנו ולא לזה המותאם.
אז מה חסר לי בין שלב 2 ל -3 שמבלגן כאן דברים? כמו כן, אתה מצהיר שההיפוך על ידי חיסור מ- 1024 נכון, אך כשאני עושה זאת קריאות המתח הופכות למינוס.
דבר נוסף שאני תוהה לגביו; אם הסיר צריך להיות מדרון, האם הוא לא צריך להיות שונה מזה שלידו (איפה שיש יותר הגיוני)? כי זה לא כך, שניהם קוראים את "W103 / 143C". בינתיים, הספק שולח בחביבות אחד חלופי כדי להבטיח שזה לא פגם בחומרה איפשהו.
העדכון הבא: :)
אז חזרתי עכשיו לקוד המקורי שלי כדי לנסות את חישובי ה- pH המותאמים. השתמשתי בפתרון הייחוס 7.0 כדי לכייל שוב ואז מדדתי את פתרון 4.0. זה כתוב 4.1! בסדר, לא לגמרי במקום אבל גם לא רע. זה הבדל קטן שיכול לבוא גם מהחללית, ולא מהיקרה ביותר.
אז אני תוהה אם בכל זאת ננסה לגרום לכך שהגישה האחרת תעבוד כי היא נשמעת טוב יותר (מדעי יותר?) משום מה. בכל מקרה, זה לפחות הרבה יותר טוב מכלום :)
כוח USB לעומת מקושר? נראה שדבר מוזר אחר קורה כשאני מנתק את הננו מיציאת ה- USB של מחשב נייד ובמקום זה להניע אותו באמצעות פטל. אני רוצה להשתמש ב- I2C כדי לשלוח את הערך מהנאנו ל- RPi. זה עובד, אבל ברגע שאני מפעיל את הננו מה- RPi (5V מחובר ל- vIn), ערך ה- pH המחושב יורד?