Cum se construiește o cameră video termică pe 8-biți

by donpedro

În Arizona, șoferii care circulă pe contrasens pe autostradă reprezintă o problemă publică în creștere. Acest lucru este rezultatul oboselii sau a neatenției conducătorilor auto, adeseori aceștia ajungând pe contrasens, punând în pericol atât viața lor, cât și a celorlalți participanți la trafic. Pentru a combate condusul incorect, Departamentul de Transport din Arizona construiește și testează un sistem cu detecție termică a conducătorului auto, care se află pe sensul invers de mers al autostrăzii. Acest sistem, pe lângă detecția vehiculelor care se deplasează în direcția greșită, au rolul de a alerta atât poliția, cât și ceilalți participanți la trafic în legătură cu pericolul. Camerele termice sunt amplasate de-a lungul autostrăzii și pe rampele pentru accelerare de la intrarea pe aceasta. În momentul în care un vehicul care circulă incorect este detectat, camerele termice îl vor urmări și vor trimite către poliție coordonatele de localizare ale vehiculului. De asemenea, ceilalți șoferi vor fi notificați prin afișarea unor mesaje sugestive pe panourile digitale amplasate pe autostradă și atenționați cu ajutorul indicatoarelor luminoase.

O cameră termografică, cunoscută și sub numele de cameră cu infraroșu (IR) sau cameră termică, utilizează radiații infraroșii pentru a crea o imagine pe care o putem vedea în spectrul luminii vizibile. Camerele termice au fost inițial dezvoltate pentru aplicații militare în timpul războiului din Coreea. Astăzi, acestea sunt utilizate în aplicații militare, comerciale, industriale și personale.

Adesea, aceste camere sunt proiectate folosind microprocesoare de ultimă generație, microcontrolere (MCU) pe 16- sau 32-biți sau o combinație a celor două. Deoarece lucrez pentru grupul de aplicații pe 8-biți de la Microchip Technology, am vrut să văd dacă este posibil să construiesc o cameră termică ieftină, cu rezoluție mică, utilizând un microcontroler pe 8-biți.

Radiația electromagnetică

Pentru înțelegerea modului în care funcționează o cameră termică sunt necesare cunoștințe de bază despre radiațiile electromagnetice și infraroșii.

Toată materia normală emite radiații electromagnetice, atunci când temperatura sa este peste zero absolut (-273,15°C). Această radiație, cunoscută și sub numele de radiație termică, reprezintă conversia energiei termice a materiei în energie electromagnetică și poate include atât radiații vizibile, cât și radiații infraroșii.

Radiația vizibilă sau lumina vizibilă este radiația electromagnetică vizibilă pentru ochiul uman, aceasta fiind (tipic) definită ca având lungimi de undă cuprinse între 400 și 700 nanometri (nm). Radiația infraroșie este invizibilă pentru ochiul uman și este definită ca având lungimi de undă variind de la 700 nm la 1 milimetru (mm). Radiația termică emisă de obiecte obișnuite, care se află în echilibru termodinamic cu mediul lor înconjurător poate fi considerată radiație a corpului negru. Obiectele care sunt aproape de temperatura camerei (25°C) emit radiații termice în spectrul infraroșu.

Obiectele de tip corp negru sunt obiecte fizice idealizate, care absorb toate radiațiile electromagnetice incidente, ceea ce înseamnă că toate radiațiile, care interacționează cu un asemenea obiect sunt absorbite. Desigur, în natură nu există obiecte ideale pentru corpul negru – găurile negre sunt corpuri negre aproape perfecte, deoarece absorb toată radiația ajunsă în interiorul lor, dar este posibil să nu fie în echilibru termodinamic perfect cu mediul lor înconjurător.

Când un corp negru se află în echilibru termic (temperatură constantă), corpul emite radiații ale corpului negru conform Legii lui Planck, care descrie distribuția puterii radiației electromagnetice în termeni de componente de frecvență la o temperatură dată. Cu alte cuvinte, un obiect de tip corp negru, care este menținut la o temperatură constantă, va emite radiații de o anumită amplitudine și frecvență, care depind doar de temperatura obiectului, nu de forma sau compoziția sa.

