Final Project: Preliminary Concept

My final project is an interactive experience that allows users to explore the North Caucasus region (Adyghea, Chechnya, North Ossetia, and Dagestan) as if they are preparing for a journey—whether for university break, a future trip, or just curiosity.

Concept Overview:

The physical part of the project will be a laser-cut/3D printed compass embedded with a potentiometer (or potentially an angle detector) connected to an Arduino. As users physically rotate the compass, it sends data to a P5.js sketch, where the selected region is visually highlighted on a map of the Caucasus.

After selecting a region, users will be presented with a digital menu, which will be the same for each region, with categories like tourist destinations, cuisine, music, what each region is famous for etc. Clicking each category will reveal visuals, audio clips, or text lated to that region and topic.

 

Current Progress:

I’m currently working on designing the digital side of the project in Canva, so i haven’t started writing the code yet. As for the physical part of the project – compass – i’m planning on doing it later as i think it’s better to visualise the layout of my project first.

Week 11: Reading Response

Design Meets Disability

Reading this article made me reconsider how we think about assistive devices. The author argues that the way we design things like hearing aids, prosthetic limbs, or wheelchairs often focuses only on function without paying attention to design or how it makes people feel. He suggests that assistive technologies should be treated the same way we design phones, clothes etc.

One of the examples that stood out to me was how eyeglasses used to be seen as purely medical devices, but now they’re fashion statements. In contrast, hearing aids are still often designed to be hidden, as if there’s something wrong with having them.

He also talks about prosthetics and how some people prefer high-tech or artistic designs over realistic-looking limbs. I really liked the idea that people should have choices between and stylish and not purely functional options too. That feels way more empowering than just trying to hide the fact that someone uses an assistive device.

Personally, this reading made me think about how design can either reinforce stigma or break it. If we design assistive tech as something to be hidden, we’re basically saying that disability is something to be ashamed of. But if we treat it as a space for personal expression, that makes people with disabilities feel more confident.

Week 11: Serial Communication

Task 1

Prompt: Make something that uses only one sensor on Arduino and makes the ellipse in p5 move on the horizontal axis, in the middle of the screen, and nothing on Arduino is controlled by p5.

Code P5:

let circleX;
function setup() {
    createCanvas(600, 600);
    noFill();
}
function draw() {
     background("rgb(248,238,249)");
  stroke("purple");
 ellipse(map(circleX, 0, 1023, 0, width), height / 2, 100, 100);
   
     if (!serialActive) {
    background("#CE41E6");
    stroke("#white");
    textSize(50);
    text("Press Space Bar to select Serial Port", 20, 30, width - 30, 200);
  }
}
function keyPressed() {
    if (key == " ")
        setUpSerial();
}
function readSerial(data) {
    if (data != null) //
        circleX = int(data);
}            
   

Arduino Code:

int lightPin = A0;  

void setup() {
  Serial.begin(9600);       
  pinMode(lightPin, INPUT);  
}

void loop() {
  int sensorValue = analogRead(lightPin);  
  Serial.println(sensorValue);            
  delay(5);                             
}

Task 2

Prompt: Make something that controls the LED brightness from p5

For this project, I decided to imitate the sun: as the mouse moves from left to right across the screen, the brightness level on the screen and the connected LED both increase.

Code P5:

let ledBrightness = 0;

function setup() {
  createCanvas(600, 400);
  textSize(20);
}

function draw() {
  background(240);

  if (!serialActive) {
    fill(0);
    text("Press SPACE to select serial port", 20, 30);
  } else {
    // Display mapped brightness
    fill(0);
    text("LED Brightness: " + ledBrightness, 20, 30);

    fill(255, 150, 0);
    ellipse(mouseX, height / 2, map(ledBrightness, 0, 255, 10, 100));
  }

  // Update brightness based on mouseX
  ledBrightness = int(map(constrain(mouseX, 0, width), 0, width, 0, 255));

  // Send brightness to Arduino
  if (serialActive) {
    writeSerial(ledBrightness + "\n");
  }
}

function keyPressed() {
  if (key == ' ') {
    setUpSerial(); 
  }
}

Arduino Code:

