• Week 14

    aprilmomo041612/20/2018 at 04:52 0 comments

    20th Dec, 2018- Thursday

    Final Submission

    We get our audio play on trigger by using Processing, and here is the code we used:

    Arduino:

    const int BtnFanIN = 2;
    const int TSHerb1IN = 3;
    const int TSHerb2IN = 4;
    const int BtnHorseIN = 5;
    const int TSDrinks1IN = 6;
    const int TSDrinks2IN = 7;
    
    
    const int BtnFanMOTOR = 8;
    //const int TSHerb1AUD = 7;
    //const int TSHerb2AUD = 8;
    const int BtnHorseMOTOR = 8;
    //const int BtnHorseAUD = 10
    //const int TSDrinksAUD = 11;  
    
    bool TSHerb1_1 = false;
    bool TSHerb1_2 = false;
    
    bool TSHerb2_1 = false;
    bool TSHerb2_2 = false;
    
    bool TSDrinks1_1 = false;
    bool TSDrinks1_2 = false;
    
    bool TSDrinks2_1 = false;
    bool TSDrinks2_2 = false;
    
     
     void setup() {
    
     Serial.begin(9600);                    // Start serial communication at 9600 bps
    
     pinMode(BtnFanIN, INPUT);   // Set pin 0 as an input
     pinMode(TSHerb1IN, INPUT);   
     pinMode(TSHerb2IN, INPUT);   
     pinMode(BtnHorseIN, INPUT);   
     pinMode(TSDrinks1IN, INPUT);  
     pinMode(TSDrinks2IN, INPUT);  
    
     digitalWrite(TSHerb1IN,HIGH);
     digitalWrite(TSHerb2IN,HIGH);
     digitalWrite(TSDrinks1IN,HIGH);
     digitalWrite(TSDrinks2IN,HIGH);
    
     pinMode(BtnFanMOTOR, OUTPUT);   
     //pinMode(TSHerb1AUD, OUTPUT);   
     //pinMode(TSHerb2AUD, OUTPUT);   
     pinMode(BtnHorseMOTOR, OUTPUT);   
     //pinMode(BtnHorseAUD, OUTPUT);   
     //pinMode(TSDrinksAUD, OUTPUT);   
    
     }
     
     void loop() { 
     if (digitalRead(BtnFanIN) == HIGH) {  // If switch is ON,
          Serial.println("fanOn");
          digitalWrite (BtnFanMOTOR, HIGH);
          delay(1800);
          //Serial.write(0);               // send 1 to Processing
          delay(100);                           
       } else {
          digitalWrite (BtnFanMOTOR,LOW);
       }
    
       
     if(digitalRead(BtnHorseIN) == HIGH){  // If switch is ON,
          Serial.println("horseOn");
          analogWrite(BtnHorseMOTOR,50);
          Serial.write(1);               // send 1 to Processing
          delay(100);                           
       } else {
          analogWrite (BtnHorseMOTOR,0);
       }
    
     if(digitalRead(TSHerb1IN) == HIGH ){
        TSHerb1_1 = true;
        checkTouch();
        TSHerb1_2 = TSHerb1_1;
        Serial.println("drawer1");
      } else{
        TSHerb1_1 = false;
        TSHerb1_2 = TSHerb1_1;
      }
    
      if(digitalRead(TSHerb2IN) == HIGH ){
        TSHerb2_1 = true;
        checkTouch();
        TSHerb2_2 = TSHerb2_1;
        Serial.println("drawer2");
      } else{
        TSHerb2_1 = false;
        TSHerb2_2 = TSHerb2_1;
      }
    
     if(digitalRead(TSDrinks1IN) == HIGH ){
        TSDrinks1_1 = true;
        checkTouch();
        TSDrinks1_2 = TSDrinks1_1;
        Serial.println("door1");
      } else{
        TSDrinks1_1 = false;
        TSDrinks1_2 = TSDrinks1_1;
      }
    
     if(digitalRead(TSDrinks2IN) == HIGH ){
        TSDrinks2_1 = true;
        checkTouch();
        TSDrinks2_2 = TSDrinks2_1;
        Serial.println("door2");
      } else{
        TSDrinks2_1 = false;
        TSDrinks2_2 = TSDrinks2_1;
      }
     }
    
    
    void checkTouch(){
        if(TSHerb1_1 != TSHerb1_2){
          Serial.write(2);               // send 1 to Processing
          Serial.println("MED 1");
          }
    
          if(TSHerb2_1 != TSHerb2_2){
          Serial.write(3);               // send 1 to Processing
          Serial.println("MED 2");
          }
          
        if(TSDrinks1_1 != TSDrinks1_2){
          Serial.write(4);               // send 1 to Processing
    //      ("doorOpen");    
          Serial.println("DOOR OPEN");
        }
    
        if(TSDrinks2_1 != TSDrinks2_2){
          Serial.write(4);   // send 1 to Processing
    //      ("doorOpen");    
          Serial.println("DOOR 2 OPEN");
    
          }
      }

    Processing:

    import processing.sound.*;
    import processing.serial.*;
    
    Serial myPort;
    int val;
    
    SoundFile BGSound;
    SoundFile[] Convos;
    
    void setup() {
        printArray(Serial.list());
        String portName = Serial.list()[2];
        myPort = new Serial(this,portName,9600);
        
        BGSound = new SoundFile(this, "BG.mp3"); 
        
        Convos = new SoundFile[4];
        for (int i = 0; i < Convos.length; i ++) {
           Convos[i] = new SoundFile(this, (i + 1)+".mp3");
        }
    
        BGSound.loop();
    }
    
    void draw() {
      //checkSound();
      if ( myPort.available() > 0) {
        val = myPort.read();   
        checkSound();
        switch(val) {
          case 0:
             fadeOut();
             //BGSound.amp(0.3);
             playSound(0);
            break;
          case 1: 
             fadeOut();
             //BGSound.amp(0.3);
             playSound(1);
             //BGSound.amp(1.0);
             //fadeIn();
            break;
          case 2: 
             fadeOut();
             playSound(2);
             //fadeIn();
            break;
          case 3: 
             fadeOut();
             playSound(3);
             //fadeIn();
            break;
          //default:
          //  break;
        }
      }
    }
    
    void playSound(int index) {
      for (int i = 0; i < Convos.length; i++) {
        if (Convos[i].isPlaying()) {
         return; 
        }
     }
    ...
    Read more »

  • Week 13

    aprilmomo041612/20/2018 at 04:46 0 comments

    12th December, 2018-Wednesday

    Rushing for Submission

    So 13th Dec its the submission day, we really very worry about couldn't finish on time. And also we did apply to stay overnight tonight, but it comes out decline the approver from the department, so we don't have much time . But we will try our very best, and it because of Wednesday Fab Lab is having classes, and everyone is waiting for 3Dprint and  Laser cut, so come out we have to wait everybody to finish their stuff then we only can use it.

    For the coding part, we only have around 1 week to explore on processing, and we still could not get any audio play by trigger. I could not really get help from my classmates because I'm the only one who are using processing and no one else know how to use it, so we get help from our senior, but at the end it is still not working. We have trouble on checking the code during the whole process because of the unstable connection of Arduino port, but at the end we still could not read signal from Arduino on Processing.

    import processing.sound.*;
    
    import processing.serial.*;
    
    int button1;
    int button2;
    int button3;
    int button4;
    int buttonLock1 = 0;
    Serial myPort;
    int[] serialInArray = new int[4];
    int serialCount = 0;
    boolean firstContact = false;
    
    String val;
    
    SoundFile BGSound;
    
    SoundFile Convo1;
    SoundFile Convo2;
    SoundFile Convo3;
    SoundFile Convo4;
    
    void setup()
    {
      printArray(Serial.list());
      String portName = Serial.list()[2];
      myPort = new Serial(this, portName, 9600);
    
      BGSound = new SoundFile(this, "BG.mp3"); 
      Convo1 = new SoundFile(this, "2.mp3"); 
      Convo2 = new SoundFile(this, "3.mp3"); 
      Convo3 = new SoundFile(this, "4.mp3"); 
      Convo4 = new SoundFile(this, "5.mp3"); 
    
      //BGSound.loop();
      //Convo2.play();
    }
    
    void draw()
    {
      //if ( myPort.available() > 0) {  // If data is available,
      //  //val = myPort.readString();         // read it and store it in val
    
      //  val = myPort.readString(); 
      //  //println(val);
      //}
    
      //if (val == "f") {
      //  println("play");
      //   Convo1.play();
      //   Convo2.stop();
      //   Convo3.stop();
      //   Convo4.stop();
      //}  
      //if (val == "h") {
      //   Convo1.stop();
      //   Convo2.play();
      //   Convo3.stop();
      //   Convo4.stop();     
      //}  
      //if (val == "H1") {
      //   Convo1.stop();
      //   Convo2.stop();
      //   Convo3.play();
      //   Convo4.stop();
      //}  
      //if (val == "H2") {
      //   Convo1.stop();
      //   Convo2.stop();
      //   Convo3.stop();
      //   Convo4.play();
      //}
    }
    
    void serialEvent(Serial myPort) {
      // read a byte from the serial port:
      int inByte = myPort.read();
      // if this is the first byte received, and it's an A,
      // clear the serial buffer and note that you've
      // had first contact from the microcontroller. 
      // Otherwise, add the incoming byte to the array:
      if (firstContact == false) {
        if (inByte == 'A') { 
          myPort.clear();          // clear the serial port buffer
          firstContact = true;     // you've had first contact from the microcontroller
          myPort.write('A');       // ask for more
        }
      } else {
        // Add the latest byte from the serial port to array:
        serialInArray[serialCount] = inByte;
        serialCount++;
    
        // If we have 3 bytes:
        if (serialCount > 3 ) {
          //xpos = serialInArray[0];
          //ypos = serialInArray[1];
          button1 = serialInArray[0];
          button2 = serialInArray[1];
          button3 = serialInArray[2];
          button4 = serialInArray[3];
          //println(button1);
    
        if (buttonLock1 == 0){
          if (button1 == 1) {
            println("play");
            Convo1.play();
            Convo2.stop();
            Convo3.stop();
            Convo4.stop();
            buttonLock1 = 1;
          }
        }
        if (button1 == 0){
          buttonLock1 = 0;
        }
        
        if (buttonLock1 == 0){
          if (button1 == 1) {
            println("play");
            Convo1.play();
            Convo2.stop();
            Convo3.stop();
            Convo4.stop();
            buttonLock1 = 1;
          }
        }
        if (button1 == 0){
          buttonLock1 = 0;
        }
        
        if (buttonLock1 == 0){
          if (button1 == 1) {
            println("play");
            Convo1.play();
            Convo2.stop();
            Convo3.stop();
            Convo4.stop();
            buttonLock1 = 1;
          }
        }
        if (button1 == 0){
          buttonLock1 = 0;
        }
        
        if (buttonLock1 == 0){
          if (button1 == 1) {
            println("play");
            Convo1.play();
            Convo2.stop();
            Convo3.stop();
            Convo4.stop();
            buttonLock1 = 1;
          }
        }
        if...
    Read more »

  • Week 12

    aprilmomo041612/20/2018 at 03:55 0 comments

    06th Dec, 2018-Thursday

    After the beta test, we got a lot of feedbacks from others that have been filled in our survey form, so we know clearly what to improve, what to adjusts. From the survey form, we have to make a small presentation for our users feedbacks, so we gather the questions together, we have many responses, for examples:

    Q1: Do you get attracted by the miniature set? Yes

    Q2: How do you feel when you saw the miniature set?       Cute & Interesting (Familiar)

    Q3: Will you use the headphone that are prepared with the set? Yes

    Q4. What do you think it is for? BGM

    Q5: Will you want to know all this information if it was set in an event? Yes

    Q6: In what way you would prefer to get the information. People explaining & Printed Info

    Q7: Do you think this setup are related to Kuala Lumpur culture? Yes (more to Malaysia)

    Q8: What do you feel after you understand the details of the project? Meaningful, Interesting & Memorable

    Q9: What do you suggest us to improve on this project? To make it more fun, interesting and interactive.

    • More traditional snack - Finishing & Details -

    Interesting Feedback

    • People think it is more related to Malaysia instead of Kuala Lumpur.
    • In general it is more about Human Peace. We live together but we don’t share culture; we appreciate all different culture, and live as one.
    • If you could build a whole block that show malaysia contrast in built and culture it will be even nicer. Prefer human figure in the built showing different races living together..
    • It might not reach to too many audience because it can only play by one user at a time. But I am not sure what can you do to improve. Maybe built a few more set?

    Changing audio feedback from MP3Shield to Processing

    After testing MP3Shield for weeks, we still could not get it working, even if it's just a simple play() function. So we decided to get help from our lecturer and tutor.

    They help us to test all the MP3Shield we have in our lab, ends up all of them are not working. We are not sure about the reason why is it not working, but two of our classmates have working MP3Shield. So maybe it is just bad luck..

    To complete the experience that we wanted, we decided to change to processing, so that the audio can come from the computer and we can get rid of MP3Shield. But it also means we need to explore on a new software and how the code works in it.

  • Week 11

    aprilmomo041612/20/2018 at 03:53 0 comments

    28th Nov 2018- Wednesday

    Rushing for Beta Test

    29 of November is our Beta Test, we are are kind of rushing for our project, so we have applied to stay-overnight at Fab Lab to finish up everything for tomorrow Beta Test.

    29th Nov 2018 - Thursday

    Beta Test

    We invited fews of our friends to test, and fill up our survey form. And Linyew brought many lecturers to our beta test, and we got so much feedback from them, and knowing what to improve.

    User Test Questionnaire

    Q1: Do you get attracted by the miniature set?

    Q2: How do you feel when you saw the miniature set?

    Q3: Will you use the headphone that are prepared with the set?

    Q4. What do you think it is for?

    Q5: Will you want to know all this information if it was set in an event?

    Q6: In what way you would prefer to get the information.

    Q7: Do you think this setup are related to Kuala Lumpur culture?

    Q8: What do you feel after you understand the details of the project?

    Q9: What do you suggest us to improve on this project? To make it more fun, interesting and interactive.

    We recorded all feedback we got from beta test and analyse them.

    User test data:

    https://cdn.hackaday.io/files/1616046914065536/User%20Test.pdf

    User test analysis:

    https://cdn.hackaday.io/files/1616046914065536/Kedai%20Runcit%20-%20User%20Test.pdf

  • Week 9/10

    aprilmomo041612/20/2018 at 03:33 0 comments

    15th-23rd Nov 2018-Thursday

    Production weeks

    -Keep focus on making all the props. Too much details so we spent a lot of time keep doing all the little miniatures. 

    -For the mechanism parts, we are still struggling for the audio part, it really not functioning with MP3Shield. We are still exploring how to use the library.

    -Besides, the sensor part goes well.

  • Week 8

    aprilmomo041612/20/2018 at 03:16 0 comments

    8th Nov, 2018-Thursday

    Alpha Test

    - Keep continue doing our little props.

    - Working on the mechanism, testing out the input and output is functioning correctly.

    What can we improve?:

    • Do more research about miniature .The props should be really look cute and real.
    • Need to start working on interaction with audio.

    Code for Alpha test:

    const int BtnSmallMotor = 2;
    const int TouchSense = 4;
    const int TouchHorse = 12;
    
    const int SmallMotorSpin = 6;
    const int LargeMotorSpin = 8;
    const int LightUp = 10;
    
    
    int buttonState = 0;
    int touchy =0;
    int touchDaHorse =0;
    
    
    void setup() {
      // put your setup code here, to run once:
    pinMode (BtnSmallMotor,INPUT);
    pinMode (TouchSense,INPUT);
    digitalWrite(TouchSense,HIGH);
    pinMode (TouchHorse,INPUT);
    digitalWrite(TouchHorse,HIGH);
    
    pinMode (SmallMotorSpin,OUTPUT);
    pinMode (LargeMotorSpin,OUTPUT);
    pinMode (LightUp,OUTPUT);
    
    //digitalWrite(SwitchPin, HIGH); VERY IMPORTANTTTT
    Serial.begin (9600);
    digitalWrite(LightUp,LOW);
    }
    
    
    
    void loop(){
    
      buttonState = digitalRead(BtnSmallMotor);
         
      if (buttonState == LOW){
        digitalWrite (SmallMotorSpin,LOW);
      } else
      if (buttonState == HIGH){
        digitalWrite (SmallMotorSpin, HIGH);
        delay(1800);
      }
    
      touchy = digitalRead (TouchSense);
      if(touchy == LOW){
          digitalWrite(LightUp,LOW);
        } else {
          digitalWrite(LightUp,HIGH);
        }
      
      touchDaHorse = digitalRead (TouchHorse);
    
      if(touchDaHorse == HIGH){
        analogWrite(LargeMotorSpin,50);
        }
        else {
        analogWrite (LargeMotorSpin,0);
        }
      
    }
      // put your main code here, to run repeatedly:

  • Week 7

    aprilmomo041612/20/2018 at 02:53 0 comments

    1st Nov 2018-Thursday

    Exploring on Props Making

    Prototyping progress:

    This week we only focus on prototyping. We built up a miniature prototype mini market which called "Kedai Runcit" in Malaysia. Besides, we also built up the exterior and interior too to let us more easily arrange the placements. After that, we continue to made our little props.

    -Refining design

    -More prototyping, improving the mechanism and interacting part.

    -Did some attempts of the measurements of different parts to make sure it is fit.

    We did some simple coding for testing the mechanism

    void setup() {
      // put your setup code here, to run once:
      pinMode(3, OUTPUT);
      analogWrite(3,30);
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
    
    }
    const int buttonPin = 2;     // the number of the pushbutton pin
    const int ledPin =  13;      // the number of the LED pin
    
    // variables will change:
    int buttonState = 0;         // variable for reading the pushbutton status
    
    void setup() {
      // initialize the LED pin as an output:
      pinMode(ledPin,OUTPUT);
      // initialize the pushbutton pin as an input:
      pinMode(buttonPin, INPUT);
    }
    
    void loop() {
      // read the state of the pushbutton value:
      buttonState = digitalRead(buttonPin);
    
      // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
      if (buttonState == HIGH) {
        // turn LED off:
        digitalWrite(ledPin, LOW);
      } else 
      if(buttonState == LOW) {
        // turn LED on:
        digitalWrite(ledPin, HIGH);
      }
    }

    Motor spinnig:

    int mot1 = 8;
    int mot2 = 9;
    int en1 = 10;
    
    int val = 0;
    
    void setup() {
      // put your setup code here, to run once:
      pinMode(mot1,OUTPUT);
      pinMode(mot2,OUTPUT);
      pinMode(en1,OUTPUT);
    
      digitalWrite(mot1,HIGH);
      delay(5000);
      }
    
    void loop() {
    }

  • Week 6

    aprilmomo041612/20/2018 at 02:28 0 comments

    22th Oct, 2018-Monday

    Preparation for buildings

    Prototyping session start soon. We discussed what kind of material we need to use in this project. After that, we went to a shop to buy those materials. 

    Materials that we bought:

    • Ply woods
    • Foamboards
    • PVC
    • Glue

    25th Oct, 2018-Thursday

    Prototyping

    • Had a discussion with lecturer to refine the structure of the installation .
    • Prototyping

    To-Do-List: (prototype)

    • Counter
    • Stock rack
    • Herbs rack
    • Drink's fridge
    • Ice-cream fridge
    • Indian snack boxes
    • Chinese snack boxes

  • Week 5

    aprilmomo041612/20/2018 at 02:05 0 comments

    16th Oct 2018-Monday

    Further Develop Idea

    This week is the final idea confirmation week. We came out again for a long discussion for our ideas, the 2 ideas have been approved but we have to develop more details of the idea, like for examples: core experiences, flowchart, insight, goals, rules, how its works. 

    What we have done:

    • Design of the idea
    • Measurement of the design 
    • Using what material
    • Re arrange flowchart 

    19th Oct 2018-Tuesday

    Presentation Day & Selecting Final Idea

    We have a final pitch for our idea this week. Only 1 idea will be selected for each team to focus on following weeks. So after the final pitch, we got the comment from lecturer, that actually both of the idea is workable, so between we both have to decide which idea we think that we should go into it, So finally my teammate and I decided to further develop the idea "Kedai Runcit," It's because we both think that it has more possibility, potential and more have fun idea.  Moreover, we really like miniature so much.

    So for the Kedai Runcit idea, lecturer commented:

    • We should think out of the box about the experiences, maybe can add more interaction but not just listening to conversation.
    • It is really interesting that combined with 3 races people by combining different races kedai runcit.
    • Do you guys think that the project  could be done in these few week? It's not easy to done so much miniature in few weeks time.
    • Think more about interaction parts.

  • Week 4

    aprilmomo041612/20/2018 at 01:40 0 comments

    9 Oct 2018 - Monday

    Refine idea

    Taking account feedback or suggestions received throughout the pitching, for progress last week, we refined our two ideas that got approved.

    First idea

    Dear Diary:      Every Malaysian will go through primary school and secondary school study. We all have very special memory in the school, and we would like to bring them to experience the past again. By using the memorable school booklet which every student used before when they were studying. Combine with the idea of a diary to bring them back into those memories. For this design, we were targeting adults who are tired of working and probably misses their school life.

    Second idea

    Kedai Runcit (Mini Market):      This idea was inspired by Malaysian slang (communication slang between different races), and kedai runcit which are a common place that we would visit. People will thought each race will speak their own language, but we all speak Malaysian slang, which is super local and super original things we have in Malaysia. When interacting with the Kedai Runcit set, people will hear communication between different races, and they were all friendly and nice. The message behind is: even we are born in different races, but we are all Malaysians, who truly speak Malaysian (slang).

    What we have refined:

    First idea:

    1. The design of the booklet. We were thinking to make it more cartoon style combined with vintage, to make it more suitable with "childhood memories".

    2. Added on user flow. 

    • 1st- Open up the interactive book.
    • 2nd- Follow the indication to interact with all elements.
    • 3rd- Get audio responses & Visual responses from the words that appear.

    Second idea:

    1. We measured again the measurement of the object(kedai runcit), to let out more spaces for keeping the wires and mechanism stuff.

    2. Added on user flow.

    • 1st- See “Selamat Datang” words appear on top of the box.
    • 2nd-Follow the instruction on top if the box and put on the headphone.
    • 3rd- Touching blinking objects.
    • 4th- Listen to the talking between different races people with Malaysia slang.

    3.  Sketched out the props or interior contents.

    10th Oct 2019

    Preparing Document for Presentation

    Had a discussion about the script. We decided to make the conversations more fun and interesting by adding in some lively events into the story and adding more slang from different races.

    Presentation file linked below:

    https://cdn.hackaday.io/files/1616046914065536/Pitch%203.pdf

    11th Oct 2019

    Presentation day

    We received the feedback from lecturer that we need to improve more on our project's interaction part. Example:  think that how to make a kedai runcit miniature more lively  instead of just a miniature.