Music instrument

Group: Dariga Shokayeva, Vladimir Sharkovski

Concept

We created a music instrument which plays beats. Our instrument is very versatile:

  • The distance sensor allows you to easily control the frequency of the tone, without having to touch anything. Therefore you can play both very low tones and very high ones.
  • The potentiometer allows you control the duration of the beats, from 20 milliseconds to half a second. Therefore you can play both a rapidfire almost continual beat, or a slow jazzy beat.
  • The button allows you to shift the frequency of the tone to a higher range while the button is pressed. Therefore you can quickly surprise the listener with your melodies.
Video demo
Circuit diagram
Circuit for the music instrument.
Code
// Pin positions.
const int potPin = A0;
const int buttonPin = 5;
const int trigPin = 6;
const int echoPin = 7;
const int speakerPin = 8;

// Other constants.
const int minDistance = 0;
const int maxDistance = 20;

const int toneDurationMin = 30;
const int toneDurationMax = 500;

const float toneDelayFactor = 1.3f;

void setup() {
  pinMode(potPin, INPUT);
  pinMode(buttonPin, INPUT);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(speakerPin, OUTPUT);
}

long getSensorDistance() {
  // Send pulse.
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  // Read pulse duration.
  long duration = pulseIn(echoPin, HIGH);
  // Calculate distance from duration.
  long distance = (double)duration * 0.034 / 2.0;

  return distance;
}

void loop() {
  // Get distance and constrain it.
  long distance = getSensorDistance();
  distance = constrain(distance, minDistance, maxDistance);
  
  // Map distance to tone frequency.
  int toneFreqMin, toneFreqMax;
  int buttonState = digitalRead(buttonPin);

  if (buttonState == LOW) {
    toneFreqMin = 20;
    toneFreqMax = 400;
  } else {
    toneFreqMin = 300;
    toneFreqMax = 1500;
  }

  int toneFrequency = map(distance, minDistance, maxDistance, toneFreqMin, toneFreqMax);

  // Calculate time to play the tone based on the potentiometer position.
  int potPosition = analogRead(potPin);
  int toneDuration = map(potPosition, 0, 1023, toneDurationMin, toneDurationMax);

  // Play the tone, then wait some time.
  int waitTime = toneDuration * toneDelayFactor;
  tone(speakerPin, toneFrequency, toneDuration);
  delay(waitTime);
}
Reflection

It was challenging to figure out how the ultrasonic distance sensor worked, because it has 4 pins to set up. We also had to do some math, using the speed of sound, to convert the duration produced by the sensor into a proper distance.

Also, it took a lot of work to figure out the proper ranges for the minimum and maximum frequency for the instrument to play. Too high frequencies were irritating.

One way to improve the instrument is to think about ways to make it easier to use (more accessible). Right now it is a bit awkward to control the potentiometer and button with one hand, while using the other hand with the sensor. Also, it would be convenient to have a way to mute the speaker, or even control its volume.

Week 9: NEVER HAVE I EVER with Arduino

Concept:

For this assignment, I wanted to create a basic version of “Never have I ever” game. The rules of this game are simple, usually there’s a narrator who says something and if any of the player has done that they say, “I have”. I wanted to create this game on Arduino using the LCD screen, the switch button, and the red led. Instead of the narrator, I wanted to display a text on the lcd screen and if the player has done that thing, they press the switch that will light up the led to show the other players. In short, pressing the button is equivalent to saying, “I HAVE” in the real game. For this reason, I went on internet and tried to understand the working of the LCD screen that comes with Arduino UNO and linked it with the switch to control the texts that were displayed on the screen. I was able to create a basic version of this game with just one prompt as I was struggling to reset the cursor placement on the screen. There’s a welcome message that is displayed and is shown until the user presses the switch. Then the first prompt is there, and the user can press the switch to indicate that he/she has done that.

Schematic:
COde:

 

// include the library code:
#include <LiquidCrystal.h>

// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
int redLEDPin = 8;
int trueSwitch = A1;

String welcome = "Welcome Players! The rules of the game are simple: Press RED button if you have! Press RED button to Proceed";
int leng = welcome.length();
char myText[50] = "Never have I ever got on the wrong train or bus?";
bool StartGame = false;
int promptcount = 0;

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {

  // set up the LCD's number of columns and rows:
  lcd.begin(16, 1);
  pinMode(redLEDPin, OUTPUT);
  pinMode(trueSwitch, INPUT);
}

