FabLab bootcamp

fabingFrom june 21st till july 4th, I attended FabLabs bootcamp in Lyngen. A two week course in the use of fabrication tools for parting, joining and modelling different materials to make almost anything. Fun stuff! The best part though, is the social networking. Now I am connected to this amazing international pool of skilled people, that all regard sharing knowledge as key to progress. This is an opportunity to move from tinkering, to making technology people can benefit from. The FabLab is such a great toolbox, and it comes with so many kilos of brain.

From now on I will keep as much of the content as possible in english. There is no time however to translate all that’s already in here.

En lang lur…

Jeg har vert på Fablab i Lyngen! Håper å dra tilbake på BootCamp den 8. juni for å lære og bruke utstyret. Denne gangen rakk jeg bare å kikke så vidt på en Epilog laserkutter/-graverer, men der er mye mer morro. En fantastisk stor takk til Håkon Karlsen for å ha tatt så godt imot meg!

Videre har jeg avdekket T-spolens “hemmelighet”. En T-spole/telespole, er kanskje best kjent som teleslynge. Jeg har det i høreapparatene mine, men utstyret fra hjelpemiddelsentralen for å bruke T er så dårlig at jeg ikke bruker det. Det viser seg at alt som skal til for å få T-spolen til å funke er et variabelt megnetfelt. Ingen modulering! Kveil en ledning rundt halsen og koble endene til høytalerutgangen på stereoen -et voila. Kommer plutselig mer om dette :)

Annet:
-RFID malware
-Piezoelektrisk kinetisk sensor
-2,4GHz antenner
–Div. Open firmware til Linksys (Cisco) WRT54G/L/S. Mye bra!
–ComputerVision lib. og Processing

DNS kommer

Jeg har registerert http://ingenflere.miner.nu/

Der kommer arduinoHTTPserveren, men fåreløpig peker port 80 hit. Det må jeg floke ut. Men først må jeg sove litt…

Ny frisk på HTTPserveren

Byttet Arduino software fra 0011 til 0014. Byttet Diecimila med Duemilanove. Byttet server.write() med clien.println(). Byttet min villfarelse med kunnskap og kode fra arduino.cc. Det virker fint :)

#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 177 };

Server server(80);

void setup()
{
Ethernet.begin(mac, ip);
server.begin();
}

void loop()
{
Client client = server.available();
if (client) {
// en http forespørsel ender med en blank linje
boolean denne_linjen_er_blank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
// Hvis HTTP forespørselen er over kommer ‘/n’
if (c == ‘\n’ && denne_linjen_er_blank) {
// da kan vi svare
// send HTTP responsheader
client.println(”HTTP/1.1 200 OK”);
client.println(”Content-Type: text/html”);
client.println();
client.println(”<html>”);
client.println(”<head>”);
client.println(”<title>”);
client.println(”Arduino”);
client.println(”</title>”);
client.println(”</head>”);
client.println(”<body>”);
client.println(”<h1>”);
client.println(”Arduino HTTP server”);
client.println(”</h1>”);
client.println(”<br>”);
client.println(”<br>”);
client.println(”<h5>”);
client.println(”En HTTPserver du kan kaste på noen du ikke liker”);
client.println(”<br>”);
client.println(”Av Bernt E. Berntzen”);
client.println(”<br>”);
client.println(”berntzen@gmail.com”);
break;
}
if (c == ‘\n’) {
denne_linjen_er_blank = true;
} else if (c != ‘\r’) {
denne_linjen_er_blank = false;
}
}
}
// gi nettleseren tid til å motta data
delay(1);
client.stop();
}
}

Neste steg er dokumenthåndtering i stedet for å kode HTMLen inn i arduinoen. Jeg har et sideprosjekt på gang med microSD -kanskje disse kan kombineres. Vi får se…

Bare tull

Enda mer Arduino HTTP-server: Denne server.write([bokstav/tegn]) ideen er ubrukelig. Steintavler er noe mer fleksible enn serveren min. Jeg må få WIZnet-chipen til å snakke seriellt med ATMEGAen.

Unicodemareritt

Æ æ
Ø ø
Å å

Det er stort sett de lydene jeg lager når jeg prøver å skrive min ATM168HTTPd som nevnt under her. I Unicode er “Æ” “0195“, hvilket i HTML blir “Æ“. Vel og merke er “æ” “0230“, HTML “æ“.

