
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.Terdapat 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