void loop() {

  // set the cursor to (0,0):
  
 

  lcd.setCursor(0, 0);

  // print from 0 to 9:
  // lcd.autoscroll();
  for (int thisChar = 0; thisChar < leng; thisChar++) {
    int truePos = digitalRead(trueSwitch);
    if (truePos == HIGH){
        digitalWrite(redLEDPin, HIGH);
        delay(600);
        StartGame = true; 
        digitalWrite(redLEDPin, LOW);
        break;  
      } 

    lcd.print(welcome[thisChar]);

    if (thisChar == 15){
      lcd.autoscroll();
    }

    delay(200);

  }
  lcd.clear();
  lcd.noAutoscroll();
  delay(2000);
  

  

  // set the cursor to (16,1):

  
  // clear screen for the next loop:

  while (StartGame){
    
 
    lcd.clear();

    lcd.setCursor(0, 0);

    // print from 0 to 9:
    // lcd.autoscroll();
    for (int thisChar = 0; thisChar < 50; thisChar++) {
      int truePos = digitalRead(trueSwitch);
      if (truePos == HIGH){
        digitalWrite(redLEDPin, HIGH);
        promptcount++;
        delay(300);   
      } 
      lcd.print(myText[thisChar]);
      if (thisChar == 15){
        lcd.autoscroll();
      }

      delay(300);

      digitalWrite(redLEDPin, LOW);

    }

    // set the cursor to (16,1):

  
    // clear screen for the next loop:

  
    lcd.noAutoscroll();
    lcd.clear();
  }
}

 

 

Video:

Future Improvements:

As I mentioned earlier, I couldn’t add more than one prompt to this project. For future, I would like to create an array of different prompts that switches as soon as the user presses the switch. Moreover, to make the game more interesting I would like to add more switches with more LEDs to involve more than one player in the game.

Week 9- SWITCHES AND LED LIGHTS

Concept

For this assignment, I had two LEDs which would be controlled by two switches. When the switches are pressed either individually or together, the LEDs are turned on in different ways.  First, pressing the swiitches one by one would turn on their corresponding LEDs and when they are pressed together, the LEDs light up, blinking in a pattern.

Diagram

CODE

void setup() {
  pinMode(8, OUTPUT);
  pinMode(13, OUTPUT);
  pinMode(A2, INPUT);
  pinMode(10, OUTPUT);
  pinMode(13, OUTPUT);
  pinMode(A3, INPUT);
}

void loop() {

  int switchPosition = digitalRead(A2);
  int switch2Position = digitalRead(A3);

  if (switchPosition == HIGH) { 
    digitalWrite(8, HIGH);   // turn the LED on (HIGH is the voltage level)
    digitalWrite(13, LOW);
  } else  {
    digitalWrite(8, LOW);    // turn the LED off by making the voltage LOW
    digitalWrite(13, HIGH);
  }
 if (switch2Position == HIGH) {
    digitalWrite(10, HIGH);   // turn the LED on (HIGH is the voltage level)
    digitalWrite(13, LOW);
  } else  {
    digitalWrite(10, LOW);    // turn the LED off by making the voltage LOW
    digitalWrite(13, HIGH);
  }



  if (switchPosition == HIGH && switch2Position == HIGH) {
   digitalWrite(8, HIGH); // turn the LED on (HIGH is the voltage level)
   delay(200); // wait 0.2 seconds before turning off the LED 
   digitalWrite(8, LOW); // turn the LED off by making the voltage LOW
   delay(200); // wait 0.2 seconds before turning on the LED

   
  digitalWrite(10, LOW); // turn the LED off by making the voltage LOW
  delay(200); // wait 0.2 seconds before turning on the LED
  digitalWrite(10, HIGH); // turn the LED on (HIGH is the voltage level)
  delay(200); // wait 0.2 seconds before turning off the LED 
  
  }
 

}

VIDEO

Week 9: A – Blue, B – Yellow, C – Green, D – Red

Idea:

In high school, I remember having O-level exams with 40 Multiple Choice Questions and each MCQ had 4 options to choose from. In class, everyone was supposed to work on their paper for a set amount of time after which the teacher would one by one say the correct answer out loud. The problem started when in a class of 30 energetic students the teacher’s voice was reduced to a mere muffle. The other issue was the confusion between the option ‘B’ and ‘D’ which sounds so similar that a clarification of ‘B for Ball’ and ‘D for Dog’ was always followed. This gave me the idea to make a 4 LED structure that can be used to communicate the correct answer for each MCQ one by one. The teacher can click the corresponding number of times and display the correct option and then follow it with an explanation of the respective MCQ.

Code:

int buttonPin = 7;
int LED1 = 13;
int LED2 = 12;
int LED3 = 11;
int LED4 = 10;
int initial = 0;
int lastState = 0;
int buttonState = LOW;


void setup()
 {
  // put your setup code here, to run once:
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(7, INPUT);
}

void loop() 
{
  // put your main code here, to run repeatedly:
  buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH)
  {
    delay(500);
    buttonState = digitalRead(buttonPin);
     if (buttonState == LOW) //when pressed move to next led
     {
      initial = lastState + 1;
     }
  }
  else 
  {
    delay(100);
  }
  
    if(initial == 1) //first time blue is lit up
    {
      digitalWrite (13, HIGH);
      digitalWrite (12, LOW);
      digitalWrite (11, LOW);
      digitalWrite (10, LOW);
      lastState = 1;
    }
    else if(initial == 2) //second time yellow is lit up
    {
      digitalWrite (13, LOW);
      digitalWrite (12, HIGH);
      digitalWrite (11, LOW);
      digitalWrite (10, LOW);
      lastState = 2;
    }
   else if (initial == 3) //third time green is lit up
   {
      digitalWrite (13, LOW);
      digitalWrite (12, LOW);
      digitalWrite (11, HIGH);
      digitalWrite (10, LOW);
      lastState = 3;
   }
    else if (initial == 4) //fourth time red is lit up
    {
        digitalWrite (13, LOW);
        digitalWrite (12, LOW);
        digitalWrite (11, LOW);
        digitalWrite (10, HIGH);
        lastState = 4;
    }
    else //all LEDs off
    {
        digitalWrite (13, LOW);
        digitalWrite (12, LOW);
        digitalWrite (11, LOW);
        digitalWrite (10, LOW);
        lastState = 0;
    }

}

Video:

Brightness blinker

Concept & Method
In this assignment, I am using two LEDs, one switch (digital), and one slider potentiometer (analog). The switch controls the entire circuit, and the potentiometer controls the brightness of the LEDs.

Implementation

Code:

#define LED_PIN 3 
#define BUTTON_PIN 7
#define POTENTIO_PIN A1

byte lastButtonState = HIGH;
bool LEDOn = true;

void setup()
{
  pinMode(LED_PIN, OUTPUT);
  pinMode(BUTTON_PIN, INPUT_PULLUP);
}

void loop()
{
    byte buttonState = digitalRead(BUTTON_PIN);
    if (buttonState != lastButtonState) 
    {
      lastButtonState = buttonState;
      
      if (buttonState == HIGH) { // button has been released
        LEDOn = ! LEDOn;
      }
   }
  
  if (LEDOn) {
    int potentiometerValue = analogRead(POTENTIO_PIN);
    int brightness = map(potentiometerValue, 0, 1023, 0, 255);

    analogWrite(LED_PIN, brightness); 
    delay(100);                      // delay is in milliseconds
    analogWrite(LED_PIN, LOW);       // turn LED off (0V)
    delay(100);
  }
  else {
    digitalWrite(LED_PIN, LOW);
  }
}

 

Week 9 – LED Lights with Switches

Concept

For this assignment, I used two LEDs controlled by two switches. The idea is that when one switch is pressed, one of the lights turns on and the other one turns off. When the other button is pressed, the light that is on turns off, and the one controlled by that switch is turned on. When both the buttons are pressed at the same time, both lights blink.

Code

void setup() {
  pinMode(8, OUTPUT);
  pinMode(13, OUTPUT);
  pinMode(A2, INPUT);
  pinMode(A3, INPUT);

digitalWrite(13, LOW);
digitalWrite(8, LOW);

}

