Open Source Science Tricorder Cyberdeck

Wat is dit?

Dit is de GitHub-repository voor de Open Source Science Tricorder Cyberdeck, een open-source hardwareapparaat dat qua functie lijkt op de science tricorders uit de sciencefictionserie Star Trek. Deze apparaten bundelen een groot aantal wetenschappelijke sensoren in een klein, handzaam apparaat, met het (sciencefiction-)doel dat ze breed inzetbaar zouden zijn voor het verkennen van buitenaardse werelden en het doen van nieuwe wetenschappelijke ontdekkingen.

Foto's

  • Hoofdscherm
  • Spectrometerscherm
  • Magnetische imager in gebruik (1)
  • Magnetische imager in gebruik (2)
  • Hoofdbehuizing met componenten
  • Hoofdbehuizing en achterklep
  • Geassembleerd (gezien vanaf de achterkant)

Veelgestelde vragen

V1: Wat is een tricorder? Een tricorder is een fictief apparaat uit de tv-serie Star Trek, dat personages (zoals Spock) meenemen wanneer ze naar buitenaardse planeten reizen. De tricorder is in feite een doos vol sensoren die hen allerlei informatie geeft over de omgevingen die ze bezoeken — zoals het detecteren van levensvormen, het helpen bij ontdekkingen of het oplossen van uitdagingen. Er zijn nominaal twee soorten tricorders in de series: medische tricorders (voor medische diagnoses) en science tricorders (voor wetenschappelijke en exploratieve taken).

V2: Wat kan het apparaat waarnemen? Het apparaat heeft momenteel de volgende meetmogelijkheden:

  • Thermische beeldvorming: een 80x62 Waveshare imager, gekoppeld aan een normale zichtbare USB-camera.
  • Zichtbare spectroscopie: een Hamamatsu C12666MA microspectrometer, met 256 spectrale kanalen tussen 340nm en 780nm (in de praktijk is de spectrale resolutie ongeveer 15nm).
  • Magnetisch veldimager: een magnetische veldcamera van 8x8 (64 pixels), geleverd door de Sparkfun Magnetic Imaging Tile. In de praktijk kan dit tot ongeveer 20KHz (d.w.z. 20.000 frames per seconde). Dit is ook gekoppeld aan een reguliere magnetometer (MLX90393) voor de sterkte en richting van het magnetisch veld.
  • Stralingsspectroscopie: waar eerdere open-source science tricorders stralingssensoren bevatten, bevat deze versie de Pomelo-stralingsspectroscopie-detector, die een scintillatiekristal gebruikt en energieniveaus kan differentiëren.
  • Omgevingssensoren: CO2-niveau, VOC-niveau, fijnstof in de lucht (bijv. PM1/2.5/4/10), omgevingstemperatuur, druk en vochtigheid.

V3: Wat is een cyberdeck? Een cyberdeck is de naam voor in essentie kleine handconsoles (inclusief kleine schermen en toetsenborden) die vaak volledige besturingssystemen draaien en vaak zo zijn ontworpen dat ze gehackt of aangepast kunnen worden. Deze build is gebaseerd op de UConsole van Clockwork Pi, die een Raspberry Pi compute module gebruikt — hij draait dus Linux, heeft meerdere kernen, ongeveer 4GB RAM en veel eMMC-opslag.

V4: Zijn er video's waarop te zien is dat het functioneert? Ja, er is een video op Youtube die de belangrijkste functionaliteit laat zien.

V5: Is er een video van de assemblage of het binnenwerk? Ja! Er is een video waarin het binnenwerk component voor component wordt opgebouwd.

V6: Wat betekent open source in de context van open hardware? Open hardware is vergelijkbaar met open-source software, behalve dat het de ontwerpen van het apparaat zijn die openlijk worden gedeeld en verspreid. De software/firmware voor het apparaat is ook inbegrepen.

V7: Kan ik dit zelf bouwen? Het eerlijke antwoord is: misschien. Dit is een prototype, geen product, en er zijn veel ruwe randjes. Historisch gezien lijkt het meeste nut van eerdere releases van de open-source science tricorders educatief of inspirerend te zijn (bijv. "een echt tricorder-achtig apparaat!"), of als basis voor afgeleide werken (bijv. mensen die delen van de ontwerpen gebruiken voor hun eigen werk). De apparaten zijn vrij complex om te bouwen en behoorlijk duur.

