ساخت مدار کنترل دمای محیط با سنسور DS18B20 و آردوینو
یک دماسنج دیجیتالی بسازیم که علاوه بر نمایش دما بتوانیم دمای محیط را نیز کنترل کنیم. در مدار طراحی شده برای این پروژه، جهت اندازه گیری دما از سنسور دما DS18B20 که یک سنسور دیجیتالی اندازه گیری دما بسیار دقیق می باشد به کمک آردوینو استفاده کردیم. همچنین پس از اندازه گیری دما توسط سنسور دما DS18B20 برای نمایش میزان دمای اندازه گیری شده از ماژول سون سگمنت 4 رقمه TM1637 به پردازش آردوینو استفاده شده است.
در طراحی مدار این پروژه یک رله نیز تعبیه شده است که در هنگامیکه دما از مقدار تعیین شده بیشتر شود، رله فعال می شود و تا مادامی که دما از مقدار تعیین شده ما بیشتر باشد رله روشن می ماند
وسایل موردنیازبرای ساخت یک دماسنج کامل:
سنسور دما DS18B20
این سنسور دما با خروجی دیجیتال است و شما به راحتی تنها با یک مقاومت 4.7 کیلو میتوانید آنرا به میکرو وصل کنید و همچنین توسط پروتکل ۱Wire امکان اتصال به میکروکنترلر را دارد.پایه شماره 1 زمین – پایه شماره 2 به میکرو – پایه شماره 3 به مثبت منبع که با یک مقاومت به پایه شماره 2 نیز وصل میشود .
اطلاعاتی درمورد سنسورDS18B20
- ولتاژ تغذيه:3 تا 5.5 ولت
- ارسال دیتا از طریق یک پین
- دماي قابل اندازه گيري : 55- تا 125+ درجه سانتی گراد
- حداکثر زمان تبدیل و پاسخگویی : 750 میلی ثانیه
- شناسه اختصاصي براي هر سنسور
- دقت سنسور در محدوده -10 تا +85 درجه سانتی گراد : ±0.5°C [۳]
ارتباط اين سنسور با آردوينو از طريق پروتكل 1 سيمه 1wire برقرار ميشود.بنابراين ميتوان چندين سنسور را تنها از طريق 1 سيم مشترك به آردوينو متصل كرد. خروجی به صورت دیجیتال و با دقت ۱۲ بیت قابل دسترس است .بنابراين ميتوان دما را با دقت 0.0625 درجه سانتيگراد اندازه گيري كرد. از جمله کاربردهای این سنسور می توان به کنترل محیط زیست، سیستم های کنترل دمای داخل ساختمان، تجهیزات و یا ماشین آلات، و نظارت بر روند و سیستم های کنترل اشاره کرد.

سون سگمنت
-seven segment دارای پایههای زیادی هستند ولی با استفاده از ماژول سگمنت 7Segment 4 Digit با تراشه TM1637 تنها با 4 پایه به صورت I2C میتوان آن را کنترل کرد. با استفاده از آی سی TM1637 خروجی ماژول سگمنت 7Segment 4 Digit با تراشه TM1637 آند مشترک به صورت I2c تبدیل شده است.
ماژول سون سگمنت 4 رقمی همراه با درایور TM1637، ماژولی است که با استفاده از آن میتوانید با اتصال پروتکل I2C، تا 4 رقم که تنها از دو پین برای ارتباط با میکروکنترلر شما استفاده میکند؛ این ماژول به ازای هر سون سگمنت از یک پین استفاده میکند که بدان معنی است که اگر به طور مستقیم با میکروکنترلر در ارتباط باشید، حداقل به هفت پین احتیاج دارید. خوشبختانه راهی برای استفاده از نمایشگر سون سگمنت 4 رقمی و استفاده از تنها چهار پین از آردوینو شما وجود دارد. TM1637 یک درایور LED سون سگمنت است
که به صورت سریال ارتباط برقرار می کند و می تواند تا چهار رقم را کنترل کند. علاوه بر پین های برق، فقط به یک پین داده و یک پین کلاک نیاز دارد. میتواند با میکروکنترلرهای مختلف یکپارچه شود..

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

