Abstract: No More Fidget Spinner is meant to help with anxiety, medical and stressful situations. The device has two separate parts: one is a wearable device that can be put on arms or legs; and the other is a stationary device that is meant to be put on a desk. When the wearable device detects a constant movement, it sends a signal to the desk part via bluetooth and the deck part sends out a message through a human-readable indicator.
Project Description: Our ESE 111 Final Project was the No More Fidget Spinner. It is very common nowadays for people to constantly tap their pen on a desk while thinking or keep shaking your leg during an exam and causing the whole row of chairs to squeak or to move an injured body part when told to keep it still. Our project is targeted towards people in such situations. It is a wearable device that aims to help with fidgeting and excessive movements related to medical injuries and anxiety. Our project is a two-part product. The first part is the wearable component which can be strapped the an individual’s arm, leg, or area of movement/injury. The second part is the stationary part which can be placed on a work desk, night stand, chair in front of you, etc. What our project aims to do is to alert the injured/moving individual that they are moving too much so they can control movement. It works when the wearable piece sends a signal to the stationary piece when the subject is moving too much and the stationary piece will light up or spin a fan depending on what is connected in circuit.
Project Design: The way our product is structured is essentially two arduino-protoboards connected via a paired bluetooth system. The wearable part is constructed with an accelerometer that monitors and reads the subject’s movement. The accelerometer measured movement in all three directions, which was then combined and programmed to represent total acceleration. The wearable device was tested for thresholds and then code was uploaded to the arduino to differentiate between normal movement and repetitive/excessive movement that would trigger a signal. The stationary portion of the product is constructed with a ping sensor and an LED that can be interchangeable with another component (like a small fan, a buzzer, etc.). The ping sensor is programmed to constantly measure the distance from the subject and the stationary part of the device, so it only picks up on movement while the subject is in the room. If the subject leaves the room to do other activities (i.e make coffee, work out, etc.), the device would not pick up on movements. The purpose of this is to make sure that if the subject forgot to take off the wearable part while resuming daily activities, signals would not be picked up and thus alter movement data/trigger the LED. The LED component serves as a reminder that the subject is moving too much and needs to slow down/stay calm. Our product is aimed to help the subject, as well as doctors and parents, monitor movements and allow the subject to control their own movements, slowly learning to stop fidgeting/moving injured areas until healed.
Challenges and Insights: Some challenges we faced while building this project include making the device as small as possible and making sure the bluetooth connections worked. Because our project includes a wearable part, we wanted to make sure it wasn’t inconvenient for the user. Making sure the wires were short enough and the breadboards were intact was important. Additionally, we had to re-pair the bluetooth modules and test them to make sure they worked after 3 failed attempts. Another issue we had was replacing the original fan signal with an LED signal because a fan is distracting to be used in an examination room. Throughout this project, we learned a lot about bluetooth connections and calibrating the accelerometer/setting thresholds so only certain signals can trigger the LED. We had to revisit old labs to go over wiring techniques and connecting parts properly in circuit.
What’s Next: As for future improvements for the project, we plan on making it more visually appealing. Smaller bluetooth modules and protoboards can be used, and an enclosure can be 3-D printed so wires aren’t sticking out. Also, we can attach an adjustable strap so the user can wear the device around multiple areas. The device can also be connected to a cloud-based server where data is uploaded so parents can monitor their childrens’ movements and doctors can look at all of their patients’ data. Data logging can also be used to observe and treat illnesses and will make our product more high tech. All in all, we predict that our product will be used in ergonomics and health-tech, but there are many improvements that can be made to design and features.
Bluetooth Code:
// slave code
include
SoftwareSerial BTSerial(2, 3); //TX RX int led = 10; char inChar;
define trigPin 13
define echoPin 12
void setup() { BTSerial.begin(9600); //begin bluetooth communication Serial.begin(9600); //begin serial communication pinMode(led, OUTPUT); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); }
void loop() { if (BTSerial.available()) {
//measuring the distance from the ping sensor
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration / 2) / 29.1;
//read from wearable device inChar = BTSerial.read();
//if there is someone sitting beside the table and fidgeting if(inChar == '0' || distance >= 100) { digitalWrite(led, LOW); } else if(inChar == '1' && distance < 100) { digitalWrite(led, HIGH); delay(100); } } }
// master code const int xPin = 0; const int yPin = 1; const int zPin = 2;
include
SoftwareSerial BTSerial(2, 3);
void setup(){ Serial.begin(9600); BTSerial.begin(9600); }
void loop(){
//read the analog values from the accelerometer double xRead = (analogRead(xPin) - 510) / 10.0; double yRead = (analogRead(yPin) - 510) / 10.0; double zRead = (analogRead(zPin) - 510) / 10.0; double totalG = sqrt(pow(xRead, 2) + pow(yRead, 2) + pow(zRead, 2));
if (totalG < 9 || totalG > 14) { delay(1000); BTSerial.print('1'); } else { BTSerial.print('0'); } }
Log in or sign up for Devpost to join the conversation.