V8: Waarom heb je dit gebouwd? Ik groeide op met Star Trek en mijn eerste carrièrokeuze was altijd ruimteverkenner — het bleek alleen dat ik iets te vroeg was geboren om dat een gangbaar beroep te laten zijn. Maar we komen daar niet door stil te zitten; we creëren zelf de toekomst. Laten we dus de technologie bouwen om toekomstige ontdekkingsreizigers te worden en samen nieuwe ontdekkingen te doen.

V9: Door wie is dit gemaakt? Het Open Source Science Tricorder Project is een open-source educatief outreach-project van Dr. Peter Jansen, professor aan de University of Arizona.

V10: Hoeveel eerdere open-source science tricorders zijn er geweest? Ik heb ongeveer een dozijn ontwerpen gemaakt, maar slechts vier (inclusief deze cyberdeck) zijn officiële 'releases' met uitgebreide documentatie; de anderen zijn over het algemeen iteraties of prototypes. De belangrijkste releases zijn de Mark 1 en Mark 2 in 2012, de Arducorder Mini in 2014, en vervolgens deze Cyberdeck in 2026. In de tussentijd heb ik ook aan andere open-source hardwareprojecten voor educatie gewerkt, zoals open-source computed tomography (CT) scanners.

V11: Wat kostte het om deze Cyberdeck te bouwen? De UConsole zelf, de CM4 compute module en de bijbehorende HackerGadgets extensieborden kosten waarschijnlijk rond de $300-$400, terwijl de totale componenten en de build hier waarschijnlijk rond de $1000 kosten. De zichtbare microspectrometer en de Pomelo stralingsspectrometer zijn veruit de duurste componenten.

Sensor/Hardware Lijst

Hieronder volgt de kernhardware die in dit apparaat is gebruikt, inclusief links naar datasheets etc.

UConsole

ComponentBeschrijvingLink
UConsoleClockwork Pi UConsoleClockworkPi
UConsole ExtensionInterne USB Hub, CM5 adapter, batterijbordHacker Gadgets

Hoofdsensoren

ComponentBeschrijvingLink
Thermische CameraWaveshare Long-wave IR Camera (80x62, USB C)Waveshare
USB CameraWaveshare IMX378 12MPWaveshare
MicrospectrometerHamamatsu C12666MAHamamatsu
StralingssensorPomelo Spectroscopic Radiation DetectorCrowd Supply
LuchtdeeltjessensorSensirion Particulate Matter Sensor SPS30Sensirion
Magnetic Imaging TileSparkFun Magnetic Imaging Tile - 8x8SparkFun
MagnetometerMLX90393 BreakoutSparkFun
CO2 SensorSCD40 CO2/Temp/Humidity BreakoutSparkFun
OmgevingssensorBME680 Temp/Pressure/Humidity/VOCSparkFun
QWIIC HubSparkFun Qwiic MultiPortSparkFun

Naast de bovenstaande hardware worden een aantal aangepaste PCB's gebruikt.

Aangepaste PCB's

Hoewel er is geprobeerd om zoveel mogelijk standaardonderdelen te gebruiken, zijn er enkele printplaten ontworpen om het geheel compacter te maken.

PCB: Hamamatsu Microspectrometer Breakout

Dit is een kleine breakout voor de Hamamatsu CD12666MA microspectrometer, die voornamelijk een laagprofielconnector, een op-amp buffer en een aantal filtercomponenten biedt om de stroomvoorziening schoon te houden.

  • Ontwerpbestanden (EAGLE 9.6.2): Schema (PDF) · Schema (.sch) · Board (.brd) · Onderdelenlijst

PCB: ESP32 Breakout

Dit is een ESP32 breakout die een handige verbinding vormt tussen de UConsole (via USB) en de meeste andere (niet-USB) sensoren. Het ESP32-bord zelf is de Sparkfun ESP32-WROOM USB C. Aan de linkerkant zitten compacte connectoren voor de spectrometer, de magnetic imaging tile en een QWIIC I2C-connector. Aan de rechterkant zitten twee standaard 0.1-spaced headers: één voor communicatie met de SPS30 luchtdeeltjessensor en één die open is en bedoeld is voor een lichtbron voor de zichtbare spectrometer.

  • Ontwerpbestanden (EAGLE 9.6.2): Schema (PDF) · Schema (.sch) · Board (.brd) · Onderdelenlijst

