NS.One dan Sensor Suhu TPA81

TPA81 adalah thermopile array yang dapat men-deteksi infrared pada jangkauan 2 – 22 µm. Memiliki 8 buah thermopile yang disusun dalam sebuah baris dan dapat mengukur suhu absolut dari 8 titik secara simultan. Masing-masing thermopile memiliki field of view 5.12º terhadap sumbu horisontal – total 41º, dan 6º terhadap sumbu vertikal.

Sensor ini dapat men-deteksi nyala lilin pada jarak hingga 2 meter, juga objek panas lainnya, seperti manusia dan cangkir berisi kopi panas. Sensor ini tidak dipengaruhi oleh cahaya sekitarnya.NS.One dan TPA81Terdapat 10 buah register, yang masing-masing memberikan informasi terkait. Hanya register 0 dan 1 yang dapat ditulisi. Register 0 adalah command register dan digunakan untuk mengatur posisi servo dan merubah alamat I2C TPA81. Pembacaan pada register 0 akan memberikan informasi software revision. Menulis ke register 1 akan men-set servo range, dan membacanya akan memberikan informasi ambient temperature.

 

Register

Read

Write

0

Software Revision

Command Register

1

Ambient Temperature °C

Servo Range (V6 or higher only)

2 Pixel 1 Temperature °C N/A
3 Pixel 2 N/A
4 Pixel 3 N/A
5 Pixel 4 N/A
6 Pixel 5 N/A
7 Pixel 6 N/A
8 Pixel 7 N/A

9

Pixel 8

N/A

#include <Wire.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(24,25,26,28,29,30,31);

#define ADDRESS  0x68  // Address of TPA81
#define SOFTREG  0x00  // Byte for software version
#define AMBIENT  0x01  // Byte for ambient temperature

int temperature[] = {0,0,0,0,0,0,0,0};   // Array to hold temperature data

void setup(){
  Wire.begin();
  lcd.begin(16,2);
  delay(100);                          // Wait to make sure everything is powerd up
  byte software = getData(SOFTREG);    // Get software version 
  lcd.print("TPA81 Example  V:");
  lcd.print(software);                 // Print software version to the screen
  delay(2000);
}

void loop(){
  for(int i = 0; i < 8; i++)           // Loops and stores temperature data in array
    temperature[i] = getData(i+2);
  for(int x = 0; x < 8; x++){          // Loop prints each member of temperature to LCD followed by a space
    lcd.print(temperature[x]);
    lcd.print(" ");
    delay(50);                         // Wait before printing next value to give time for everything to be sent
  }
  int ambiantTemp = getData(AMBIENT);  // Get reading of ambient temperature and print to LCD
  lcd.print("Ambient: ");
  lcd.print(ambientTemp);
}

byte getData(byte reg){             // Function to receive one byte of data from TPA81
  Wire.beginTransmission(ADDRESS);  // Begin communication with TPA81
  Wire.write(reg);                  // Send reg to TPA81
  Wire.endTransmission();
  Wire.requestFrom(ADDRESS, 1);     // Request 1 byte
  while(Wire.available() < 1);      // Wait for byte to arrive
  byte data = Wire.read();          // Get byte
  return(data);                     // return byte
}

Bagaimana coding menggunakan CodeVisionAVR, mengingat board NS.One pun dapat diprogram dengan software yang satu ini?

unsigned char tpa81Read(unsigned char reg)
{
  unsigned char data;
  delay_ms(40); //wait for 40mS to get accurate reading
  i2c_start();
  i2c_write(0xD0);
  i2c_write(reg);
  i2c_start();
  i2c_write(0xD1);
  data = i2c_read(0);
  i2c_stop();
  return data;
}

void main()
{
  unsigned char i, data;
  i2c_init();
  while(1) {
    for ( i = 2; i < 10; i++ ) 
      data = tpa81Read(i); 
  }
}

NEXT SYSTEM
Microcontroller & Robotic Learning Center
ITC Kosambi Ruko F2
Jl. Baranang Siang 6-8
Bandung 40112
Tel. (022) 4222062, (022) 70775874

Email : info@nextsys.web.id