Wind Whistler

Made by Semina Yi

What if the fan is whispering the color it wants to see? Wind Whistler sends the morse code to communicate with you. Feel the breeze carefully, and you will understand what it says: the long wind indicates a dash(-), and the short wind indicates a dot(.). It will keep sending the signal till you show the color it wants.

Created: February 17th, 2023

0

Intention

Human-centered design is a popular technique for people at the system's center so that the service can benefit users. It creates the direction of the value always towards the human side. In other words, the beginning of the command(input) is always done by humans, and as a result, the service (output) will follow as requested. Also, mutual interaction is the circular form in the society of living creatures, including humans and animals. I want to create a similar interaction with daily objects. What if the machine is independent and has its own needs and desires like a living creature? What if the device asks or commands the human to respond too?

0

Context

The first interaction that I would like to shift is the servant and master relationship between objects and humans. There was a "Turnspit Dog" in the past, the dog who would run continuously on the wheel for hours to crank the spit for hours so that the flame in the kitchen could stay up. The dog back then was regarded as an instrument or a servant. On the other hand, dogs are 'men's best friends. I want to uncover what would lead the new types of relationships with humans.

The second interaction that I would like to change is the role of the listener and the speaker. For example, humans are always the speakers, and the objects are the listeners. What if it is the other way around? What if humans have to serve the request of things? The question about this relationship made me think of Tamagotchi. It is a portable digital pet created in Japan and constantly asks(sending notifications) for attention to survive.

I found that when people start paying attention to the object, it starts working abnormally. I wanted it to change human behavior by triggering peculiar behavior things. This shift will allow us to create new relationships with the objects, just like the past relationship with the animals.

0

Prototype/Outcome

I decided to make a fan that has its' desire, and it communicates with the morse code. Since the wind morse code is very subtle, humans should feel the breeze carefully, and you will understand what it says: the long wind indicates a dash(-), and the short wind means a dot(.). It will keep sending the signal till you show the color it wants.

The digital tools used were the color sensors on the Arduino Nano BLE and the relay. The color sensor requires the individual value of red, green, and blue. And it allows the creation of an infinite number of different colors, just like a human desire. Also, a relay was used to create the long and short wind; turning on and off was considered so that it had a binary pause in between the signals. Even though the power source is binary, the motor takes some time to stop rotation after the call. This allows the different softness of the winds as well.

The physical supplement is the set of cards, including R, G, and B color cards and the instruction of morse code. The instruction card helps people who are not familiar with the morse code could easily understand the signals. Also, the color cards are made not only for accessibility but also for affordance. It will be easier for the listener to know what it wants is the color among these three.

0
Wind Whistler
S - https://youtu.be/uA1lN_T1yWw
0

Process

    1. Learning about Arduino Nano: It is very compact, and most of the basic elements were already embedded into the board. It saves a lot of time to worry about the connection of the wires. I started by controlling two LEDs simultaneously; one is on, and the other is off. I used the loop on the side of the loop so that the code didn't get too long. Also, from the test, I learned that RGB LEDs work the opposite way from the other built-in LEDs. It turns on when it is "LOW," and it turns off when it is "HIGH."
    2. Learning about RGB color sensors: The challenge with RGB color is it quires the light to read the colors, and the colored object blocks the light.
    3. Morse code with LED: I tried to make the morse code with the LED to transfer the code to the relay quickly. I tried the random() to create the random integer to select the color and ended up giving at least 20 random numbers so that it has time to work as a regular fan, and only the three numbers (0, 1, 2) will trigger the speaking.
    4. Understanding the physical object intervention: I have been playing with Arduino; however, I never interrupted the objects with Arduino. It was more of a mental challenge than a technical challenge. The scariest part was plugging into the high-voltage outlet; however, I overcame the barrier after the test.
    5. Calibrating the color sensor: It has been an issue with the shade of the physical card blocking the sensor. I changed the code from comparing the level of color to comparing the relations between R, G, and B itself to determine the color of the card. It allowed me to work in a darker environment as well. However, the daily light already has too much red in it by nature. I had to calibrate manually to be able to compare these three levels.
    6. Do-While-: I had a hard time putting the action into the while loop because sometimes the initial numbers satisfied the conditions, and it just doesn't go into the loop. Then I found the 'do-while-' loop so that I could force to put it inside of the loop.
0
#include <Arduino_APDS9960.h>

long randNumber;
int r, g, b;
int relayPin = D2;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(relayPin, OUTPUT);
    while (!Serial);

  if (!APDS.begin()) {
    Serial.println("Error initializing APDS-9960 sensor.");
  }
  randomSeed(analogRead(0));
  digitalWrite(LEDR,LOW);
  digitalWrite(LEDB,LOW);
}

