in english luftkvalitet | prototyperspecifikationer | kontakt
SS
Endelig version

Her er diagrammer og Java kode over den endelige version. Javakoden trækker de aktuelle data fra internettet. Gennem en "Labjack" kontrolleres en lineær acentuator som bevæger vinduet ind og ud. Der er desuden monteret kontakter på karm og vindue for at sikre at vinduet ikke bevæges ud over yderpositionerne.
diagram (.pdf)
java kode (.zip)
koden er open source.
Diagram og kode Kristian Fredslund

Billede fra installation på Københavns Rådhus
Tidligere version
public proto
Diode prototype i byen. Indikatoren her viser den aktuelle forureningegrad til venstre, og de kommende to dages prognoser i de to rækker til højre.
Om indikatoren
Indikatoren tager data fra internettet om den aktuelle forureningsgrad og prognosen to dage frem. Indikatoren opdateres hver time. Praktisk fungerer det ved at et program på en computer (se nedenfor) læser data, sorterer dem og sender dem til en processor som i tilfældet til venstre styrer en række dioder.

Indikatoren er Open Source og copyright fri

Dvs at alle må kopiere og modificere konstruktion og kode. Den er produceret med værktøjer og software der er frit tilgængelige på nettet.

Environmental computing
At tage data fra internettet og give dem en fysisk form, åbner for mange muligheder for DIY monitorering, eller for at sætte en lang handlinger i spil som konsekvens af informationer eller nyheder på nettet. 
window Vindues indikator på Rådhuset
I denne model styrer et lignende system som beskrevet ovenfor en vinduesåbner der åbner og lukker et vindue på Rådhuset i København alt efter forureningsgraden. Offentligheden kan aflæse de forskellige grader på udhænget, lukket vindue = varsel, helt åbent =under middel.

board300Billede af kredsløbet (klik for stort billede) servo nederst, Picaxe processor øverst til højre, forbindelse til computeren øverst til venstre
Liste over komponenter (til prototype)

Picaxe 18x processor
9V batteri
5V regulator
servo motor
Modstande; 330,10K, 180, 22K 
USB til serieport converter

Diagram
på vej

Tak til: Niklas Roy for hjælp til prototype, cyberniklas.de

Program
Programmet er skrevet i Processing som også er Open Source, dvs kan downloades af alle.

Programmet er skrevet af Jörg Pohl fra www.roboter-teile.de baseret på kode af Tom Igoe, og idé af Nis Rømer. Programmet kan ses nedenfor eller downloades her




// Pollution Display
// written by Jörg Pohl
// concept Nis Rømer

/* Comment, what this program does is connect to an internetpage and "read" the content, then it searches  for special characters that identifies the data we are interested in in the webpage. From there it sends the data to the computers serialport. A Picaxe processor takes the data from the serialport and mooves a servo acordingly. The script can be modified to suit a number of purposes that deals with displaying data from the internet in the "real" world. A beginners manual for customizing the script is to follow.
*/

// uses http client, written by Tom Igoe
// http client

// Starts a network client that connects to a server on port 80,
// sends an HTTP 1.1 GET request, and prints the results.

import processing.net.*;
import processing.serial.*;

Client client;
Serial port;

char thisByte = ' ';
int hour_old = -1;
String sInput;
String sOutput;
PFont fontA;        // Font for printing

void setup()
{
  size(200, 200);

  // Load and prep fonts to print to window
  fontA = loadFont("CourierNewPSMT-24.vlw");
  textFont(fontA, 24);

  noStroke();
  // Open a TCP socket to the host:
  client = new Client(this, "www.TheDomaine.dk", 80);
//above is where you fil in the domaine ex www.dr.dk

  // Print the IP address of the host:
  println(client.ip());

  //the port is set to 2 and baudrate set to 4800,  changed to COM1, 4800bps
  port = new Serial(this, Serial.list()[2], 4800);

}

void draw()
{
  background(0);

  int m = month();  // Values from 1 - 12
  int y = year();   // 2003, 2004, 2005, etc.
  int h = hour();   // 0-23

  int i;
  String s;

  if ( m < 10 )
  {
    s = String.valueOf(y) + '0' + String.valueOf(m);
  }
  else
  {
    s = String.valueOf(y) + String.valueOf(m);
  }
  text(s, 10, 56);

  if (h != hour_old)   // read website every hour
  {
    // Send the HTTP GET request:
    client.write("GET /the_path_to_your_file.html HTTP/1.1\n");
//this points to the file on the internet with the data (rest of path. ex you want: www.dr.dk/news.html
// then you write /news.html
    client.write("HOST: www.TheDomaine.dk \n\n"); //again substitute with your URL
    hour_old = h;
  }

  // Print the results of the GET:
  while (client.available() > 0)
  {
    sInput = client.readString();
    i = sInput.indexOf (s);  // searching for datestring yyyymm
    i = i + 10;  // add offset to information
    if (i != -1)
    {
      sOutput = ':' + sInput.substring (i,i+3) +',' + sInput.substring (i+5,i+8) + ',' + sInput.substring (i+10,i+13) + char(13) + char(10);
      println(sOutput);
      port.write(sOutput);
    }
  }

  // reads and print serial input from PICAXE     for Debugging
  while (port.available() > 0)
  {
    String inBuffer = port.readString();
    if (inBuffer != null)
    {
      println(inBuffer);
    }
  }
}


/* Example of what is printed:
this is an example of what the http client writes
195.41.77.12
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
X-Powered-By: ASP.NET
Date: Mon, 29 Aug 2005 08:15:03 GMT
Content-Type: application/octet-stream
Accept-Ranges: bytes
Last-Modified: Mon, 29 Aug 2005 05:13:27 GMT
ETag: "c3fc566358acc51:96b"
Content-Length: 25

20050829
1,2
2,2
3,3

*/


'PICAXE Environment Pollution Display
'serial connection to PC

'Connect IN5 with TXD (PC)
'Use Terminal with 4800bps, 8, N, 1
'09/2005 roboter-teile.de author: Joerg Pohl
'using picaxe 18x processor

'Define ports
symbol SIn = 0      ' serial Input Port
symbol SRVOut = 0         ' Servo Output Port

'Define variables
symbol day1 = b0
symbol val1 = b1
symbol day2 = b2
symbol val2 = b3
symbol day3 = b4
symbol val3 = b5
symbol srv  = b6

init:
main:
  serin SIn,N4800,(":"),#day1,#val1,#day2,#val2,#day3,#val3 
' read from serial
  sertxd (#day1,#val1,#day2,#val2,#day3,#val3)  
' feedback for debug

  srv = 150                                     
' for safety if value wrong
  lookup val1,(0, 75, 112, 150, 187, 225), srv

  servo SRVOut, srv

  goto main


397 397