Obiectele din lumea reală – deoarece obiectele de tip corp negru nu există fizic – emit energie la o fracțiune din valoarea energiei emise de obiectele de tip corp negru. Această fracțiune este cunoscută drept emisivitatea unui obiect și este utilizată pentru a determina puterea efectivă a obiectului în emiterea radiației termice. O suprafață ideală pentru un corp negru are o emisivitate de ‘1’, ceea ce înseamnă că toate radiațiile care interacționează cu suprafața sunt absorbite de obiect. Argintul șlefuit, pe de altă parte, are o emisivitate de ‘0,02’, ceea ce înseamnă că aproape toată radiația este împrăștiată sau reflectată de suprafață și foarte puțin este absorbită.

Radiația infraroșie este un tip de radiație electromagnetică ce radiază în lungimi de undă cuprinse între 700 nm și 1 mm. Acestea sunt invizibile pentru ochiul uman, dar pot fi resimțite prin căldură. De exemplu, soarele emite aproximativ jumătate din energia sa drept radiații infraroșii și, deși nu putem vedea radiația cu ochiul liber, căldura poate fi simțită pur și simplu stând în lumina soarelui.

Figura 1: Diagrama bloc de bază a principalelor componente interne ale senzorului Grid-EYE

Componentele camerei termice

Camera termică pe 8-biți este formată din următoarele trei componente hardware principale:

  • Senzor infraroșu Grid-EYE® de la Panasonic
  • Modul LCD cu afișaj grafic COG-C144MVGI-08 de la Varitronix
  • Microcontroler pe 8-biți PIC18F27K42 de la Microchip

Detecția în infraroșu se realizează utilizând senzorul Grid-EYE. Acesta constă dintr-o matrice de senzori IR de 8 × 8 pixeli (64 în total) și este proiectat utilizând tehnologia cu termopile a sistemelor micro-electromecanice (MEMS). Matricea de termopile este formată dintr-o serie de termocuple independente. Fiecare termocuplu este format din două fire subțiri din materiale termice diferite. Cele două fire sunt unite la un capăt formând așa numita joncțiune fierbinte, iar după înseriere, capetele libere, sunt conectate la un radiator (joncțiunea rece). Joncțiunea fierbinte este conectată la o membrană comună foarte subțire de absorbție IR, care este partajată de toate cele 64 de termocuple. Dacă există o diferență de temperatură între cele două joncțiuni, se creează o mică tensiune generată de forța electromotoare (EMF), care poate fi măsurată și transformată în valoare de temperatură. Acest fenomen este denumit efectul Seebeck. Senzorul comunică prin magistrala I2C, care funcționează la maximum 400 kHz. Senzorul are, de asemenea, un amplificator cu câștig integrat, convertor analog-digital (ADC) și un termistor (vezi Figura 1).

Senzorul își începe funcționarea prin absorbția energiei termice în infraroșu în câmpul său vizual de 60°. Energia IR trece printr-o lentilă de siliciu integrată, care acționează precum un filtru optic, permițând absorbția energiei IR pentru lungimi de undă cuprinse între 5 și 13μm (regiunea cu infraroșu îndepărtat). Odată ce energia IR trece prin lentilă, aceasta este absorbită de fiecare dintre cele 64 de elemente senzoriale ale matricei de termocuple. Fiecare dintre elementele de detecție convertește energia IR pe care a absorbit-o într-un semnal analogic de ieșire. Tensiunea analogică este de obicei de ordinul milivolților, astfel încât poate fi prea mică pentru a detecta cu precizie mici modificări de energie. Pentru a corecta acest lucru, ieșirea analogică a fiecărui element de detecție este trecută printr-un amplificator operațional, care are rolul de a mări rezoluția fiecărui element. Fiecare semnal amplificat, trece printr-un ADC unde este comparat cu valoarea temperaturii termistorului integrat și convertit într-un echivalent digital de 12-biți (11 biți + 1 bit de semn). Fiecare dintre cei 64 de pixeli are propriul registru unic de temperatură, care deține echivalentul temperaturii digitale convertite. Acești regiștri de temperatură pot fi citiți de un microcontroler pe magistrala I2C.