آردوینو
(به انگلیسی: Arduino) یک پلتفرم سختافزاری و نرمافزاری متنباز است. پلتفرم آردوینو شامل یک میکروکنترلر تکبردی متنباز است که قسمت سختافزار آردوینو را تشکیل میدهد. علاوه بر این، پلتفرم آردوینو یک نرمافزار آردوینو IDE که به منظور برنامهنویسی برای بردهای آردوینو طراحی شدهاست و یک بوت لودر نرمافزاری که بر روی میکروکنترلر بارگذاری میشود را در بر میگیرد.
آموزش آردوینو مقدماتی تا حرفه ای بخش اول (آشنایی با آردوینو)
آموزش توابع آردوینو (توابع پایه)
فن کیس 12 سانتی متری
لید فشاری و بردبرد و جامپر
مراحل ساخت
مرحله اول : اتصال دماسنج
VDD یا VCC سنسور دمای DS18B20 را به پایه دیجیتال پایه شماره 8 برد آردوینو متصل کنید.
DQ سنسور دمای DS18B20 را به پایه دیجیتال پایه شماره 9 برد آردوینو متصل کنید.
GND سنسور دمای DS18B20 را به پایه دیجیتال پایه شماره 10 برد آردوینو متصل کنید.
یک سر مقاومت 4/7 کیلو اهمی را به پایه دیجیتال شماره 8 برد آردوینو متصل کنید.
سر دیگر مقاومت 4/7 کیلو اهمی را به پایه دیجیتال شماره 9 برد آردوینو متصل کنید
مرحله دوم : اتصال کلید به برد آردوینو
از این کلید برای ورود به منوی تنظیمات و تنظیم مقدار دمای دلخواه جهت کنترل دمای محیط بر حسب آن، استفاده می شود. که می توانید آنرا طبق توضیحات و نقشه شماتیک زیر به برد آردوینو متصل کنید.
یکی از پایه های تک سوئیچ را به پایه GND بر روی برد آردوینو متصل کنید.
پایه دیگر تک سوئیچ را به پایه دیجیتال شماره 12 بر روی برد آردوینو متصل کنید.
مرحله سوم : اتصال ماژول رله 5 ولت 1 کانال به برد آردوینو
- پایه GND ماژول رله را به پایه GND بر روی برد آردوینو متصل کنید؛
- پایه +5V یا VCC ماژول رله را به پایه 5V بر روی برد آردوینو متصل کنید؛
- در نهایت پایه IN ماژول رله را به پایه دیجیتال شماره 5 برد آردوینو متصل کنید؛
مرحله چهارم : اتصال سون سگمنت به آردوینو
سون سگمنت رابه ولتاژ 5 ولت وصل نموده سپس دو پایه دیتا کلک رابه 2و آدی او را به 3 وصل می کنیم vcc و grand

