فهرست مطالب:

دماسنج ورود به سیستم با 2 سنسور: 3 مرحله (همراه با تصاویر)
دماسنج ورود به سیستم با 2 سنسور: 3 مرحله (همراه با تصاویر)

تصویری: دماسنج ورود به سیستم با 2 سنسور: 3 مرحله (همراه با تصاویر)

تصویری: دماسنج ورود به سیستم با 2 سنسور: 3 مرحله (همراه با تصاویر)
تصویری: آیا س*کس از پشت را دوست دارید ؟😱😂😂😱(زیرنویس فارسی) 2024, جولای
Anonim
دماسنج ورود به سیستم DIY با 2 سنسور
دماسنج ورود به سیستم DIY با 2 سنسور
دماسنج ورود به سیستم DIY با 2 سنسور
دماسنج ورود به سیستم DIY با 2 سنسور

این پروژه پیشرفت پروژه قبلی من "دماسنج ورود به سیستم DIY" است. این اندازه گیری دما را به یک کارت micro SD وصل می کند.

تغییرات سخت افزاری

من یک سنسور دما DS18B20 را به ماژول ساعت واقعی اضافه کردم ، جایی که بر روی برد مدار چاپی این دستگاه وجود دارد. و سیم مناسب را از پین "DS" RTC به D2 آردوینو اضافه کنید.

تغییرات نرم افزاری

سپس نرم افزار را اضافه و اصلاح کردم. تغییرات اصلی عبارتند از:

نمایشگر LCD دو درجه حرارت "In" و "Out" را نشان می دهد.

فایل های ثبت شده که روی کارت SD ضبط شده اند دارای دو فیلد دما "دما در" و "خروج از دما" هستند.

به دلیل سابقه طولانی تر در کارت SD ، بافرهای کار EEPROM بزرگتر بودند و در نتیجه این من دچار مشکلات درگیری حافظه شدم. تعدادی تغییر با هدف کاهش استفاده از حافظه پویا ایجاد کردم ، از جمله استفاده از آرایه های کاراکتر برای همه رشته ها به جای شیء String.

بخشی از نرم افزاری که دما را دریافت می کند دارای تغییرات عمده ای است که بیشتر آنها مربوط به تشخیص این است که کدام پروب "داخل" و کدام "خارج" است. این شناسایی بیشتر خودکار است. اگر به دلایلی کاوشگرها به اطراف چرخانده شوند ، می توان با جدا کردن پروب "out" و سپس دوباره وصل کردن آن را اصلاح کرد. من خودم این واژگونی را تجربه نکرده ام. برنامه نویس یا کاربر نیازی به تایپ آدرس سنسور ندارد ، نرم افزار به تنهایی آدرس سنسور دما را کشف می کند.

با توجه به آزمایشی که انجام داده ام ، شناسایی پروبهای دما و پاسخ به حذف و جایگزینی کارت SD هنوز به طور یکپارچه کار می کند.

مرحله 1: توسعه نرم افزار

این مرحله نرم افزار کامل پروژه تکمیل شده را در اختیار شما قرار می دهد. من آن را با استفاده از Arduino IDE 1.6.12 کامپایل کردم. از 21 ، 400 بایت حافظه برنامه (69)) و 1 ، 278 بایت حافظه پویا (62)) استفاده می کند.

من به این امید اظهارنظرهایی را در کد قرار داده ام که روشن می کند چه اتفاقی می افتد.

مرحله 2: کار با دو سنسور دما - جزئیات

این نرم افزار از کتابخانه "OneWire" استفاده می کند. از هیچ "DallasTemperature" یا کتابخانه های مشابه استفاده نمی کند. در عوض دستورات و داده های سنسورهای دما توسط طرح انجام می شود و به راحتی قابل مشاهده و درک است. من یک لیست مفید از دستورات کتابخانه OneWire در پیدا کردم

www.pjrc.com/teensy/td_libs_OneWire.html