PCB: USB Hub Breakout

Dit is een breakout voor een USB-hub met een laag profiel. USB-connectoren zijn enorm, dus deze printplaat zet de Adafruit CH334F Mini 4-Port USB Hub breakout om naar kleine JST-connectoren. Deze zijn helaas dezelfde JST-connectoren als die in het QWIIC-systeem worden gebruikt, wat geen goede ontwerpbeslissing is; wees daarom voorzichtig dat je geen QWIIC-connectoren aansluit op deze 5V USB-verbindingen.

  • Ontwerpbestanden (EAGLE 9.6.2): Schema (PDF) · Schema (.sch) · Board (.brd)

3D-geprinte Componenten

De behuizing en sensorbevestigingen zijn 3D-geprint. De modellen zijn gemaakt in OpenSCAD.

3D Print: Hoofdbehuizing (Main Body)

Dit is het belangrijkste fysieke onderdeel waaraan bijna alle sensoren worden bevestigd. Het vervangt de achterkant van de uConsole en wordt met vier M4-schroeven op de hoeken bevestigd. Messing inserts (voornamelijk M2.5, maar enkele M2 en M3) worden gebruikt om andere componenten op dit onderdeel te monteren.

  • Ontwerpbestanden (OpenSCAD): Model (.stl) · Source (.scad)

3D Print: Achterplaat (Back Plate)

De achterplaat wordt op de hoofdbehuizing gemonteerd en maakt het mogelijk om een aantal omgevingssensoren te bevestigen. Deze maken gebruik van het Sparkfun breakout-montagepatroon (nominaal ongeveer 25x25mm). Het bevat ook de Sparkfun QWIIC-hub, die extra QWIIC-connectoren biedt voor de ESP32-breakout.

  • Ontwerpbestanden (OpenSCAD): Model (.stl) · Source (.scad)

3D Print: Magnetometer Boven- en Onderzijde

Dit is een clamshell-ontwerp dat de magnetic imaging tile en de magnetometer breakout-board omsluit. Messing inserts houden de twee zijden van de clamshell bij elkaar. Een stukje gevouwen papier wordt gebruikt om te voorkomen dat de magnetometer en de magnetic imaging tile elkaar kortsluiten. De onderkant bevat ook een verborgen kanaal waardoor de uitlaat van de SPS30 luchtdeeltjessensor in een rechte hoek weg kan, weg van de inlaat.

  • Ontwerpbestanden (OpenSCAD): Model, front (.stl) · Model, back (.stl) · Source (.scad)

3D Print: Aan/uit-schakelaar (Power Switch)

De uConsole heeft een enigszins verborgen aan/uit-schakelaar die gedeeltelijk wordt bedekt door de magnetometer/magnetic imaging tile print. Deze handige print past in de zijkant van de magnetic imaging tile print en bedient de echte aan/uit-knop wanneer deze wordt ingedrukt.

  • Ontwerpbestanden (OpenSCAD): Model (.stl) · Source (.scad)

Fysieke Assemblage Video

Er zitten veel componenten in dit apparaat; een korte video van stills laat zien hoe de meeste onderdelen in elkaar passen.

Firmware (ESP32)

De ESP32-firmware pollt periodiek de verschillende sensoren (die zelf geen USB-sensoren zijn) en stuurt de meetwaarden via een USB-naar-Serieverbinding naar de uConsole. De pakketten zijn in JSONL-formaat, waardoor ze eenvoudig te parsen zijn door de software op de uConsole.

Voorbeeld:

{"sensor":"scd4x","payload":{"atmospheric":{"co2_ppm":612,"temp_c":23.4,"humidity_rh_pct":41.2},"timestamp":184532,"error_state":0}}
{"sensor":"mlx90393","payload":{"magnetic":{"x_ut":12.85,"y_ut":-31.42,"z_ut":45.10},"timestamp":184611,"error_state":0}}
{"sensor":"sps30","payload":{"mass":{"PM1_0":2.113,"PM2_5":2.472,"PM4_0":2.601,"PM10":2.665},"number":{"PM0_5":14.201,"PM1_0":16.744,"PM2_5":16.920,"PM4_0":16.951,"PM10":16.963},"timestamp":184702,"error_state":0}}
{"sensor":"magnetic_tile","payload":{"frame":[[2011,2015,...],[2009,2012,...],...],"timestamp":184730,"error_state":0}}

