במאמר זה נדון בסוגים השונים של חיישני הטמפרטורה וכיצד ניתן להשתמש בהם בכל מקרה לגופו. טמפרטורה היא פרמטר פיזיקלי הנמדד במעלות. זהו חלק חיוני בכל תהליך מדידה. האזורים הדורשים מדידות טמפרטורה מדויקות כוללים רפואה, מחקר ביולוגי, אלקטרוניקה, מחקר חומרים וביצועים תרמיים של מוצרי חשמל. מכשיר המשמש למדידת כמות אנרגיית החום המאפשרת לנו לזהות שינויים פיזיים בטמפרטורה מכונה חיישן טמפרטורה. הם דיגיטליים ואנלוגיים.
סוגי חיישנים עיקריים
באופן כללי, ישנן שתי שיטות להשגת נתונים:
1. צור קשר... חיישני טמפרטורת מגע נמצאים במגע פיזי עם אובייקט או חומר. בעזרתם ניתן למדוד את הטמפרטורה של מוצקים, נוזלים או גזים.
2. ללא מגע... חיישני טמפרטורה ללא מגע מזהים טמפרטורה על ידי יירוט חלק מאנרגיית האינפרא-אדום הנפלטת על ידי אובייקט או חומר וחשים את עוצמתו. ניתן להשתמש בהם רק למדידת טמפרטורה במוצקים ובנוזלים. הם אינם מסוגלים למדוד את טמפרטורת הגזים בגלל חוסר הצבע שלהם (שקיפות).
כללי בחירת חיישן
נבחר חיישן הטמפרטורה לחימום תת רצפתי תוך התחשבות במאפיינים כגון הספק, סוג הכיסוי העליון, שיטת ההתקנה וציוד עם פונקציונליות נוספת.
כּוֹחַ
הערך חייב בהחלט לענות על הדרישות והעומס של הרצפה החמה. אחרת, החיישן לא יעבוד כראוי. כאשר כוחו של גוף החימום גדול מזה של הרגולטור עצמו, יש צורך להתקין בנוסף סטרטר מגנטי ביניהם - כדי למנוע שבירה של המכשיר עקב עומס מוגבר.
ערכת תכונות
הרצפה החמה נשלטת על ידי יחידה חשמלית, המאפשרת לך להתאים את פעולת גופי החימום. לבקרים מודרניים יש פונקציות כמו הפעלה והפעלה של אנרגיה מהמערכת, התאמת תנאי הטמפרטורה, כמו גם קביעת תדירות החיבור והניתוק של גוף החימום.
קלות שימוש
אם אתה חושב שלא תבין בתכנות, אז אתה לא צריך לרכוש מכשיר מורכב. אפילו אם לוקחים בחשבון את כל הפונקציונליות שלו. לדוגמא, אנשים מבוגרים מוצאים את זה די בעייתי להתמודד עם מכשירים ניתנים לתכנות. מוטב שהם יבחרו באופציה המכנית.
קל לחיבור
התיעוד הנלווה לתרמוסטט מציין תמיד כיצד לחבר את חיישן החימום התת רצפתי. המסופים ממוקמים בקצה בצד אחד של יחידת הבקרה. לאחר חיבור חוטי החשמל על פי התוכנית, יהיה צורך לבדוק את ביצועי מערכת החימום. לשם כך יש למדוד את ההתנגדות במסופי חיישן הטמפרטורה ולכבל החשמלי לחימום, או לחבר רצפה חמה ולהעלות את ערכי הטמפרטורה מאפס למחוון המומלץ על ידי SNIP, כלומר עד 30 מעלות צלזיוס.
מראה חיצוני
חיישן תרמי לא צריך להיות רק מובן פונקציונלי, אלא גם אטרקטיבי בעיצובו. הכפתורים המודרניים מגיעים במגוון צבעים וצורות. אתה יכול לבחור באפשרות שהיא בהרמוניה עם פנים החדר.
סוגי חיישני טמפרטורה
ישנם סוגים רבים ושונים של חיישני טמפרטורה.החל משליטה / כיבוי פשוטה של מכשיר תרמוסטטי וכלה במערכות בקרה מורכבות של אספקת מים, עם פונקציית החימום שלו, המשמשות בתהליכים של גידול צמחים. שני סוגי החיישנים העיקריים, מגע ולא מגע, מחולקים עוד יותר לחיישנים התנגדותיים, מתחיים ואלקטרומכניים. שלושת חיישני הטמפרטורה הנפוצים ביותר הם:
- תרמיסטורים
- צמדים תרמיים להתנגדות
- צמד תרמי
חיישני טמפרטורה אלה נבדלים זה מזה מבחינת הפרמטרים התפעוליים.
התקן
זהו צמד תרמי (צלחת או מוט) המורכב מחוטים המחוברים למסופי אלמנט החישה.
בהתאם למידע הטמפרטורה, ההתנגדות של החלק הרגיש משתנה, בהתאמה, האות החשמלי המסופק לתרמוסטט משתנה. לפיכך, נקבע הערך המוחלט של הטמפרטורה הבינונית.
חיצוני (חיישן טמפרטורה חיצוני לחימום תת רצפתי), ככלל, ממוקם מתחת לכיסוי הרצפה הגמר ומודד את מחווני הטמפרטורה שלו. פנימי (מובנה), ממוקם בתוך הרגולטור וקובע את רמת חימום האוויר.
תכנון חיישני הטמפרטורה נבחר בהתאם לתכונות המערכת:
תרמיסטור
תרמיסטור הוא נגד רגיש שמשנה את התנגדותו הפיזית עם הטמפרטורה. בדרך כלל, תרמיסטורים עשויים מחומר מוליך למחצה קרמי כגון קובלט, מנגן או תחמוצת ניקל ומצופים בזכוכית. הם דיסקים קטנים אטומים שטוחים המגיבים במהירות יחסית לכל שינוי טמפרטורה.
בשל המאפיינים המוליכים למחצה של החומר, לתרמיסטורים מקדם טמפרטורה שלילי (NTC), כלומר. ההתנגדות פוחתת עם עליית הטמפרטורה. עם זאת, ישנם גם תרמיסטורים של PTC שהתנגדותם עולה עם עליית הטמפרטורה.
לוח הזמנים של תרמיסטור
יתרונות התרמיסטורים
- מהירות תגובה גבוהה לשינויי טמפרטורה, דיוק.
- זול.
- עמידות גבוהה יותר בטווח של 2,000 עד 10,000 אוהם.
- רגישות גבוהה בהרבה (~ 200 אוהם / מעלות צלזיוס) בטווח טמפרטורות מוגבל של עד 300 מעלות צלזיוס.
תלות בטמפרטורה של התנגדות
תלות ההתנגדות לטמפרטורה מתבטאת במשוואה הבאה:
איפה א ב ג - אלה קבועים (המסופקים על ידי תנאי החישוב), ר - התנגדות באום, ט - טמפרטורה בקלווין. תוכלו לחשב בקלות את שינוי הטמפרטורה משינוי התנגדות או להיפך.
כיצד להשתמש בתרמיסטור?
תרמיסטורים מדורגים לערך ההתנגדות שלהם בטמפרטורת החדר (25 מעלות צלזיוס). תרמיסטור הוא מכשיר התנגדות פסיבי, ולכן הוא דורש ייצור ניטור של מתח המוצא הנוכחי. ככלל, הם מחוברים בסדרה עם מייצבים מתאימים היוצרים מחלק מתח רשת.
דוגמאשקול תרמיסטור בעל ערך התנגדות של 2.2K ב 25 מעלות צלזיוס ו 50 אוהם ב 80 מעלות צלזיוס. התרמיסטור מחובר בסדרה עם נגד 1 kΩ דרך ספק 5 וולט.
לכן ניתן לחשב את מתח המוצא שלה כדלקמן:
ב 25 מעלות צלזיוס, RNTC = 2200 אוהם;
ב 80 מעלות צלזיוס, RNTC = 50 אוהם;
עם זאת, חשוב לציין כי בטמפרטורת החדר, ערכי ההתנגדות הסטנדרטיים שונים עבור תרמיסטורים שונים, מכיוון שהם אינם ליניאריים. לתרמיסטור שינוי טמפרטורה אקספוננציאלי, ולכן קבוע בטא, המשמש לחישוב עמידותו לטמפרטורה נתונה. מתח וטמפרטורת הפלט של הנגד קשורים באופן ליניארי.
תכונות של ממשק זרם דו חוטי בחיישני טמפרטורה LMT01
תאנה. 4. ארגון הממשק הנוכחי עם LMT01
כאמור לעיל, כדי להעביר את תוצאת המדידה, ה- LMT01 מייצר רצף סיביות בצורה של פולסי ספירת זרם. לשם כך, החיישן דורש רק שני מובילים (איור 4). כדי להמיר פעימות זרם לצורה המוכרת למיקרו-מעגלים דיגיטליים, במקרים מסוימים תוכלו להשתמש בנגד יחיד (אך לא תמיד - על כך בהמשך).
לאחר ההפעלה, ה- LMT01 מתחיל מחזור מדידה שנמשך עד 54 אלפיות השנייה (איור 5). במהלך תקופה זו נוצר זרם רמה נמוך של 28 ... 39 μA בפלט החיישן. לאחר מכן מחזור של העברת תוצאת המדידה בצורה של פעימות זרם עם משרעת של 112 ... 143 μA. על המיקרו-בקר המקבל לספור פולסים אלו, למשל באמצעות הדלפק / טיימר המובנה. מכיוון שתדירות האותות היא בערך 82 ... 94 קילוהרץ, ואז עם המספר המרבי של הפולסים (4095), משך השידור יכול להגיע ל 50 ms.
תאנה. 5. דיאגרמות תזמון של חיישן LMT01
ניתן להשתמש במספר הפולסים (PC) לקביעת ערך הטמפרטורה לפי הנוסחה 1:
, (1)
לפיכך, ב -0 מעלות צלזיוס, החיישן ייצר כ- 800 פעימות.
למרבה הצער, שימוש בנגד חיצוני אחד אינו תמיד אפשרי בגלל המגבלה על ירידת המתח המינימלית על פני חיישן LMT01. במהלך מחזור המדידה, הצניחה על פני החיישן חייבת להיות לפחות 2.15 V. במהלך מחזור העברת הנתונים, ניתן להפחית את ירידת המתח ל -2 V. זה לא קשה לעשות כמה חישובים גסים.
שקול מכשיר עם מתח אספקה Vdd = 3.3 V. אם ניקח את הירידה המינימלית המותרת על פני החיישן השווה ל -2.15 וולט במהלך מחזור המדידה, אז נצפה על פני הנגד לא יותר מ -1.15 וולט. בקרים, היחידה הלוגית היא 0, 7 ∙ Vdd, אשר במקרה שלנו יהיה 2.31 V. כתוצאה מכך, השימוש בנגד פשוט מתגלה כבלתי אפשרי, מכיוון שהמיקרו-בקר פשוט לא "יראה" את האות של יחידה לוגית. הדרך לצאת ממצב זה יכולה להיות שימוש במיקרו-בקר עם משווה מובנה או מעגלי המרה ברמה.
חיישני טמפרטורה עמידים
חיישני התנגדות לטמפרטורה (RTD) עשויים ממתכות נדירות, כמו פלטינה, שהתנגדותן החשמלית משתנה עם הטמפרטורה.
לגלאי טמפרטורה עמידה מקדם טמפרטורה חיובי, ובניגוד לתרמיסטורים, הם מספקים דיוק מדידה בטמפרטורה גבוהה. עם זאת, יש להם רגישות ירודה. ה- Pt100 הוא החיישן הזמין ביותר עם ערך התנגדות סטנדרטי של 100 אוהם ב 0 מעלות צלזיוס. החיסרון העיקרי הוא העלות הגבוהה.
היתרונות של חיישנים כאלה
- טווח טמפרטורות רחב בין -200 ל -650 מעלות צלזיוס
- ספק פלט זרם גבוה
- לינארית יותר בהשוואה לצמדים תרמיים ו- RTD
רכיבים נוספים ומעגל חיישנים
בנוסף למכשירי הדיודה הראשיים, מעגל חיישני הטמפרטורה כולל מספר אלמנטים נוספים. קודם כל, מדובר בקבל המגן על המכשיר מפני השפעות זרות. העובדה היא שהמגבר התפעולי רגיש מאוד להשפעות של שדות אלקטרומגנטיים מתחלפים. הקבל מסיר תלות זו באמצעות הזרקת משוב שלילי.
בהשתתפות טרנזיסטור ודיודת זנר נוצר מתח התייחסות מיוצב. כאן משתמשים בנגדים בדרגת דיוק גבוהה יותר עם ערך נמוך של מקדם ההתנגדות. בכך, כל התכנית זוכה ליציבות נוספת. במקרה של שינויים משמעותיים בטמפרטורה, ניתן להשמיט נגדים מדויקים. הם משמשים רק לשליטה על התחממות יתר קטנה.
צמד תרמי
בדרך כלל משתמשים בחיישני טמפרטורה של צמד תרמי מכיוון שהם מדויקים, פועלים בטווח טמפרטורות רחב בין -200 ° C ל -2000 ° C, וזולים יחסית. צמד תרמי עם חוט ותקע בתמונה למטה:
הפעלת צמד תרמי
צמד תרמי עשוי משתי מתכות שונות המרותכות יחד כדי לייצר הפרש פוטנציאלי על פני הטמפרטורה. מהפרש הטמפרטורה בין שני הצמתים נוצר מתח המשמש למדידת הטמפרטורה. הפרש המתח בין שני הצמתים נקרא אפקט Seebeck.
אם שתי התרכובות באותה טמפרטורה, פוטנציאל ההבדל בתרכובות שונות הוא אפס, כלומר V1 = V2. עם זאת, אם הצמתים נמצאים בטמפרטורות שונות, מתח המוצא ביחס להפרש הטמפרטורה בין שני הצמתים יהיה שווה להפרש V1 - V2 שלהם.
סוגי חיישני טמפרטורה
אלקטרונית-מכנית
סוג הרגולטור הפשוט והזול ביותר. חלק העבודה העיקרי שלה הוא לוח מתכת מיוחד המגיב לעלייה או לירידה בטמפרטורה. המערכת מופעלת ומכבה על ידי שינוי עיקול הצלחת במהלך חימום וקירור. קביעת ערך הטמפרטורה המדויק על רגולטור כזה לא תפעל.
אֶלֶקטרוֹנִי
למכשיר יש אלמנט מיוחד שמייצר אות מיוחד. הכוח תלוי ישירות בערכי טמפרטורת הסביבה. במכשירים כאלה ניתן להגדיר קריאות מדויקות של טמפרטורת חימום עד לשבריר מעלות. המערכת נשלטת על ידי כפתורים ומסך קטן.
ניתן לתכנות
היקר ביותר מבין אלמנטים התרמיים. על זה, אתה יכול להגדיר ערכים מסוימים, כאשר אתה מגיע למערכת כולה או מופעלת על ידי הרגולטור. בזכות המכשיר נוצר מיקרו אקלים בחדר שמתאים לאדם מסוים. אפשר להגדיר את התרמוסטט כך שהמערכת מופעלת במועד ספציפי. כלומר, הרצפות מחוממות לפני שהבעלים מגיע הביתה, ובמקביל, חשמל לא נצרך כאשר הבעלים לא.
דגמים רבים כוללים עיצובים בהירים ומסוגננים ומסכי LCD המציגים מידע ומקלים על כוונון עדין.
עבודה עם ספריות מוכנות
לכן, כדי לעבוד עם חיישני טמפרטורה DS18B20 ברשת, תוכלו למצוא מספר עצום של ספריות, אך ככלל משתמשים בשתיים מהפופולריות ביותר. זוהי ספרייה וספרייה. יתר על כן, הספרייה השנייה היא תוסף נוח יותר על פני הראשונה ולא ניתן להשתמש בלעדיה. במילים אחרות, לפני שתתחבר לספריית DallasTemperature.h, עליך לחבר גם את OneWire.h. כיצד להתקין ספריות מסוימות ב- Arduino IDE אפשרי.
ספריית OneWire.h
בואו נשקול תחילה לעבוד עם ספריית OneWire.h. להלן רשימה של פונקציותיה עם תיאור קצר.
- OneWire temperatureSensor (uint8_t pinNumber)
פונקציה זו היא קונסטרוקטור של מחלקת ה- OneWire ויוצרת אובייקט temperatureSensor, כלומר פותח ערוץ תקשורת עם חיישן או קבוצת חיישנים על הסיכה pinNumber. בדוגמאות שלנו (איורים 3-5) זהו הסיכה "D2" של הארנווינו ננו. לשם כך חיברנו את אוטובוס הנתונים DQ DS18B20.
דוגמא:
טמפרטורת OneWire
(
D2
);
// חיישן או קבוצת חיישנים מחוברים לסיכה D2
- uint8_t חיפוש (addrArray)
הפונקציה מחפשת את המכשיר הבא באוטובוס 1-Wire וכאשר הוא נמצא מכניסה את ערך הכתובת למערך addrArray, ומחזירה true. מכיוון שהכתובת הייחודית של כל חיישן היא 64 סיביות, על addrArray להיות בגודל 8 בתים. אם החיפוש נכשל, הפונקציה מחזירה שקר. יש לציין שכאשר מספר חיישני טמפרטורה מחוברים לאוטובוס אחד, כל קריאה לפונקציית החיפוש תנותב לחיישן הבא, ואז הבאה וכו ', עד שיימנו כל המכשירים באוטובוס. המוזרות של פונקציה זו היא לזכור כתובות שכבר עובדו. כדי לאפס את התור, עליך להתקשר לפונקציה reset_search (), עליה תידון בהמשך.
דוגמא:
בתוספת addrArray
[
8
];
// מערך לאחסון כתובת 64 סיביות // אם המכשיר נעדר בכלל באוטובוס או כל המכשירים נספרים // להציג את המידע המתאים בצג היציאה
אם(!
חיישן טמפרטורה
.
לחפש
(
addrArray
))
סידורי
.
println
(
"אין עוד כתובות."
);
// אחרת, אם המכשיר הבא נענה לבקשת הנוכחות, // הציג את כתובת ה- 64 סיביות שלו בצג היציאה
אַחֵר{ל(
אני
=
0
;
אני
<
8
;
אני
++)
סידורי
.
הדפס
(
addrArray
[
אני
],
HEX
);
}
- בָּטֵלreset_search ()
כפי שצוין לעיל, פונקציה זו מאפסת את תור הקלפי של המכשירים באוטובוס 1-Wire עד ההתחלה. יש להשתמש בו תמיד יחד עם פונקציית החיפוש כאשר זו האחרונה מחזירה שקר. לדוגמה, במקרה שלנו עם 5 חיישנים באוטובוס, על ידי התקשרות לפונקציית החיפוש 5 פעמים, אנחנו יכולים לקבל 5 כתובות. בפעם השישית, פונקציית החיפוש תחזיר לנו כוזבת ותעשה זאת בכל סקר הבא עד שטיפת התור. עליכם לשים לב לכך על מנת להימנע ממצבים בלתי מובנים.
דוגמא:
בתוספת addrArray
[
8
];
// מערך לאחסון כתובת 64 סיביות // אם המכשיר נעדר בכלל באוטובוס או כל המכשירים נספרים // אפסו את תור הסקרים לחזור על מחזור החיפוש
אם(!
חיישן טמפרטורה
.
לחפש
(
addrArray
))
חיישן טמפרטורה
.
reset_search
();
- uint8_tאיפוס ()
פונקציית איפוס 1-חוט מתחילה את תהליך התקשורת. זה נקרא בכל פעם שאנחנו רוצים לתקשר עם חיישן הטמפרטורה. ערכי החזרה יכולים להיות אמת או שקר. נקבל את הערך האמיתי אם לפחות חיישן אחד באוטובוס יגיב לאיפוס עם דופק נוכחות. אחרת, אנו מקבלים שקר;
דוגמא:
אם(!
חיישן טמפרטורה
.
אִתחוּל
())
סידורי
.
println
(
"אין חיישנים באוטובוס"
);אַחֵר
סידורי
.
println
(
"זוהה חיישן"
);
- בָּטֵלבחר (addrArray)
הפונקציה מאפשרת לך לבחור מכשיר ספציפי איתו אנו רוצים לעבוד כרגע. הבחירה נעשית על ידי ציון מפורש של כתובת ה- 64 סיביות שהוזנה במערך addrArray. ניתן להגדיר את הכתובת באופן מפורש על ידי כתיבתה במערך או באמצעות הכתובת שקראה בעבר פונקציית החיפוש. יש לציין כי יש להתקשר לפונקציית האיפוס לפני שמתקשרים לפונקציית הבחירה. עם האיפוס הבא, הקשר עם החיישן שנבחר נשבר עד לשיחה הבאה לבחירה.
דוגמא:
בתוספת addrArray
[
8
];
// מערך לאחסון כתובת 64 סיביות // אם המכשיר נעדר בכלל באוטובוס או כל המכשירים נספרים // פלט את המידע המתאים לצג היציאה
אם(!
חיישן טמפרטורה
.
לחפש
(
addrArray
))
סידורי
.
println
(
"אין עוד כתובות."
);
// אחרת, אם המכשיר הבא נענה לבקשת הנוכחות, // בחר בו לעבודה שלאחר מכן
אַחֵר{
חיישן טמפרטורה
.
איפוס ()
;
// אל תשכח להוציא את פקודת האיפוס temperatureSensor
.
בחר (addrArray)
;
// ציין מערך עם כתובת הקריאה
}
- בָּטֵללדלג ()
הפונקציה רלוונטית רק בעבודה עם חיישן אחד באוטובוס ופשוט מדלגת על בחירת המכשיר. במילים אחרות, אינך יכול להשתמש בפונקציית החיפוש, ולכן לגשת במהירות באמצעות החיישן היחיד שלך.
דוגמא:
חיישן טמפרטורה.
אִתחוּל
();
// אפס את צמיג ה- SensorSensor
.
לדלג
();
// בחר את החיישן היחיד לעבודה נוספת איתו
- בָּטֵלכתוב (uint8_tבתים, uint8_t powerType = 0)
הפונקציה שולחת בתים נתונים למכשיר שנבחר באוטובוס. הארגומנט powerType מציין את סוג אספקת החשמל לחיישנים (0 - חיישנים מופעלים ישירות ממקור חיצוני; 1 - נעשה שימוש בחיבור מופעל טפילי). ניתן להשמיט את הפרמטר השני אם נעשה שימוש בכוח חיצוני, מכיוון שהוא כברירת מחדל 0.
דוגמא:
חיישן טמפרטורה
.
אִתחוּל
();
// אפס את צמיג ה- SensorSensor
.
לדלג
();
// בחר חיישן יחיד לעבודה עוקבת איתו // שלח פקודה להמרת הטמפרטורה, // באמצעות חיבור עם אספקת חשמל טפילית מהטמפרטורה אוטובוס נתונים חיישן
.
לִכתוֹב
(
0x44
,
1
);
- uint8_tלקרוא ()
פונקציה זו קוראת בת אחד של נתונים שנשלחים על ידי מכשיר העבדים (חיישן) לאוטובוס 1-Wire.
דוגמא:
// קרא 9 בתים של נתונים מהאוטובוס 1-Wire והכניס את התוצאה למערך בתים של מערך
[
9
];ל(
uint8_t אני
=
0
;
אני
<
9
;
אני
++){
מַעֲרָך
[
אני
]=
חיישן טמפרטורה
.
לקרוא
();}
- uint8_t סטטי crc8 (const uint8_t * addr, uint8_t len);
הפונקציה נועדה לחשב את סכום הבדיקה. נועד לבדוק את התקשורת הנכונה עם חיישן הטמפרטורה. כאן addr הוא מצביע למערך הנתונים, ו- len הוא מספר הבתים.
דוגמא:
בתוספת addrArray
[
8
];
// מערך לאחסון כתובת 64 סיביות // אם המכשיר נעדר בכלל באוטובוס או כל המכשירים נספרים // פלט את המידע המתאים לצג היציאה
אם(!
חיישן טמפרטורה
.
לחפש
(
addrArray
))
סידורי
.
println
(
"אין עוד כתובות."
);
// אחרת, אם המכשיר הבא נענה לבקשת הנוכחות, // בדקו את בדיקת הכתובת שלו
אַחֵר{
// אם בדיקת הבדיקה אינה תואמת, הצג הודעת שגיאה
אם(
OneWire
::
crc8
(
addrArray
,
7
)!=
addrArray
[
7
]){
סידורי
.
println
(
"CRC אינו תקף!"
);}}
בדקנו כל פונקציה של ספריית OneWire.h בנפרד וכדי לתקן את החומר, להלן אביא סקיצה לקריאת הטמפרטורה מקבוצת חיישני טמפרטורה DS18B20, אשר יחוברו לסיכה D2 באמצעות מעגל כוח טפילי. השרטוט יכיל הערות מפורטות על כל הנקודות הדרושות.
#include // אנו מחברים את הספרייה לעבודה עם חיישנים תרמיים DS18B20OneWire ds
(
2
);
// חיישן או קבוצה של חיישנים מחוברים לסיכת D2 של הארדואינו // הגדרת החלל PRESET FUNCTION
(
בָּטֵל
){
סידורי
.
התחל
(
9600
);
// אתחול העבודה עם Serial-port} // לולאת הריק המרכזי
(
בָּטֵל
){
בת i
;
// משתנה עזר ללולאות בהווה בתים
=
0
;
// משתנה לקביעת המוכנות של החיישן לסוג בתים תקשורת_
;
// משתנה להגדרת סוג חיישן הטמפרטורה באפיק נתוני הבייט
[
12
];
// מערך לאחסון מידע שהתקבל מתוסף בית החיישן
[
8
];
// מערך לאחסון כתובת 64 סיביות של חיישן צלזיוס צף
,
פרנהייט
;
// משתנים לחישוב הטמפרטורה // אם לא מוצאים מכשירים באוטובוס או שמספרים את כל המכשירים באוטובוס // מציגים את המידע המתאים בצג היציאה, אפסו את התור // ובצעו חיפוש שוב לאחר המתנה של 250ms
אם(!
דס
.
לחפש
(
addr
)){
סידורי
.
println
(
"אין עוד כתובות."
);
סידורי
.
println
();
דס
.
reset_search
();
לְעַכֵּב
(
250
);לַחֲזוֹר;}
// אם נמצא המכשיר הבא באוטובוס, הצג את הכתובת הייחודית שלו // בצג היציאה בצורה הקסדציאלית סידורי
.
הדפס
(
"ROM ="
);ל(
אני
=
0
;
אני
<
8
;
אני
++){
סידורי
.
לִכתוֹב
(
‘ ‘
);
סידורי
.
הדפס
(
addr
[
אני
],
HEX
);}
// בדוק את סכום הבדיקה של כתובת המכשיר שנמצא // ואם הוא אינו תואם, הצג את המידע המתאים
אם(
OneWire
::
crc8
(
addr
,
7
)!=
addr
[
7
]){
סידורי
.
println
(
"CRC אינו תקף!"
);לַחֲזוֹר;}
סידורי
.
println
();
// בדוק את אפס בתים של הכתובת, המכיל מידע // על סוג ספציפי של חיישן טמפרטורה. בהתאם לערך האפס // בתים, אנו מפיקים את סדרת השבבים לצג היציאה. אם בית האפס מכיל ערך לא ידוע //, הציגו הודעה על המשפחה הלא ידועה של חיישן הטמפרטורה.
החלף(
addr
[
0
]){מקרה
0x10
:
סידורי
.
println
(
"שבב = DS18S20"
);
type_s
=
1
;לשבור;מקרה
0x28
:
סידורי
.
println
(
"שבב = DS18B20"
);
type_s
=
0
;לשבור;מקרה
0x22
:
סידורי
.
println
(
"שבב = DS1822"
);
type_s
=
0
;לשבור;בְּרִירַת מֶחדָל:
סידורי
.
println
(
"המכשיר אינו מכשיר משפחתי DS18x20."
);לַחֲזוֹר;}
דס
.
אִתחוּל
();
// אפס את האוטובוס כדי לאתחל את חילופי הנתונים DS
.
בחר
(
addr
);
// בחר את החיישן עם הכתובת הנוכחית לעבוד איתו // שלח פקודה להמרת הטמפרטורה (על פי התיעוד 0x44) // אל תשכח מהפרמטר השני "1", מכיוון שאנו מעבירים נתונים באמצעות / / קו עם כוח טפילי. דס
.
לִכתוֹב
(
0x44
,
1
);
// החיישן מתחיל להמיר, שעל פי התיעוד לוקח מקסימום 750ms // כדי להיות בצד הבטוח, נארגן הפסקה של עיכוב של ё שנייה
(
1000
);
// אפס שוב את האוטובוס לקריאת מידע מהחיישן // שמור את תגובת פונקציית reset () למשתנה הנוכחי להמשך עבודה עם הנוכחות
=
דס
.
אִתחוּל
();
דס
.
בחר
(
addr
);
// בחר מחדש את החיישן לפי הכתובת שלו, מכיוון שהיה דופק איפוס // הפקודה 0xBE, על פי התיעוד הטכני, מאפשרת לקרוא את הזיכרון הפנימי // של חיישן הטמפרטורה (Scratchpad), המורכב מ- 9 בתים. דס
.
לִכתוֹב
(
0xBE
);
// קרא והוצא לצג היציאה 9 בתים מהזיכרון הפנימי של החיישן התרמי הסידורי
.
הדפס
(
"נתונים ="
);
סידורי
.
הדפס
(
מתנה
,
HEX
);
סידורי
.
הדפס
(
» «
);ל(
אני
=
0
;
אני
<
9
;
אני
++){
נתונים
[
אני
]=
דס
.
לקרוא
();
סידורי
.
הדפס
(
נתונים
[
אני
],
HEX
);
סידורי
.
הדפס
(
» «
);}
// בדוק ופלט לנמל לפקח על בדיקת בדיקת הנתונים הסידוריים שהתקבלו
.
הדפס
(
"CRC ="
);
סידורי
.
הדפס
(
OneWire
::
crc8
(
נתונים
,
8
),
HEX
);
סידורי
.
println
();
// התחל בתהליך המרת הנתונים שהתקבלו לטמפרטורה בפועל, // אשר נשמרת בזיכרון קריאה 0 ו- 1 בתים. לשם כך, אנו משלבים את שני // הבתים למספר אחד של 16 סיביות int16_t גולמי
=(
נתונים
[
1
]<<
8
)|
נתונים
[
0
];
// לפני המרה נוספת, עליך להגדיר את המשפחה אליה // חיישן זה שייך (קודם שמרנו את התוצאה במשתנה type_s). // תלוי במשפחה הטמפרטורה תחושב אחרת, // מכיוון שה- DS18B20 ו- DS1822 מחזירים ערך של 12 סיביות, ואילו ה- DS18S20 מחזיר ערך של 9 סיביות
אם(
type_s
){
// אם החיישן שייך למשפחת הגלם DS18S20
=
גלם
<<
3
;
// ברזולוציית ברירת המחדל היא 9 ביטים
אם(
נתונים
[
7
]==
0x10
){
גלם
=(
גלם
&
0xFFF0
)+
12
—
נתונים
[
6
];}}אַחֵר{
// קבעו לאיזו דיוק מדידה מוגדר חיישן זה בתא CFG
=(
נתונים
[
4
]&
0x60
);
// ברזולוציות נמוכות יותר, אתה יכול לאפס את הסיביות הפחות משמעותיות, // מכיוון שהן לא מוגדרות מוקדם
אם(
CFG
==
0x00
)
גלם
=
גלם
&~
7
;
// 9 סיביות (ההמרה אורכת 93.75 אלפיות השנייה)
אַחֵראם(
CFG
==
0x20
)
גלם
=
גלם
&~
3
;
// 10 סיביות (ההמרה אורכת 187.5 אלפיות השנייה)
אַחֵראם(
CFG
==
0x40
)
גלם
=
גלם
&~
1
;
// 11 סיביות (ההמרה אורכת 375 אלפיות שניות) // דיוק ברירת המחדל הוא 12 סיביות (ההמרה אורכת 750 מ"ש)
}
// חישבו והפקו ערכי טמפרטורה לפקח יציאת צלזיוס
=(
לָצוּף
)
גלם
/
16.0
;
פרנהייט
=
צֶלסִיוּס
*
1.8
+
32.0
;
סידורי
.
הדפס
(
"טמפרטורה ="
);
סידורי
.
הדפס
(
צֶלסִיוּס
);
סידורי
.
הדפס
(
"צֶלסִיוּס,"
);
סידורי
.
הדפס
(
פרנהייט
);
סידורי
.
println
(
"פרנהייט"
);}
אם הכל נעשה כהלכה, בחלון צג היציאה עלינו לראות משהו כזה (איור 6):
איור 6 - תוצאה של עבודה עם ספריית OneWire.h
ספריית DallasTemperature.h
ספריה זו מבוססת על הקודמת ומפשטת מעט את תהליך התכנות בגלל פונקציות מובנות יותר. לאחר ההתקנה, תהיה לך גישה ל- 14 דוגמאות של קוד מתועד היטב לכל אירוע. במסגרת מאמר זה תיחשב דוגמה לפעולה עם חיישן אחד.
התוצאה של התוכנית מוצגת באיור 7
איור №7 - התוצאה של קריאת הטמפרטורה באמצעות ספריית DallasTemperature.h
// אנו מחברים את הספריות הדרושות # כוללים # כלול // אנו מחברים את אוטובוס הנתונים לפין מספר 2 של ארדואינו # מגדירים ONE_WIRE_BUS 2 // צור מופע של הכיתה לאוטובוס שלנו וקישור אליו OneWire oneWire
(
ONE_WIRE_BUS
);
חיישני טמפרטורה של דאלאס
(&
oneWire
);
// הגדרת חלל מוגדר מראש
(
בָּטֵל
){
סידורי
.
התחל
(
9600
);
// אתחל את חיישני היציאה הטורית
.
התחל
();
// אתחל את האוטובוס
}
// מחזור עיקרי
(
בָּטֵל
){
סידורי
.
הדפס
(
"טמפרטורת קריאה ..."
);
// שלח את הפקודה לקריאת חיישנים
.
בקשת טמפרטורות
();
סידורי
.
println
(
"לקרוא"
);
סידורי
.
הדפס
(
"טמפרטורת חיישן 1:"
);
// הצג את ערך הטמפרטורה סידורי
.
הדפס
(
חיישנים
.
getTempCByIndex
(
0
));}
חיישן טמפרטורה KY-001 עם ממשק 1-חוט
חיישן זה משמש למדידת טמפרטורה מדויקת. התקשורת עם החיישן מתבצעת דרך ממשק 1-Wire [1-2], המאפשר לחבר כמה התקנים דומים ללוח Arduino באמצעות סיכה אחת של מיקרו-בקר [3-4]. המודול מבוסס על המיקרו-מעגל ds18b20 [5].
גודל מודול 24 x 15 x 10 מ"מ, משקל 1.3 גרם. מחבר בעל שלושה פינים משמש לחיבור. מגע מרכזי - ספק כוח + 5 וולט, קשר "-" - משותף, קשר "S" - מידע.
ללוח יש נורית אדומה אשר נדלקת בעת החלפת מידע.
צריכת זרם 0.6 mA במהלך חילופי מידע ו- 20 μA במצב המתנה.
חיבור חיישנים מסוג זה לארדואינו מתואר היטב במקורות רבים [6-8]. במקרה זה, היתרונות העיקריים של Arduino באים לידי ביטוי שוב - צדדיות ונוכחות של כמות עצומה של מידע התייחסות. כדי לעבוד עם החיישן, תזדקק לספריית OneWire [9]. לאחר טעינת התוכנית מ- [8] (קיימת שגיאה בגירסה הראשונה של התוכנית - אין חיבור ספרייה כלול בכותרת הקוד), תוכל לצפות במידע הבא בצג היציאה הטורית.
המחבר גם בדק את הקוד מ- [7], הכל עבד מיד, בצג היציאה הטורי תוכלו לקרוא מידע על סוג החיישן המחובר ונתוני הטמפרטורה בפועל.
באופן כללי, חיישן שימושי מאוד המאפשר היכרות עם ממשק 1-Wire בפועל. החיישן נותן את נתוני הטמפרטורה הנכונים באופן מיידי, המשתמש אינו צריך לכייל.