هنگامی که دو (یا بیشتر) سنسور دما وجود دارد ، تشخیص اینکه کدام یک کدام است ، ضروری می شود.

من دو سنسور خود را "داخل" و "خارج" صدا کردم ، که معمولاً برای واحدهای تجاری که دارای سنسور در ماژول نمایشگر هستند معمولاً "داخل" است ، و سنسور دیگر را روی کابل قرار دادم تا بتوان آن را در طرف دیگر قرار داد. از یک دیوار خارجی و بنابراین "خارج" باشد.

روش معمول برای شناسایی پروب های مختلف ، کشف آدرس دستگاه و قرار دادن آنها در نرم افزار به همراه برچسب شناسایی است. همه پروژه های دیگری که دیده ام از این روش استفاده می کنند ، خواه از کتابخانه DallasTemperature استفاده کنند یا نه.

قصد من این بود که نرم افزار باید به طور خودکار سنسورها را شناسایی کرده و آنها را به درستی "در" و "خارج" اختصاص دهد. این کار با قرار دادن آنها روی پین های جداگانه آردوینو به اندازه کافی آسان است. در این پروژه ، A0 تا A3 و A6 و A7 همه بدون استفاده هستند ، بنابراین یکی از این موارد می تواند در این مورد استفاده شود. با این حال ، من موفق شدم کارکرد شناسایی خودکار با سنسورها را در یک گذرگاه OneWire انجام دهم.

این طوری کار می کند.

کتابخانه OneWire دارای فرمان "OneWireObject.search (آدرس)" است که در آن "آدرس" یک آرایه از 8 بایت است و "OneWireObject" نام نمونه ای از شیء OneWire است که قبلاً ایجاد شده است. می تواند هر نامی که دوست دارید داشته باشد. معدن من "ds" نامیده می شود. وقتی این دستور "جستجو" را صادر می کنید ، کتابخانه OneWire سیگنال دهی را روی گذرگاه یک سیم انجام می دهد. اگر سنسور پاسخگو را پیدا کرد ، مقدار بولین "TRUE" را برمی گرداند و آرایه "آدرس" را با شناسه منحصر به فرد 8 بایت سنسور پر می کند. این شناسه شامل یک کد خانواده (در ابتدا) و یک چک چک (در پایان) است. در بین 6 بایت است که به طور منحصر به فرد سنسور را در خانواده خود شناسایی می کند.

هر بار که این فرمان داده می شود ، یک نتیجه (آدرس و بازگشت TRUE) بدست می آید و در تمام دستگاه های گذرگاه OneWire دوچرخه سواری می کنید. هنگامی که هر دستگاهی پاسخ داد ، دفعه بعد که "جستجو" صادر می شود ، بازگشت "FALSE" است ، که نشان می دهد هر دستگاهی در اتوبوس قبلاً پاسخ داده است. اگر "جستجو" دوباره صادر شود ، اولین دستگاه دوباره پاسخ می دهد - و همینطور به طور نامحدود. دستگاهها همیشه به یک ترتیب پاسخ می دهند. ترتیب پاسخ ها بر اساس شناسه دستگاه های موجود در گذرگاه OneWire است. به نظر می رسد یک جستجوی دودویی است که از مهمترین بیت های شناسه های دستگاه شروع می شود. پروتکل مورد استفاده برای یافتن این شناسه ها بسیار پیچیده است و در صفحات 51 - 54 سند "کتاب استانداردهای iButton" که یک سند pdf در https://pdfserv.maximintegrated.com/fa/an/AN937.pd است توضیح داده شده است …