int ledPin = 9; 
void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);

  while (Serial.available() <= 0) {
    delay(300);
  }
}

void loop() {
  while (Serial.available()) {
    int brightness = Serial.parseInt();
    if (Serial.read() == '\n') {
      brightness = constrain(brightness, 0, 255);
      analogWrite(ledPin, brightness);
    }
  }
}

Task 3:

Prompt: take the gravity wind example (https://editor.p5js.org/aaronsherwood/sketches/I7iQrNCul) and make it so every time the ball bounces one led lights up and then turns off, and you can control the wind from one analog sensor. 

I connected Arduino to p5.js so the potentiometer controls the wind of the bouncing ball, and whenever the ball hits the ground, the LED blinks. Everything talks to each other through serial communication.

Link to task 3 video 

Code P5:

let velocity;
let gravity;
let position;
let acceleration;
let wind;
let drag = 0.99;
let mass = 50;
let serial;
let connectBtn;
let ledTriggered = false;
function setup() {
  createCanvas(640, 360);
  noFill();
  position = createVector(width / 2, 0);
  velocity = createVector(0, 0);
  acceleration = createVector(0, 0);
  gravity = createVector(0, 0.5 * mass);
  wind = createVector(0, 0);
  // setup serial connection
  serial = createSerial();
  let previous = usedSerialPorts();
  if (previous.length > 0) {
    serial.open(previous[0], 9600);
  }
  connectBtn = createButton("Connect to Arduino");
  connectBtn.position(10, height + 10); // button position
  connectBtn.mousePressed(() => serial.open(9600));
}
function draw() {
  background(255);
  // check if we received any data
  let sensorData = serial.readUntil("\n");
  if (sensorData.length > 0) {
  // convert string to an integer after trimming spaces or newline
    let analogVal = int(sensorData.trim());
    let windForce = map(analogVal, 0, 1023, -1, 1);
    wind.x = windForce; // horizontal wind force
  }
  applyForce(wind);
  applyForce(gravity);
  velocity.add(acceleration);
  velocity.mult(drag);
  position.add(velocity);
  acceleration.mult(0);
  ellipse(position.x, position.y, mass, mass);
  if (position.y > height - mass / 2) {
    velocity.y *= -0.9; // A little dampening when hitting the bottom
    position.y = height - mass / 2;
    if (!ledTriggered) {
      serial.write("1\n");   // trigger arduino LED
      ledTriggered = true;
    }
  } else {
    ledTriggered = false;
  }
}
function applyForce(force) {
  // Newton's 2nd law: F = M * A
  // or A = F / M
  let f = p5.Vector.div(force, mass);
  acceleration.add(f);
}
function keyPressed() {
  if (key === ' ') {
    mass = random(15, 80);
    position.y = -mass;
    velocity.mult(0);
  }
}

Arduino Code:

int ledPin = 9;
void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
}
void loop() {
  // send sensor value to p5.js
  int sensor = analogRead(A0);
  Serial.println(sensor);
  delay(100);
  // check for '1' from p5 to trigger LED
  if (Serial.available()) {
    char c = Serial.read();
    if (c == '1') {
      digitalWrite(ledPin, HIGH);
      delay(100);
      digitalWrite(ledPin, LOW);
    }
  }
}

 

Week 11 – Reading Response

My first takeaway is the importance of design for disability support. Prior to the reading, I was not aware that glasses were used as medical prescriptions not long ago (in the 1960s and 1970s), people were stigmatized for the medical model (they were considered to “cause social humiliation”) and that there was a transition to eyeglasses becoming more stylish with new, fashionable glasses. The irony that striking fashion frames are less stigmatizing than pink plastic glasses strikes me. So I thought that what is more visible (such as the striking fashion frame) can be more positively received than what is intended to be visible (pink plastic glasses). But my thought is not fully correct – glasses’ acceptability does not come from directly from its degree of brightness, for its brightness can be to the distaste of certain consumers. Instead of making things more “visible,” I see that the author tries to bring forward the importance of designers in the making of disability support devices. In the design of prosthetic limbs, design engineers are not demanded in a multidisciplinary team of engineers, clinicians, etc. Yet, I see so much potential through the hearing aid designed by Ross LoveGrove for RNID, called The Beauty of Inner Space. Since design can project negative connotation (such as invisibility to project a sense of shame of something to be hidden) or positive connotation, we need designers for people with disabilities to feel more comfortable. With more comfort, it is easier to “wear” than to “use” – also words I took note of with interest – as the former means more closeness to oneself than the latter.