void loop() {

  // print a random number from 0 to 3
  randNumber = random(20);
  Serial.println(randNumber);
  digitalWrite(relayPin, HIGH);
  //delay(1000);

  // check if a color reading is available
  while (! APDS.colorAvailable()) {
    delay(5);
  }
  //int r, g, b;
    // read the color
    APDS.readColor(r, g, b);
  
  //morse Code
  if (randNumber == 0){
    //beginning signal
    digitalWrite(relayPin, LOW);
    delay(3000);

    // read the color
    APDS.readColor(r, g, b);
    

      do{
        digitalWrite(LEDR,HIGH);
        digitalWrite(LEDB,HIGH);
        morseRed();
        //delay(1000);

        while (! APDS.colorAvailable()) {
          delay(5);
        }

        APDS.readColor(r, g, b);
        Serial.print("Current r: ");
        Serial.println(r-130);
        Serial.print("Current g: ");
        Serial.println(g);
        Serial.print("Current b: ");
        Serial.println(b);
        Serial.println();
        }while (r-130 < g && r-130 < b);
  
      
  }
  else if(randNumber ==1){

  //beginning signal
      digitalWrite(relayPin, LOW);
      delay(3000);

      // read the color
      APDS.readColor(r, g, b);
      

        do{
        digitalWrite(LEDR,HIGH);
        digitalWrite(LEDB,HIGH);
          morseGreen();
          //delay(1000);

          while (! APDS.colorAvailable()) {
            delay(5);
          }
          APDS.readColor(r, g, b);
          Serial.print("Current r: ");
          Serial.println(r-130);
          Serial.print("Current g: ");
          Serial.println(g);
          Serial.print("Current b: ");
          Serial.println(b);
          Serial.println();
          }while (g < r-130 && g < b);
    }else if(randNumber ==2){
    //  morseBlue();  
    // begining signal
      digitalWrite(relayPin, LOW);
      delay(3000);

      // read the color
      APDS.readColor(r, g, b);
      

        do{
        digitalWrite(LEDR,HIGH);
        digitalWrite(LEDB,HIGH);
          morseBlue();
          //delay(1000);

          while (! APDS.colorAvailable()) {
            delay(5);
          }
          APDS.readColor(r, g, b);
          Serial.print("Current r: ");
          Serial.println(r-130);
          Serial.print("Current g: ");
          Serial.println(g);
          Serial.print("Current b: ");
          Serial.println(b);
          Serial.println();
          }while (b < g && b < r-130);

    }else{
      //Serial.println(randNumber);
      //delay(1000);

    }
  

  Serial.print("r = ");
  Serial.println(r-100);
  Serial.print("g = ");
  Serial.println(g);
  Serial.print("b = ");
  Serial.println(b);
  Serial.println();

  // wait a bit before reading again
  delay(1000);


}


void morseDot(){
  //dot
  digitalWrite(LEDR,LOW);
  digitalWrite( relayPin, HIGH );
  delay(500);
  digitalWrite(LEDR,HIGH);
  digitalWrite( relayPin, LOW );
  delay(1500);
}

void morseDash(){
   //dash
  digitalWrite(LEDR,LOW);
  digitalWrite( relayPin, HIGH );
  delay(1500);
  digitalWrite(LEDR,HIGH);
  digitalWrite( relayPin, LOW );
  delay(1500); 
}

void morseRed(){
  //R: dot-dash-dot
  Serial.println("morse RED");
  morseDot();
  morseDash();
  morseDot();
 /* 
  //E: dot
  morseDot();
  
  //D: dash-dot-dot
  morseDash();
  morseDot();
  morseDot();
 */
}

void morseGreen(){

  //G: dash-dash-dot
  morseDash();
  morseDash();
  morseDot();

}

void morseBlue(){

  //B: dash-dot-dot-dot
  morseDash();
  morseDot();
  morseDot();
  morseDot();

}
Click to Expand
0

Open Questions and Next Steps

  1. Feedback: one of the unnature behavior of the wind whistler was the feedback. I spent some time creating sensible dash and dots for the morse code; however, I realized that the overall feedback was too quick to recognize the correct answer. Feedback is essential in communication, so it should have been considered more to motivate the listener.
  2. Communication between whom: The initial attempt was communicating between the object and the human to shift the current relationships and the behaviors. I want to investigate further how the objects communicate with other things, including the humans in the community.
  3. Sound: Since the name is the whistler, people expected it to make a sound. I want to create some add-on device that could generate the sounds with the wind so that it becomes the real whistler.
  4. Proximity sensor: There was great feedback about using the proximity sensor to trigger the behaviors of the wind whistler. When people would like to listen better, they go closer to the sound source. On the other hand, it also creates the feeling of the listener's engagement with the speaking.
  5. Random number issue: Sometimes, the random number generates the desired number one after the others. It creates confusion about whether the fan is working weirdly, intentionally speaking, or malfunctioning. It got much better by increasing the possible random numbers. However, it takes a long time to hear the signals. I wonder whether there is a way to avoid the initial issue not by increasing the intervals.
0

Reflection

This project has been challenging to think outside of the box. As I mentioned previously, we are familiar with human-centric services. On the other hand, the objects based on the understanding of animism have their own will and life. Connecting these two different relationships was one of the exciting parts, and it was happy to see it changing people's behavior ultimately during the demo. Also, there are multiple factors that I should have considered after finishing the logical part of the codings. To be more specific, it works well. Still, it behaves slightly unnatural because of these small details. I would like to spend more time on these details next time so that the prototype can stand by itself and independently speak about its own purposes.

x
Share this Project


About

What if the fan is whispering the color it wants to see?

Wind Whistler sends the morse code to communicate with you. Feel the breeze carefully, and you will understand what it says: the long wind indicates a dash(-), and the short wind indicates a dot(.). It will keep sending the signal till you show the color it wants.