Project Arduino Mengukur Suhu dengan I2C DS1621


Berikut ini adalah video simulasi project Arduino Uno Proteus untuk mengukur suhu dengan menggunakan I2C bus dan dua buah DS1621 digital thermometer and thermostat.



I2C Philips mendefinisikan konsep perangkat master dan slave. Perangkat master adalah suatu perangkat yang mengatur jalur pada waktu komunikasi bekerja. Selain itu perangkat master juga mengatur signal START dan STOP juga clock. Sedangkan untuk perangkat slave akan menunggu signal dari master dan berjalan sesuai signal dan data yang dikirimkan. Perangkat master dapat mengirim data ke slave dan menerima data dari slave, tetapi slave tidak dapat berkomunikasi antar slave. Dalam project ini board Arduino Uno bertindak sebagai perangkat master, sedangkan dua buah DS1621 bertindak sebagai slave yang mengirimkan data suhu ke perangkat master. Pada protokol I2C, data dikirim secara serial melalui jalur SDA, sedangkan untuk clock dikirim melalui jalur SCL.
Untuk source code (sketch) dari project Arduino I2C dua buah DS1621 digital thermometer and thermostat ialah sebagai berikut.

/*
Program Mengukur Suhu
Arduino Uno I2C DS1621

Loki Lang
*/

#include <Wire.h>

#define DEV_ID 0x90 >> 1
#define DEV_ID2 0x9E >> 1

void setup()
{
  Serial.begin(9600);
  Wire.begin();
  Wire.beginTransmission(DEV_ID);
  Wire.write(0xAC);
  Wire.write(0x02);
  Wire.beginTransmission(DEV_ID);
  Wire.write(0xEE);
  Wire.endTransmission();



  Wire.begin();
  Wire.beginTransmission(DEV_ID2);
  Wire.write(0xAC);
  Wire.write(0x02);
  Wire.beginTransmission(DEV_ID2);
  Wire.write(0xEE);
  Wire.endTransmission();
}


void loop()
{
  int8_t firstByte;
  int8_t secondByte;
  int8_t firstByte2;
  int8_t secondByte2;
  float temp = 0;
  float temp2 = 0;
  Wire.beginTransmission(DEV_ID);
  Wire.write(0xAA);
  Wire.endTransmission();
  Wire.requestFrom(DEV_ID, 2);
  firstByte = Wire.read();
  secondByte = Wire.read();
  temp = firstByte;

  Wire.beginTransmission(DEV_ID2);
  Wire.write(0xAA);
  Wire.endTransmission();
  Wire.requestFrom(DEV_ID2, 2);
  firstByte2 = Wire.read();
  secondByte2 = Wire.read();
  temp2 = firstByte2;
  if (secondByte)
  {
    temp += 0.5;
  }
  if (secondByte2)
  {
    temp2 += 0.5;
  }
  Serial.print("Temperature 1: ");
  Serial.println(temp);
  Serial.print("Temperature 2: ");
  Serial.println(temp2);
  delay(500);
}