void loop() {

  int switchPosition = digitalRead(A2);
  int switchTwoPosition = digitalRead(A3);

  if (switchPosition == HIGH && switchTwoPosition == HIGH)
  {
    digitalWrite(13, HIGH); 
    digitalWrite(8, HIGH);
    delay(100);
    digitalWrite(13, LOW); 
    digitalWrite(8, LOW);
    delay(100);

  }
  else
  {
    if (switchPosition == HIGH) {
    digitalWrite(13, HIGH); 
    digitalWrite(8, LOW);

  }

  if (switchTwoPosition==HIGH)
  {  
    digitalWrite(8, HIGH); // turn the LED on (HIGH is the voltage level)
    digitalWrite(13, LOW);
  }

  }
 
}

Video

Future Improvements

Later, I can add more layers to the lights when each button is separately pressed, for example, change the brightness of the lights or make them fade.

HW 6: Automating the Chrome Dinosaur Game

Have you ever played the Google Chrome Dinosaur Game while waiting for your internet connection to be restored? It’s a simple game that can become addicting as you try to beat your high score. But what if you could take it to the next level by automating the game with an Arduino circuit?

Link to Video

Inspiration

I was inspired to automate the Chrome Dinosaur Game after seeing similar projects on YouTube and other online platforms. I was fascinated by the idea of using an Arduino circuit to control a physical object in response to the game. It was a great opportunity to practice my programming and electronics skills while having fun.

Concept

The concept of my project was to automate the game using a light sensor and a servo motor. The light sensor detects changes in pixel brightness on the screen when obstacles like cacti show up. When an obstacle is detected, the servo motor presses the spacebar key on the laptop to make the dinosaur jump over the obstacle. A push button was added to the circuit to start and stop the entire automation process. Additionally, I added a red LED to indicate the circuit is on and a blue LED to track the progress of the game.

Implementation

To implement my project, I used an Arduino Uno board, a light-dependent resistor (LDR) as my light sensor, a push button, a red LED, a blue LED, and a servo motor.

The push button provides input digitally to turn on or off the circuit. As soon as the circuit is turned on, the red led starts glowing. digitalWrite is used for this operation. The light sensor which is stuck to the laptop screen at an appropriate position to detect obstacles in the path of the chrome dinosaur game, starts reading light intensity values. As soon as an obstacle passes by the light sensor detects a value above (because my browser is in dark mode) the set threshold (which it ideally should be), it sends a signal to the servo to rotate a specific angle in order to hit press the spacebar. This causes the running dino to jump and cross over the obstacle. The blue light glows more brighter with each passing jump symbolising the progress through the game.

This is the code for the said implementation.

 

//Dinosaur Chrome Automation - Analog and Digital IO

//Include Servo Library
#include <Servo.h>

// initializing global variables
int servoPin = 9;
int pos1 = 40;
int pos2 = 110;
int dt = 100;
int count = 0;
int lightInt = 0;
int pushbuttonPin = 13;
int pushbuttonState = 0;
int redLED = 12;
int blueLED = 6;
int blueBr = 0;
int lSPin = A2;
int val;
int thres = 110;
int a;

bool switchONOFF = false;
bool flag = true;
bool switchFlag = true;

Servo myServo;

void setup()
{
  Serial.begin(9600);

  //  setting up servos
  myServo.attach(servoPin);
  myServo.write(pos2);

  //  setting pinModes
  pinMode(lSPin, INPUT);
  pinMode(pushbuttonPin, INPUT);
  pinMode(redLED, OUTPUT);
  pinMode(blueLED, OUTPUT);
}

//controls the movement of the servo
void spaceBarServo() {
  delay(dt );
  myServo.write(pos1);
  delay(dt);
  myServo.write(pos2);
  delay(dt);
}

