Tag Archives: LEGO

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.

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.

Arduino + LEGO Technic

Efter att jag satt hemma hos Pontus och lekte med hans Arduino så gick jag och, som jag skrev tidigare, köpte ett eget startkit och började experimentera med små projekt hemma. Men i dag så har det varit en Arduino-fest utan dess like.

Jag och Pontus har spenderat hela eftermiddagen och kvällen på Forsbergs Skola där vi ockuperat ett rum och skruvat, donat, och lekt med våra Arduinos och en massa LEGO Technic. Pontus har nämligen sin examensutställning om några veckor och jag bistår med hjälp gällande programmeringen av hårdvaran som han kommer använda sig av i sitt arbete.

Jag vill inte skriva för mycket om vad vi gjort, kom till slututställningen och se själva istället, men jag kan bjuda på en liten film som visar en del av vad vi jobbat på.