Figura 2: Acesta prezintă o variabilă word pe 16 biți împărțită în formatul de culoare standard RGB565.

Modulul LCD dispune de tehnologia LCD Color Super-Twist Nematic (CSTN), care utilizează adresarea cu matrice pasivă. Pe un ecran LCD CSTN, semnalele de rând și de coloană sunt utilizate pentru a adresa direct un pixel, iar pixelul trebuie să își mențină starea ON/OFF, fără utilizarea unui comutator sau condensator. Fiecare pixel vizual este împărțit în trei sub-pixeli fizici și fiecare sub-pixel folosește fie un filtru roșu, albastru sau verde pentru a afișa culoarea. Afișajul folosește o lumină de fundal LED albă a cărei lumină trece prin fiecare sub-pixel. Intensitatea ieșirii fiecărui sub-pixel este controlată de driverul LCD al afișajului, creând până la 65 de mii de culori unice. Circuitul de comandă este un driver LCD Samsung S6B3306, care este integrat în modulul de afișare. Driverul simplifică interfața dintre microcontroler și afișaj, rezultând mai puține conexiuni.

Ecranul LCD este configurat în modul color 65k. În acest mod, variabila word pe 16-biți este împărțită în formatul de culoare standard RGB565. Acest standard este o codificare a culorilor pe 16-biți în care biții <15:11> (5 biți) definesc intensitatea roșu, biții <10: 5> (6 biți) definesc intensitatea verde și biții <4: 0> (5 biți) definesc intensitatea albastru (vezi Figura 2). Formatul RGB565 oferă un plus de culoare verde, deoarece vederea umană este mai sensibilă la lungimile de undă verzi ale spectrului luminii vizibile.

Microcontrolerul PIC18F27K42 este utilizat pentru a citi datele de temperatură de la senzor, pentru a efectua procesarea imaginii și pentru a transmite datele culorilor pe ecranul LCD. Următoarele periferice au fost utilizate în această cameră:

  • Temporizator (Timer1)
  • Acces direct la memorie (DMA)
  • I2C
  • SPI

Timer1 este un numărător cu incrementare pe 16 biți, care este implementat în aplicația camerei termice pentru a genera o întârziere de 15 secunde. Când camera este pornită prima dată, iar senzorul Grid-EYE a fost configurat pentru utilizare, acesta are nevoie de o întârziere de 15 secunde pentru a se stabiliza. În loc să utilizeze o funcție de „întârziere”, care ar suspenda executarea programului în timpul ciclului de întârziere, Timer1 poate fi utilizat pentru a îndeplini aceeași sarcină. Deoarece Timer1 operează în fundal, executarea programului continuă, permițând nucleului să se concentreze asupra altor sarcini în perioada de întârziere.

Figura 3: Un exemplu de interpolare liniară pentru a extinde o matrice de date de 8 × 8 într-o matrice de date de 32 × 32.

Modulul de acces direct la memorie (DMA – Direct Memory Access) permite transferul de date între regiunile de memorie ale microcontrolerului PIC®, fără intervenția procesorului. DMA elimină necesitatea procesării CPU a întreruperilor destinate urmăririi transferurilor de date, permițând procesorului să îndeplinească alte sarcini în timp ce au loc transferurile. Camera utilizează DMA pentru a transfera un fișier de imagine, stocat în memoria programului, pe ecranul LCD în timpul întârzierii de stabilizare necesare, de 15 secunde, a senzorului Grid-EYE.

