Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Kamera termowizyjna DIY na ESP32

ghost666 25 Sty 2018 18:20 10473 4
  • Kamera termowizyjna DIY na ESP32
    Kamery termowizyjne fascynują niezmiennie od lat. Idea, że można oglądać obrazy w części spektrum promieniowania elektromagnetycznego, na co dzień niedostępnego dla naszych oczu, jest niezwykle ciekawa i pociągająca. Niestety realizacja tego zadania nie jest tania - szczególnie, jeśli chcemy kupić tego rodzaju kamerę tylko po to, żeby się nią pobawić, a nie korzystać z niej w jakichś konkretnych zastosowaniach komercyjnych, w których mogłaby na siebie zarobić.

    Autor poniższego projektu chciał wejść w świat termografii, ale bez konieczności płacenia dużej ceny za urządzenie. Cóż zatem więcej mógł zrobić, jak nie po prostu samodzielnie zbudować tego typu kamerę. Zadanie to nie jest proste, ale nie jest także niemożliwe do realizacji. Poniżej znajdziemy opis poszczególnych elementów tego rodzaju urządzenia oraz informacje o tym jak je ze sobą połączono.

    Sensor

    Pierwszym etapem konstrukcji kamery było wybranie sensora. Wybór w tym projekcie padł na mikrobolometr.

    Sensor jest kluczowym elementem każdej kamery. Jest też najdroższym i najtrudniejszym do kupienia jej elementem. Część dystrybutorów, takich jak Digi-Key, posiada w swojej ofercie sensory podczerwone, ale zazwyczaj są one zbyt drogie lub po prostu nie są dostępne.

    Dobrym i niedrogim źródłem sensorów są uszkodzone urządzenia, zwłaszcza miniaturowe kamery termowizyjne, które współpracują ze smartfonami, takie jak FLIR One oraz Seek Thermal Compact.

    Autorowi udało się nabyć uszkodzoną kamerę FLIR One drugiej generacji. Kosztowało go to jedynie 75 funtów. Uszkodzenie: "Kamera się nie włącza", co zazwyczaj oznacza uszkodzenie zasilania lub baterii. Zazwyczaj w tak uszkodzonych systemach sam sensor działa poprawnie.

    W kamerze wykorzystano sensor FLIR Lepton 3 o rozdzielczości 160x120 pikseli:

    Kamera termowizyjna DIY na ESP32


    Za tą cenę ciężko byłoby kupić cokolwiek innego. Kamery te (z drugiej generacji) są już niedostępne, a FLIR One Pro trzeciej generacji kosztują około 400 funtów.

    Autor, jak tylko przyszła paczka z uszkodzoną kamerą, zabrał się do demontażu sensora. Za dodatkowe 25 funtów nabył płytkę do montażu sensora FLIR Lepton. Wykorzystanie tego rodzaju płytki znacznie ułatwia dalszą pracę z tym sensorem.





    Po zamontowaniu sensora na płytce autor podłączył wszystko do Raspberry Pi, by sprawdzić działanie. Sterowanie Lepton 3 jest bardzo proste, wystarczy wykorzystać dedykowane jej oprogramowanie, zawarte w bibliotece pylepton, którą znaleźć można na Githubie. Po uruchomieniu aplikacji okazało się, że sensor działa poprawnie, co oznacza, że można zabrać się do dalszej pracy nad kamerą termowizyjną DIY.

    Kamera termowizyjna DIY na ESP32


    Hardware

    Autor projektu chciał zbudować samodzielne i przenośne urządzenie, zatem musiał do sensora dodać wyświetlacz i baterię oraz oczywiście jakiś procesor. Kamera komunikuje się poprzez interfejs SPI, więc bez problemu udało się napisać drivery wykorzystujące spidev oraz moduł do strumieniowania danych bezpośrednio do klienta webowego w JavaScripcie, jednakże tego rodzaju rozwiązanie nie nadaje się do niewielkiego układu zasilanego z baterii.

    Wybór ekranu był dosyć prostszy. Firma ILI Technology z Chin oferuje szeroką gamę niedrogich wyświetlaczy TFT z wbudowanym kontrolerem. Ekrany te są często stosowane w projektach hobbystycznych i mają szerokie wsparcie w środowisku. Autor wybrał kompaktowy wyświetlacz o przekątnej 2,8" z kontrolerem ILI9341. Tego rodzaju ekrany najczęściej sprzedawane są wraz z rozbudowanymi płytkami uruchomieniowymi, ze zintegrowanymi kontrolerami do ekranu dotykowego, slotami na kartę SD itp. Same ekrany jednakże można nabyć w sieci.

    Do kontroli nad całym urządzeniem autor wybrał znany układ ESP32 od Espressifa. Platforma ta oferuje fantastyczny ekosystem, szczególnie dzięki integracji interfejsów Wi-Fi i Bluetooth w jednym module. Dodatkowo, co bardzo istotne w tym projekcie, układ ten ma dwa sprzętowe interfejsy SPI, które potrzebne będą do sterowania sensorem termowizyjnym oraz wyświetlaczem TFT.

    Aby nie musieć samodzielnie integrować tego układu z resztą elektroniki, autor skorzystał z modułu WEMOS LOLIN32. Moduł ten posiada na pokładzie także zintegrowaną ładowarkę do akumulatorów litowo-jonowych. Wszystkie potrzebne piny układu są wygodnie wyprowadzone na złącza kołkowe na płytce.

    Kamera termowizyjna DIY na ESP32


    Do modułu autor dołożył prosty włącznik - całe sterowanie zasilaniem sensora i wyświetlacza realizowane jest z ESP32 poprzez trwa tranzystory PNP. Dzięki temu po wyłączeniu układu nadal możliwe jest ładowanie wbudowanego akumulatora.

    Oprogramowanie

    Stworzenie firmware dla budowanej kamery nie było wcale trudne. Autor wykorzystał stworzony przez siebie sterownik dla kamery FLIR Lepton 3, który przetestował pod Linuxem. Portowanie firmware na ESP32 okazało się bardzo proste - w zasadzie wystarczyło tylko wymienić API biblioteki spidev na to, jakie oferuje ESP32 do swoich interfejsów SPI.

    Cała aplikacja na ESP32 działa pod opieką systemu czasu rzeczywistego FreeRTOS, który dzieli poszczególne elementy działania systemu na zadania. Jedno z zadań wykorzystuje VoSPI (Video over SPI) do zgrywania obrazów z sensora, a drugie zadanie wyświetla zebraną klatkę poprzez drugi interfejs SPI na ekranie systemu.

    Kamera termowizyjna DIY na ESP32


    Aktualna - zwalidowana jako poprawnie zebrana - ramka obrazu (current_frame) jest zmienną współdzieloną pomiędzy dwoma zadaniami, nad dostępem do której czuwa semafor. Dzięki temu, że rozdzielczość ekranu jest dokładnie dwukrotnością obrazu z sensora to nie występowała konieczność złożonego skalowania danych z tej zmiennej.

    Zadanie camera_task zbiera klatki z sensora wykorzystując protokół VoSPI stworzony przez FLIR. Zadanie to zajmuje się także resynchronizacją strumienia wideo, która może być potrzebna i aktualizuje zmienną current_frame jedynie, jeśli zebrana ramka jest oceniana jako poprawna.

    Z kolei zadanie display_task zajmuje się wyświetlaniem danych z zmiennej current_frame. Są one zapisane jako cztery ćwiartki obrazu, zgodnie z tym jak zapisuje je VoSPI. To całkiem wygodne rozwiązanie, w związku z czym autor nie zdecydował się na wprowadzanie dodatkowego stopnia konwertującego taką ramkę obrazu na inny format, zawierający np. pełną klatkę obrazu.

    Zanim jakikolwiek z segmentów obrazu zostanie wyświetlony na ekranie do głosu, dochodzi jeszcze subsystem tworzący interfejs graficzny użytkownika, który dodaje do obrazu odpowiednie notatki, tekst i proste kształty, które zapisane są w osobnej liście. Obecnie interfejs nie jest zbyt rozbudowany, ponieważ w zasadzie znajduje się w fazie testów. Zadanie user_task zajmuje się obsługą interfejsu graficznego i jedyne, co obecnie robi, to zmienia widoczność prostego zielonego kwadratu, widocznego w lewym górnym rogu. Mruga on po prostu co sekundę.

    Jedynym utrudnieniem, wynikającym z podziału obrazu na ćwiartki jest fakt, że podczas rysowania GUI system musi być świadom w której ćwiartce obecnie jest, szczególnie jeśli chcemy narysować element - np. prostokąt - który rozciąga się na więcej niż jedną ćwiartkę. Tego rodzaju problemy utrudniają trochę implementację GUI, co tłumaczy dlaczego autor jeszcze nie korzysta w pełni z jego możliwości.

    Obudowa

    Autor zdecydował się na obudowę z druku 3D, jako że niedawno sam dołączył do posiadaczy tego rodzaju drukarki (Prusa i3 MK2S). Drukowanie 3D to świetna zabawa, więc dobrze jest skorzystać z jego możliwości do stworzenia obudowy dla własnego urządzenia.

    Obudowa w założeniu miała być mała i mieścić w sobie wszystkie elementy systemu - wyświetlacz, baterię, moduł z ESP32 i oczywiście sensor termowizyjny. Autor zaczął projektowanie obudowy od zebrania rozmiarów wszystkich elementów z danych dostępnych w sieci oraz mierząc pozostałe elementy suwmiarką, jeśli dany wymiar nie był dostępny w dokumentacji.

    Obudowa została zaprojektowana w Autodesk Fusion 360.

    Kamera termowizyjna DIY na ESP32


    Jednym z wyzwań podczas tworzenia obudowy było odpowiednie zabezpieczenie kamery, przed zabrudzeniem i uszkodzeniami. Niestety szkło nie nadaje się do takich zastosowań - nie przepuszcza ono dostatecznie dużo podczerwieni z interesującego nas fragmentu widma elektromagnetycznego. Dlatego też trzeba było poszukać lepszego materiału na okienko do kamery. W przemyśle stosuje się typowo jeden z dwóch materiałów - german i selenek cynku.

    Początkowe próby przeprowadzone zostały z okienkiem z selenku cynku, niestety rezultaty były dalekie od zadowalających. Okazało się, że pomimo pokrycia okienek warstwami antyrefleksyjnymi, okienko odbijało sporo podczerwieni generowanej przez samą kamerę do sensora.

    Kamera termowizyjna DIY na ESP32


    Finalnie autor wykorzystał germanowe okienko, jakie zamontowane było w kamerze FLIR, z której pobrany wcześniej został sensor. Okienko to jest trochę małe (8 mm x 8 mm), ale z pewnością optycznie jest o wiele lepsze niż okienko z ZnSe, jakie zostało przetestowane najpierw.

    Zanim powstała finalna obudowa, autor wytworzył kilka testowych egzemplarzy. Dopiero trzecia wersja projektu okazała się pasować. Tolerancja druku 3D jest trudną sprawą, należy pamiętać o tym przy projektowaniu dowolnych elementów. Po zamontowaniu wszystkich elementów (co nie obyło się bez ściskania kilku rzeczy siłą) autorowi udało się zamknąć obudowę i otrzymać kompaktową kamerę DIY. Jak przyznaje sam autor, kolejna wersja obudowy najpewniej będzie odrobinę większa, szczególnie, że Fusion 360 wszelkie interferencje oblicza dosyć słabo i nie pozwala realnie oszacować, jak ciasna może być obudowa.

    Kamera termowizyjna DIY na ESP32


    W obudowie autor wykorzystał śrubki M2 do zamontowania modułu z sensorem oraz płytki z ESP32 do obudowy. Germanowe okienko na miejscu zabezpieczone zostało odrobiną taśmy kaptonowej tak, by go nie uszkodzić - to znacznie delikatniejsza metoda niż klejenie go do obudowy.

    Z zewnątrz śruby imbusowe M3 mocują wyświetlacz na jednej ze ścianek. Ramka wyświetlacza niestety nie została wyposażona w odpowiednie klipsy, co sprawia, że nie leży równo na całym obwodzie ekranu, ale dzięki otworom na łby śrub M3, całość wygląda ładnie i elegancko.

    Obudowa umożliwia wykorzystanie wbudowanego w moduł z ESP32 gniazda micro-USB do ładowania i wgrywania nowego oprogramowania do modułu.

    Podsumowanie

    Gotowa kamera działa całkiem dobrze. Firmware kamery jest cały czas rozwijany. W systemie znajduje się ogniwo litowo-polimerowe o pojemności 1300 mAh, które zapewnia długi czas działania systemu pomiędzy ładowaniami. Po wyłączeniu wszystkich systemów i uśpieniu ESP32 system pobiera zaledwie 250 mikroamperów z ogniwa. Po włączeniu kamery i wyświetlacza pobór prądu zwiększa się do około 230 mA.

    Kolejnym krokiem w rozwoju systemu jest podłączenie się do interfejsu I²C kamery, aby móc korzystać z funkcji, takich jak korekcja pola widzenia (FFC) czy wyświetlać inne dane telemetryczne pochodzące z samego sensora, jak na przykład informacje o jego temperaturze.

    Kolejne plany autora dotyczą wykorzystania panelu dotykowego na ekranie, aby kontrolować system. Niestety on także jest podłączany pod SPI, więc będzie musiał współdzielić któryś z interfejsów - z kamerą lub ekranem. Obecnie trzeba najpierw sprawdzić, co będzie miało mniejszy wpływ na płynność działania kamery, nie chcemy wszak, by ekran dotykowy spowalniał odświeżanie obrazu na wyświetlaczu.

    Źródło: https://damow.net/building-a-thermal-camera/


    Fajne!
  • #2 25 Sty 2018 21:28
    krzbor
    Poziom 16  

    Ciekawe - jest to projekt wykorzystujący ESP32 jako procesor ogólny - nie są używane jego moduły bezprzewodowej komunikacji BT czy WiFi.

  • #3 26 Sty 2018 00:40
    Galareta
    Poziom 21  

    Sam stosowałem kilkukrotnie ESP8266 z wyłączonym modułem radiowym. One są tanie i szybkie do tego mają ogromny zapas pamięci wiec nie widzę nic dziwnego w zastosowaniu ESP32 jako sam procesor.

  • #4 26 Sty 2018 01:12
    ghost666
    Tłumacz Redaktor

    Zgadzam się z przedmówcami - ESP32 (z 8266 nie korzystałem) to bardzo mocne maszynki, wystarczy spojrzeć w specyfikację:

    Dwurdzeniowy CPU @160 MHz
    448 kB ROM
    520 kB SRAM

  • #5 26 Sty 2018 22:54
    krzbor
    Poziom 16  

    Napisałem "ciekawe" bo też to zauważyłem. Do tej pory miałem styczność z ESP8266 i choć używam w nim WiFi, to dostrzegam potencjał "ogólnego" procesora. Pierwszy układ jaki zrobiłem to było jeszcze Arduino Nano i ESP8266. Następne to już tylko ESP. To co jest w nim ciekawe, to możliwość programowania poprzez UART - nie potrzeba żadnego programatora. Do tego dobra współpraca z ARUINO IDE. ESP32 wygląda jeszcze ciekawiej- ma dodatkowo przetwornik cyfrowo-analogowy, sensory dotykowe, wzmacniacz niskoszumowy.