Nå er julen endelig her. Mange tradisjoner står for tur. Hyggelig selskap, god mat, gaver og ikke minst sjakk på TV.
Hva er prosjektet?
Siden Magnus Carlsen ble verdensmester i sjakk 2013 har sjakk blitt en stor begivenhet på norsk TV. Alle følger med på "pila" gjennom partiene. "Pila" som viser hvilken av spillene som sjakkprogrammet Stockfish mener ligger best ann. I dette prosjektet har jeg laget et sjakkbrett som kan detektere når brikker flyttes for å vite hva stillingen er til enhvær tid. Stillingen kan så analyseres med hjelp av Stockfish for å få et resultat som kan vises på samme måte som "pila" i TV-sendingene.
Prosjektet består av tre deler:
Sjakkbrett
Et sjakkbrett med sensorer som kan detektere hvor det står hvite respektive sorte brikker. Brettet ser ikke forskjell på ulike typer brikker. Det overlates til mobilappen. Brettet har oppladingsbart batteri og kommuniserer trådløst via Bluetooth med mobilappen.
Mobilapp
En app bruker dataen fra sjakkbrettet for å beregne stillingen på brettet. Ved å følge med på brikkenes posisjoner fra starten av partiet vet appen hvilken type brikke som står på hvert felt. Appen vet også hvem sin tur det er, hvor mange trekk som har blitt gjort og hvorvidt det er mulig å gjøre rokade eller slå en passant. All den dataen trengs når appen kjører Stochfish for å analysere stillingen. Stillingen og analysen kan castes til en Chromecast for å vises på f. eks. en TV.
Chromecast-app
Ved casting fra mobilappen kjøres en egen Chromecast-app som viser stillingen på brettet sammen med "pila" for Stochfish-analysen.
Hva inspirerte deg til å lage det?
Jeg har hatt flere hobbyprosjekter innen både programmering og elektronikk og de morsomste er alltid dem der man får kombinert begge. Jeg husker ikke hvordan jeg kom på idéen men det er ikke så viktig for som med stort sett alle mine hobbyprosjekter så er det ikke et eventuellt sluttresultat som motiverer meg men veien dit med utforsking og læring. Det finnes såklart elektroniske sjakkbrett å kjøpe men hvorfor gjøre det når man kan bygge et selv.
Hva er tech-stacken?
Sjakkbrettet
Sjakkbrettet bruker en Hall-effektsensor i hvert felt for å detektere magneter i brikkene. Hver brikke har en magnet med motsatt polaritet for hvite og sorte brikker. Spenningen ut fra hver sensor plasseres i et av tre intervaller for å angjøre om feltet har en hvit brikke, sort brikke eller ingen brikke.
Spenningen fra sensorene måles av en Arduino Nano. Arduinoen har bare 8 analoge innganger for å måle spenning. For å kunne måle alle 64 sensorene er de koblet sammen i et rutenett med en utgang fra Arduinoen for hver kolonne med sensorer og en analog inngang for hver rad. Da kan en kolonne aktiveres om gangen og spenningen på alle 8 radene kan måles.
Brettet bruker USB-C for lading og det er mulig å kommunisere med brettet via enten Bluetooth eller USB-porten.
Mobilappen
Mobilappen er en native Android-app skreven i Kotlin. GUI er laget med Jetpack Compose. Algoritmen for å følge med på stillingen på brettet er egenlaget men den bruker Chesspresso for generell sjakklogikk som f. eks. å avgjøre hvilke trekk som er mulige/lovlige. Appen kjører opp Stochfish som en separat prosess som den siden kan kommunisere med via input- og outputstreams. Googles casting-bibliotek er brukt for å kommunisere med Chromecast-appen.
Chromecast-appen
Chromecast-appen er skrevet i TypeScript. Den bruker Googles casting-bibliotek for å ta imot data fra mobilappen og React for å vise den frem.
Hva har du lært?
Ettersom prosjektet er litt tverfaglig så har jeg vært innen noen temaer som jeg ikke jobber med til daglig eller ens har vært bort i tidligere og det er nok der jeg har lært meg meste. Det er fremfor alt tre ting å nevne der:
- Hvordan lading via USB fungerer. Det er mye å sette seg inn i hvis man skal gjøre alt etter boka (USB-spesifikasjonene). Man må kommunisere med strømforsyningen (uansett om det er en PC eller en 230V-adapter) for å avgjøre hvor mye strøm man kan bruke. For lading mens sjakkbrettet er på må man også passe på å redusere ladestrømmen tilsvarendes det brettet bruker sånn at ikke totalforbruket blir for stort.
- Hvordan lage CAD-tegninger for kretskort. Ved tidligere elektronikkprosjekter har jeg alltid loddet kretskortene selv. Til dette prosjektet fant jeg ut at det var bedre å få produsert noen av kretskortene isteden. Det har vært lærerikt og noe jeg definitivt kommer ha bruk for på flere prosjekter.
- Hvordan en Chromecast fungerer. Jeg har aldri laget verken en egen Chromecast-app eller noe som kan caste til en Chromecast før. Det var interessant å lære at en Chromecast i bunn og grunn bare er en nettleser og at ved casting sender man bare Chromecast-en til en nettside (SPA) som vises på TV-en.
Hva er status?
På nåværende punkt vil jeg fortsatt klassifisere prosjektet som en POC, eller kanskje en MVP. Alt funker men både mobilappen og Chromecast-appen trenger litt mindre fiksing før jeg vil si meg helt ferdig. For selv om det ikke er sluttproduktet som er det viktigste så er det likevel gøy å ha laget noe man er helt fornøyd med som man kan plukke frem i romjula når sjakkinteressen er på topp.