Modulul I2C oferă o interfață serială sincronă între microcontroler și alte dispozitive compatibile I2C. Modulul I2C este utilizat pentru configurarea și citirea datelor de temperatură de la senzorul Grid-EYE și funcționează la o viteză a magistralei de 100 kHz. Citirea datelor pixelilor senzorului necesită o citire bloc a regiștrilor pixelilor. Fiecare pixel conține o valoare a temperaturii de 12-biți împărțită în doi octeți individuali. Deoarece există un total de 64 de pixeli, I2C efectuează o citire bloc de 128 de octeți. Din fericire, regiunea de date a pixelilor este configurată secvențial, ceea ce înseamnă că I2C poate transmite o singură adresă slave, urmată de o singură adresă de registru, dar va primi toți cei 128 de octeți într-o singură tranzacție. După citirea fiecărui registru de pixeli, senzorul indică automat următorul registru, deci nu este nevoie să fie inițiat un nou pachet de comunicații de fiecare dată când este citit un registru de pixeli.

Modulul SPI al PIC18F27K42 este utilizat pentru configurarea și scrierea informațiilor de culoare pe ecranul LCD. Modulul este configurat în modul de transmisie (fără recepție) la o viteză SCK de 8 MHz. Configurarea numai pentru transmisie permite transferuri unidirecționale de la master la dispozitivul slave fără a fi nevoie ca masterul să citească intrarea sa SDI. Fiecare cadru de imagine este compus din 17.434 de cuvinte pe 16-biți, ceea ce înseamnă că fiecare cadru va utiliza magistrala SPI pentru transmite 34.868 octeți pe 8-biți pentru fiecare cadru. După cum se poate vedea, chiar și salvarea unui ciclu de instrucțiuni de fiecare dată când SPI scrie un octet de date ar însuma 34.868 de instrucțiuni salvate, ceea ce înseamnă că SPI își poate scrie datele mult mai repede. Acest lucru ajută la prevenirea decalajului de imagine de la cadru la cadru.

Odată ce microcontrolerul PIC a citit datele de temperatură de la senzor, acesta trebuie să efectueze procesarea imaginii pentru a crea imaginea care este transmisă pe ecranul LCD. Software-ul de procesare a imaginii folosește datele senzorului pentru a crea o imagine bazată pe cei 64 de pixeli ai senzorului. Dacă ar fi să observăm această matrice de 64 de pixeli pe ecranul LCD de 1,44 inch, imaginea ar fi prea mică pentru a fi văzută. Pentru a vizualiza corect imaginea, aceasta trebuie extinsă.

Interpolarea liniară este procesul de găsire a unei valori necunoscute între două valori cunoscute pe o linie. Cu alte cuvinte, interpolarea liniară folosește informațiile pe care le avem deja pentru a completa informațiile lipsă necesare pentru a extinde imaginea. Pentru această cameră se folosește metoda de interpolare bi-liniară. În acest caz, software-ul ia valorile a patru pixeli învecinați, aplică un factor de scalare pentru fiecare dintre cei patru pixeli și calculează media celor patru pixeli redimensionați și aplică această valoare pixelului nou creat. Factorul de scalare depinde de distanța pixelului nou creat de pixelul original; cu cât noul pixel este mai departe, cu atât factorul de scară este mai mic (vezi Figura 3). Interpolarea liniară aproximează o valoare necunoscută pe baza valorilor cunoscute, dar nu poate asigura că valoarea calculată este precisă. Cu alte cuvinte, zona necunoscută dintre cei doi pixeli poate conține marginea obiectului și, în loc să creeze granița clară a obiectului, interpolarea poate face ca această graniță să fie mai puțin definită.

Dacă doriți să construiți singuri această cameră, vă rugăm să consultați Nota de aplicație Microchip AN2773.
AN2773 descrie componentele camerei și funcționarea în detaliu. De asemenea, am postat întregul cod sursă pe site-ul web Microchip ‘MPLAB® Xpress Code Examples’.


Autor: Chris Best,

Microchip Technology   |   https://www.microchip.com

Sigla-Microchip

S-ar putea să vă placă și