If you are
reading this you are most likely sitting in front of a computer of some sort,
maybe even slouching into the chair. Often we don’t care about our posture
which can result in back pain and worse. If someone tells you to sit upright this is easy to do, but it won’t hold on for more than a few minutes. Now wouldn’t
it be great to have a device that can remind you to improve your posture?
Ideas
There already are some very intelligent approaches on this topic. One of the best known should be lumoback or lumolift as the new version is called. As far as I understand, they use an accelerometer for a sensor to measure the angle at a certain point of the spine. While these sensors should be relatively accurate, they also need tiny electronics and clever power management to be wearable. Something that is really difficult to achieve with simple electronics and tools.
What is left is making a chair-mounted device. One solution would be using a few pressure sensors on the chair that measure the weight distribution. The downside is that a lot of those sensors are needed for a reliable result. And pressure sensors are not too cheap.
Something that changes significantly between good and poor posture is the position of the head. So what I finally came up with is a device that simply measures the distance to the head.
Hardware
The
simplest distance sensors are ultrasonic or infrared sensors. I went with a SR-HC04
because it is cheap and sufficiently precise. There are no special requirements
to the controller so I am using an Attiny85. A small piezo speaker provides acoustic
feedback to the user. The only thing left is the power supply for which 5V are
needed because of the ultrasonic sensor. You could easily use an USB port but I
did not want to rely on a computer, 3 button cells deliver around 4,5V and
should work for a few days.
Soldering
everything together is very easy, the circuit does not need a single resistor
although the piezo speaker could use one when longer used. The components are
soldered onto a piece of prototyping PCB and some pin headers to connect to
the sensor and power supply.
The whole
device is not mounted directly onto the chair, but is connected to a piece of
fabric that hides the battery and can be laid over the chair’s rest.
Software
The attiny85
is programmed using Arduino and luckily there is no difference in using the
hc-sr04. There are basically 3 modes:
The configuration-mode waits until the user holds his head still and saves the
distance of a comfortable position. After this the watch-mode starts, what
compares the current distance to the saved distance. If your head is too far
away it will sound an alarm. If you get your head back the alarm will stop
immediately. If not the device beeps a few times and then mutes. After some
time it enters standby-mode. This is meant for leaving the device alone, the
sensor reads the distance only every few seconds during this to save energy. If you get back
to your chair the configuration-mode starts again.
Programming this was not too difficult but there
still are some strange bugs I cannot get rid of.
Conclusion
Apart from
the minor software issues, the project was successful. This sensor can easily be built for less than 10$.
But keep in
mind: This is simply meant as a reminder to sit upright, not as a medical
application.
Nice project,
ReplyDeleteI know you said pressure sensors are expensive, but using a pressure sensor the turn the device on/off would be pretty handy and save battery.
Also I work in an office with multiple colleges, we would be drawn crazy from the buzzer if everyone had one. If I build one, I would replace the buzzer for a vibrating motor.
I was thinking about using a vibrating motor, too, but since the device is not directly attached to the body it would be difficult to notice. But you are right, the piezo speaker is way too loud, with full 5V it sounds like a fire alarm, I had to turn down the volume to make it usable.
ReplyDeleteI am a physical therapist, I will pay somebody labor and materials to build a few of these to sell in my clinic. Contact info@coreptclinics.com
ReplyDeleteHello, My name is Michael, if you are still interested, I could easily build a few of these devices.
DeletePlease email: M919WM@gmail.com
Thanks
This looks very interesting... will research to know more. Can anyone suggest good source/stores for the parts? Thanks!
ReplyDeleteDid you post the source code for this somewhere?
ReplyDeleteI do not want to publish the source code right now. You would need to make a lot of adjustments anyway depending on the sensor and controller you are using.
DeleteGood idea, I am looking for a chair sensor that can output the sensor data(pressure data, seat or not etc) by Bluetooth or other(WIFI). Could you give me some such information please?
ReplyDeleteMail: hujianglong123@gmail.com
can you please upload the code? i need to know attiny's function to do sounds at random intervals :(
ReplyDeletethat's my code, it works on arduino but not on attiny, i think that's much similiar to your code, can you help me to convert in attiny language?
Deletelong randNumber;
long randNumber1;
long randFreq;
#define trigPin 11
#define echoPin 12
void setup ()
{
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop ()
{
randFreq = random(250, 5000);
randNumber = random(50, 100);
long duration, distance;
digitalWrite(trigPin, LOW); // Added this line
delayMicroseconds(2); // Added this line
digitalWrite(trigPin, HIGH);
delayMicroseconds(10); // Added this line
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 29.1;
if (distance < 10) {
tone(13, randFreq);
delay(randNumber);
noTone(13);
randNumber1 = random(10, 1000);
delay(randNumber1);
}
else {
}}
i have a speaker, hcsr04 and arduino connected, if distance < 10 speaker makes random sounds in frequency and delay
DeleteYou will have to replace the tone library which does not work on the Attiny85.
DeleteHave a look at this: http://www.technoblogy.com/show?KVO
or this: http://lizastark.com/thesis/2011/12/attiny85-initial-tests-tone-function-support/
Anyway you can test if everything else works by just turning the speaker on and off instead of playing a tone.
thank you! i used tinytone and worked, but the volume is incredibly low, i can't hear nothing :( i think that the hc-sr uses much of the arduino current..
Deleteok, solved .. i switched pin and now it works :) i think that attiny give different priority to some pins..
Delete