My second takeaway is the importance of design in general, not just for disability. Steve Jobs words about design being not just “what it looks like and feels like” but “how it works” suggest that design is essential, significant and should not be downplayed! It makes sense because of the example of how the design choice of only two options for the iPod shuffle then allows the user to select either playing tracks in the order they were downloaded or in a random order. Two good principles I wish to remember for design in the future are: one, to consider and pursue great cohesion in design between the parts and the whole; two, creating a more accessible design and using simplicity to achieve this.

Week 11: Design Meets Disability Reading Response

One thing I really liked about Design Meets Disability by Graham Pullin is the way it focuses on reframing disability not as a limitation, but as a creative lens through which to innovate design. Rather than treating these assistive technologies like hearing aids or prosthetic limbs as mere medical interventions meant to blend in or be hidden, Pullin instead emphasizes their potential to become expressions of identity, taste, and personal style. The idea that a prosthetic limb could be as much a fashion statement as a handbag or a pair of shoes completely challenges traditional views of medical devices. This shift from invisibility to visibility, where these aids can be beautiful, bold, and integrated into one’s sense of self, was fascinating for me because there’s often a sense of shame associated with these assistive technologies instead that is now being converted into a sense of pride. It reveals how design can be an empowering force when it treats users as people with preferences and personalities, not just as patients.

Overall, I think Pullin’s work makes a very compelling case for bringing designers and disabled individuals into a closer collaboration, arguing that inclusive design should not be about achieving an average but about expanding the range of what’s possible. By introducing examples like sculptural hearing aids or prosthetics designed with aesthetic flair, Pullin invites us to think beyond function and consider meaning, identity, and even fun. It is a very unique take that kind of steps away from more utilitarian design approaches, and it challenged my own assumptions about what disability-related products are supposed to look like. Thus, Design Meets Disability doesn’t just advocate for better products, it advocates for a broader, more human-centered vision of design itself.

Reading Response: Design Meets Disability

The text prompted me to reflect deeply on the role of design in shaping not only products but also perceptions and identities- especially for those of us working in product design. The text challenges the traditional boundaries between medical necessity and mainstream desirability, and as a designer, I find both inspiration and discomfort in this tension.

One point that stands out is the way the Eameses’ leg splint for the U.S. Navy, originally a response to a medical brief, became a catalyst for innovations that transformed mainstream furniture design. The author’s admiration for the leg splint’s “organic form and geometric holes, the combination of subtle surfaces and crisp edges” resonates with me because it exemplifies how constraints can drive creativity. The evidence is clear: the technology and aesthetic language developed for a medical device directly influenced the iconic Eames furniture. This makes me think about how often, in design for disability, we excuse poor design because of the market or the context, rather than holding it to the same standards as mainstream products. It prompts me to question: why shouldn’t design for disability be as beautiful, as considered, and as desirable as anything else?

However, I am uneasy about the persistent bias towards discretion in assistive products. The text critiques the tradition of camouflaging medical devices- pink plastic hearing aids, for instance- in an attempt to make them invisible. The author argues that this approach can inadvertently reinforce the idea that disability is something to be hidden, rather than embraced. The evidence comes from the evolution of eyewear: glasses have transitioned from stigmatized medical appliances to fashion statements, even to the point where people without visual impairments wear them as accessories. This shift did not come from making glasses invisible, but from making them objects of desire. It makes me realise that, as a designer, I should challenge the default of discretion and instead explore how products can project positive identities.

