Sånn lagde han kube-Snake: - Mange er overraska over at jeg bruker .NET på Raspberry Pi

- Dette gjør programmering gøy, sier Karl Solgård, om IOT-prosjektet som ble NDC-trekkplaster.

Karl Solgård med kuben hvor Snake-spillet skal kjøre og gå under årets NDC-konferanse. Til høyre ser du den mindre prototypen. 📸: Privat
Karl Solgård med kuben hvor Snake-spillet skal kjøre og gå under årets NDC-konferanse. Til høyre ser du den mindre prototypen. 📸: Privat Vis mer

- Det starta som et nyttårsforsett, om å lage mer dingser og å eksperimentere med .NET for IoT, forteller Karl Solgård til kode24.

Solgård er 30 år, bor i Fredrikstad og jobber til daglig som seniorkonsulent hos Novacare, hvor han jobber mest med hotellbransjen.

- Det er en verden som sjokkerende få har utforska, og mange er overraska over at jeg bruker .NET på en Raspberry Pi. Men jeg har jo mange Raspberry Pi-er som er støvet ned i skuffen, og det er en skam at de ikke er i bruk, fortsetter han.

Så først lagde han et selvvanningssystem, som blant annet høsta masse skryt på Reddit. Så fikk han se en video av en LED-kube på YouTube.

Og noen sesjoner med 3D-printing, netthandling og C#-koding senere, er han klar for å vise fram sitt siste prosjekt: Et tredimensjonal Snake-spill, på en fysisk kube.

Kuben har en 3D-printa ramme for å holde alt på plass. 📸: Privat
Kuben har en 3D-printa ramme for å holde alt på plass. 📸: Privat Vis mer

Ble NDC-trekkplaster

Det begynte, som seg hør og bør, med en prototype: En mindre kube med fem LED-paneler med 32 ganger 32 bildepunkter, styrt av en Raspberry Pi med en RGB-matrise-hatt.

- Jeg viste fram kuben på jobben, og det ble et ønske fra prosjektgruppa som planlegger årets NDC-stand for NOVA Consulting Group å ha denne kuben som en hovedattraksjon og aktivitet på selve standen, forteller Solgård.

- Men de ønsket seg naturligvis en større kube.

En Raspberry Pi med en ekstra dingseboms fra Adafruit på toppen holder styr på alle bildepunktene. 📸: Privat
En Raspberry Pi med en ekstra dingseboms fra Adafruit på toppen holder styr på alle bildepunktene. 📸: Privat Vis mer

Så utvikleren måtte brenne av mer penger på nett, og kjøpe RGB-matriser med 64 ganger 64 punkter hver.

- NDC-versjonen er åtte ganger så stor som første versjon, og har en 3D-printa ramme som holder matrisene sammen. Det er også mulig å spille Snake med en Bluetooth-kontroller, og det blir en highscore-tavle med en ganske gjev premie for førsteplassen.

4.096 punkter på hver side

Solgård har altså laga en kube man kan spille Snake på. Når slangen forlater ett panel, dukker den opp på neste, rundt og rundt.

  • Kuben består av seks LED-paneler, med 64 ganger 64 punkter hver. Solgård forteller at de styres med en "HUB75 interface" gjennom en "hatt" på Raspberry Pi, krever 5 volt og 4 ampere, og kjøpes gjennom Adafruit.
  • Kuben holdes det hele sammen av en 3D-printa ramme.
  • Inni kuben sitter Raspberry Pi-en med hatten fra Adafruit, og naturlig nok alle kablene som kreves.

- I hatten kan man koble til en HUB75-kabel, og strømmen føres også gjennom hatten til alle matrisene. Kabelen seriekobles mellom alle matrisene, forteller Solgård.

Som du ser av klistremerket i bakgrunnen har Solgård trolig lært det meste han kan fra Toms Kodeskole, som rulla og gikk på kode24 i gode gamledager. 📸: Privat
Som du ser av klistremerket i bakgrunnen har Solgård trolig lært det meste han kan fra Toms Kodeskole, som rulla og gikk på kode24 i gode gamledager. 📸: Privat Vis mer

Første i verden?

Koden som styrer selve Snake-spillet har Solgård skrevet selv, basert på en Snake-demo han tidligere har koda i F#. Alt ligger på GitHub for de som vil ta en titt.

- Spillet er nå laget i C#, da jeg er mer vant til å jobbe med det. Selve kjernelogikken til Snake-spillet og kanthåndteringen er 100 prosent hjemmelaga, for så langt jeg vet, er det ingen som har laget Snake på en LED-kube før, forteller Solgård.

- Så det er litt kult.

Men det var ikke alle tannhjulene i maskineriet han trengte å finne opp på nytt. Han bruker blant annet Henner Zeller sitt bibliotek for å lettere kommunisere med LED-matrisene gjennom C#, og et bibliotek for å håndtere styring med Bluetooth-kontroller.

Gjør programmering gøy

- Hva har vært vanskeligst i dette prosjektet?

- Når man skal lage Snake på en kube, så krever det en spesiell håndtering av kantene. Matrisene er seriekobla, og framstår som et langt rektangel på 320 ganger 64 punkter. Når man legger disse sammen som en kube, så må man bestemme hvor pikslene skal ende når slangen går over kantene. Spesielt håndtering fra toppen til sidene og motsatt. Det er også en håndtering når slangen går rundt enden av matrisen og tilbake til start igjen, svarer Solgård.

"This is fine"-memen ruller og går på kuben, mens Karl Solgård ser ut til å beholde roen under arbeidet med Snake-spillet. 📸: Privat
"This is fine"-memen ruller og går på kuben, mens Karl Solgård ser ut til å beholde roen under arbeidet med Snake-spillet. 📸: Privat Vis mer

- Hvordan synes du det har vært å bygge noe fysisk på denne måten? Er det noe du vil anbefale andre utviklere å prøve?

- Absolutt. Som enhver hobby så koster dette så mye som man selv velger å putte i det. Har man en mikrokontroller eller en mikro-PC liggende rundt, så er det bare å la kreativiteten flyte, mener utvikleren.

- Det viktigste er at dette gjør programmering gøy, og at det blir en lek. Og ved å ha en LED-kube hjemme i stua, blir man i hvert fall to eller tre poeng kulere enn de som ikke har det!