void loop() {
  // checks for when the button is pressed
  pushbuttonState = digitalRead(pushbuttonPin);
  //  filters out only button clicks and removes button being continuously pressed
  if (pushbuttonState == 1 && switchFlag) {
    //    states of switch on or off
    if (count % 2 == 0) {
      switchONOFF = true;;
    }
    else {
      switchONOFF = false ;
    }
    count++;
    switchFlag = false;
  }
  else if (pushbuttonState == 0) {
    switchFlag = true;
  }

  if (switchONOFF == true)
  {
    //    denotes that the ciruit is ON and listening to obstacles
    digitalWrite(redLED, HIGH);

    //reads the light sensor value
    val = analogRead(lSPin);
    //    debugging output on screen
    Serial.println(val);
    //    checking for if the light sensor value crossed the threshold - denoting obstacle detected on screen
    if (val > thres and flag) {

      // incrementing the brightness of the blue led
      if (blueBr + 2 < 255) {
        blueBr += 2;
      }
      // calling the servo function to hit the spacebar
      spaceBarServo();
      // turning on the blue LED with the specific intensity
      analogWrite(blueLED , blueBr);
      //      flag is used to avoid multiple increments on one jump above the threshold
      flag = false;
    }
    else if (val < thres) {
      flag = true;
    }
  }
  else {
    //    resetting everything if the light is turned off
    blueBr = 0;
    analogWrite(blueLED , blueBr);
    digitalWrite(redLED, LOW);

  }

}

Schematic Diagram

Challenges

One of the biggest challenges I faced during this project was getting the light sensor to accurately detect the obstacles. I had to experiment with different threshold values to make sure the sensor was triggered at the right time. It took a lot of trial and error to adjust the sensor and threshold values to my ambient conditions. Switching off a light in the room caused some noticeable changes in its behavior.

Additionally, I had to ensure the servo motor was placed in the perfect place so that it was firmly pressing the spacebar key at the right time while making sure that it didn’t damage it.

A very weird challenge that I hadn’t ever expected to encounter was the inconvenience of working on the computer as soon as I struck the servo and the light sensor on my laptop. It took a lot of time to navigate around this but finally I was able to get the work done.

Reflections

This project was a great learning experience for me. I learned a lot about programming and electronics, and it was fun to see my circuit in action. I was also surprised at how well my circuit worked in the end. The thing that I would like to improve on would be to make cleaner circuits so as to prevent bugs in my future works.

Week-9 : WOOP-WOOP! the cops are here

Concept:                                                                                                                                     For this project I wanted to create the flashing lights of police cars. Using the two buttons the user can either turn on the red LED or the blue one. While when both buttons are pressed both LEDs starting flashing rapidly creating the same visual effect as a police car or an ambulance.

Equipment:                                                                                                                                       In this project I have used two red and blue LEDS, two push buttons, 4 resistors. Using the resistors is important not to just protect the LEDS but also they are necessary to protect the Arduino board and avoid creating a short circuit between the button, the pins 3 and 4 and ground.

Here is the design of the circuit:

ARDUINO SCRIPT:

const int ledPin1 = 7;
const int ledPin2 = 4;
const int buttonPin1 = 2;
const int buttonPin2 = 3;

const long rapidInterval = 100; // 100ms interval for rapid flashing

void setup() {
  pinMode(ledPin1, OUTPUT);
  pinMode(ledPin2, OUTPUT);
  pinMode(buttonPin1, INPUT_PULLUP);
  pinMode(buttonPin2, INPUT_PULLUP);
}

void loop() {
  byte buttonState1 = digitalRead(buttonPin1);
  byte buttonState2 = digitalRead(buttonPin2);

  if (buttonState1 == LOW && buttonState2 == LOW) {
    rapidFlash();
  } else {
    digitalWrite(ledPin1, buttonState1 == LOW ? HIGH : LOW);
    digitalWrite(ledPin2, buttonState2 == LOW ? HIGH : LOW);
  }
}

void rapidFlash() {
  digitalWrite(ledPin1, HIGH);
  digitalWrite(ledPin2, HIGH);
  delay(rapidInterval);
  digitalWrite(ledPin1, LOW);
  digitalWrite(ledPin2, LOW);
  delay(rapidInterval);
}

 

Week 9 – Disco!

Utilizing 2 analog sensors, I created a double switch system with the LEDs and created flashing lights similar to what you might find in a disco!

I drew this rough schematic on my phone in order to get an understanding of how the power would move throughout my circuit. I had to make sure that the LEDs receive sufficient power as to not make their outputs too dull. After drawing the schematic, I created the circuit trying my best to keep it somewhat neat as to be able to quickly identify which wires leads to where. After that, I wrote down the code in order to bring the disco to life which you can find below:

void setup() {
  pinMode(8, OUTPUT);
  pinMode(13, OUTPUT);
  pinMode(A2, INPUT);
  pinMode(A1, INPUT);
}

void loop() {
  int YellowBtn = digitalRead(A2);
  int GreenBtn = digitalRead(A1);


  if (GreenBtn == HIGH && YellowBtn == HIGH) {
    digitalWrite(8, HIGH);   
    digitalWrite(13, LOW);
    delay(150);
    digitalWrite(8, LOW);
    digitalWrite(13, HIGH);
    delay(150);
  } else  {
    if (YellowBtn == HIGH)
    {
      digitalWrite(8, HIGH);
    }
    else if (YellowBtn == LOW)
    {
      digitalWrite(8, LOW);
    }
    
    if (GreenBtn == HIGH)
    {
      digitalWrite(13, HIGH);
    }
    else if (GreenBtn == LOW)
    {
      digitalWrite(13, LOW);
    }
  }
}

All this hard work combined led to the final product below:

For future imrpovements, I can add more LEDs in order to further the feel of a disco. I can also add some variation in how the LEDs blink or how long they stay on or how bright they should be!

Assignment 6: Handshake-meter

Concept

The concept of this project comes purely from my desire to use a analog sensor that we have not used before. For this reason I wanted utilize the temperature sensor we have. For the ways which I could integrate the sensor first i though about a mechanism like alarm clock which would stop ringing if you placed your hand over it (due to immediate temperature difference) however since we had to use one digital sensor and 2LED s still, I had to choose another sensor. So I decided to switch that can be used to switch from an LED to another one.

 

Implementation

For this project, I first connected the temperature sensor. Since it takes time for the sensor to relay information on the temperature change I decided to put delay information. For the conversion of the read value from the sensor to the intelligible temperature value, this link can be used. When the jump level for the temperature is achieved, the red LED is turned on. On the other hand, when the switch is pushed the green LED is on until there is a significant drop on the temperature sensor again.

int tempPin = A0; //the temperature pin
int gLed = 3;
int rLed = 4;
int buttonPin = 8;
int ctr = 0;
int data1;
float temperature1;

void setup() {
  // Init serial at 9600 baud
  Serial.begin(9600);
}

void loop() {
  if (ctr == 0) {
    //initial temperature is recorded only once at the start and stored for use
    data1 = analogRead(tempPin);
    temperature1 =  100 * ((data1 * 5.0 / 1024.0) - 0.5);
    //the temperature recorded can be seen at the monitor
    Serial.print("Temperature: ");
    Serial.print(temperature1);
    Serial.println(" *C");
    ctr++;
  }

  //reads pure temp sensor data
  int data2 = analogRead(tempPin);
  // conversion to temperature from the data
  float temperature2 = 100 * ((data2 * 5.0 / 1024.0) - 0.5);;

  //the difference is recorded
  float difference = temperature2 - temperature1;

  //difference from the current to the initial temperature is mapped for the green LED
  analogWrite(gLed, map(difference, 0, 3, 0, 255));

  //red LEDis lit up according to the button pressed
  int buttonState = digitalRead(buttonPin);
  digitalWrite(rLed, buttonState);

  //difference pattern observed in the monitor
  Serial.print("Difference: ");
  Serial.print(difference);
  Serial.println(" *C");
  delay(800); // wait a second between readings
}

Schematic Diagram

Challenges

It was quite hard to do trial and error on the temperature data, as it was quite experimental. I had to watch through the relayed data some time to figure out which data cutoffs to use, as well as delay. It is still open to changes and the whole effect of the project would change according to these values that are arbitrarily determined. The project had similar challenges to plans that were not brought into reality before. Its in soul similar to Simone Giertz’s projects.

On the other hand, the mechanism of having it on my hand, and making sure that it didn’t move and was still usable was also very hard. I experimented with a couple of materials to make sure that the cables did not slip away, or the temperature sensor didn’t give faul values.

Reflections

This was a completely experimental project and even its purpose is questionable. I wanted to make a commentary on the social construct of what is a required amount to handshake and how we view it as weird if it is too long etc. I made the LEDs work in reverse, as red when you are waiting for it, and green if you handshake for too long (measured in temperature). It was quite fun and frankly purposeless and I feel like that’s why I enjoyed building this project.