The discussion of fashion’s role in design for disability is particularly provocative. The text points out that fashion and discretion are not true opposites, but there is a creative tension between them. Fashion’s embrace of diversity and its ability to make wearers feel good about themselves stands in stark contrast to the clinical, problem-solving culture that dominates medical design. The evidence is in the HearWear project, where inviting designers from outside the medical field led to radical new concepts for hearing aids- some playful, some overtly technological, and some drawing on jewellery and body adornment. This makes me reflect on my own practice: am I too quick to prioritise technical performance and problem-solving at the expense of self-expression and emotional value?

What I particularly like about the text is its insistence on keeping “the design in design for disability.” The author links the success of products like the iPod to a relentless focus on simplicity and attention to detail, arguing that these same sensibilities are often missing from assistive products because designers are not involved early enough in the process. The point is well made: design is not just about how something looks, but how it works and how it makes people feel. The evidence is in the contrast between the iPod’s iconic simplicity and the “flying submarine” syndrome of overburdened, over-complicated universal designs that try to be everything to everyone and end up pleasing no one. This reminds me that good design often means having the courage to say no to unnecessary features, and instead focusing on the essence of the product and the experience it creates.

Yet, I dislike the way the field of design for disability is still so often siloed and marginalised, both in practice and in perception. The text highlights how multidisciplinary teams developing prosthetics rarely include industrial or fashion designers, let alone sculptors or artists. The result is products that may function well but fail to resonate emotionally or culturally with their users. The evidence comes from the stories of Aimee Mullins and Hugh Herr, who both see their prostheses not just as tools but as extensions of their identity- sometimes even as sources of pride or advantage. This makes me think about the importance of diversity, not only among users but also among designers. We need to bring in more voices, more perspectives, and more creativity if we are to create products that are truly inclusive and empowering.

In conclusion, this text has challenged me to rethink my approach as a designer. It has made me more aware of the cultural and emotional dimensions of product design, especially in the context of disability. I am inspired to seek a healthier balance between problem-solving and playful exploration, between discretion and fashion, and between universality and simplicity. Most of all, I am reminded that design has the power to shape not only products but also identities and societies- and that this responsibility should never be taken lightly.

Preliminary Concept: Multiplayer Character Card Game System Using Arduino and p5.js

Finalised Concept

For my final project, I am designing an interactive multiplayer game system inspired by the iconic Yu-Gi-Oh! duel disk, but reimagined for creative, social play. Players use physical cards embedded with unique identifiers (such as RFID or NFC tags) to represent custom characters they create. These cards are scanned by an Arduino-powered duel disk, allowing each player to join the game with their personalized avatar and stats. The system supports multiple players competing in a series of mini-games or trivia challenges, with all real-time visuals and game logic handled by a p5.js interface on the computer.

This project merges tangible interaction (physical cards and duel disk) with digital feedback (customizable avatars, live scores, and dynamic mini-games), creating a seamless, engaging experience that emphasizes both individual expression and social play.

Arduino Program Design

Inputs:

  • Multiple RFID/NFC readers (or a shared reader for sequential scans), each detecting when a player places their card on the duel disk.

  • Optional: Buttons or touch sensors for additional in-game actions.

Outputs:

  • LEDs, buzzers, or vibration motors embedded in the disk to provide physical feedback (e.g., indicate successful scans, turns, or game outcomes).

Communication:

  • When a card is scanned, Arduino reads the card’s unique ID and sends it to the computer via serial communication.

  • Arduino can also receive commands from p5.js (e.g., to trigger LEDs or buzzers when a player wins a round).

Summary of Arduino’s Role:

  • Listen for card scans and input actions.

  • Transmit card IDs and sensor data to p5.js promptly.

  • Receive feedback commands from p5.js to control physical outputs.

p5.js Program Design

Responsibilities:

  • Listen for incoming serial data from the Arduino (card IDs, button presses).

  • Match each card ID to a player profile, loading their custom character (name, avatar, stats).

  • Allow players to customize their characters through a user-friendly interface.

  • Manage the game flow: let multiple players join, select mini-games, and track scores.

  • Display real-time game visuals, avatars, and results.

  • Send commands back to Arduino to trigger physical feedback (e.g., light up the winning player’s section).

Data Flow:

  • On card scan: p5.js receives the ID, loads or prompts for player customization, and adds the player to the game.

  • During play: p5.js updates visuals and scores based on game logic and player actions.

  • On game events: p5.js sends output commands to Arduino for physical feedback.

