Stadsvolymer

Det började den 23:e april då min vän Pontus Willebrand var förbi och han frågade om jag kände till Arduino, samt om jag kunde hjälpa honom programmera för en sådan. Pontus planerade nämligen att implementera en Arduino i sitt examensprojekt på Forsbergs Skola, och den här helgen så har examensutställningen varit.

Lite kort om Arduino

Det är en fysisk datorplattform med öppen källkod, baserad på ett enkelt mikrokontrollerkort, och en utvecklingsmiljö för att skriva programvara för kortet.

Den kan användas för att utveckla interaktiva objekt, med ingångar från olika switchar eller sensorer och styra en mängd olika lampor, motorer, och andra fysiska utgångar.

Projekten kan vara fristående eller de kan kommunicera med programvara som körs på datorn och programmeringsspråket är en implementering av Wiring, ett programmeringsramverk för mikrokontroller.

Det finns en uppsjö tillbehör för att bygga vidare på kretskortet, som byggklossar man kopplar på för att tillförskaffa sig extra funktioner. Bland dessa så kallade “shields” finns bland annat en som tillåter en att koppla på fler och kraftigare motorer, en för att kommunicera över ethernet och/eller wifi, med mera.

Projektet Stadsvolymer

Pontus idé för sitt examensprojekt kretsade kring stadens processer. En av anledningarna till detta var att temat för årets examensutställning var just “process”.

Saxat från Forsbergs examensutställning 2014

“En process strävar efter ett resultat. Den tar omvägar, genvägar, börjar om igen men har blicken riktad mot slutet. Det har vi också. Efter två år som kreatörer på Forsbergs har vi slipat våra hantverk. Vi har blivit skapare med en kreativ höjd som har börjat stryka längs med skolans tak. Det har varit två år av en konstant och utvecklande process som vi ofta pratar om. Den personliga processen, både individuellt och i grupp. Nu har vi nått taket på skolan och måste fortsätta processen på någon annan plats. Vi har växt ur skolans kläder och måste ut och ta på oss något större som vi kan fortsätta att växa i och anpassa våra hantverk efter. Vi tycker att verktygen är lika viktig som portfolion. Hantverket lika viktigt som idén. Processen lika viktig som resultat.”

Exakt vilka av stadens processer som skulle arbetas in i projektet var inte spikat, men han hade många idéer och en bra vision.

Tanken var att bygga en konstruktion av trä och foamboard, och använda så kallad “projection mapping” för att använda konstruktionen som en projiceringsyta för olika typer av data. Konstruktionen skulle även vara interaktiv på så sätt att besökarna skulle kunna interagera med den via olika sensorer, och kanske även över internet, för att styra delar av den. Och det var här jag kom in.

Att bygga konstruktionen, skapa allt videomaterial, syssla med projection mappning, och införskaffa data från olika officiella källor som t.ex. SCB var inga problem. Men att programmera Arduinon så den kunde styra olika delar behövde Pontus hjälp med.

Utvecklingen

Vi började med att spendera en kväll hos Pontus där jag bekantade mig med hårdvaran, utvecklingsmiljön, och programmeringsspråket innan jag bestämde mig för att jag kunde hjälpa till.

Sedan så rullade det sakta men säkert på. Pontus kom med frågor om vad som skulle vara möjligt, jag svarade efter bästa förmåga, han satt på skolan och byggde olika konstruktioner samt pysslade med LEGO Technic som skulle fungera som löpande band, kolvar och annat som skulle kunna få konstruktionen att röra sig, och jag satt hemma och lärde mig mer om Arduinon.

Efter ett tag hade en mer konkret idé om projektet tagits fram och sedan början av maj så spenderade vi ett par heldagar och kvällar på Forsbergs där vi byggde LEGO, kopplade olika typer av sensorer och motorer till Arduinon, samt skrev kod.

De bestämdes att konstruktionen skulle ha tre stycken PIR-sensorer (passive infrared) som skulle styra olika typer av videosekvenser via projection mapping samt att en av dem skulle styra en kolv som skulle skapa en rörelse i konstruktionen.

Det skulle också finnas ett löpande band gömt inne i konstruktionen som med en fast intervall spottade ut en liten plastfigur på en platform för att representera barnafödandet i Stockholm.

Det skulle dessutom finnas ytterligare en rörlig del på konstruktionen, denna skulle dock styras via en webbsida som besökarna kunde gå in på. Tanken var att besökare som gick till http://stadsvolymer.iamleft.se/ skulle kunna skriva in sitt twitter-namn och/eller riktiga namn, samt ett valfritt meddelande.

Meddelandet skulle sedan implementeras i videoprojektionen så det var bara en fråga om att spara datat i en databas, bygga ett litet API som svarade på anrop med en XML-output som hämtades från en mjukvara som låg och pingade APIet och skickade det till projiceringsmjukvaran.

Om man fyllde i sitt twitter-namn så skrev även kontot @stadsvolymer på Twitter en tweet och tackade dig via mention för att du besökte utställningen. Fyllde man bara i sitt namn så skrev det fortfarande en tweet, dock utan mention. Detta skedde genom en Twitter-app som jag skrev.

Om man fyllde i sitt twitter-namn fick man dessutom upp en knapp på webbsidan, och klickade man på den så sparades olika värden i en databas till vilken jag skrev ytterligare ett API som returnerade när någon hade klickat på knappen. Arduinon i sin tur låg och kollade mot det APIet och när den fick information om att någon klickat på knappen så öppnades ett par dörrar i konstruktionen och ett meddelande projicerades där de uppmanades att ta ett visitkort som låg bakom dörrarna.

Själva koden för allt det här var inte speciellt avancerad, det svåra var att knyta ihop allt med de externa APIerna jag satt upp, samt att få den ethernet shield vi satt på Arduinon att fungera som vi ville. Det slutade med att vi skaffade en egen 4G-router och kopplade arduinon till den, så vi var säkra på att ha en stabil, och dedikerad uppkoppling.

Eftersom det vanliga sättet att programmera fördröjningar i koden för Arduino innebär att man låser alla funktioner i så länge som man önskar så kunde vi inte använda denna metod. Vi var tvugna att ha olika funktioner som låg och tickade hela tiden, oberoende av varandra. För att lösa detta fick vi använda ett tredjeparts-bibliotek till Arduino vid namn elapsedMillis, och vi fick även använda oss en del andra kodbibliotek för att kunna göra det vi ville, t.ex. att styra hastigheten på de servo motorer vi använde oss av.

Förutom allt detta så satte jag även upp ett litet API för att returnera specifik realtidsdata från SL, nämligen när nästa och kommande avgång/ar från tunnelbanestation Zinkensdamm är. Denna data skulle Pontus sedan hämta precis som övrig data och projicera ut på konstruktionen när ett av de tre teman som bestämdes triggades av en av PIR-sensorerna.

De tre teman

Pontus valde att jobba med tre teman för de olika projiceringarna, dessa var:

  • Befolkningsökningar och byggande
  • Livskvalitet och socioekonomiska
  • Kommunikation

Under befolkningsökningar och byggande så projicerades det ut data om t.ex. nybyggnationer och barnafödande.

Under livskvalitet och socioekonomiska temat var det data om medellivslängd för män respektive kvinnor i olika kommuner i Stockholm, information om vattendistribution och reningsprocuduren av avloppsvatten som syntes.

Och för temat kommunikation så projicerades det data från Stockholms tunnelbanesystem, stadens hamntrafik, antalet registrerade fordon under olika tidsintervaller, med mera.

Dessa tre teman hade varsin färg; gul, röd, och blå, och datat som projicerades var inte bara statiskt utan det animerades för att visualisera stadsprocesserna. T.ex. så scrollade realtidsdatat från SL som en riktig skylt i tunnelbanan, “vatten” rann nerför sidan av byggnaden när de handlade om reningsprocessen, och röda prickar fyllde andra ytor för att visualisera befolkningsökningen.

Resultatet

Själv tycker jag att slutresultatet blev fantastiskt. Långt bättre än jag kunnat föreställa mig, och av alla uttalanden och kommentarer från besökarna på utställningen att döma så var det en succé.

Tema blå, Livskvalitet och socioekonomiska
Stadsvolymer - Livskvalitet och socioekonomiska

Tema röd, befolkningsökningar och byggande
Stadsvolymer - Befolkningsökningar och byggande

Tema gul, kommunikation
Stadsvolymer - Kommunikation

Självklart så ska jag bjuda på en video så att ni kan se hur allt knöts ihop.

Bonus

I rummet som Pontus hade till sitt förfogande stod det en gammal diskbänk som tyvärr inte gick att flytta på. Så för att göra det bästa av situationen täckte han över den med en träskiva och limmande fast 450 stycken modellfigurer (samma som användes i det löpande bandet för att representera barnafödande i Stockholm) på skivan.

Dessa 450 figurer representerade tillsammans de 450.000 människor som just nu står i bostadskö i Stockholm.

Stadsvolymer - Bostadskö

Detta var historien om projektet Stadsvolymer, och allt jag har att tillägga är att jag haft vansinnigt roligt när jag och Pontus har suttit och lekt med hårdvara, LEGO, kod, och videoprojiceringar.

Om du har några som helst frågor om projektet får du gärna skriva en kommentar (så länge kommentarsfältet är öppet) eller hugga tag i mig på Twitter (där jag skriver som @internuts).

Inget tech talk, men succé på Forsbergs Skola

Tyvärr så missade jag TV4 Tech Talk i kväll då diskbråcket tvingat mig att jobba hemifrån i två dagar nu. Men jag har i alla fall fått veta att förhandsvisningen av Pontus examensprojekt “Stadsvolymer” på Forsbergs Skola gick över förväntan i dag.

VI hade en hel del problem med Arduinons ethernet shield, framför allt så verkade den tappa kontakten med nätet när den programmet hade körts en längre tid. Det visade sig att det var kommunikationen över serialporten (som vi använder för att skicka kod till en midi-brygga för att skicka vidare till en mjukvara som styr en rad videoprojektioner) som ibland ställde till det.

Som tur var så räckte det att bocka ur och sedan i en kryssruta i midi-bryggan för att allt skulle börja fungera igen. Så märkte Pontus att en specifik del av hans konstruktion slutade svara på anrop från nätet så tog det bara 5 sekunder att åtgärda problemet, utan att behöva starta om arduinon.

På fredag är det jag som svänger förbi Forsbergs och kollar på den “riktiga” utställningen för att se allt som jag jobbat med “in action”.

Det är mycket nu

Har haft ovanligt mycket att göra senaste tiden.

Jag har, som jag bloggat en del om redan, hjälp min vän Pontus med hans examensprojekt för utställningen på Forsbergs Skola nu på fredag och lördag (samt en liten förhandsvisning för byråfolk i morgon). Det har byggts LEGO, kodats i Wiring för Arduino, satts upp en webbtjänst för att styra delar av projektet, samt byggts en Twitter-app.

Jag har också haft mycket att göra med en intressant lösning i mitt jobb som konsult hos TV4, det har varit årets viktigaste högtid (första maj) med tillhörande socialist-fest, och (vad det känns som) en miljon andra saker.

Men nu ska det äntligen bli lite lugn och ro igen. Jag är färdig med mitt inför fredagens utställning, snart är projektet hos TV4 färdigt, och om drygt 2 veckor åker jag med familjen till Kreta.

Efter det får vi se vilka spännande projekt jag kommer ta för mig. Jag har redan några roliga idéer på gång tillsammans med Pontus.

Pyssellördag

I dag har jag hängt på Forsbergs tillsammans med Pontus hela dagen och fortsatt arbeta på hans examensutställning. Det har pysslats en del med LEGO Technic, jag har gjort mindre ändringar i de två APIer jag skrivit, och jag har registrerat en ny domän och satt upp en liten webbsida; men mest har jag försökt få en Ethernet Shield för Arduino, modell VMA04 från Velleman, att koppla upp sig mot internet och hämta data från en webbtjänst jag byggt.

Det visade sig denna Ethernet Shield är baserad på ett ENC28J60-chip, till skillnad från den officiella som är baserad på ett Wiznet W5100 chip, och detta medförde lite komplikationer i början.

Det officiella ethernet-biblioteket som man inkluderar i sina sketch-filer när man ska programmera för Arduino fungerar nämligen inte med ENC28J60-chippet och den informationen saknades i instruktionsmanualen. Så det var först efter ett antal misslyckade försök och lite googlande som jag hittade lite alternativa kodbibliotek.

Det alternativ jag till slut landade på var UIPEthernet som är skrivet att fungera på precis samma sätt om originalbiblioteket, men för ENC28J60-chip, och efter många extra timmar så fick jag någon så när ordning på koden. Det är fortfarande lite problem med nätverket och automatisk tilldelningen av IP via DHCP i nätverket på Forsbergs men jag hoppas kunna lösa detta i dag med en egen router.

Förhoppningsvis kommer jag kunna knyta ihop säcken kring kodbasen för Arduinon i dag, och på fredag är det dags för själva utställningen. Efter det kommer jag posta lite bilder och filmklipp från våra byggsessioner, och skriva en mer utförlig beskrivning av projektet. Jag vill ju inte spoila Pontus examensarbete innan det har ställts ut.

Längtan efter Kreta

Nu är det precis tre veckor kvar tills jag och familjen tar en timeout och hoppar på planet till Kreta, och det ska bli så oerhört skönt att bara göra absolut ingenting. Med ingenting menas ligga i en solstol bredvid poolen och läsa böcker, turas om att vara med lillgrabben när han ska åka vattenrutschbana/leka i barnpoolen, äta gott, och vila.

Jag har verkligen inget stressframkallande jobb och jag lever ett, på alla sätt, lätt liv, men alla problem med diskbråck och operationen av ateromet har tagit ut sin rätt och jag längtar efter en vecka fri från krav och måsten så jag håller på att spricka.

Jag ser fram emot ett par andra saker innan det är dags att packa väskorna, framför allt examensutsällningen på Forsbergs Skola eftersom jag hjälper min vän Pontus med hans projekt där vi bygger med LEGO Technic, programmerar Arduinos, bygger webbtjänster, och leker med projektorer.

Jag kommer posta mer om Pontus projekt när utställningen har varit, men nu får ni nöja er med en bild från hotellet jag och familjen åker till om tre veckor; Sunwing Makrigialos Beach på Kreta.

Sunwing Makrigialos Beach