Thermometer with Arduino & DS18B20 waterproof sensor | ওয়াটারপ্রুফ সেন্সর দিয়ে থার্মোমিটার তৈরী
এই পর্যন্ত কয়েকটি থার্মোমিটারই আমরা তৈরী করেছি। কোনো গায়ের জ্বর মাপার উপযোগী, কোনোটা ঘরের তাপমাত্রা মাপার উপযোগী। কিন্তু আমাদের যদি এমন একটি থার্মোমিটার তৈরীর প্রয়োজন হয় যেটা দিয়ে ঘরের মধ্যে বসেই ঘরের বাইরের তাপমাত্রা মনিটর করা যাবে? যেমন ধরুন, শীতপ্রধান দেশগুলোতে তুষারপাতের সময় যদি তাপমাত্রা রেকর্ড করার প্রয়োজন হয়, বাইরে কাজ করতে করতে ফ্রস্টবাইট হবার আগেই একটি অ্যালার্ম বাজিয়ে কাউকে সতর্ক করার দরকার পড়ে, কিংবা যদি কোথাও পানির নিচের তাপমাত্রা পরিমাপ করতে হয়, কিংবা ফ্রিজের ভেতরের তাপমাত্রা ডোরের ডিসপ্লেতে দেখাতে হয়; তখন কী উপায়?
এসব কাজের জন্যই আছে Waterproof DS18B20 Digital Temperature Sensor for Arduino। এই টেম্পারেচার সেন্সরটির রয়েছে একটি লম্বা প্রোব। এই প্রোবের মাথা যেখানে প্রবেশ করানো থাকবে সেখানকার তাপমাত্রাই মাপা যাবে।
এর জন্য অবশ্যই তিন তারবিশিষ্ট এই টেম্পারেচার সেন্সরকে যুক্ত করতে হবে কোনো মাইক্রোকন্ট্রোলার বা আরডুইনো এবং উপযুক্ত ডিসপ্লের সাথে।এই টিউটোরিয়ালে আমরা এমনই একটি ডিজিটাল থার্মোমিটার তৈরী করব।
প্রয়োজনীয় যন্ত্রপাতি |
পরিমাণ |
প্রডাক্ট লিংক |
Arduino UNO R3 |
1 |
এখানে ক্লিক করুন |
16×2 LCD with header |
1 |
এখানে ক্লিক করুন |
Waterproof DS18B20 Digital Temperature Sensor for Arduino |
1 |
এখানে ক্লিক করুন |
Volume POT-103 |
1 |
এখানে ক্লিক করুন |
4.7K Ohm 1/4W resistor |
1 |
এখানে ক্লিক করুন |
Male to male jumper |
13 |
এখানে ক্লিক করুন |
Male to female jumper |
2 |
এখানে ক্লিক করুন |
Breadboard |
1 |
এখানে ক্লিক করুন |
Soldering iron |
1 |
এখানে ক্লিক করুন |
Solder lead |
1 |
এখানে ক্লিক করুন |
সার্কিটঃ প্রথমে টেম্পারেচার সেন্সরের তিনটি তারের সাথে তিনটি মেল-টু মেল জাম্পার সল্ডার করি।
তারপর টেম্পারেচার সেন্সর ও আরডুইনোর মধ্যে নিচের কানেকশনগুলো সম্পন্ন করি।
DS18B20 |
Arduino |
Signal |
7, One leg of the 4.7 K resistor. |
VCC |
5V,Another let of the 4.7 K resistor. |
GND |
GND |
এলসিডি ও আরডুইনোর মধ্যে নিচের কানেকশনগুলো সম্পন্ন করি।
Arduino |
LCD |
GND |
VSS, K, 1st pin of volume POT |
5V |
VDD, A, 2nd pin of volume POT |
V0 connected to 3rd pin of the volume POT |
|
12 |
RS |
GND |
RW |
11 |
E |
5 |
D4 |
4 |
D5 |
3 |
D6 |
2 |
D7 |
আমাদের পুরো সেট আপটি ছিল এরকমঃ
কোডঃ DS18B20 1-wire communication প্রোটোকলের মাধ্যমে মাইক্রোকন্ট্রোলার ও আরডুইনোসমূহের সাথে ডেটা আদান-প্রদান করে।আরডুইনো উনোর সাথে এই সেন্সরকে কানেক্ট করতে চাইলে প্রথমে onewire.h নামক লাইব্রেরি ইন্সটল করে নিতে হবে। লাইব্রেরিটি এখান থেকে ডাউনলোড করে ইন্সটল করুন। তারপর নিচের কোডটি কম্পাইল করে আপলোড করুন।
#include <LiquidCrystal.h> #include <OneWire.h> int DS18S20_Pin = 7; //DS18S20 Signal pin on digital 7 //Temperature chip i/o OneWire ds(DS18S20_Pin); // on digital pin 7 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup(void) { Serial.begin(9600); lcd.begin(16, 2); // set up the LCD's number of columns and rows: } void loop(void) { float temperature = getTemp(); if(temperature==-1000) { lcd.clear(); lcd.print("Error"); } else{ lcd.clear(); lcd.print("**Temperature**"); float farenhiet=temperature+32; Serial.println(temperature); lcd.setCursor(0,1); lcd.print(temperature);//Show the temperature in LCD lcd.print((char)223);// command for printing ° sign in LCD Ref:http://forum.arduino.cc/index.php?topic=19002.0 lcd.print("C");// C for Celcius lcd.setCursor(9,1); lcd.print(farenhiet);//Show the temperature in LCD lcd.print((char)223);// command for printing ° sign in LCD Ref:http://forum.arduino.cc/index.php?topic=19002.0 lcd.print("F");// C for Celcius delay(50); //just here to slow down the output so it is easier to read } } float getTemp(){ //returns the temperature from one DS18S20 in DEG Celsius byte data[12]; byte addr[8]; if ( !ds.search(addr)) { //no more sensors on chain, reset search ds.reset_search(); return -1000; } if ( OneWire::crc8( addr, 7) != addr[7]) { Serial.println("CRC is not valid!"); return -1000; } if ( addr[0] != 0x10 && addr[0] != 0x28) { Serial.print("Device is not recognized"); return -1000; } ds.reset(); ds.select(addr); ds.write(0x44,1); // start conversion, with parasite power on at the end byte present = ds.reset(); ds.select(addr); ds.write(0xBE); // Read Scratchpad for (int i = 0; i < 9; i++) { // we need 9 bytes data[i] = ds.read(); } ds.reset_search(); byte MSB = data[1]; byte LSB = data[0]; float tempRead = ((MSB << 8) | LSB); //using two's compliment float TemperatureSum = tempRead / 16; return TemperatureSum; }
নিচের ছবির মতো করে এলসিডিতে টেম্পারেচার দেখা যাবে।