Interaction Design

  • Joining the Game: Each player places their card on the duel disk. The Arduino detects the card, and p5.js loads their profile or prompts for customization.

  • Customizing Characters: Players can use the p5.js interface to personalize their avatars, choose stats, and save progress.

  • Starting a Game: Once all players have joined, they select a mini-game or trivia challenge.

  • Gameplay: Players compete head-to-head or in teams, with p5.js managing the game logic and displaying results. Physical feedback (lights, sounds) enhances the experience.

  • Winning and Progression: Scores and achievements are tracked per player, and leaderboards are displayed at the end of each round.

System Communication

  • Arduino → p5.js: Sends card IDs and sensor/button states.

  • p5.js → Arduino: Sends commands to trigger LEDs, buzzers, or other outputs based on in-game events.

Project Progress and Next Steps

  • Prototyping: I am currently prototyping the card scanning system with Arduino and testing serial communication with p5.js.

  • UI/UX: Early sketches for the p5.js interface focus on clear avatar displays, easy customization, and intuitive game flow.

  • Game Logic: I am developing the first mini-game (a trivia challenge) and designing the multiplayer logic to support dynamic player counts.

Why This Project?

This system blends physical and digital interaction in a way that is social, customizable, and fun. It encourages users to invest in their characters and compete or collaborate with others, making every session unique. The project leverages Arduino for timely, tangible sensing and feedback, while p5.js handles multimedia processing and engaging visual responses- fulfilling the assignment’s requirements for a responsive, multimedia interactive system.

Final Project Proposal

When I was thinking about the final project my first idea was to make something innovative and playful at the same time. I decided to make a maze solving robot. The robot would solve the maze on its own, but I would make it interactive by allowing the users to set up the maze how they want.

I plan to create the maze out of cardboard to make it easy to transport and not heavy to move around and change between users. I am planning to also mark sport on the bottom to show outlines of where the boxes can be placed. The user will still be able to place the boxes however they want, but this needs to be done to insure the users don’t put the boxes too close or too far apart therefor “confusing” the robot.  To mark these outlines I am planning to simply tape some colored tape on the floor.

The robot will use a DC motor with wheels to move around and would “see” using the ultrasonic distance sensors. Currently I am looking into making the design as wireless as possible in a sense that the robot will be powered using external power like batteries and not be connected to the laptop to allow for better mobility. The batteries are a solution for the power part, but for the p5 code I will have to be connected to my laptop. I am looking into ways to make the Arduino connect to p5 using Bluetooth but if it proves to be too unreliable I will use the cable and figure out how to adjust the mobility based on that.

As for p5js I plan to make a outline of the “map” of the maze. The robot will move around and leave dots or “breadcrumbs” to show the quickest way solve the given way. I think this will give a nice UI to the whole design.

Week 11: Design meets Disability

In Design Meets Disability, Graham Pullin talks about how design and disability don’t have to be separate things. He makes the point that products for people with disabilities are often made just to be functional, not stylish or personal. But he believes design should consider both usefulness and aesthetics. For example, he compares hearing aids to glasses—how glasses have become a fashion item, while hearing aids are still usually hidden. This really made me think about how much design influences how people feel about themselves and their devices.

What stood out to me is how Pullin encourages designers to think differently and challenge old assumptions. Instead of just trying to make something look “normal,” why not celebrate individuality and make things that people are proud to use? It made me realize how much power design has—not just in how things work, but in how they make people feel. Overall, the reading made me think more deeply about what inclusive design really means and how it can actually improve lives in more ways than just solving a problem.

Week 11 – Reading Response

Reading Design Meets Disability made me rethink how we define good design. It is not just about solving problems efficiently, it is also about expression and identity. What I found really interesting was how the glasses were transformed from a medical device to a mainstream fashion statement. It made me wonder if other assistive devices could follow the same path? Should functionality mean sacrificing design? The reading made me realize that design should follow a broader design principle, one that serves everyone better. We shouldn’t focus just on how things work, but how they feel, how they look, and what the y say about the people using them. That is not just assistive design. That is human centered design.