eXpander: fra idé til prototype

Prototype · Elektronik og embedded

Jeg udvikler eXpander med det formål at lindre gener og forbedre livskvaliteten for mennesker, der har gennemgået gynækologisk kræftbehandling. Apparatet er endnu en prototype.

eXpander-prototypen med touchscreen i sit kabinet
eXpander på mit arbejdsbord.

Her beskriver jeg apparatets opbygning og arbejdet med at styre tryk gennem elektronik og software. De resultater, jeg viser, stammer fra tekniske forsøg. Der er endnu ikke dokumenteret klinisk effekt.

På denne side

Idé og status · Hardware og print · Skærm og betjening · Firmware og regulering · Grænser og fejlhåndtering · Bluetooth og apps · Målinger og afprøvning · Erfaringer og videre arbejde · Teknisk grundlag

Fra idé til en fungerende prototype

Udgangspunktet er det tiltænkte formål efter gynækologisk kræftbehandling. Mit arbejde med prototypen handler om at få trykmåling, regulering og betjening til at hænge sammen i ét apparat.

Jeg står for projektets arkitektur. I softwarearbejdet bruger jeg GitHub Copilot og ChatGPT Codex. Det kræver stadig, at jeg vurderer forslagene og følger op med kontrol og målinger.

Apparatet kan betjenes på sin egen skærm. Jeg har også arbejdet med styring og aflæsning over Bluetooth. Selve trykreguleringen kører på boardet, også når en app sender kommandoerne.

Hardware: fra tryksensor til pumpe

DelFunktion i prototypen
JC4827W543 med ESP32-S3Kører firmware og brugerflade. Skærmen har 480 × 272 pixels.
SSC-tryksensorLeverer målinger over I²C på adresse 0x28. Bussen kører ved 100 kHz.
PumpeStyres med et PWM-signal på 30 kHz med 8-bit opløsning.
MagnetventilBruges til udluftning. Firmware åbner ventilen med et højt signal på GPIO 16.
TouchscreenNV3041A driver skærmen; XPT2046 aflæser den resistive touchflade.
ControllerprintForbinder strømforsyning, sensor, pumpe, ventil og displayboard.

Controllerprintet forsynes med 12 V og har spændingsforsyninger til 5 V og 3,3 V. Pumpen og ventilen styres gennem transistortrin. På printet nedenfor står revisionen AI 1.1; billedet skal ikke forveksles med alle tidligere printversioner.

Controllerprint mærket eXpander AI 1.1
Controllerprintet med strømforsyning, sensor og tilslutninger.

GPIO 17 og 18 bruges til sensorens SDA og SCL. Pumpestyringen ligger på GPIO 15, og ventilstyringen på GPIO 16. Skærmens baggrundslys har sit eget PWM-signal på GPIO 1 ved 5 kHz, så det ikke deler timer med pumpen.

Sådan hænger delene sammen

Touchscreen eller Bluetooth-app
Sender betjeningskommandoer
ESP32-S3 · kontrolopgave
Læs sensor → beregn regulering → opdatér udgange
SSC-tryksensor
Måler trykket
Pumpe og ventil
Påvirker trykket
Kontrolopgaven behandler målinger og kommandoer. Skærmen og appen viser den seneste tilstand.

Skærm og betjening

Skærmen viser det målte tryk og det ønskede tryk i mBar. De samme grundfunktioner findes i appen. Tabellen beskriver, hvordan de er implementeret i prototypen.

BetjeningHvad firmwaren gør
+ og −Ændrer det ønskede tryk.
BOOSTHæver det aktive mål med 25 %, mens funktionen er aktiv, dog højst til 500 mBar.
HOLDStopper pumpen og sætter den normale ventilregulering på pause.
RESETSætter målet til nul og starter udluftning. Ventilen holdes åben i fire sekunder efter, at RESET-forløbets tryktærskel er nået.

Efter ti minutter uden betjening ved nultryk-mål dæmpes baggrundslyset til 25 %. En pauseskærm viser eXpander-navnet, og berøring vækker den almindelige visning. Regulering, fejltilstande og aktiv appstyring holder skærmen vågen.

Firmware og trykregulering

Firmwaren er skrevet til Arduino på ESP32-S3 og bygges med PlatformIO. FreeRTOS fordeler arbejdet mellem en kontrolopgave på kerne 1 og brugerflade og Bluetooth på kerne 0.

Kontrolopgaven har ansvaret for sensor, pumpe og ventil. Tryk på skærmen og kommandoer fra appen lægges i en kø. På den måde går ændringer af udgangene gennem samme del af programmet.

Skærmen og Bluetooth læser kopier af en fælles tilstand. Programmet låser kun denne tilstand kortvarigt, mens den kopieres. Det undgår at holde låsen under skærmtegning eller kommunikation.

Sensorens tryk behandles internt i bar og omregnes til mBar i brugerfladen. Et offset fra opstarten trækkes fra målingen. PID-regulatoren arbejder med den seneste accepterede, offsetkorrigerede måling; skærmen bruger et gennemsnit af fem målinger.

Reguleringen kombinerer et skøn over den nødvendige pumpedrift med PID-korrektion. Den interne reference nærmer sig målet gradvist. Når pumpen stoppes, nulstilles regulatorens historik.