Æ” blir jo “&Aelig;“. Hver jævla “Æ” er intet mindre enn 7 tegn, som vil bli ca 10000000 tegn i kode (joda, det er et litt drøyt annslag, men du skjønner..).

Dette blir en “Æ“:

server.write(symbol[3]);
server.write(alfa[0]);
server.write(alfa[4]);
server.write(alfa[11]);
server.write(alfa[8]);
server.write(alfa[6]);
server.write(symbol[4]);

Pluss, jeg trenger et eget array for versaler.

Her er en kode:

While {
gud.forbanner(babylonerne)
{ bernt.forbanner(gud) }
}

Atmega 168 HTTP-server

Kanskje ikke ideal-hardvaren å lage HTTPserver av, med sine 14KB minne. En gullfisk kan lære seg kildekoden utenat. Her er første testkode:

#include <Ethernet.h>

// net config.  gateway og subnet kan man egentlig drite i…
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 10, 0, 0, 177 };
byte gateway[] = { 10, 0, 0, 138 };
byte subnet[] = { 255, 255, 255, 0 };
char alfa[29] = {’a', ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’, ‘h’, ‘i’, ‘j’, ‘k’, ‘l’, ‘m’, ‘n’, ‘o’, ‘p’, ‘q’, ‘r’, ’s’, ‘t’, ‘u’, ‘v’, ‘w’, ‘x’, ‘y’, ‘z’, ‘æ’, ‘ø’, ‘å’};
char symbol[3] = {’<’, ‘>’, ‘/’};

Server server = Server(80);

void setup()
{
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
}

void loop()
{
Client client = server.available();
if (client) {
server.write(symbol[0]);
server.write(alfa[7]);
server.write(alfa[19]);
server.write(alfa[12]);
server.write(alfa[11]);
server.write(symbol[1]);

server.write(alfa[1]);
server.write(alfa[4]);
server.write(alfa[17]);
server.write(alfa[13]);
server.write(alfa[19]);

server.write(symbol[0]);
server.write(alfa[1]);
server.write(alfa[17]);
server.write(symbol[1]);

server.write(symbol[0]);
server.write(symbol[2]);
server.write(alfa[7]);
server.write(alfa[19]);
server.write(alfa[12]);
server.write(alfa[11]);
server.write(symbol[1]);
}
}

Foreløpig har jeg definert 2 arrayer. Ett for alfabetet, og ett for klammer og slikt. Så spruter jeg ut omstokkinger av disse arrayene ved forespørsel på port 80. Dette blir så primitivt at det lukter kommune.

Det jeg tror jeg må gjøre er å skrive en parser som henter HTML-dokumenter fra f.eks et SDkort, for så å oversette dem til arrayspråket mitt.

Så bør jeg legge til støtte for flere brukerseanser. Kanskje litt sikkerhet, kanskje POST/GET eller noe for klient-server-dialog…

Go bother Leonard Cohen.

A fork of the code

Jeg delte NMEA-leseren jeg skrev til GPSprosjektet i to.

bilde-2

‘BerntsGPS’ har minimal konfigurering, og forventer NMEA inn som seriell data.

bilde-1

‘Mordi’ er mye mer fleksibel, og tar inn alt bare det er seriellt :)

Global Posisjonering

Jeg har plugget en GPS-mottager til en Arduino. Utrolig arti! Noen få linjer kode, det meste ligger i ‘SoftwareSerial’ biblioteket. Jeg satte opp et par pinner på min Atmega168 til å snakke seriellt

med GPSmottageren og ba om å få videresendt denne kommunikasjonen via USB. Så skrev jeg et lite program i RealBasic som viser meg det som evt. kommer inn på den seriellporten jeg velger. Nå spruter det inn posisjonsdata som NMEA. Jeg må lese mer før jeg klarer å gjøre NMEA-tekst om til vakker grafikk.

dsc00048-300x225dsc00056-300x225

Den fine boksen var en ZyXEL Omni.net ISDN terminaladapter.

Om der er noen interesse for det, legger jeg selvfølgelig ut kildekoden -kakk i mæ :)

Vi har flyttet

Nå bor vi i Salangen. Serveren for denne siden er oppe bare når jeg er det :) Det er nemlig min egen iMac, bak en haug av routere, svitsjer, accesspoints osv. Jeg har sikker brukt mer tid på konfigurering av NAT enn jeg ville brukt på å sette opp en egen server i DMZ -en standard Bernt… Jeg lover å ordne en orntli’ server ganske snart ;)