Elke regel is één pakket: een sensornaam en een payload met de meetwaarden, een tijdstempel (milliseconden sinds de ESP32 is opgestart) en een errorstate (0 = OK). Hetzelfde formaat wordt gebruikt voor de spectrometer (speccd12666ma, een spectrumarray van 256 kanalen), de BME688 omgevingssensor (bme688) en een eenmalig firmwarepakket bij het opstarten met de firmwareversie en bouwtijd.

De ESP32-firmware bevindt zich in: esp32/uconsolesensorbackpack1b/uconsolesensorbackpack1b.ino (een Arduino-sketch, met de drivers per sensor in dezelfde map).

Gebruikersinterface (Python/UConsole)

De gebruikersinterface op de uConsole pollt de verschillende sensoren en toont de waarden in een eenvoudige interface. De gebruiker selecteert met de cijfertoetsen (1-7) welk scherm hij wil bekijken. Sommige schermen hebben extra functionaliteit, zoals het nemen van basismetingen (bijv. voor de magnetic imaging tile).

De interface is geschreven in Python, met gebruik van pygame voor het renderen. Het hoofdpunt van toegang is: src/UserInterfacePygame.py (zie runme.sh voor het starten ervan).

Ontwerphilosofie en Iteraties

De ontwerpfilosofie bij deze reeks iteraties was om de ontwerpen gemakkelijker reproduceerbaar te maken voor anderen, nominaal door de afhankelijkheid van aangepaste printplaten en complexe productieprocessen te minimaliseren. Omdat de meeste complexiteit voortkomt uit displays en invoer, benaderde ik dit door andere apparaten te gebruiken voor I/O en daar sensoren aan te "bouten". Uiteindelijk ben ik er niet zeker van of ik dit doel heb bereikt — het apparaat is veel groter dan nodig omdat alle sensoren off-the-shelf zijn — maar ik ben er uiteindelijk tevreden mee.

Het proces heeft vele jaren en iteraties gekost:

De basis: De Arducorder Mini

De Arducorder Mini is een prachtig ontworpen maar volledig op maat gemaakt apparaat.

Iteratie 8: Iets bevestigen aan een iPhone

Mijn eerste verkenning was het bouwen van iets dat aan de achterkant van mijn iPhone kon worden bevestigd, met een Raspberry Pi Zero W (die een webserver draaide) voor communicatie via Wifi, en een Arduino Mini voor de sensoren. Dit project werd voor ongeveer 90% voltooid, maar voelde als een kluntelige constructie en werd weggegooid voordat er een behuizing werd gemaakt. Een positief resultaat van deze iteratie was de ontwikkeling van een succesvolle magnetic imaging tile.

Iteratie 9: Teensycorder (BlackBerry-stijl)

Ik liet mijn ontwerpprincipes varen en probeerde iets te maken met een display en toetsenbord dat al beschikbaar was in een bestaande vorm.

Iteratie 10: T-Deck-Corder

Ik hield van het idee van de Teensycorder, maar vond hem te groot. Toen de T-Deck (een klein BlackBerry-achtig apparaat) uitkwam, probeerde ik daar een 'backpack' voor te maken. De uitdaging om zoveel sensoren in zo'n kleine ruimte te passen, werkte uiteindelijk niet, hoewel ik de vormfactor erg mooi vond.

Iteratie 11: Initiële Cyberdeck-verkenningen met Raspberry Pi CMx Tablets

Ik begon met het bouwen van cyberdecks door gevonden toetsenborden te bevestigen aan Raspberry Pi compute module-tablets. Dit overtuigde me van het Cyberdeck-formaat, maar er waren veel problemen: het was een kluntelige verzameling onderdelen en de Bluetooth-toetsenborden zorgden voor koppelings- en stroomproblemen.

Iteratie 12: Een kleinere Cyberdeck met de Clockwork Pi PicoCalc

