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.

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
| Del | Funktion i prototypen |
|---|---|
| JC4827W543 med ESP32-S3 | Kører firmware og brugerflade. Skærmen har 480 × 272 pixels. |
| SSC-tryksensor | Leverer målinger over I²C på adresse 0x28. Bussen kører ved 100 kHz. |
| Pumpe | Styres med et PWM-signal på 30 kHz med 8-bit opløsning. |
| Magnetventil | Bruges til udluftning. Firmware åbner ventilen med et højt signal på GPIO 16. |
| Touchscreen | NV3041A driver skærmen; XPT2046 aflæser den resistive touchflade. |
| Controllerprint | Forbinder 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.

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
Sender betjeningskommandoer
Læs sensor → beregn regulering → opdatér udgange
Måler trykket
Påvirker trykket
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.
| Betjening | Hvad firmwaren gør |
|---|---|
| + og − | Ændrer det ønskede tryk. |
| BOOST | Hæver det aktive mål med 25 %, mens funktionen er aktiv, dog højst til 500 mBar. |
| HOLD | Stopper pumpen og sætter den normale ventilregulering på pause. |
| RESET | Sæ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 projektmaterialet | Værdi |
|---|---|
| PID: Kp / Ki / Kd | 3000 / 40 / 0,5; regulatorens trykfejl er i bar |
| Skøn over holdende PWM | 18,5 + 70 × reference i bar |
| Referencehastighed | 20 mBar/s med aftagende stigning tæt på målet |
| Kontrolopgave | 50 ms pause efter hver gennemløbet opgave; arbejdstiden kommer oveni |
| Bluetooth-status | Omtrent 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åling | Forsøg 1 | Forsøg 2 |
|---|---|---|
| Mål | 150 mBar | 150 mBar |
| Sensorværdi omkring 20 sekunder | 149,5 mBar | 148,8 mBar |
| Højeste sensorværdi | 150,7 mBar | 150,3 mBar |
| Sensorinterval fra 20 sekunder til stop | 148,6–150,7 mBar | 148,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.