Picothermal

Introductie

Na het ontwerpen van mijn eerste project voor een warmtecamera, en de daaropvolgende upgrade van de sensor naar de MLX90640, merkte ik dat ik nog steeds bepaalde functies miste. Ik wilde een groter scherm, een betere batterij en meer thermische pixels. Daarom is picothermal ontstaan.

Voor een betere beeldkwaliteit is de (kostbare) beslissing genomen om een van de sensoren van Flir te gebruiken, specifiek de Flir Lepton 3.5 die ik bij Mouser heb aangeschaft. Dit is een enorme sprong voorwaarts vergeleken met de 24x32 pixels van de MLX90640; de Lepton biedt 160x120 pixels.

Ik realiseerde me vervolgens dat de eenvoudigste manier om een groter scherm en een betere batterij te krijgen, en tegelijkertijd het apparaat draagbaarder te maken, is door gebruik te maken van USB-C en het apparaat te koppelen aan een pc of telefoon. Dit is wat alle betaalbare warmtecamera's op Aliexpress (en de Flir One) ook doen. Er was echter één ding dat me niet aanstond: ik ontwerp graag projecten met een extreem lange levensduur. Afhankelijk zijn van een specifieke app zou betekenen dat ik deze moet blijven onderhouden om te voorkomen dat het apparaat veroudert.

Sommige camera's gebruiken UVC om dit te omzeilen, waardoor de warmtecamera in feite als webcam functioneert en via diverse trucjes de radiometrische data (de absolute temperatuur van de pixels) samen met de kleur verzendt. Ik heb besloten om WebUSB te gebruiken, zonder specifieke reden behalve dat ik dacht dat het makkelijker zou zijn om de camera te besturen (hoewel UVC extensies heeft die dit mogelijk maken, dus ik kan hierin vergissen) en het feit dat Embassy dit ondersteunt. Het belangrijkste nadeel is dat Firefox WebUSB niet ondersteunt, maar op mijn Android-telefoon kan ik Chrome waarschijnlijk niet eens verwijderen, dus het is een compromis waar ik mee kan leven. Ik kan later altijd nog UVC-ondersteuning toevoegen.

Hardware

De hardware zelf is eigenlijk extreem eenvoudig. Ten eerste heb ik gekozen voor een RP2040-microcontroller (ik heb dit gebouwd voordat de RP2350 werd uitgebracht), hoewel ik waarschijnlijk een STM32 had moeten gebruiken die USB 2.0 ondersteunt, in plaats van vast te zitten aan USB 1.1.

Daarnaast bevat het ontwerp:

  • Een USB-C connector;
  • Een buck-converter voor de conversie van 5V naar 3,3V;
  • Een aantal LDO's voor de overige spanningsrails die de microcontroller en de sensor vereisen;
  • Diverse overige kleine componenten.

Er is geen batterij, geen oplaadcontroller en geen microSD-kaart aanwezig; alles wat nodig is, bevindt zich al op de telefoon. Het schema is gemaakt met Kicanvas.

Ik heb de printplaten besteld bij Aisler (1,6 mm dikte) en JLCPCB (0,8 mm dikte). Uiteindelijk heb ik de platen van Aisler gebruikt, omdat deze steviger waren en makkelijker te solderen, ook al was de USB-C connector oorspronkelijk bedoeld voor 0,8 mm.

Firmware

Ik heb de hardware in 2023 ontwikkeld, maar daarna het project verlaten omdat het leven ertussen kwam en ik vastliep bij het debuggen van de TinyUSB-stack. In die tijd overwoog ik eigenlijk om UVC te gebruiken in plaats van WebUSB.

Aangezien ik de sensor al had gekocht en de hardware had gebouwd, besloot ik er in 2026 nog een poging aan te wagen, ditmaal met behulp van agents. Hoewel ik graag de eer zou claimen, heb ik de firmware niet zelf geschreven; Claude heeft het goed gedaan door de firmware te bouwen met Rust en Embassy. Ik denk dat het een beetje overengineered is door beide kernen van de microcontroller te gebruiken, maar uiteindelijk werkt het zonder problemen, dus ik kan niet klagen. Natuurlijk is het niet gemakkelijk te onderhouden, maar afgezien van het toevoegen van een UVC-optie en het daadwerkelijk gebruiken van de reserveknop, is er niet veel meer nodig.

Ik voel me schuldig en lui omdat ik de firmware (en de web-app) nooit met de hand heb voltooid, maar tegelijkertijd denk ik niet dat ik de tijd had gehad om het in de huidige vorm te realiseren. Interpreteer dit maar zoals je wilt.

Conclusie

Ik kan de camera nu aansluiten op mijn Android-telefoon, de WebUSB-landingspagina in Chrome openen en de camera werkt gewoon. Ik ben erg tevreden met het eindresultaat en ik zal dit waarschijnlijk vele jaren gebruiken, zolang WebUSB wordt ondersteund.

Alles staat zoals gewoonlijk op mijn Github (zie de links aan het begin van de pagina). Mocht je problemen hebben bij het repliceren van dit project, laat het me dan weten.

Veel plezier!