Tag Archives: stadsvolymer

Vad vi använde för att bygga Stadsvolymer

I går skrev jag om Pontus Willebrands examensprojekt för Forsbergs Skola, Stadsvolymer, och jag tänkte passa på att skriva lite om den hårdvara, mjukvara, och den öppna data som användes under utvecklingen.

Konstruktionen

Själva konstruktionen byggdes av brädor från ett byggvaruhus som skruvades ihop med vinkeljärn, och täcktes med vit foamboard.

Stadsvolymer - Konstruktion

Inuti konstruktionen så monterades olika rörliga delar byggt av LEGO Technic som till stora delar hade inhandlats på auktionssidor på nätet, eller från butiken Model Team i Bandhagen (varning för webbsida från tidigt 90-tal).

Det var även inuti konstruktionen som Arduinon, själva hårdvaran, placerades.

Stadsvolymer - Insida

Hårdvaran

Hårdvaran bestod en Arduino Uno Rev3 som inhandlades som en del av ett Startpaket från Kjell & Co. Hos dem köpte vi också en del extra sensorer och motorer, samt en ethernet shield, och en motor shield.

Arduino Uno Rev3

Vi hade också tusentals bitar LEGO Technic till vårt förfogande.

Stadsvolymer - LEGO Technic

Vi använde oss också av en 4G-router från TP-Link, en TL-MR3420 och ett 4G-abonnemang från Telia för att ha ett dedikerat nätverk för projektet.

Mjukvara

För att hämta data från de APIer jag skrev använde vi oss av Quartz Composer som är en samling  teknologier från Apple som gjorde det möjligt för oss att hämta data via RSS, hantera den, och rendera den som videos.

Projection Mappning genomfördes med Resolume.

Kod och programmering

Webbsidan stadsvolymer.iamleft.se skrevs i PHP mot en MySQL-databas, och Twitter-appen som postade tweets till besökare som angav sitt Twitter-namn använde sig av TwitterOAuth, ett kodbibliotek för att hantera OAuth för Twitters REST API. För enkelthets skull använde jag delar av Twitter Bootstrap för att styla sidan, och jQuery för att hantera formulärpostningar och förfrågningar till servern via AJAX.

Koden för att hämta tunnelbane-information använde APIet SL Realtidsinformation från Trafiklab och jag skrev en egen liten wrapper för att snabba upp anropen och plocka ut delar av datat.

Övrig data som projicerades på konstruktionen hämtades hem i förväg från olika myndigheter som t.ex. Statistiska Centralbyrån eller Stockholm Stad Dataportalen.

Koden som styrde Arduinon och tog emot signaler från de olika sensorerna och ethernet shielden, samt skickade kommandon till motorerna och servomotorerna skrevs i Wiring, det programmeringsramverk för mikrokontroller som bland annat Arduino använder sig av.

Som jag skrev i gårdagens inlägg så kunde vi inte använda oss av den, i Wiring, vanliga delay()-funktionen utan vi fick importera biblioteket elapsedMillis för att kunna skriva funktioner som kunde pausa sig själva utan att stoppa resten av funktionerna från att köras.

Vi använde också tredjepartsbiblioteket VarSpeedServo skrivet av Ewan Branda för att kunna styra hastigheten på servomotorerna som annars har en fast hastighet.

Och eftersom den ethernet shield vi köpte inte var den officiella som bygger på ett Wiznet W5100-chip, utan en annan som bygger på ENC28J60-chipet så fick vi använda ytterligare ett tredjepartsbibliotek för att kunna skriva koden som om det vore en original-shield. Det biblioteket heter UIPEthernet och är skrivet av Norbert Truchsess.

Min kod, utan de inlänkade biblioteken, hamnade på knappt 400 rader (med kommentarer) och var egentligen inget avancerat. Eller så skriver jag helt enkelt funktionell och optimerad kod (troligt).

Och det var det om själva utvecklingsprocessen.

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

Stadsvolymer på Forsbergs

Eftersom jag inte kommer hinna skriva ett inlägg om det projekt jag hjälpt Pontus Willebrand bygga inför sitt examensarbete på Forsbergs ikväll, och eftersom jag sitter på en klippa med utsikt över hela Stockholm och dricker rosé just nu så får ni bara en bild på projektet.

20140523-221520-80120736.jpg

I morgon ska jag skriva en mer detaljerad beskrivning av projektet och vad jag byggt.