De PicoCalc leek de juiste weg: kleiner formaat, inclusief toetsenbord en display, en zeer hackbaar. Echter was de microcontroller te zwak voor interfaces met een thermische camera en andere randapparatuur. Ik verving de microcontroller door een Raspberry Pi Zero W en gebruikte een Arduino als primaire sensorinterface. De schermresolutie (bijv. 320x320) bleek echter te klein om comfortabel met standaard software/UI-bibliotheken te werken, waardoor ik het project bij 95% voltooiing stopzette.

Iteratie 13: De Open Source Science Tricorder Cyberdeck

Dit is de versie waar deze repository over gaat. De overstap naar de UConsole zorgde voor een veel hogere schermresolutie en de Raspberry Pi CM4 bood veel meer rekenkracht dan de Zero W. De sensoren konden fysiek aan de achterkant worden toegevoegd als een aangepaste backpack.

Errata

Werkelijke fouten

  • Koeling: De Raspberry Pi compute modules produceren veel hitte. Zonder koeler zullen ze uiteindelijk thermisch throttelen. Er is een koeloplossing nodig, bij voorkeur een koperen koeler met een kleine ventilator.
  • Fout in de zeefdruk (Silkscreen): In een eerdere versie van het ESP32-bord is de witte tekst op de PCB verwisseld: de connector dichtst bij het midden van het bord is voor de spectrometer, en de connector dichtst bij de hoek is voor de magnetic imaging tile. Dit is gecorrigeerd in het nieuwste board-bestand.

Punten die ik niet prettig vind of nog niet zijn geïmplementeerd

  • Batterij: De batterij gaat niet lang mee (ongeveer één of twee uur). Slimme stroomfuncties voor de sensoren zouden ideaal zijn.
  • Framerate Magnetic Imaging Tile: Hoewel de hardware tot 20KHz kan, is de huidige refresh rate in de interface slechts 1 frame per seconde. Dit komt door de round-robin polling van de ESP32. Er is een aparte modus nodig voor high-speed captures.
  • Transmissie-spectroscopie: Ik heb nog geen ideale oplossing gevonden voor een lichtbron die gemakkelijk gemonteerd/gedemonteerd kan worden voor transmissie-spectroscopie, hoewel er een ongebruikte header op de ESP32-breakout voor is voorzien.
  • Wifi-antenne: Ik heb nog geen optimale plek gevonden voor de uConsole Wifi-antenne.
  • USB-connectoren: Het gebruik van dezelfde QWIIC-connectoren voor de USB-hub is een slechte ontwerpbeslissing, omdat het risico bestaat dat men een 3.3V QWIIC-verbinding aansluit op een 5V USB-verbinding, wat componenten kan beschadigen.

AI-gebruik

De ESP32-firmware is primair door mensen geschreven (door mij, met bibliotheken van mijzelf en anderen), terwijl de Python-gebruikersinterface grotendeels door AI is gegenereerd. AI-modellen werden ook gebruikt bij het debuggen in de laatste fasen (bijv. Claude merkte op dat ik twee pinnen op de magnetic imaging tile driver had omgewisseld).

Licentie

De onderdelen die geen code of fysieke ontwerpen zijn (zoals de 3D-prints, de PCB's en de documentatie) zijn gelicenseerd onder Creative Commons BY 4.0.

De ESP32-firmware voegt voornamelijk bestaande bibliotheken samen met een interface; er is onvoldoende substantiële code om een aparte licentie te rechtvaardigen. De Python-gebruikersinterface is grotendeels AI-gegenereerd en is naar mijn beste weten niet onderhevig aan auteursrecht.

Garantie

Samenvatting: Dit is een prototype, geen product. Het gebruik van de informatie in deze repository/dit project kan reële risico's met zich meebrengen. De auteur geeft geen enkele garantie en u aanvaardt alle risico's en verantwoordelijkheden.

Het volgende is Sectie 5 van de Creative Commons Attribution 4.0 International juridische code, letterlijk overgenomen en aangenomen als de garantievrijwaringsclausule voor elk onderdeel van dit project:

Section 5 -- Disclaimer of Warranties and Limitation of Liability. a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, IMPLIED, STATUTORY, OR OTHER... b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES... c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability.

Contact

Voor vragen kun je gebruikmaken van GitHub Issues of mailen naar peter@tricorderproject.org.