- bezdotykowy pomiar temperatury obiektów za pomocą cyfrowego czujnika podczerwieni,
- zakres pomiaru temperatury obiektu: –20°C do +100°C,
- dokładność pomiaru: ±1°C przy 25°C,
- komunikacja: I²C,
- napięcie zasilania: 2,7...5,5 V,
- pobór prądu: 1 mA.
Budowa wewnętrzna czujnika ZTPD-2210 pokazana została na rysunku 1, a schemat modułu można zobaczyć na rysunku 2.
Termometr zmontowany jest na niewielkiej, dwustronnej płytce drukowanej zgodnej z formatem Grove. Rozmieszczenie elementów pokazano na rysunku 3, a zmontowany moduł na fotografii tytułowej. Montaż nie wymaga szczegółowego opisu. Należy jedynie zwrócić uwagę na zachowanie standardów ESD, gdyż ZTPD-2210 jest elementem bardzo czułym na ładunki statyczne.
Sprawdzenie działania modułu można najprościej wykonać przy użyciu Arduino. Moduł wymaga zasilania z zakresu 2,7...5,5 V, pobór prądu podczas przetwarzania wynosi ok. 1 mA. Czujnik widoczny jest na magistrali I²C pod adresem 0x38, a odczyt temperatury sprowadza się do odebrania 7 bajtów, w których zakodowana jest informacja o temperaturach obiektu i otoczenia, dostępna do odczytu po inicjalizacji czujnika komendą 0xAA. Szczegóły ramki danych można zobaczyć na rysunku 4.
Odczytane wartości wymagają przeliczenia:
Tobiektu=(Byte(0)Byte(1)Byte(2))/224·130–20
Totoczenia=(Byte(3)Byte(4)Byte(5))/224·105–20
Przykładowy szkic realizujący odczyt przy użyciu Arduino pokazano na listingu 1.
void setup() {
Serial.begin(9600);
Wire.begin();
}
void loop() {
float objTemp, ambTemp;
readTemperature(objTemp, ambTemp);
Serial.print(„Tobj:”);
Serial.print(objTemp);
Serial.print(„,Tamb:”);
Serial.print(ambTemp);
Serial.println();
delay(1000);
}
void readTemperature(float &objTemp, float &ambTemp) {
uint8_t data[7];
Wire.beginTransmission(0x38);
Wire.write(0xAA);
Wire.endTransmission();
delay(100);
Wire.requestFrom(0x38, 7);
if (Wire.available() == 7) {
for (int i = 0; i < 7; i++) {
data[i] = Wire.read();
}
// Obliczenie temperatury otoczenia (Bytes 6-4)
uint32_t ambTempRaw = ((uint32_t)data[4] << 16) | ((uint32_t)data[5] << 8) | data[6];
ambTemp = (ambTempRaw / 16777216.0) * 105.0 – 20.0;
// Obliczenie temperatury obiektu (Bytes -1)
uint32_t objTempRaw = ((uint32_t)data[1] << 16) | ((uint32_t)data[2] << 8) | data[3];
objTemp = (objTempRaw / 16777216.0) * 130.0 – 20.0;
}
}
Listing 1. Szkic testowy ZTPD-22100
Po wgraniu programu, w okienku monitora portu szeregowego wyświetlane będą odczyty temperatur obiektu i otoczenia. Należy pamiętać o kierowaniu czujnika pod kątem prostym do obiektu oraz zapewnić możliwie niewielką odległość pomiarową. Jeżeli testowanie przebiegło pomyślnie, moduł można zastosować we własnej aplikacji.
Adam Tatuś, EP
- R1, R2: 10 kΩ (SMD 0603, 5%)
- C1: 100 nF (SMD 0603, X7R, 10 V)
- U1: ZTPD-2210
- I²C: złącze Grove 4-pinowe