مرحله پنجم: نصب کتابخانه های TM1637.h و DallasTemperature.h و OneWire.h و در نرم افزار آردینو
در مرحله ششم : برنامه را آپلود میکنیم
//********************Temp Control Relay int PinRelay = 5; //********************Display int PinClkLcd = 2; int PinDioLcd = 3; #include <TM1637.h> #define CLK PinClkLcd #define DIO PinDioLcd TM1637 Display1(CLK, DIO); //********************Temp int PinVccTemp = 8; int PinDataTemp = 9; int PinGndTemp = 10; #include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS PinDataTemp OneWire oneWire(ONE_WIRE_BUS); DallasTemperature Temp(&oneWire); int8_t Digitos[] = {8, 8, 8, 8}; int Temp_IN; int TempSettings = 33; //********************Switch int PinSW = 12; int TimeSW; int TimeDisplay; boolean Key; void setup() { Temp.begin(); Display1.set(7); Display1.init(); Display1.display(Digitos); Display1.point(POINT_OFF); pinMode(PinSW, INPUT_PULLUP); pinMode(PinRelay, OUTPUT); pinMode(PinVccTemp, OUTPUT); pinMode(PinGndTemp, OUTPUT); digitalWrite(PinRelay, HIGH); digitalWrite(PinVccTemp, HIGH); Temp.requestTemperatures(); delay(1000); } void loop() { Temp.requestTemperatures(); Temp_IN = Temp.getTempCByIndex(0); int8_t Digit2 = Temp_IN % 10 ; int8_t Digit1 = (Temp_IN % 100) / 10 ; Digitos[3] = 12 ; Digitos[2] = Digit2 ; Digitos[1] = Digit1 ; Digitos[0] = 19 ; Display1.display(Digitos); while (digitalRead(PinSW) == 0) { TimeSW++; if (TimeSW >= 3000) Settings(); delay(1); } TimeSW = 0; if (Temp_IN > TempSettings) digitalWrite(PinRelay, LOW); if (Temp_IN < TempSettings) digitalWrite(PinRelay, HIGH); } void Settings() { TimeSW = 0; Key = 1; while (true) { TimeSW++; TimeDisplay++; int8_t Digit2 = TempSettings % 10 ; int8_t Digit1 = (TempSettings % 100) / 10 ; if (TimeDisplay < 100) { Digitos[3] = 12 ; Digitos[2] = Digit2 ; Digitos[1] = Digit1 ; } else { Digitos[3] = 19 ; Digitos[2] = 19 ; Digitos[1] = 19 ; } Digitos[0] = 19 ; if (TimeDisplay > 200) TimeDisplay = 0; Display1.display(Digitos); if (digitalRead(PinSW) == 0 && Key == 0) { Key = 1; TimeSW = 0; TempSettings++; if (TempSettings > 99 ) TempSettings = 0; } if (digitalRead(PinSW) == 1 && Key == 1)Key = 0; if (TimeSW >= 3000) break; delay(1); } TimeSW = 0; }
مرحله هفتم: راه اندازی پروژه
برد آردوینو را به صورت کامل از کامپیوتر جدا کنید.
توسط یک آداپتور 12 ولت DC با حداقل جریان 500 میلی آمپر برد آردوینو را راه اندازی کنید.
در صورتیکه در هنگام ساخت پروژه، تمامی مراحل قبل را به درستی انجام داده باشید باید دمای محیط را بر روی نمایشگر سون سگمنت مشاهده کنید، در حالت پیش فرض مقدار دمای کنترل محیط بر روی عدد 33 درجه سانتی گراد تنظیم شده است، این به این معنا است که اگر دمای محیط از 33 درجه بیشتر شود رله روشن می شود و اگر دما محیط کمتر از 33 درجه شود رله خاموش می شود.
مرحله هشتم: تغییر مقدار دمای کنترل محیط
کلید فشاری را به مدت 3 ثانیه نگه دارید، تا زمانیکه عدد دمای کنترل فعلی به صورت چشمک زن بر روی نمایشگر سون سگمنت ظاهر شود.
حال می توانید با هر بار فشار کلید، مقدار دمای مورد نظر خود را انتخاب کنید.
پس از انتخاب دمای مورد نظر برای ذخیره و اعمال تنظیم، تنها کافی است به مدت حداقل 3 ثانیه به کلید دست نزنید.
سلام..متاسفانه این کد مدام خطا میده.. ظاهرا Display1 درست تعریف نشده.. ممنون اگر راهنمایی بفرمایید
‘class TM1637’ has no member named ‘set’; did you mean ‘setDp’?
سلام کد مشکلی ندارد؛ احتمالا کتابخانه دیگری نصب کردید، پیشنهاد میکنم کتابخانه نصبی رو حذف کنید و کتابخانه های دیگر رو تست کنید یا توابع را مطابق کتابخانه نصبی تغییر بدهید!
سلام
این قسمت از کد برای بنده خطا میده لطفا راهنماییم کنید چطور درستش کنم ماژول سون سگمنت هم روشن نمیشه وقتی این قسمت را پاک می کنم با اینکه کد ها بر روی آردوینو آپلود میشه
سلام، قسمتی از برنامه اشتباه روی سایت قرار گرفته بود، الان اصلاح کردم لطفا مجدد برنامه رو تست کنید!
لطفا راهنماییم کنید
سلام
کد برای من در این قسمت خطا میده
;Display1.display(Digitos) چرا؟ این قسمت از کد هم که پاک میکنم
آپلود میشه ولی ماژول سون سگمنت هنوز خاموشه!!!
سلام وقت بخیر ممنون از آموزش بسیار عالیتون سوالی از حضورتون داشتم من اگه بخوام یه کولر رو با این رله روشن کنم به کنتاکتور نیاز دارم و خروجی این رله رو باید به پایه فرمان کنتاکتور وصل کنم؟
سلام ، بله میتونید از خروجی رله به عنوان فرمان کنتاکتور استفاده کنید
البته برای کولر آبی نیازی به کنتاکتور نیست و میتونید به کمک جایگزینی رله قوی تر خروجی لازمه رو دریافت کنید.