Parameter i projektmaterialetVærdi
PID: Kp / Ki / Kd3000 / 40 / 0,5; regulatorens trykfejl er i bar
Skøn over holdende PWM18,5 + 70 × reference i bar
Referencehastighed20 mBar/s med aftagende stigning tæt på målet
Kontrolopgave50 ms pause efter hver gennemløbet opgave; arbejdstiden kommer oveni
Bluetooth-statusOmtrent fem opdateringer pr. sekund

Grænser og fejlhåndtering

Firmwaren begrænser det ønskede tryk, også med BOOST, til 500 mBar. Ved en accepteret rå måling på 520 mBar eller derover aktiverer den et låst stop med udluftning. Det kræver RESET og en gyldig rå måling på højst 10 mBar at ophæve stoppet.

Ved en mislykket sensoraflæsning stopper programmet pumpen og åbner ventilen. Tre fejl i træk udløser sensorfejltilstanden og nulstiller målet. Hvis sensoren ikke kommer tilbage inden for ti sekunder i den bekræftede fejltilstand, genstarter ESP32’en.

Ved appstyring afslutter allerede den første mislykkede aflæsning appens kontrol og starter udluftning. Det forhindrer, at en gammel kommando fortsætter som om målingen stadig var gyldig.

Disse tal er softwaregrænser i prototypen, ikke anbefalede behandlingstryk. En softwaregrænse garanterer ikke et fysisk maksimum; det dokumenterede materiale indeholder ikke en fysisk afprøvning af 520 mBar-stoppet.

Bluetooth og mobilapps

Apparatet bruger Bluetooth Low Energy. Ved ny parring sammenlignes en sekscifret kode, og forbindelsen godkendes på apparatet. Parring giver adgang til forbindelsen; appen skal derefter særskilt overtage styringen.

Styringen har en tidsfrist på fem sekunder, som appen løbende skal forny. BOOST har sin egen frist på 1,5 sekund. Appen skal derfor blive ved med at bekræfte funktionen, mens knappen holdes nede. En tabt forbindelse må ikke føre til, at styringen genoptages automatisk.

Kommandoer, svar og statuspakker fylder 20 bytes. Hver kommando har et stigende nummer, så en gammel kommando kan afvises. Appen skal vente på svaret fra kontrolopgaven; en Bluetooth-kvittering fortæller kun, at pakken er modtaget.

Der findes både en Android-testapp til reguleringsforsøg og måleeksport og en enklere eXpander Control-app med de almindelige betjeningsknapper. Der er også kildekode til en iPhone-version i SwiftUI og CoreBluetooth.

Android-afprøvningerne i rapporterne blev udført på en Samsung SM-S931B. iPhone-materialet beskriver beståede protokoltests og et usigneret simulatorbuild den 11. september 2026. Signering og afprøvning på en fysisk iPhone står fortsat som udestående i den dokumentation.

Hvad målingerne viser

Den 10. september 2026 blev der kørt to tekniske forsøg med et mål på 150 mBar. Begge forsøg nåede tæt på målet, men målingerne viste også små oversving.

MålingForsøg 1Forsøg 2
Mål150 mBar150 mBar
Sensorværdi omkring 20 sekunder149,5 mBar148,8 mBar
Højeste sensorværdi150,7 mBar150,3 mBar
Sensorinterval fra 20 sekunder til stop148,6–150,7 mBar148,4–150,3 mBar

Jeg accepterede de to resultater som tilfredsstillende for de forsøg. Det oprindelige mål om regulering uden oversving blev ikke opfyldt. Resultaterne gælder disse opstillinger ved 150 mBar og viser ikke, hvordan apparatet opfører sig ved alle andre tryk.

Dokumentationsgennemgangen fra 13. september 2026 angiver desuden 59 beståede firmwaretests på computeren og syv beståede Python-protokoltests. Den slags tests kan kontrollere dele af logikken uden hardware. De erstatter ikke målinger på det samlede apparat.

Erfaringer og videre arbejde

eXpander samler flere dele af mit arbejde: elektronikken, firmware, en brugerflade og forbindelsen til måledata. En ændring i én del skal vurderes i forhold til resten af apparatet.

AI-hjælpen til printlayoutet har fået sin egen projektside om KiCad og samspillet med AI. Her på siden er det selve apparatet, der er i fokus.

Der mangler blandt andet bredere teknisk afprøvning af reguleringen og dokumentation for de forhold, der endnu kun er kontrolleret i software. Prototypens tiltænkte anvendelse kræver et andet grundlag end de tekniske forsøg, jeg beskriver her.

Har du spørgsmål til projektet, kan du skrive til mig på weirdlabs@gmail.com.

Grundlaget for de tekniske oplysninger

Beskrivelsen er samlet den 7. oktober 2026 ud fra projektets README, hardware- og arkitekturbeskrivelser, BLE API v1 og dokumentationen om regulering og test. De viste trykmålinger er fra 10. september 2026; testoversigten er dateret 13. september 2026. Datoerne gælder de pågældende resultater og er ikke en ny afprøvning af den seneste firmware.