Category Archives: St. Blazey

DAT302 – Technical

The prototype uses of 3 sets of 5 LEDs, each LED is soldered to two 30cm long wires which are soldered into a positive and negative header for the sets. This means that the LED sets can be easily plugged into a bread board or directly into an Arduino. The soldering was fairly time consuming but it allowed for quick assembly.

We realised that the Arduino would not be able to provide enough power for the LEDs on it’s own so we decided to make use of the ULN2003 chips I used in Weather Transplant, the 470 Ohm resistors supplied with the LEDs  and an adjustable transformer to get the correct voltage.

To control the wall we needed to create a touch interface, the easiest way to do this and to make it multi-platform was to create a web application. The web application updated a MySQL database via PHP and displayed the data on a different page. This page is then read by a processing sketch (VoteBridge) that sends the data via the serial port to the Arduino.

And as usual, here is the code:

Processing

import processing.serial.*;

Serial myPort;
String votes;
Timer timer = new Timer(500);

void setup()
{
  size(200, 200);
  String portName = Serial.list()[0];
  myPort = new Serial(this, portName, 9600);
}

void fetchData(){
  String[] data = loadStrings("http://pluxel.co.uk/thevision/feed.php");
  votes = data[0];
}

void draw() {
  timer.update();
  if(timer.active()){
    fetchData();
    myPort.write(votes);
    println("Sent: "+votes);
  }

}

Arduino

int redPins[] = {22, 24, 26, 28, 30};
int bluePins[] = {32, 34, 36, 38, 40};
int whitePins[] = {42, 44, 46, 48, 50};

int redVotes = 0;
int blueVotes = 0;
int whiteVotes = 0;

unsigned long scrollLastMillis = 0;

boolean cycleCheck(unsigned long *lastMillis, unsigned int cycle)
{
  unsigned long currentMillis = millis();
  if(currentMillis - *lastMillis >= cycle){
    *lastMillis = currentMillis;
    return true;
  }else{
    return false;
  }
}

String txtMsg = "";
char s;

void setup() {
  Serial.begin(9600);
  Serial.flush();
  // initialize the digital pin as an output.
  pinModes(redPins);
  pinModes(bluePins);
  pinModes(whitePins);
}

void pinModes(int pins[]){
  for(int i = 0; i < 5; i++){
    pinMode(pins[i], OUTPUT);
  }
}

void reset(int pins[]){
  for(int i = 0; i < 5; i++){
    digitalWrite(pins[i], LOW);
  }
}

void loop() {
  if(cycleCheck(&scrollLastMillis, 1000)){
       while (Serial.available() > 0) {
        s=(char)Serial.read();
        if(s == 'n' || s == 'r') {
            txtMsg = "";
        }else{
            txtMsg +=s;
        }
    }
    if(txtMsg != "") updateVotes(txtMsg);
    txtMsg = "";
  }

  if(redVotes > 5 || blueVotes > 5 || whiteVotes > 5 ){
    boolean victory = false;
    // Voting has finished
    if(redVotes > 5){
      cycle(redPins, 100);
      victory = true;
    }
    if(blueVotes > 5){
      cycle(bluePins, 100);
      victory = true;
    }
    if(whiteVotes > 5){
      cycle(whitePins, 100);
      victory = true;
    }
  }else{
    displayVotes(redPins, redVotes);
    displayVotes(bluePins, blueVotes);
    displayVotes(whitePins, whiteVotes);
  }
}

void updateVotes(String txt){
  Serial.println("Reading: "+txt);
  redVotes = txt.substring(0,3).toInt();
  blueVotes = txt.substring(4,7).toInt();
  whiteVotes = txt.substring(8,11).toInt();
  reset(redPins);
  reset(bluePins);
  reset(whitePins);
}

void displayVotes(int pins[], int votes){
  for(int i = 0; i < votes; i++){
    digitalWrite(pins[i], HIGH);
  }
}

void cycle(int pins[], int period) {
  digitalWrite(pins[0], HIGH);
  delay(period);
  digitalWrite(pins[0], LOW);
  digitalWrite(pins[1], HIGH);
  delay(period);
  digitalWrite(pins[1], LOW);
  digitalWrite(pins[2], HIGH);
  delay(period);
  digitalWrite(pins[2], LOW);
  digitalWrite(pins[3], HIGH);
  delay(period);
  digitalWrite(pins[3], LOW);
  digitalWrite(pins[4], HIGH);
  delay(period);
  digitalWrite(pins[4], LOW);
}

DAT302 – St. Blazey

Our second project collaborating with the architects focused on the small Cornish town of St Blazey near St Austell and the Eden Project. Once a hub for mining, historically copper and tin but later china clay, this industry has mostly disappeared from the town.

The brief sought to create a community archive or museum with the design incorporating some interactive element. The architects worked on the design for the building as we developed the prototype. We came up with a wavy LED wall concept that would be built into one of the walls of the building. The wall would be used for democratic visualisations, with a question about the redevelopment of the town displayed on a screen and a touch screen voting interface. The display could also be used to visualise other elections and votes of interest around the world as well as other information all year round.