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.

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 two and always has a chilled glass in the fridge on fridays for the weekly dry martini.