1.750 programmeerbare PCB-badges maken voor Canada's grootste hackathon
Hoe een naamkaartje van karton veranderde in 1.750 programmeerbare printplaten, en alles wat er gaandeweg misging.
Bij de meeste hackathons is je badge een stukje karton aan een koord. Dit jaar was het bij Hack the North, de grootste hackathon van Canada, een printplaat met een scherm, knoppen en een radio, die je kon programmeren om te doen wat je maar wilde. Op zaterdag kwam er een team naar me toe met vier badges die ze hadden omgevormd tot een werkend spel van Among Us.
Acht maanden eerder zouden onze badges ook nog van karton zijn gemaakt.
Alles is open source: de hardware (KiCad), de firmware en de emulator.
Waarom geen karton?
Midden januari vroeg mijn vriend Alex (een PM bij Hack the North) of ik wilde meedoen aan het project. Op dat moment ontstond er een visie: wat als we de badge-cultuur van cybersecurity-evenementen naar de wereld van hackathons zouden brengen? Wat als we een beweging startten die zo groot was dat andere organisatoren het niet konden negeren? Het doel was om hardware-badges mainstream te maken binnen hackathons.
Ik stelde het idee voor aan het organisatieteam met de volgende functionele eisen:
- LED's (zoveel mogelijk)
- Scherm
- Batterij
- Knoppen
- Audio
- Draadloze functies
- Een gaaf ontwerp
- Silkscreen-art (bedrukking)
- Lanyards (nekkoorden)
Mijn inschatting was dat dit voor $5 per persoon kon gebeuren (achteraf gezien was ik naïef).
Ik maakte duidelijk dat we meerdere hardware-iteraties nodig zouden hebben om de risico's te beheersen. We planden een EVT (Engineering Validation Test), een DVT (Design Validation Test) en 2-3 PVT's (Production Validation Test). Uiteindelijk zijn we in vier iteraties verzonden, waarbij de vierde de uiteindelijke productierun was.
Als veiligheidsmaatregel spraken we af dat we snel konden terugschalen naar "blanke" badges (platen zonder gemonteerde componenten) om de kosten drastisch te verlagen. Zonder dit vangnet zouden de directeuren het project waarschijnlijk niet hebben goedgekeurd, mede vanwege zorgen over batterijveiligheid.
Engineering Validation Test (EVT)
Het doel van de EVT was puur om te bewijzen dat de onderdelen samenwerkten. Het hoefde niet mooi te zijn; het ging om de functionele validatie. Voor de lay-out koos ik voor een zeshoek, omdat "hexagons the bestagons" zijn. Hoewel het team niet even enthousiast was over deze vorm, bleven de zeshoeken behouden voor deze testfase. De bestelling werd op 15 februari geplaatst bij JLCPCB.
Tijdens deze fase treden enkele problemen op:
Fout in componentselectie
Op USB-stroom werkte alles, maar op batterij gebeurde er niets. De oorzaak lag in de componentlijst: ik had condensatoren (C10, C14) en een spoel (L1) allemaal aangeduid als "10u". De automatische componentzoeker gaf me hierdoor een condensator van 10µF in plaats van een spoel van 10µH.
Les: Gebruik ondubbelzinnige waarden (10µH in plaats van 10u). Vertrouw niet blindelings op de componentzoeker; controleer alles dubbel.
Soldeerpunten te dicht op elkaar
Om kosten te besparen (ongeveer vijf cent per badge), wilden we de flexibele printplaat (FPC) van het scherm direct op de pads van de board solderen in plaats van een connector te gebruiken. JLCPCB gaf aan dat de pinnen te dicht op elkaar stonden om betrouwbaar te solderen. Gelukkig paste de connector die ik oorspronkelijk wilde vermijden precies op de reeds ontworpen pads. De connector-oplossing is uiteindelijk behouden tot het einde.
Les: Verschuif productieproblemen niet naar de fabrikant. Neem ze in eigendom, los ze op en wees duidelijk in de communicatie.
De NFC-misvatting
Na het oplossen van de spoel-fout werkten bijna alle functies, behalve NFC. Het bleek dat ik een NFC-chip had gekozen die als tag fungeerde (passief) in plaats van als reader (actief). We wilden dat badges elkaar konden scannen, maar daarvoor is een chip nodig die kan schakelen tussen beide rollen (peer-to-peer mode), wat buiten ons budget lag. Uiteindelijk stapten we voor de DVT over op een reader-chip voor het scannen van tags en gebruikten we Bluetooth en een accelerometer voor de "badge bump"-functie.
Les: Controleer of een chip daadwerkelijk doet wat je nodig hebt voordat je bepaalt hoe je deze integreert.
Design Validation Test (DVT)
De DVT moest bewijzen dat het ontwerp werkte, inclusief de definitieve vorm, lay-out en de correcte NFC-chip.
NFC en Lay-out
De nieuwe NFC-chip vereiste een andere antenne. Omdat we geen tijd of tools hadden om een eigen antenne te tunen, kopieerde ik het referentieontwerp van de fabrikant zo nauwkeurig mogelijk. Voor de vorm kozen we voor een ontwerp dat lijkt op een handheld gameconsole uit 1989.
De strijd om de kleuren
We wilden badges met meerkleurige bedrukking (silkscreen). Dit vereiste echter het gebruik van EasyEDA in plaats van KiCAD. De import naar EasyEDA mislukte door problemen met het ground plane en we hadden geen tijd om dit te debuggen. We moesten besluiten om terug te gaan naar enkelvoudige witte bedrukking.
Les: Zorg altijd voor een plan om functies te schrappen (de-scoping). Een hardwareproject komt alleen over de finish als je bereid bent meedogenloos functies te verwijderen.
Software-ontwikkeling
Tijdens de DVT ontwikkelden we een basis-OS. We ontdekten dat de kleuren op het scherm fout waren omdat we de bytes in de verkeerde volgorde stuurden, maar we dachten aanvankelijk dat dit aan de goedkope schermen lag. Later evolueerde de badge tot een echt platform: we bouwden een Lua-runtime zodat hackers eigen apps konden schrijven, een browser-gebaseerde code-editor en een shell op de badge zelf.
Production Validation Test (PVT)
De PVT moest bewijzen dat we de badges op grote schaal konden produceren zonder handmatige aanpassingen.
Lessen van anderen
Tijdens de NorthSec-conferentie ontdekte ik dat andere badge-ontwikkelaars tegen exact dezelfde problemen aanliepen als wij: leveringsproblemen, stressvolle deadlines en nachtelijke flasheduurtjes.
Les: Leer van je gelijken. Er is een grote community van badge-ontwikkelaars die graag delen wat er misging.
Kritieke fouten in de PVT
Bij de eerste PVT-batch van 50 stuks kwamen twee grote problemen aan het licht:
- Rook: Als de batterijen verkeerd om werden geplaatst, werd de badge een rookmachine.
- Les: Vertrouw nooit op gebruikersinteractie bij veiligheidskritische functies.
- Omgedraaide IC's: Twee chips (de NFC-chip en een power-chip) waren 180 graden gedraaid geplaatst. Dit gebeurde ondanks dat we de layout-bevestiging van de fabrikant hadden goedgekeurd.
- Les: Behandel een bevestigingsverzoek van een fabrikant als een volledige code review. Vergelijk het met je eigen bestanden en zoek naar wat er is veranderd.
Het herstelproces
Om de productie te redden, voerden we de volgende aanpassingen door:
- De-smokifier: We voegden een FET toe aan de batterijlijn voor bescherming tegen omgekeerde polariteit. Als de batterijen nu verkeerd om worden geplaatst, gaat de badge simpelweg niet aan.
- Oriëntatiepunten: We voegden kleine stippen toe aan de bedrukking om aan te geven welke kant de chips op moeten, wat hielp bij het controleren van de finale run.
- First Article Inspection (FAI): We spraken af dat JLCPCB eerst een kleine batch zou maken, foto's en testresultaten zou sturen, en pas na onze goedkeuring de rest zou produceren.
- Communicatie: Ik stuurde een gedetailleerde PDF met screenshots naar de fabriek. Ik vroeg hen specifiek hoe zij de instructies het liefst zouden ontvangen om misverstanden op de werkvloer te voorkomen.
Les: Vraag de fabriek hoe je hen het beste instructies kunt geven. Zij weten wat hun operators nodig hebben.
Supply Chain
Het bevoorraden van onderdelen bleek een nachtmerrie. Voor sommige componenten, zoals de WS2812B-2020 LED's, schommelde de voorraad constant, waardoor orders werden geannuleerd of vertraagd.
Les: Leg je supply chain vroeg vast. Bestel alles, behalve de meest voorkomende passieve componenten, zodra het ontwerp definitief is.
De productierun
Op 30 juni bestelden we 1.750 volledige badges en 750 blanke platen.
De laatste controle
Voor de productie stuurde JLCPCB een placement render. Bij het controleren ontdekte ik dat de nieuwe FET (tegen de rook) verkeerd om stond. Dit was het moment waarop alles op het spel stond.
Procesfouten
Ondanks de afspraak over de First Article Inspection, ontdekte ik dat de status plotseling op "Packaging" sprong. De fabriek had de testprocedure overgeslagen en direct de hele run gebouwd. Gelukkig bleken de boards na controle toch te werken.
Les: Een verzoek om een processtap betekent niet automatisch dat deze wordt uitgevoerd. Vraag om bevestiging bij elk checkpoint voordat de volgende stap begint.
Snelheid boven perfectie
Op 10 augustus faalden 25 schermen in de test. Omdat de datum van de hackathon vaststond en de verzendtijd een week was, maakte ik een cruciale keuze: 1.600 werkende badges op tijd waren waardevoller dan 1.750 perfecte badges die te laat arriveerden. Ik gaf toestemming om de defecte boards apart te leggen en de rest direct te verzenden.
Les: Vertel je fabrikant wat het belangrijkste is. Zij kunnen geen afwegingen maken als ze niet weten welke compromissen je accepteert.
Kosten en Logistiek
De totale kosten voor de 1.750 geassembleerde badges bedroegen ongeveer $20.300, wat neerkomt op circa $11,60 per badge. Dit is aanzienlijk hoger dan de oorspronkelijk geschatte $5.
De badges arriveerden op 20 augustus. Het voorbereidingsproces was intensief: uitpakken, rails knappen, zijkanten schoonmaken met staalwol, firmware flashen en lanyards bevestigen. Een toegewijd team werkte van 19:00 uur tot 03:00 uur door om alles klaar te krijgen.
Het weekend
Het hoogtepunt was zien hoe hackers de badges naar hun eigen hand zetten. Tijdens de opening werd een crashcourse gegeven, waarna de creativiteit explodeerde.
Enkele opmerkelijke projecten:
- Among Us: Een multiplayer-versie via een mesh-netwerk.
- Tux Racer: Badges als controllers voor het spel.
- Hackamon & Badgémon: Pokémon-achtige games met NFC.
- Trojan Badge: Een virus dat van badge naar badge springt.
- SolarPay: Integratie van betalingen.
De resultaten in cijfers:
- 11.700 badge-bump connecties
- 40.000 scans van sponsor-tafels
- 420.000 "bubbles" gepopt in de ingebouwde game
- 120 custom app hacks gebouwd
Uit de evaluatie bleek dat 90% van de deelnemers de badge "geweldig" of "ongelooflijk" vond. Het grootste minpunt was het gewicht; twee AA-batterijen aan een naakte printplaat zijn zwaar om de hele dag om je nek te dragen.
Slotwoord
Aan alle hackathon-organisatoren: hardware-badges lijken van buitenaf onmogelijk, maar dat zijn ze niet. We hebben het gedaan met een klein team, één creditcard en een flinke dosis doorzettingsvermogen. De fabriek is uiteindelijk een webformulier, de onderdelen zijn rijen in een tabel, en fouten zijn duur maar overleefbaar.
Mijn uitdaging aan jullie: versla ons. Maak de meerkleurige bedrukking die wij niet konden maken, bouw een betere stroomarchitectuur, of gebruik een krachtigere MCU die Linux kan draaien.
Ik kan niet wachten om te zien wat jullie bouwen.
1.750 programmeerbare PCB-badges maken voor Canada's grootste hackathon
Hoe een naamkaartje van karton veranderde in 1.750 programmeerbare printplaten, en alles wat er gaandeweg misging.
Bij de meeste hackathons is je badge een stukje karton aan een koord. Dit jaar was het bij Hack the North, de grootste hackathon van Canada, een printplaat met een scherm, knoppen en een radio, die je kon programmeren om te doen wat je maar wilde. Op zaterdag kwam er een team naar me toe met vier badges die ze hadden omgevormd tot een werkend spel van Among Us.
Acht maanden eerder zouden onze badges ook nog van karton zijn gemaakt.
Alles is open source: de hardware (KiCad), de firmware en de emulator.
Waarom geen karton?
Midden januari vroeg mijn vriend Alex (een PM bij Hack the North) of ik wilde meedoen aan het project. Op dat moment ontstond er een visie: wat als we de badge-cultuur van cybersecurity-evenementen naar de wereld van hackathons zouden brengen? Wat als we een beweging startten die zo groot was dat andere organisatoren het niet konden negeren? Het doel was om hardware-badges mainstream te maken binnen hackathons.
Ik stelde het idee voor aan het organisatieteam met de volgende functionele eisen:
- LED's (zoveel mogelijk)
- Scherm
- Batterij
- Knoppen
- Audio
- Draadloze functies
- Een gaaf ontwerp
- Silkscreen-art (bedrukking)
- Lanyards (nekkoorden)
Mijn inschatting was dat dit voor $5 per persoon kon gebeuren (achteraf gezien was ik naïef).
Ik maakte duidelijk dat we meerdere hardware-iteraties nodig zouden hebben om de risico's te beheersen. We planden een EVT (Engineering Validation Test), een DVT (Design Validation Test) en 2-3 PVT's (Production Validation Test). Uiteindelijk zijn we in vier iteraties verzonden, waarbij de vierde de uiteindelijke productierun was.
Als veiligheidsmaatregel spraken we af dat we snel konden terugschalen naar "blanke" badges (platen zonder gemonteerde componenten) om de kosten drastisch te verlagen. Zonder dit vangnet zouden de directeuren het project waarschijnlijk niet hebben goedgekeurd, mede vanwege zorgen over batterijveiligheid.
Engineering Validation Test (EVT)
Het doel van de EVT was puur om te bewijzen dat de onderdelen samenwerkten. Het hoefde niet mooi te zijn; het ging om de functionele validatie. Voor de lay-out koos ik voor een zeshoek, omdat "hexagons the bestagons" zijn. Hoewel het team niet even enthousiast was over deze vorm, bleven de zeshoeken behouden voor deze testfase. De bestelling werd op 15 februari geplaatst bij JLCPCB.
Tijdens deze fase treden enkele problemen op:
Fout in componentselectie
Op USB-stroom werkte alles, maar op batterij gebeurde er niets. De oorzaak lag in de componentlijst: ik had condensatoren (C10, C14) en een spoel (L1) allemaal aangeduid als "10u". De automatische componentzoeker gaf me hierdoor een condensator van 10µF in plaats van een spoel van 10µH.
Les: Gebruik ondubbelzinnige waarden (10µH in plaats van 10u). Vertrouw niet blindelings op de componentzoeker; controleer alles dubbel.
Soldeerpunten te dicht op elkaar
Om kosten te besparen (ongeveer vijf cent per badge), wilden we de flexibele printplaat (FPC) van het scherm direct op de pads van de board solderen in plaats van een connector te gebruiken. JLCPCB gaf aan dat de pinnen te dicht op elkaar stonden om betrouwbaar te solderen. Gelukkig paste de connector die ik oorspronkelijk wilde vermijden precies op de reeds ontworpen pads. De connector-oplossing is uiteindelijk behouden tot het einde.
Les: Verschuif productieproblemen niet naar de fabrikant. Neem ze in eigendom, los ze op en wees duidelijk in de communicatie.
De NFC-misvatting
Na het oplossen van de spoel-fout werkten bijna alle functies, behalve NFC. Het bleek dat ik een NFC-chip had gekozen die als tag fungeerde (passief) in plaats van als reader (actief). We wilden dat badges elkaar konden scannen, maar daarvoor is een chip nodig die kan schakelen tussen beide rollen (peer-to-peer mode), wat buiten ons budget lag. Uiteindelijk stapten we voor de DVT over op een reader-chip voor het scannen van tags en gebruikten we Bluetooth en een accelerometer voor de "badge bump"-functie.
Les: Controleer of een chip daadwerkelijk doet wat je nodig hebt voordat je bepaalt hoe je deze integreert.
Design Validation Test (DVT)
De DVT moest bewijzen dat het ontwerp werkte, inclusief de definitieve vorm, lay-out en de correcte NFC-chip.
NFC en Lay-out
De nieuwe NFC-chip vereiste een andere antenne. Omdat we geen tijd of tools hadden om een eigen antenne te tunen, kopieerde ik het referentieontwerp van de fabrikant zo nauwkeurig mogelijk. Voor de vorm kozen we voor een ontwerp dat lijkt op een handheld gameconsole uit 1989.
De strijd om de kleuren
We wilden badges met meerkleurige bedrukking (silkscreen). Dit vereiste echter het gebruik van EasyEDA in plaats van KiCAD. De import naar EasyEDA mislukte door problemen met het ground plane en we hadden geen tijd om dit te debuggen. We moesten besluiten om terug te gaan naar enkelvoudige witte bedrukking.
Les: Zorg altijd voor een plan om functies te schrappen (de-scoping). Een hardwareproject komt alleen over de finish als je bereid bent meedogenloos functies te verwijderen.
Software-ontwikkeling
Tijdens de DVT ontwikkelden we een basis-OS. We ontdekten dat de kleuren op het scherm fout waren omdat we de bytes in de verkeerde volgorde stuurden, maar we dachten aanvankelijk dat dit aan de goedkope schermen lag. Later evolueerde de badge tot een echt platform: we bouwden een Lua-runtime zodat hackers eigen apps konden schrijven, een browser-gebaseerde code-editor en een shell op de badge zelf.
Production Validation Test (PVT)
De PVT moest bewijzen dat we de badges op grote schaal konden produceren zonder handmatige aanpassingen.
Lessen van anderen
Tijdens de NorthSec-conferentie ontdekte ik dat andere badge-ontwikkelaars tegen exact dezelfde problemen aanliepen als wij: leveringsproblemen, stressvolle deadlines en nachtelijke flasheduurtjes.
Les: Leer van je gelijken. Er is een grote community van badge-ontwikkelaars die graag delen wat er misging.
Kritieke fouten in de PVT
Bij de eerste PVT-batch van 50 stuks kwamen twee grote problemen aan het licht:
- Rook: Als de batterijen verkeerd om werden geplaatst, werd de badge een rookmachine.
- Les: Vertrouw nooit op gebruikersinteractie bij veiligheidskritische functies.
- Omgedraaide IC's: Twee chips (de NFC-chip en een power-chip) waren 180 graden gedraaid geplaatst. Dit gebeurde ondanks dat we de layout-bevestiging van de fabrikant hadden goedgekeurd.
- Les: Behandel een bevestigingsverzoek van een fabrikant als een volledige code review. Vergelijk het met je eigen bestanden en zoek naar wat er is veranderd.
Het herstelproces
Om de productie te redden, voerden we de volgende aanpassingen door:
- De-smokifier: We voegden een FET toe aan de batterijlijn voor bescherming tegen omgekeerde polariteit. Als de batterijen nu verkeerd om worden geplaatst, gaat de badge simpelweg niet aan.
- Oriëntatiepunten: We voegden kleine stippen toe aan de bedrukking om aan te geven welke kant de chips op moeten, wat hielp bij het controleren van de finale run.
- First Article Inspection (FAI): We spraken af dat JLCPCB eerst een kleine batch zou maken, foto's en testresultaten zou sturen, en pas na onze goedkeuring de rest zou produceren.
- Communicatie: Ik stuurde een gedetailleerde PDF met screenshots naar de fabriek. Ik vroeg hen specifiek hoe zij de instructies het liefst zouden ontvangen om misverstanden op de werkvloer te voorkomen.
Les: Vraag de fabriek hoe je hen het beste instructies kunt geven. Zij weten wat hun operators nodig hebben.
Supply Chain
Het bevoorraden van onderdelen bleek een nachtmerrie. Voor sommige componenten, zoals de WS2812B-2020 LED's, schommelde de voorraad constant, waardoor orders werden geannuleerd of vertraagd.
Les: Leg je supply chain vroeg vast. Bestel alles, behalve de meest voorkomende passieve componenten, zodra het ontwerp definitief is.
De productierun
Op 30 juni bestelden we 1.750 volledige badges en 750 blanke platen.
De laatste controle
Voor de productie stuurde JLCPCB een placement render. Bij het controleren ontdekte ik dat de nieuwe FET (tegen de rook) verkeerd om stond. Dit was het moment waarop alles op het spel stond.
Procesfouten
Ondanks de afspraak over de First Article Inspection, ontdekte ik dat de status plotseling op "Packaging" sprong. De fabriek had de testprocedure overgeslagen en direct de hele run gebouwd. Gelukkig bleken de boards na controle toch te werken.
Les: Een verzoek om een processtap betekent niet automatisch dat deze wordt uitgevoerd. Vraag om bevestiging bij elk checkpoint voordat de volgende stap begint.
Snelheid boven perfectie
Op 10 augustus faalden 25 schermen in de test. Omdat de datum van de hackathon vaststond en de verzendtijd een week was, maakte ik een cruciale keuze: 1.600 werkende badges op tijd waren waardevoller dan 1.750 perfecte badges die te laat arriveerden. Ik gaf toestemming om de defecte boards apart te leggen en de rest direct te verzenden.
Les: Vertel je fabrikant wat het belangrijkste is. Zij kunnen geen afwegingen maken als ze niet weten welke compromissen je accepteert.
Kosten en Logistiek
De totale kosten voor de 1.750 geassembleerde badges bedroegen ongeveer $20.300, wat neerkomt op circa $11,60 per badge. Dit is aanzienlijk hoger dan de oorspronkelijk geschatte $5.
De badges arriveerden op 20 augustus. Het voorbereidingsproces was intensief: uitpakken, rails knappen, zijkanten schoonmaken met staalwol, firmware flashen en lanyards bevestigen. Een toegewijd team werkte van 19:00 uur tot 03:00 uur door om alles klaar te krijgen.
Het weekend
Het hoogtepunt was zien hoe hackers de badges naar hun eigen hand zetten. Tijdens de opening werd een crashcourse gegeven, waarna de creativiteit explodeerde.
Enkele opmerkelijke projecten:
- Among Us: Een multiplayer-versie via een mesh-netwerk.
- Tux Racer: Badges als controllers voor het spel.
- Hackamon & Badgémon: Pokémon-achtige games met NFC.
- Trojan Badge: Een virus dat van badge naar badge springt.
- SolarPay: Integratie van betalingen.
De resultaten in cijfers:
- 11.700 badge-bump connecties
- 40.000 scans van sponsor-tafels
- 420.000 "bubbles" gepopt in de ingebouwde game
- 120 custom app hacks gebouwd
Uit de evaluatie bleek dat 90% van de deelnemers de badge "geweldig" of "ongelooflijk" vond. Het grootste minpunt was het gewicht; twee AA-batterijen aan een naakte printplaat zijn zwaar om de hele dag om je nek te dragen.
Slotwoord
Aan alle hackathon-organisatoren: hardware-badges lijken van buitenaf onmogelijk, maar dat zijn ze niet. We hebben het gedaan met een klein team, één creditcard en een flinke dosis doorzettingsvermogen. De fabriek is uiteindelijk een webformulier, de onderdelen zijn rijen in een tabel, en fouten zijn duur maar overleefbaar.
Mijn uitdaging aan jullie: versla ons. Maak de meerkleurige bedrukking die wij niet konden maken, bouw een betere stroomarchitectuur, of gebruik een krachtigere MCU die Linux kan draaien.
Ik kan niet wachten om te zien wat jullie bouwen.