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.

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

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

3D-skrivare

Efter att suttit en hel del med hårdvara den senaste tiden så har jag börjat fundera allt mer på att införskaffa en 3D-skrivare. De har ju gått ner avsevärt i pris på bara två år och nu känns det ekonomiskt försvarbart att köpa en.

Det är jag och min kompis Pontus som funderar på att köpa en tillsammans, och förhoppningsvis får vi med ytterligare en vän att dela vårdnaden över skrivaren med. Det främsta användningsområdet kommer nog bli att skriva ut kugghjul och andra delar för LEGO Technic.

Just nu kikar vi på en Prusa i3, eller kanske något från RepRapPro. Det skulle säkert vara bättre att köpa en färdigmonterad skrivare från t.ex. MakerBot eller Cubify, men det känns som en rolig utmaning att köpa ett kit vi får montera själva. Sen är ju prisskillnaden ett par tusen kronor (och i vissa fall många tusen), dessutom är t.ex. RepRaPro helt open source vilket alltid är uppskattat.

Oavsett vart vi hamnar så kommer det bli fantastiskt roligt.

Nästa steg efter detta blir nog en AR.Drone 2.0 GPS Edition, men det får bli ett framtida blogginlägg.