من این فرایند جستجو را با 1 تا 11 سنسور در یک گذرگاه واحد آزمایش کردم ، و متوجه شدم دستور پاسخ برای مجموعه ای از دستگاهها همیشه یکسان است ، اما وقتی دستگاه جدیدی را به انتهای گذرگاه اضافه کردم ، راهی وجود نداشت من می توانم پیش بینی کنم که در ترتیب جستجو کجا ظاهر می شود. به عنوان مثال ، سنسور یازدهم که اضافه کردم در موقعیت شماره 5 قرار گرفت. و اولین سنسوری که در اتوبوس گذاشتم آخرین حسگر در ترتیب جستجو بود.

در این پروژه با دو سنسور ، یکی از آنها در محل ماژول RTC لحیم شده است. یکی دیگر با استفاده از یک سربرگ مرد روی تخته و یک سربرگ زن روی کابل متصل شده است. به راحتی می توان آن را جدا کرد.

وقتی سنسور روی کابل (سنسور "خارج") جدا می شود ، فرمان "جستجو" متناوب "TRUE" و "FALSE" را تولید می کند.

وقتی سنسور روی کابل متصل می شود ، فرمان "جستجو" یک چرخه 3 مرحله ای ایجاد می کند که دو "TRUE" و یک "FALSE" بر می گرداند.

روش من این است که 1 ، 2 یا 3 دستور "جستجو" صادر کنم ، تا زمانی که یک نتیجه FALSE بازگردانده شود. سپس 2 دستور دیگر "جستجو" صادر می کنم. اگر دومی خراب شود (یعنی FALSE) من می دانم که فقط یک سنسور در گذرگاه وجود دارد و آن سنسور "in" است. هویت دستگاه ضبط شده و به حسگر "in" اختصاص داده می شود.

بعداً ، اگر هر دو بازگشت اول و دوم واقعی باشند ، من می دانم که دو سنسور در اتوبوس وجود دارد. من بررسی می کنم که کدام یک از آنها دارای هویت برابر با سنسور "in" است و دیگری را به عنوان سنسور "خارج" اختصاص می دهم.

نکته جزئی دیگر این است که جمع آوری نتایج حاصل از دو سنسور با ارسال "شروع تبدیل" توسط دستور "skip ROM" شناخته می شود. ما این امکان را داریم که دستورات را به یک دستگاه واحد (با استفاده از شناسه منحصر به فرد آن) یا به همه دستگاه های موجود در گذرگاه (رد شدن از ROM) ارسال کنیم. کد شبیه به این است:

ds.reset ()؛ //

// ارسال دستور "skip ROM" (بنابراین دستور بعدی در هر دو سنسور کار می کند) ds.write (0xCC) ؛ // رد کردن دستور ROM ds.write (0x44 ، 0) ؛ // شروع تبدیل در هر دو پروب temperature_state = wait_convert؛ // به حالت تاخیر بروید

وقتی زمان تأخیر مورد نیاز به پایان رسید ، دما از هر سنسور به صورت جداگانه دریافت می شود. در اینجا کد سنسور دوم (یعنی سنسور OUT) آمده است.

if (flag2) {

present = ds.reset ()؛ ds.select (DS18B20_addr_out) ؛ ds.write (0xBE) ؛ // Scratchpad داده های کاوش "خارج" را بخوانید [0] = ds.read ()؛ داده [1] = ds.read ()؛ temperature_out = (داده [1] << 8) + داده [0] ؛ temperature_out = (6 * temperature_out) + temperature_out / 4؛ // ضرب در 6.25} else {// نه flag2 - یعنی سنسور خروجی متصل نیست temperature_out = 30000؛ // در صورت کار نکردن سنسور دما در 300.00 درجه سانتی گراد} // پایان if (flag2)

من بیشتر این نرم افزار را در یک طرح مستقل که فقط سنسورهای دما در آن بود ، بدون عارضه پشتیبانی از LCD ، RTC و کارت SD کار کردم. این طرح توسعه در فایل زیر موجود است.

مرحله 3: نتایج اولیه

نتایج اولیه
نتایج اولیه

این نمودار ترکیبی از دو روز اول مطالعه است.

توصیه شده: