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).

Author: Ludvig Lindblom

Ludvig Lindblom is a front-end developer from Stockholm, Sweden who's nuts about internet, user interfaces and web standards. Besides his passion for the web he has an education in agriculture and forestry, has worked as a lumberjack, is a father of one and always has a chilled glass in the fridge on fridays for the weekly dry martini.

1 thought on “Stadsvolymer”

Comments are closed.