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;
  
}

নিচের ছবির মতো করে এলসিডিতে টেম্পারেচার দেখা যাবে।

5/5 - (1 vote)
Share with your friends
Default image
A. R
Articles: 116

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.