• Beyond The Garden Wall

    Carla Labunda09/03/2018 at 01:03 0 comments

    Look beyond your garden wall.

    Poverty is closer than you think.

  • Project Log 14: Setup & Exhibition

    Carla Labunda09/03/2018 at 01:03 0 comments

    The Final Frontier

    It's crazy to think about how we should have gotten all of this done by Week 13. 

    At least, according to the initial brief anyway. 


    The one week extension helped us complete the project much more comfortably. For the first half of the final week, we were preoccupied with final submissions for two other subjects. From Wednesday onwards, it was all hands on deck to complete the whole installation. 


    On Wednesday itself we went over to the Sunway workshop to put the final “dirt” finishing onto our walls.   Poster design for the back walls came underway as well. To keep at it, some of us even stayed overnight at the Fabrication Lab to continue designing/writing and soldering (though mostly it was in solidarity of our fellow classmates).

    We had a late start to Thursday from the previous night’s fatigue. We surveyed some prices for finishing materials like the table cloth and clothes basket, then we reviewed the final item and prop list for each of us to bring over for Friday night’s post mall-closure setup.


    Setup day. In the AM, we compiled all our props, bought the last of the material, and printed up all of our posters. From 9pm onwards, we were all whisked away to the Sunway Workshop in a flurry of adrenaline and kan cheong-ness. Once the mall closed up, and everybody’s things were carried over, we got to work setting up with much help from the Sunway Workshop crew.
    The structure was disassembled, then reassembled onto the exhibition floor. After the platform and walls were locked in, we began a lethargic start to putting in our wiring. Fast forward 10 hours later, at 8AM, we’re all done - though not without some quick soldering fixes, dance breaks, and quick naps. 

  • Project Log 13: Final Checks

    Carla Labunda09/03/2018 at 01:02 0 comments

    WEEK 13

    Monday, 13/08/2018

    • Reactable Video Re-Shooting Day 3. 
    • Filmed CLOTHING and FOOD scenes.

    Tuesday, 14/08/2018

    • Sunway Workshop Visit: Drill holes for wires, double-check wire placement.
    • Distributed video editing tasks.

    Wednesday, 15/08/2018 

    • Reactable Video Re-Shooting Day 4. 
    • Filmed JOBS, extra scenes.

    Thursday, 16/08/2018

    Met up at Sunway workshop with lecturers and client for Final Review. Everything in order; on the right track. Just need to tie up loose ends:

    • Properly install wires and conceal them
    • Add additional props to enhance visual theme
    • Create posters for back-wall finishing

  • Project Log 12: Final Reshoots, TV Magic, Everything 2.0

    Carla Labunda09/03/2018 at 01:01 0 comments

    WEEK 12 

    Tuesday, 07/08/2018

    • Testing CRT TV. 

    Wednesday, 08/08/2018 

    • Yong Jie and lecturer made magic: the CRT TV finally works, though the resolution is not as clear as we thought it would be. This leaves out the option for subtitles for our narration, as text is hardly visible. Final messages therefore need to be concise and enlarged as well. We no longer have to consider adding 'glitch' VFX to our footage as the tv seems to do it by itself. Au naturel. 
    • Radio tinkering for audio output has been scrapped in the interest of time; the tv audio seems loud enough for now.  

    Thursday, 09/08/2018 

    • Structure Construction Day 5: Review cut-out window, complete painting, and measuring wire lengths to cut from the in-and-out's of the total structure. 

    Friday, 10/08/2018 

    Final check to confirm video re-shooting schedule over weekend:

    • Confirm actors.
    • Confirm props.
    • Confirm wardrobe.

    Saturday, 11/08/2018  

    • Reactable Video Re-Shooting Day 1. 
    • Filmed COMFORT, HEALTHCARE, and SECURITY scenes. 

    Sunday, 12/08/2018 

    •  Reactable Video Re-Shooting Day 2. Filmed EDUCATION scenes.

  • Processing code

    Tan Yong Jie08/29/2018 at 05:20 0 comments

    import processing.serial.*;
    Serial myCommChannel;
    
    
    
    import processing.video.*;
    Movie Video01;
    Movie Video02;
    Movie Video03;
    Movie Video04;
    Movie Video05;
    Movie Video06;
    Movie Video07;
    
    
    
    float startPlayTimeVideo01 = 0.0;
    float startPlayTimeVideo02 = 0.0;
    float startPlayTimeVideo03 = 0.0;
    float startPlayTimeVideo04 = 0.0;
    float startPlayTimeVideo05 = 0.0;
    float startPlayTimeVideo06 = 0.0;
    float startPlayTimeVideo07 = 0.0;
    
    
    
    boolean isPlayingVideo01 = false;
    boolean isPlayingVideo02 = false;
    boolean isPlayingVideo03 = false;
    boolean isPlayingVideo04 = false;
    boolean isPlayingVideo05 = false;
    boolean isPlayingVideo06 = false;
    boolean isPlayingVideo07 = false;
    
    boolean isCurrentlyPlaying = false;
    char lastSerialInput = 'z';
    
    byte trackID = 0;
    
    void setup() {
      fullScreen();
    
      //size(1380, 1220);
      printArray(Serial.list());
      myCommChannel = new Serial(this, Serial.list()[0], 9600);
    
    
    
      Video01 = new Movie(this, "video01.mp4");
      Video02 = new Movie(this, "video02.mp4");
      Video03 = new Movie(this, "video03.mp4");
      Video04 = new Movie(this, "video04.mp4");
      Video05 = new Movie(this, "video05.mp4");
      Video06 = new Movie(this, "video06.mp4");
      Video07 = new Movie(this, "video07.mp4");
    
      myCommChannel.write('1');
    }
    
    void draw() {
    
      switch (trackID) {
    
      case 1:
        image(Video01, 0, 0, width, height);
        checkPlayStatusVideo01();
        break;
    
      case 2:
        image(Video02, 0, 0, width, height);
        checkPlayStatusVideo02();
        break;
    
      case 3:
        image(Video03, 0, 0, width, height);
        checkPlayStatusVideo03();
        break;
    
      case 4:
        image(Video04, 0, 0, width, height);
        checkPlayStatusVideo04();
        break;
    
      case 5:
        image(Video05, 0, 0, width, height);
        checkPlayStatusVideo05();
        break;
    
      case 6:
        image(Video06, 0, 0, width, height);
        checkPlayStatusVideo06();
        break;
    
      case 7:
        image(Video07, 0, 0, width, height);
        checkPlayStatusVideo07();
        break;
      }
    
      if (isCurrentlyPlaying == false) {
    
        char inputCommandChar = myCommChannel.readChar();
    
        if (inputCommandChar != lastSerialInput) {
    
          switch(inputCommandChar) {
    
          case 'a':
            println(inputCommandChar);
            isCurrentlyPlaying = true;
            lastSerialInput = inputCommandChar;
            playVideoFile01();
            myCommChannel.clear();
    
            break;
    
          case 'b':
            println(inputCommandChar);
            isCurrentlyPlaying = true;
            lastSerialInput = inputCommandChar;
            playVideoFile02();
            myCommChannel.clear();
    
            break;
    
          case 'c':
            println(inputCommandChar);
            isCurrentlyPlaying = true;
            lastSerialInput = inputCommandChar;
            playVideoFile03();
            myCommChannel.clear();
    
            break;
    
          case 'd':
            println(inputCommandChar);
            isCurrentlyPlaying = true;
            lastSerialInput = inputCommandChar;
            playVideoFile04();
            myCommChannel.clear();
    
            break;
    
          case 'e':
            println(inputCommandChar);
            isCurrentlyPlaying = true;
            lastSerialInput = inputCommandChar;
            playVideoFile05();
            myCommChannel.clear();
    
            break;
    
          case 'f':
            println(inputCommandChar);
            isCurrentlyPlaying = true;
            lastSerialInput = inputCommandChar;
            playVideoFile06();
            myCommChannel.clear();
    
            break;
    
          case 'g':
            println(inputCommandChar);
            isCurrentlyPlaying = true;
            lastSerialInput = inputCommandChar;
            playVideoFile07();
            myCommChannel.clear();
    
            break;
    
          default:
            // do nothing
            break;
          }
        }
      }
      myCommChannel.clear();
    }
    
    void movieEvent(Movie m) {
      m.read();
    }
    
    void playVideoFile01() {
      if (isPlayingVideo01 == false ) { 
        startPlayTimeVideo01 = millis();
        isPlayingVideo01 = true;
        trackID = 1;
        Video01.play();
      }
    }
    
    void checkPlayStatusVideo01() {
    
      if (isPlayingVideo01 == true) {
        if  ( (millis() - startPlayTimeVideo01) >= (Video01.duration()*1000) ) {
          isPlayingVideo01 = false;
          isCurrentlyPlaying = false;
          Video01.stop();
          println("offVT01");
          myCommChannel.write('<');
          myCommChannel.write('2');
          myCommChannel.write('+');
        }
      }
    }
    
    void playVideoFile02() {
      if (isPlayingVideo02 == false ) { 
        startPlayTimeVideo02 = millis();
        isPlayingVideo02 = true;
        trackID = 2;
        Video02.play();
      }
    }
    
    void checkPlayStatusVideo02() {
    
      if (isPlayingVideo02 == true) {
        if  ( (millis() - startPlayTimeVideo02) >= (Video02.duration()*1000) )...
    Read more »

  • Arduino code

    Tan Yong Jie08/29/2018 at 05:18 0 comments

    #include <Adafruit_NeoPixel.h>
    
    #define trigPin01 12
    #define echoPin01 13
    
    #define trigPin02 10
    #define echoPin02 11
    
    #define trigPin03 8
    #define echoPin03 9
    
    #define trigPin04 6
    #define echoPin04 7
    
    #define trigPin05 4
    #define echoPin05 5
    
    #define vibrationPin06 3
    
    #define vibrationPin07 2
    
    unsigned char stateInterrupt1 = 0;  // pin 3
    unsigned char stateInterrupt0 = 0;  // pin 2
    
    #define LED01 A5
    #define NUM_LED01 176
    Adafruit_NeoPixel strip01 = Adafruit_NeoPixel(NUM_LED01, LED01, NEO_GRB + NEO_KHZ800);
    
    
    void setup() {
    
      Serial.begin(9600);
    
      pinMode(trigPin01, OUTPUT);
      pinMode(echoPin01, INPUT);
      pinMode(LED01, OUTPUT);
    
      pinMode(trigPin02, OUTPUT);
      pinMode(echoPin02, INPUT);
    
      pinMode(trigPin03, OUTPUT);
      pinMode(echoPin03, INPUT);
    
      pinMode(trigPin04, OUTPUT);
      pinMode(echoPin04, INPUT);
    
      pinMode(trigPin05, OUTPUT);
      pinMode(echoPin05, INPUT);
    
      pinMode(vibrationPin06, INPUT);
    
      pinMode(vibrationPin07, INPUT);
    
      attachInterrupt(1, interrupt1, FALLING);
      attachInterrupt(0, interrupt0, FALLING);
    
      strip01.begin();
      strip01.show();
    
    }
    
    void loop() {
    
      byte incomingByte = '?';
    
      if (Serial.available() > 0) {
        incomingByte = Serial.read();
        Serial.println(incomingByte);
      }
    
      switch (incomingByte) {
    
        case 62: //this should be equivalent to ASCII ">"
          turnAllRed();
          break;
    
        case 60: //this should be equivalent to ASCII "<"
          turnAllOff();
          break;
    
        case 43: //this should be equivalent to ASCII "+"
          stateInterrupt1 = 0;
          stateInterrupt0 = 0;
          break;
    
        case 49: //this should be equivalent to ASCII "1"
          LEDTurnGreen01();
          delay(500);
          while (checkVSensor06() == false) {
            delay(10); // Sensor is slow in returning response, so add a little delay
          }
          break;
    
        case 50: //this should be equivalent to ASCII "2"
          LEDTurnGreen02();
          delay(500);
          while (checkVSensor07() == false) {
            delay(10); // Sensor is slow in returning response, so add a little delay
          }
          break;
    
        case 51: //this should be equivalent to ASCII "3"
          LEDTurnGreen03();
          delay(500);
          while (checkSensor01() == false) {
          }
          break;
    
        case 52: //this should be equivalent to ASCII "4"
          LEDTurnGreen04();
          delay(500);
          while (checkSensor02() == false) {
          }
          break;
    
        case 53: //this should be equivalent to ASCII "5"
          LEDTurnGreen05();
          delay(500);
          while (checkSensor03() == false) {
          }
          break;
    
        case 54: //this should be equivalent to ASCII "6"
          LEDTurnGreen06();
          delay(500);
          while (checkSensor04() == false) {
          }
          break;
    
        case 55: //this should be equivalent to ASCII "7"
          LEDTurnGreen07();
          delay(500);
          while (checkSensor05() == false) {
          }
          break;
      }
    }
    
    
    void interrupt1() {
      stateInterrupt1++;
    }
    
    void interrupt0() {
      stateInterrupt0++;
    }
    
    boolean checkSensor01() {
    
      float duration01, distance01;
    
      digitalWrite(trigPin01, LOW);
      delayMicroseconds(2);
    
      digitalWrite(trigPin01, HIGH);
      delayMicroseconds(10);
      digitalWrite(trigPin01, LOW);
    
      duration01 = pulseIn(echoPin01, HIGH, 1000000);
      distance01 = (duration01 / 2) * 0.0344;
    
      if (distance01 >= 40 ) {
        Serial.print('c');
        turnAllRed();
        return true;
      }
      else {
        return false;
      }
    
    }
    boolean checkSensor02() {
    
      float duration02, distance02;
    
      digitalWrite(trigPin02, LOW);
      delayMicroseconds(2);
    
      digitalWrite(trigPin02, HIGH);
      delayMicroseconds(10);
      digitalWrite(trigPin02, LOW);
    
      duration02 = pulseIn(echoPin02, HIGH);
      distance02 = (duration02 / 2) * 0.0344;
    
      if (distance02 >= 40) {
        Serial.print('d');
        turnAllRed();
        return true;
      }
      else {
        return false;
      }
    }
    
    boolean checkSensor03() {
    
      float duration03, distance03;
    
      digitalWrite(trigPin03, LOW);
      delayMicroseconds(2);
    
      digitalWrite(trigPin03, HIGH);
      delayMicroseconds(10);
      digitalWrite(trigPin03, LOW);
    
      duration03 = pulseIn(echoPin03, HIGH);
      distance03 = (duration03 / 2) * 0.0344;
    
      if (distance03 >= 40) {
        Serial.print('e');
        turnAllRed();
        return true;
      }
      else {
        return false;
      }
    }
    
    
    boolean checkSensor04() {
    
      float duration04, distance04;
    
      digitalWrite(trigPin04, LOW);
      delayMicroseconds(2);
    
      digitalWrite(trigPin04, HIGH);
      delayMicroseconds(10);
     digitalWrite(trigPin04,...
    Read more »

  • Project Log 11 : User Testing

    Felecia Sia07/25/2018 at 14:11 0 comments

    WEEK 11

    Monday,30/07/2018

    • Short meeting to go over progress, arrangement for user testing.

    Tuesday, 31/07/2018

    • Cable arrives.

    Wednesday, 01/08/2018

    • We discover the cable is bogus; fails to work. Upon further research, we find that other people on the internet have come across the same deceit. Several tinkering youtubers suggest using a different converter. With good faith in their tutorials, and a pressing need to get our videos working on our CRT TV, we set to ordering this little guy:

    Thursday, 02/08/2018

    User Testing day. 

    There is a mad rush to complete the following:

    • Soldering LEDs
    • Cutting videos and narration together with final messages

    We manage to get everything done, albeit a little over the opening 2pm mark. We tested our core experience with our 7 items and accompanying reactable stories, sans our large structure stored in the Sunway workshop. 

    Collected feedback from the client and other students:

    • Video: make sure to clearly make the 7 item props part of the reactable video scenes to create a more believable narrative, trim the video clip length, make the copywriting for final message a bit shorter.
    • Wiring: keep the wiring neat and tidy; ensure they're concealed so it doesn't get in the way of the visual experience and aesthetic.
    • Audio: audio levels inconsistent and need to be louder, script needs to be shortened to match shortened video and simplified in the event that the public cannot hear it over the mall environment din.

    After the user test, the group met up to review the feedback and continue planning next steps for updates and changes.

    • Review UT feedback
    • Review shopping list
    • Plan Audio-Video reshoots
    • Plan PVC mat purchase to cover completed structure platform
    • Plan Week 12 workshop visit
    • Assign poster moodboard, content

    Friday, 03/08/2018

    • New converter box arrives.

    WEEK 12 

    Tuesday, 07/08/2018

    • Testing CRT TV. 

    Wednesday, 08/08/2018 

    • Yong Jie and lecturer made magic: the CRT TV finally works, though the resolution is not as clear as we thought it would be. This leaves out the option for subtitles for our narration, as text is hardly visible. Final messages therefore need to be concise and enlarged as well. We no longer have to consider adding 'glitch' VFX to our footage as the tv seems to do it by itself. Au naturel. 
    • Radio tinkering for audio output has been scrapped in the interest of time; the tv audio seems loud enough for now.  

    Thursday, 09/08/2018 

    • Structure Construction Day 5: Review cut-out window, complete painting, and measuring wire lengths to cut from the in-and-out's of the total structure. 

    Friday, 10/08/2018 

    Final check to confirm video re-shooting schedule over weekend:

    • Confirm actors.
    • Confirm props.
    • Confirm wardrobe.

    Saturday, 11/08/2018  

    • Reactable Video Re-Shooting Day 1. 
    • Filmed COMFORT, HEALTHCARE, and SECURITY scenes. 

    Sunday, 12/08/2018 

    •  Reactable Video Re-Shooting Day 2. Filmed EDUCATION scenes.

  • Project Log 10 : Building Structure

    Felecia Sia07/25/2018 at 14:06 0 comments

    WEEK 9

    Monday,16/07/2018

    DI independent working day.

    • Yong Jie devises an easier way to code the LED interaction for the sequence of our 7 interactable items. Instead of creating a random sequence, he will code it so that a green LED for the first item will light up, then after item interaction, all the other item LEDs will turn red (therefore not interactable) during the reactable response. After reactable response is complete, the second item LED will then turn green, so on and so forth.
    • Felecia brings up CRT TV 2.0 to FabLab for testing; we discover we need an RCA cable of sorts. TBD.

    Tuesday, 17/07/2018

    • Set appointment to buy an old radio as a reactable tomorrow morning.
    • Put in group order for 5 metres of LED.

    Wednesday, 18/07/2018

    • Felecia and Natalie pick up old radio reactable.
    • Structure Construction Day 1: learned how to operate necessary power tools for cutting wood and drilling. Started work on structure platform first.

    Thursday, 19/07/2018

    • Structure Construction Day 2: Completed structure platform. Next are wall panels.

    Friday, 20/07/2018

    • Begin planning for reactable video shooting to pair with audio narration.

    WEEK 10

    Wednesday, 25/07/2018

    • Structure Construction Day 3: Begin work on walls.
    • Put in order for cable to connect PC/CPU to CRT TV to channel reactable videos.

    Thursday, 26/07/2018

    • Structure Construction Day 4: Completed building the four walls panels. Next is to paint everything up, and put in the door extrusion + faux knobs.

    Friday, 27/07/2018

    • Confirm video shooting schedule for weekend.

    Saturday, 28/07/2018

    • Reactable Video Shooting Day 1.

    Sunday, 29/07/2018

    • Reactable Video Shooting Day 2.
    • Set short meeting for Monday, 30th July for internal user test run through. Actual user test date set for Thursday, 2nd August.

  • Project Log 9: Code, Audio, Materials

    Carla Labunda07/15/2018 at 11:47 0 comments

    WEEK 8

    Tuesday,10/07/2018

    DI working day.

    • Discussed prop requirements with Sunway workshop i.e. tikar and shelf.
    • Continued acquiring items on shopping list.
    • Work on structure blueprints for Sunway workshop.
    • Recorded all audio clips for reactable video narrations.

    Wednesday, 11/07/2018

    • Sent completed blueprints to Sunway workshop.
    • Continue work and research on coding.

    Thursday, 12/07/2018

    For one of our reactables, we need an old CRT TV. One of our lecturers offered to bring an old one from his house; however, we found out it wasn't working. Our immediate solution was to replace it with a 'mock' CRT TV made up of a PC screen in a foam board body, however, we were encouraged by another lecturer to keep the search for a working CRT TV going.

    We also took a trip to the Sunway workshop to review our blueprints. After the 'ok', we set plans to begin structure building. Set date for construction:

    • Structure Building Day 1 scheduled for Wednesday, 18th July.

    Friday, 13/07/2018

    Short meet-up to review shopping list.

    • Plan to check for CRT TV at Felecia's home.
    • Plan to visit PVC mat store to survey price + design.
    • Check back on Carousell for radio availability.

    Saturday, 14/07/2018

    • Went to store to survey PVC mats.
    • Continued work on coding.
    • Discovered (potentially) working CRT TV from Felecia's household store room.
    • Radio search continues.

    Sunday, 15/07/2018

    Decided that we would not have an official meeting for discussion on Monday, just independent working day. 

    Current list of work in progress:

    • Carla: editing audio, need to forward the list of final messages to Felecia to compile appropriate stock videos. 
    • Felecia waiting on final messages to compile stock videos. In the meantime, test edit the B-roll footage of Nikk and shoot silhouettes (Winnie and Jin Heng?)
    •  Yong Jie is continuing with the coding; he might need some help with that? looked stressed as heck last week.
    • The shopping list remains to be completed. 
    • Need to compile our previous list of sources + info packets for our infographic posters.

  • Project Log 8: Mahjong Paper

    Carla Labunda07/15/2018 at 11:47 0 comments

    WEEK 7

    Monday, 02/07/2018

    Met up for 9th Group Discussion.

    Officially commence construction planning. 

    Master list of questions we asked ourselves to properly map out our project plans on mahjong paper™:

    THINGS TO ASK CLIENT

    • Charity for Donation Box?
    • Who is going to supervise/handle collection + distribution?
    • Project deadlines
    • Display duration

     THINGS TO ASK BUILDING CREW

    • How big is service lift? Do we need to separate the structure into segments?

    CREATING THE INSTALLATION

    A) Mechanism

    • What mechanism do we use for each interactable item?
    • What does the mechanism need? (wiring? battery? circuits?)
    • Where do the mechanisms go inside the installation?

    B) Structure

    • What is the updated blueprint plan for the structure?
    • What are the materials that the client has?
    • What are the materials that we still need?
    • What are the building tools that we need?
    • Where are we going to build the structure?
    • Do we need to design it so  it can be disassembled?

    C) Items

    • What is the final list of interactable items?
    • Are the physical objects tinker-able? (do we need to craft a fake one? or use skeleton?)
    • Where are we going to buy/source these items?
    • When are we going to buy them?
    • How much are they going to cost?
    • How to theft-proof?
    Once everything was mapped out properly, the following two days were dedicated to surveying the items on our shopping list.

    Thursday, 05/07/2018

    AM: Continued shopping list survey online, outlined weekly schedule, begin coding research. HOD's appointed for ease of organisation and execution, though members' obligations are not limited by their appointed work areas. 

    • Project Manager (Carla)
    • Communications (Carla)
    • Copywriting (Carla)
    • Technical (Yong Jie)
    • Audio & Video (Felecia)
    • Logistics (Natalie)

    PM: Visited client's workshop.

    • Surveyed materials needed to build structure i.e. wood planks, boards, frames, etc. 
    • Took measurements of confirmed recyclables.
    • Further discussed building plans; workshop liaison expressed need for more detailed structure technical plan in order for workshop crew to assist in building; we promised to send it over before our next visit.

    Friday, 06/07/2018

    Met up for 10th Group Discussion.

    • Took a  'field trip' to Pudu to survey LED strip prices. 
    • Returned to FabLab to discuss structure dimensions for updated technical plan