Final Project: The Hush Clip

Hello Everyone!

Project Title: The Hush Clip

Concept:

For my final project I had started with a pretty ambitious concept to create a visual translation of your voice on an LED panel that would be attached to your body in some way. As I am very inexperienced with the programming and software needed to accomplish this, I had to abandon this concept and go with something similar.

I opted to design an attachable accessory that based on the volume of your voice, would turn on a red light if it became to loud. The idea is that you are given a greater awareness of yourself when you are in a heated conversation or argument.

Intended Scenario: This product is intended for anyone who wants to be more aware of themselves in social situations but not have someone remind them to “hush”. Instead this product does that for the user. When the users voice gets too loud, the red LED comes on to let the user know they are being too loud.

Context: I found some inspiration from my previous product relating to communication of your feelings through other modes other than physical gestures. This got me thinking a lot about awareness of others and of ourselves. I also received a lot of inspiration, form wise, from self tracking devices such as Striiv’s Play Smart Pedometer.

Parts & Materials: Materials include:

  • Lilypad Arduino
  • Sound sensor
  • 3V lithium battery and battery holder
  • Red LED
  • Resistor for LED
  • Power switch
  • Wire

Challenges & Successes: There were many a challenges with this project. Beginning with me being unable to figure out my first concept. When I finally decided to simplify I only had a week left before the project was due so I left myself very little time to complete the project. I had never soldered before so that was definitely a challenge but I ended up being able to conquer that and came out of it with a well soldered circuit. The next challenge was to create a container that holds the circuit and is small enough to clip to your shirt and not be bulky. I started off with a birch plywood square shape with the space cut out inside to hold the circuit and a clip on the back. This proved not to be the most pleasing container. The other challenge is that the serial read from the sound senor is very erratic so it was hard to set the “if” values. I think this is due to the nature of the sensor and the fact that no one’s voice is a steady volume.

Next Steps: My next step is to make a more pleasing form to hold the circuit and to get the sensor to work properly.

Circuit sketch or diagram:

CIRCUIT DIAGRAM

Code:

int sensorPinsound = A2;                 // Arm sensor is connected to analog pin 2
int ledPinred = 9;                     // Red LED is connected to digital pin 9
int sensorValuesound = 0;   // variable to store the value coming from the Arm sensor

void setup()  
{

  pinMode(ledPinred, OUTPUT);         // sets the ledPinred to be an output
  pinMode(sensorPinsound, INPUT);       // sets the sound sensor to be an input
  digitalWrite(ledPinred, LOW);       // turn the red LED off
  Serial.begin(9600);

}

void loop()                 // perform actions if conditions are met
{
  sensorValuesound = analogRead (sensorPinsound);
  Serial.println(sensorValuesound);  

if (sensorValuesound >= 900 )
{ digitalWrite(ledPinred, LOW);
}                           // if the sound sensor is greater than , then the red LED turns on

else
{ digitalWrite (ledPinred, HIGH);
}           // if the sound sensor is less than , then the red LED turns off

}

Description of your process:

1. Brainstormed concepts

2. Did basic research online of existing products

3. Figured out what materials were needed

4. Planned out the circuit

5. Created code in Arduino

6. Tested circuit and code with alligator clips

7. Brainstormed and sketched out accessory design

8. Soldered circuit together

9. Retested circuit and code, but had trouble getting it to work that time

10. Using forcener drill bit and hand tools I cut out the holes in a piece of wood, needed to fit the circuit.

11. This is as far as I got because of the issues I ran into with the sensor not working and also due to the lack of time I gave myself to complete the project

Visual documentation of the project:

Wearables Final Project Image Documentation

THANKS!

 

 

Fantasia

 

 

 

 

 

 

 

 

 

 

 

Fantasia is a wearable technology accessory that translates a physical performance into a two dimensional time-based graphic narrative.

Fantasia Documentation

Fantasia Video

Fantasia Process Video

 

 

ZYPPED

Concept:
Safety has always been an issue primarily for women for several reasons. One being media. Hearing about all those cases where women were endangered or victim to some crime, will most likely place women in fear of becoming the next victim. My design aims to enhance women’s sense of security through providing them wih a source of light when walking alone at night, a sound and flashing light feature to scare off any attackers and to attract the attention of people around her who may be able to help. Although it is not 100% effective in preventing rape or sexual harassment, it aims to increase the chances of the victim getting away unharmed. Studies show that victims of rape who were verbally forceful (ie yelling and screaming) got away 44-50% of the time whereas passive women only got away 4% of the time.
Circuit:


Process:

These are the sample zippers that I made, trying out different methods to see which worked best. The first version (left) was made using a continuous conductive thread. You can imagine what a nightmare that was. The thread kept snapping! So, I tried a different version, which was the centre one. Instead of a continuous thread all the way around the zipper, the side with the resistors uses short pieces of conductive thread, creating sections of three. With this version, it did not work at all. Perhaps it was because I mistakenly left a space between the teeth, when I should have sewn three consecutive ones to create a connection between the teeth and the zipper pull. So, I tried again. This time, not missing any of the zipper teeth. It worked!

Going into this project, I wanted to incorporate many elements into the jacket to make it more effective as a safety device. However, that also means a more complex circuit and code. I tried looking online for codes that did something similar to what I wanted, but with no luck. So, I started playing around with the codes, trying everything possible. I finally figured out how to make the digital zipper have not just on-off option, which is what most online tutorials were, but to have an auto option that was based on the input of a sensor. I found that when I tried to write the code to do everything at once, it got really confusing. So, I decided to split it into its different functions, test the circuit and when it worked like I wanted to, then I combined the codes together and tested it again.

So, with the code figured out, I started sewing the resistors to the actual zipper. I sewed 33 300ohm resistors so that it would add up to roughly 10k and sewed a 10k resistor on the other end of the zipper. With 33 changes in resistance, it allowed for a wide range of frequencies to be programmed for the speaker. I decided to go with 11 different frequencies (every 3 resistors would equal a change in frequency). So, as you pull the zipper down, the speaker produces a higher and higher pitched sound. Everything was working fine, until the night before the project was due. I was testing it again and there was no sound when I pulled the zipper. I hooked it up to arduino to look at the serial monitor, only to find that as I was pulling the zipper down, the numbers didn’t change. It remained at 1023. And 1023 was programmed to off (i.e. no sound) because it was when the zipper was zipped all the way up. I started to panic because without the zipper working, my concept was ruined. So, as a backup plan, I quickly sewed another zipper with the remaining resistors that I had and sewed that onto the jacket. Thankfully, it worked. However, with the reduced resistance change, I had to lower the number of frequency changes as well. So, it went from 11 different frequencies to 5. But hey, as long as it works, that’s fine by me! But, I would like to know why the original zipper suddenly stopped working!

This is the original jacket. Notice that there are only two zipper pockets. I wanted the LED “flashlight” to be near the wearer’s face, so I decided to create a zipper and pocket. The pocket houses all the circuitry and the zipper powers the LED flashlight. There are three modes: ON (keeps the LEDS on continuously), AUTO (brightness of the LEDs vary based on the ambient environment – i.e. light sensor) and OFF (turns the LEDs off). A code I had difficulty trying to figure out was the “blink without delay” code. Whenever I pulled the zipper and it was programmed to sound, the lights programmed to blink with a delay of 50 would blink very slowly. So, I wanted the LEDs connected to the long zipper to flash while not interferring with the reading off the sensors and zippers. However, all the tutorials online were not based on sensor inputs. I couldn’t make it work, so I ended up just using RB lights pre-programmed to blink.

On the left is the shoulder detail of the original jacket. As you can see, there are snaps on the shoulders that allow the shoulder straps to open and close. There is also a snap detail on the collar as a decorative element. I wanted the components I was going to add to the jacket to become integrated into the original jacket design. So, I removed the snaps and replaced it with the LED. The shoulder strap still functions as it did before – It can be lifted up and undone; the LED acts as a button that the hole of the strap can be secured around. At the same time, the shoulder LEDs will flash when the zipper is being undone. Placing it on the shoulder will draw the attention of people from all directions because it is visible from all directions. On the right is the pull switch that I incorporated to allow the power to be turned on and off. I took out the collar’s button snap detail and used the hole to thread my pull switch through. On the other side of the collar, I also sewed in a fake pull switch to create balance.

Final Product:

And here’s a video of it working!

And my presentation

Code:

/*
ZYPPED: Night Safety Jacket
Shelby Lung
Dec. 7, 2012
Uses an analog zipper (long zipper) to detect changes in resistance along the zipper,
increasing speaker’s frequency output
as resistance decreases (zipper is unzipped)

Uses a digital zipper (short zipper) to drive a “flashlight” made of 5 LEDs,
On-mode switch keeps LEDs on constantly despite environment changes
Sensor-mode switch activates LDR sensor,
changing the brightness of the LEDs based on the ambient environment
*/

//Short zipper
int ledPin = 9; // White LEDs connected to digital pin 9
int switchPin = 5; // On-mode switch connected to digital pin 5
int switchPin2 = 6; // Sensor-mode switch connected to digital pin 6
int sensorPin = A2; // LDR sensor connected to analog pin 2
int switchValue; // variable to keep track of when on mode is activated
int switchValue2; // variable to keep track of when sensor mode is activated
int sensorValue = 0; // set sensorValue to 0
int LEDbrightness; // variable to keep track of LEDbrightness

//Long zipper
int led = 10; // choose the pin for the LED
int zipperPin = A3; // choose the input pin (for analog zipper)
int val = 0; // variable for reading the pin status
int pinSpeaker = 11; // choose the pin for the speaker
int del = 250; // tone length
int low11 = 2400; // FREQSET11 – the lowest frequency value to use
int high11 = 4800; // FREQSET11 – the highest frequency value to use
int low9 = 2000; // FREQSET9 – the lowest frequency value to use
int high9 = 4000; // FREQSET9 – the highest frequency value to use
int low7 = 1600; // FREQSET7 – the lowest frequency value to use
int high7 = 3200; // FREQSET7 – the highest frequency value to use
int low5 = 1200; // FREQSET5 – the lowest frequency value to use
int high5 = 2400; // FREQSET5 – the highest frequency value to use
int low2 = 600; // FREQSET2 – the lowest frequency value to use
int high2 = 1200; // FREQSET2 – the highest frequency value to use

void setup()
{
//Short zipper
pinMode(ledPin, OUTPUT); // sets the ledPin to be an output
pinMode(switchPin, INPUT); // sets the on-mode switch to be an input
pinMode(switchPin2, INPUT); // sets the sensor-mode switch to be an input
pinMode(sensorPin, INPUT); // sets the LDR sensor to be an input
digitalWrite(switchPin, HIGH); // sets the default (uncontacted) state of the on-mode switch to HIGH
digitalWrite(switchPin2, HIGH); // sets the default (uncontacted) state of the sensor-mode switch to HIGH

//Long zipper
pinMode(led, OUTPUT); // declare LED as output
pinMode(zipperPin, INPUT); // declare zipper as input
pinMode(pinSpeaker, OUTPUT); // declare speaker as output
Serial.begin(9600);
}

void loop() // run over and over again
//Long zipper
{
int val = analogRead(zipperPin); // read input value
if (val 900 && val < 940) { // check if the input is decreasing (unzipping)
for (int a = low2; a=low2; a–) // decreasing tone
{
tone (11, a, del);
}
digitalWrite(led, HIGH); // turn LED on
}

if (val > 800 && val < 900) {
for(int i = low2; i=low2;i–){
tone (11, i, del);
}
digitalWrite(led, HIGH);
}

if (val > 400 && val < 800) {
for(int i = low5; i=low5;i–){
tone (11, i, del);
}
digitalWrite(led, HIGH);
}

if (val > 200 && val < 400) {
for(int i = low7; i=low7;i–){
tone (11, i, del);
}
digitalWrite(led, HIGH);
}
if (val > 100 && val < 200) {
for(int i = low9; i=low9;i–){
tone (11, i, del);
}
digitalWrite(led, HIGH);

}

if (val < 100) {
for(int i = low11; i=low11;i–){
tone (11, i, del);
}
digitalWrite(led, HIGH);
}

//Short zipper
switchValue = digitalRead(switchPin); //read if on-mode switch is activated (in contact)
switchValue2 = digitalRead(switchPin2); //read if sensor-mode switch is activated (in contact)

if (switchValue == LOW) { // if the on-mode switch is activated, then
digitalWrite(ledPin, HIGH); // turn the LEDs on
}
else if (switchValue2 == LOW) { // if the sensor-mode switch is activated, the
sensorValue = analogRead(A2); // read input from LDR sensor
LEDbrightness = map(sensorValue, 0, 500, 255, 0); // map light levels to LED brightness
analogWrite(ledPin, LEDbrightness); // adjust LED brightness based on LDR sensor input
}
else { // otherwise,
digitalWrite(ledPin, LOW); // turn the LED off
}
}

Wearable Notifications: Process

CONCEPT

As I’ve said in my project proposal, we are addicted to notifications. It is not so much about the hardware or applications we are drawn to, but rather because they enable us to be constantly connected to other people. There is this constant desire to feel connected as if it gives us positive feedback for our existence. As a society, we are obsessed with the sound, the vibration, the little red ticker or the notification LED that screams for attention. But yet, our obsession is not satisfied if we have to keep checking our phones. The affects of that lowers productivity, concentration and attention. More importantly, it’s socially rude to be on your phone in a class, in a meeting or even dangerous in the car! A study defined this behaviour as “checking habits”, defined as “brief, repetitive inspection of dynamic content quickly accessible on the device” that “lasts less than 30 seconds, each within 10 minutes of each other”.

Although the mobile phone is within your immediate proximity 24/7, it is not something you wear. What if it’s in your pocket, in your bag or in another room, then you would have to be there to see, feel, or hear the notification go off. So with that said, I say we acknowledge the problem and feed the addiction and make the user be aware of the notification instantaneously. A wearable notification device seemed like the perfect personal and ubiquitous solution. Although it would have full functional value, I hope to take a satirical approach to the concept as well. Poking fun at the fact that we can’t detach ourselves from our devices and our desire for instantaneous feedback (which further validates our shorter attention spans).

As a functional concept, my hope is that the technology gets embedded into various types of body accessories — jewellery seemed like the logical choice. What if RIM, Apple, or Google Android made their own line of jewellery, it should surely have this functionality to extend the mobile experience beyond the device itself.

PROCESS

Sketches

First I was sketching to house the Lilypad + BT modem as a pendant, worn in the front with the vibe board behind the neck, but the size of the pendant was just too large…

Components + Circuit

– Lilypad Simple (modified)
– Bluetooth Mate Silver
– Lilypad Vibe Board
– Polymer Lithium Ion Battery

Challenge #1
For a long time, my Bluetooth modem was not working. No matter which tutorial I was following online or how absolutely positive I was that I followed everything correctly, it just won’t work! After much frustration, with the help of Kate, we discovered that power was not going to the FTDI header on the new LilyPad Arduino Simple. Therefore, + had to be hardwired to VCC (see above image).

“Note: Because of the added battery charging circuitry the Simple is unable to power a device from the FTDI header meaning that the Bluetooth Mate, for instance, is no longer plug’n’play compatible.” — is now added to LilyPad Arduino Simple Board

Code

I used the Amarino Toolkit (Android Application and Arduino Library) to get my Android talking to the Arduino. I first started with this Test Event tutorial. Then I went on to try other events in the application. With the ‘Receive SMS‘ event enabled on the Amarino app, I was able to get the vibe board to work when I receive a text message. However, it was very inconsistent because it was sending a string of integers and not all text messages were going to the Arduino… which makes the interaction pretty useless.

Challenge #2
Later I found out that the Amarino_2.APK I downloaded from the Google Play store is outdated and only supports Android 1.6 and 2.X devices, which is probably why it was acting weird on my Android 4.x device. Since I have absolutely no knowledge in any coding language, a friend of mine had to hack the app to make it work. Since one thing is for certain, whenever ‘hey’ is received, the device vibrated as expected. Using that as a control, he made every received text message to be sent as ‘hey’ to the Arduino. Therefore, the Amarino app I have on my phone is a hacked version that reads all received text messages as ‘hey’. See the log below:

#include <MeetAndroid.h>
// declare MeetAndroid so that you can call functions with it
MeetAndroid meetAndroid;
int vibe = 10; // Vibe board on pin 10
void setup()
{
// use the baud rate your bluetooth module is configured to
// not all baud rates are working well, i.e. ATMEGA168 works best with 57600
Serial.begin(115200);
// register callback functions, which will be called when an associated event occurs.
meetAndroid.registerFunction(LEDon, ‘A’);
pinMode(vibe, OUTPUT);
digitalWrite(vibe, HIGH);
delay(800);
digitalWrite(vibe, LOW);
}
void loop()
{
meetAndroid.receive(); // you need to keep this in your loop() to receive events
}
void LEDon (byte flag, byte numOfValues)
{
digitalWrite(vibe, HIGH); // set for three quick vibes
delay(300);
digitalWrite(vibe, LOW);
delay(300);
digitalWrite(vibe, HIGH);
delay(300);
digitalWrite(vibe, LOW);
delay(300);
digitalWrite(vibe, HIGH);
delay(300);
digitalWrite(vibe, LOW);
}

Fabrication

I decided to house all the electronics in the back because I wanted to hide it’s bulkiness out of sight. I knew this was going to weigh heavily in the back, but I also did not want the Lilypad in the front as a giant pendant. Having the vibe board below the neck was a conscious decision, so that the vibration is not confused with the phone…since you would never carry your smartphone behind your neck. Also because it would be in constant contact with the body, unlike a dangling pendant.

The left photo is the triangular pocket form that housed all the electronic components. In the right photo, I used conductive thread and covered it with electrical tape. I only did this because I did not have access to a soldering iron at the time. Wire would have been the smarter choice.

FINAL DOCUMENTATION

1. The user pairs their wearable with their smartphone for initial set up. The phone should automatically connect to the wearable once it is turned on for future uses.
2. Any incoming text messages, phone calls, social notifications or alarms that set off a notification would vibrate the wearable in its respective vibrate patterns.

Presentation PDF

Telepathic Cat Vest

Concept

Is it possible to associate patterns of movement to cat emotions and desires? How best can this information be displayed? The Telepathic Cat Vest is a combination of two different inspirations, the design of readable low-resolution digital typefaces for LED matrices and the idea of animal wearables. Part of this project is to explore how technology defines ourselves in relation to non-human animals. Does it help or hinder our interactions? Is the final form pure entertainment or can there be some further explorations that would be useful?

Using an accelerometer to trigger phrases on the side of the vest, two LED matrices are chained together to display two-word phrases such as “Feed More”, “Bird Yum!”, “Oooo Mice” and “Stop Fool”. Each phrase is connected to a different level of motion on the Y axis of the accelerometer. Constructed out of a jaunty orange cotton/polyester fabric which would also work to make cushions for a hunting shack, the vest has a detachable zippered pouch containing all the electronics and power supply.

Circuit Diagram

This diagram is based on the wiring in the LED matrix tutorial on the Adafruit Learning Center.

Download the cat-vest-circuit-diagram. (PDF)

Code

Three versions of code were used for testing different stages of the cat vest. As there was a delay in receiving the LED matrices, I started with testing that the accelerometer could turn on three LEDs at different levels of motion. Once I started working with the matrices, I used the default typeface to test the position of the four phrases.

Download these three versions in the cat-vest-code PDF file.

Process and Documentation

The cat vest originally was planned to be built from two separate pieces of fabric, a top section and a bottom piece. However due to the squirmy nature of my friend’s cat, I realized that having straps secured by velcro or snaps would be easier to put on and take off. The first fabric version, built from an old t-shirt ended up looking like a tube sock. I switched to a more rugged outdoor fabric, and built the vest from two layers that were hemmed together and then turned inside out and top-stitched, to look tidy.

The orange fabric diffused the light from red LEDs nicely, and even with the addition of a thin layer of cotton to line the zippered pouch, showed through without losing much definition.

The above photos show Bullseye the cat modeling version 4 of the vest, which led to a thinner neck strap and resizing of the front leg holes. The need for these design changes can’t be seen in the photos as Bullseye was too busy wondering where her electric squeaky toy mouse had gone to pose properly.

Initial wiring on a breadboard shows the set-up for testing the code for the accelerometer to trigger different sets of LEDs. Once this was working, I knew I could replace the code to turn on the LEDs with the code for the text on the LED matrices. The second image above shows the pile of cables that went into the zippered pouch, I knotted similar groups of wires together to prevent them from tangling.

Initializing the matrices to test how they worked chained together. The phrase “Bitch Please” turned out to be a little too long for what I had in mind.

Different sizes of pouches to contain the electronics. The middle version with the yellow zipper turned out to be too short to allow for each LED matrix to hang down far enough on Bullseye’s sides. I made a custom 10-pin cable and a longer pouch, the version with the pale green zipper. The matrices were very bulky even when they had more room, so perhaps future versions of this pet vest could use thinner screens, or maybe the vest would suit a much larger pet, like a big dog.

Bullseye seemed to be content to wear the vest when she was being cuddled and given full access to a human lap. Here I’m checking to see how long her neck strap needed to be to secure the vest. As you can see in the photos above, Bullseye is clearly thinking I’m a big dork for my cat vest plans, and on occasion was wishing I was a bird.

The final vest being modeled on Bullseye, with custom type. Bullseye is very hungry and keeps asking for more food, as displayed by the vest. However her patience soon left her, since we did not give her more food, and she slipped out of the vest and turned her back to it, leaving it abandoned on the floor. Cats. So fickle.

 

 

Augmented vision

The story behind the…vision.

Like thousands being born without 3d vision, I want to experience distance. I thought I have a hearing aid so why not a seeing aid?

What would it look like if I were to make a device that allowed me, or the user, to experience visual information in a new way? Distance and heat seemed to be likely candidates. Safe from oncoming objects and fires or heat sources like machinery. I thought an infrared heat sensor is accurate enough and an ultrasonic distance sensor that would be relevant at a personal body distance of about 5 feet.

The components

-Arduino, Lilypad micro controller

-Arduino, battery holder. 1.5v to 5v, with surge protector circuit

-Lilypad, Tri-light (RGB led)

-Lilypad, green LED

-Ultrasonic sensor

-Infrared, heat sensor

Putting it together

I began by using the wiring guides I found on the following web sites to solder it together. I didn’t proto-board it or alligator clips as I was confident in my soldering skills and wiring map to go for it! (cocky bastard!)

www.electrojoystick.com/#24EF8D This was the tutorial and sample code for the Maxbotix Sonar LV EZ1 ultrasonic device. I found the sample in out sensor code and used the tutorials on the blog and meetings to get it working and map out the flashing to be appropriate to the distance it represented.

This code worked perfectly on its own to start with:

/*

AnalogReadSerial

Reads an analog input on pin 0, prints the result to the serial monitor.

Attach the center pin of a potentiometer to pin A0, and the outside pins to +5V and ground.

 

This example code is in the public domain.

*/

int LEDdelay;

 

 

// the setup routine runs once when you press reset:

void setup() {

// initialize serial communication at 9600 bits per second:

Serial.begin(9600);

pinMode(10, OUTPUT);

 

 

}

 

// the loop routine runs over and over again forever:

void loop() {

// read the input on analog pin 0:

int sensorValue = analogRead(A3);

// print out the value you read:

Serial.println(sensorValue);

LEDdelay = map(sensorValue, 10, 380, 50, 500);

 

digitalWrite(10, HIGH);

delay(LEDdelay);

digitalWrite(10, LOW);

delay(LEDdelay);

 

 

delay(1);        // delay in between reads for stability

}

 

bildr.org/2011/02/mlx906#246CA2 This site got me wired in no time for the thermal sensor. The little infrared device is accurate to .02 degrees F! So if it mattered you can have a wicked degree of accuracy. These are commonly used in cars for the size and reliability and robotics. It is a very nice non-contact sensor indeed.

This site was a wealth of information but it leaves out the very important detail of pin association. In a nutshell, one must wire it according to the convention provided due to the internal components of the microcontroller. I had them wired on different pins and couldn’t get a reading. Thanks to Kate for getting me on track! I would have never figured that out. This was the only hardware hurdle I had. Once re-soldered it worked instantly.

Bellow is the code from the site.

#include <i2cmaster.h>

 

 

void setup(){

Serial.begin(9600);

i2c_init(); //Initialise the i2c bus

PORTC = (1 << PORTC4) | (1 << PORTC5);//enable pullups

}

 

void loop(){

int dev = 0x5A<<1;

int data_low = 0;

int data_high = 0;

int pec = 0;

 

i2c_start_wait(dev+I2C_WRITE);

i2c_write(0x07);

 

// read

i2c_rep_start(dev+I2C_READ);

data_low = i2c_readAck(); //Read 1 byte and then send ack

data_high = i2c_readAck(); //Read 1 byte and then send ack

pec = i2c_readNak();

i2c_stop();

 

//This converts high and low bytes together and processes temperature, MSB is a error bit and is ignored for temps

double tempFactor = 0.02; // 0.02 degrees per LSB (measurement resolution of the MLX90614)

double tempData = 0x0000; // zero out the data

int frac; // data past the decimal point

 

// This masks off the error bit of the high byte, then moves it left 8 bits and adds the low byte.

tempData = (double)(((data_high & 0x007F) << 8) + data_low);

tempData = (tempData * tempFactor)-0.01;

 

float celcius = tempData – 273.15;

float fahrenheit = (celcius*1.8) + 32;

 

Serial.print(“Celcius: “);

Serial.println(celcius);

 

Serial.print(“Fahrenheit: “);

Serial.println(fahrenheit);

 

delay(1000); // wait a second before printing again

}

 

The merging of the codes

That is a movie title for sure! I struggled quite a bit with tutorials and the like online and found they all had one thing in common, that they make assumptions as to the level of your knowledge going into this and that you have some basics… I do not. I had never been exposed to this before and was way out of my comfort zone. I understood the basics of code modifying, setup and loop (sort of) but anything I did with regards to following the wickedly confusing amount of information about coding didn’t work out and only lead to frustration and distain for the process. I had two functioning codes but couldn’t for the life of me figure out how to merge them.

I met with a classmate for an hour and we hammered it out. Borxu showed me how setup creates the conditions for the loop to happen. We transferred the commands and tried out samples along the way till it worked right. I assigned the appropriate pins and values to the sensors and the resulting merged code is bellow. It works like a charm! (I knew it would)

#include <i2cmaster.h>

 

int redPin = 9;                   // R petal on RGB LED module connected to digital pin 9

int greenPin = 10;     // G petal on RGB LED module connected to digital pin 10

int bluePin = 6;         // B petal on RGB LED module connected to digital pin 6

int distancePin = 11;   // flashlight pin

 

int LEDdelay;           // Delay for the distance light

 

void setup(){

Serial.begin(9600);

 

i2c_init(); //Initialise the i2c bus

PORTC = (1 << PORTC4) | (1 << PORTC5);//enable pullups

pinMode(redPin, OUTPUT);        // sets the redPin to be an output

pinMode(greenPin, OUTPUT);    // sets the greenPin to be an output

pinMode(bluePin, OUTPUT);      // sets the bluePin to be an output

pinMode(distancePin, OUTPUT); // sets the distancePin to be an output

}

 

 

void loop(){

 

// *** START IR Temperature Sensor Function ***

 

int dev = 0x5A<<1;

int data_low = 0;

int data_high = 0;

int pec = 0;

 

i2c_start_wait(dev+I2C_WRITE);

i2c_write(0x07);

 

// read

i2c_rep_start(dev+I2C_READ);

data_low = i2c_readAck(); //Read 1 byte and then send ack

data_high = i2c_readAck(); //Read 1 byte and then send ack

pec = i2c_readNak();

i2c_stop();

 

//This converts high and low bytes together and processes temperature, MSB is a error bit and is ignored for temps

double tempFactor = 0.02; // 0.02 degrees per LSB (measurement resolution of the MLX90614)

double tempData = 0x0000; // zero out the data

int frac; // data past the decimal point

 

// This masks off the error bit of the high byte, then moves it left 8 bits and adds the low byte.

tempData = (double)(((data_high & 0x007F) << 8) + data_low);

tempData = (tempData * tempFactor)-0.01;

 

float celcius = tempData – 273.15;

float fahrenheit = (celcius*1.8) + 32;

 

Serial.print(“Celcius: “);

Serial.println(celcius);

 

Serial.print(“Fahrenheit: “);

Serial.println(fahrenheit);

 

//  delay(1000); // wait a second before printing again

 

// *** END IR Temperature Sensor Function ***

 

// *** START Temperature Threshold Function ***

 

if (fahrenheit > 80) {

 

color(255, 0, 0);          // turn the RGB LED red

//          delay(1000);           // delay for 1 second

} else {

//          color(0,255, 0);       // turn the RGB LED green

//          delay(1000);           // delay for 1 second

color(0, 0, 255);          // turn the RGB LED blue

//          delay(1000);           // delay for 1 second

}

 

 

// *** START Distance Function ***

 

// read the input on analog pin 0:

int sensorValue = analogRead(A3);

// print out the value you read:

Serial.println(sensorValue);

LEDdelay = map(sensorValue, 10, 380, 100, 1000);

 

digitalWrite(distancePin, HIGH);

delay(LEDdelay);

digitalWrite(distancePin, LOW);

delay(LEDdelay);

 

 

delay(1);        // delay in between reads for stability

 

// *** END Distance Function ***

 

}

 

 

void color (unsigned char red, unsigned char green, unsigned char blue)     // the color generating function

{

analogWrite(redPin, 255-red);

analogWrite(bluePin, 255-blue);

analogWrite(greenPin, 255-green);

}

 

// *** END Temperature Threshold Function ***

 

Wearing the device

There are two considerations for this section, first being the personal aspects and the second being the social ramifications of wearing a Borg-like device.

I am personally comfortable wearing the device as my vision allows for it. I found others who looked through the device found the light to be too bright and distracting. The light can be further defused but more importantly what happens is something the military has coined “helmet fire.” Essentially helicopter pilots who use a wearable computer screen with inflight information being broadcast in one eye and real world vision in the other get confused easily in the heat of combat with the brains ability to process two images at once and can briefly shut down causing the helicopter to crash. It is a real problem. My limited vision lends me well to this technology but the signals need to be very deliberate hence the choice and sequence of colours listed bellow.

Blue light is connected to the thermal sensor and is on when a temperature of 80f or lower is detected. The blue light turns red when above 80f is detected. I used this number, as room temperature won’t set it off. It loves the stove and after some time you can map out the heat in the air with it! It will pick up a hot cup of coffee or body heat at close range of 2-3 feet.

The green LED flashes according to distance so the closer the object the quicker the flashing, simple enough but effective.

Socially wearing the device is another story. Of course here at OCAD-U it I easily accepted and met with great curiosity and fanfare but in public people don’t understand what it is. Hearing aids are well accepted for their sleek, tight form factor so that I am sure is a huge part of why people are uncomfortable with it. I have been asked most of all if the device is recording them. It has no camera or the capability to record any of the incoming information. But just like a hearing aid it provides what is missing and gives the wearer new information in a usable way.

Further development

For the visually impaired the uses are obvious but for the completely blind new outputs could be used like a hat with vibration motors in key locations. For the fully sighted individual this could act as a real time safety device in hazardous areas of work like monitoring air conditions or detecting land mines. A tighter form factor would make this more user friendly and acceptable. Batteries could be integrated, rechargeable and be made smaller, components could be better mapped out and tightened up, wires and traces could be strategically embedded and hidden and waterproofing the device would be greatly beneficial. The IR sensor can see through rain but the ultra sonic wont like driving rain, too much interference.

Closing remarks

This was a very challenging and personal project for me. The narrative has been a lifetime in the making and the skill set I learned to assemble and code the device is stronger than ever before. The seeing aid is more than the sum of its parts. The abilities it gives me makes my vision more complete but also acts as a window into our very complex social behaviors and notions of personal space. This is an ongoing experiment and has only begun with the creation of the device. I wish I did record for the best things it will see are the reactions of the people it encounters as I wear it but it will never know them.

 

Responsive Stuffed Robot

Report LinhDo_FINAL_PROJECT

MATERIALS

Circuit:

2 x Arduino UNO

1 x 1.8” tft Shield

1 x MP3 Player Shield

3.5mm jack Speakers

3 x Light sensors

1 x Force sensor

1 x Temperature sensor

1 x SD card

Battery

5 x 10k resistors

Wire

Soldering Gun and soldering Iron

 

Crafting:

Hot glue gun

Felt

1 long lace to make adjustable strap

Scissors

Lots of cotton

Sewing kit

 

SUPPORTING FILES

Code:

Robot_01.ino  robot_01

Robot_02.ino robot_02

MP3Shield_robot.ino MP3Shield_robot

Final Code:

LinhDo_FinalProject_LCDShield.ino LinhDo_FinalProject_LCDShield

LinhDo_FinalProject_MP3Shield.ino LinhDo_FinalProject_MP3Shield

 

Audio files:

Track001.mp3 track001

Track002.mp3 track002

Track003.mp3 // silence track003

Track004.mp3 track004

Track005.mp3 track005

 

Video:

RobotTesting.mov

Robot Testing

 

Final Project: Kiss Me

Concept:

Children always carry their doll with them and often drop it on the floor; it causes bacteria and gems to stick onto their doll. Therefore for this final project I made a kiss me doll that is intended for children who like to carry their doll with them wherever they want. The arms and legs of the doll can be button up around the body to prevent from dropping. This is a shy doll, when the wearer kisses the doll on the mouth, the LEDs on the cheeks will turn on.

Materials:

Circuit

  • Lilypad
  • Two red LEDs
  • Conductive thread
  • Force sensor
  • Resistor
  • Batteres

Doll

  • Pair of socks
  • Cotton
  • Ribbons
  • Fabrics
  • Buttons
  • Yarn

Process:

The first step is to figure out the circuit, I did a force sensor circuit. The harder it pressed the brighter it gets.

Then I started working on the doll, I cut a pair of socks apart and sew it together using a sewing machine then flip the doll over

I stuffed cottons into the doll and stitch it close by hands

Then I started stitching the component of the circuit using normal thread so It stays in place then connect the circuit with conductive thread

After testing out the circuit I stitched different parts on, the cheeks, mouth, eyes, batteries, fur, buttons and etc.

I also decided to make a little skirt for it to cover up the circuit and make it look cuter.

Final piece:

Challenges:

For the circuit, at first I didn’t know how to make it the harder it pressed the brighter it gests but I did solve the problem by changing the codes.

The most challenging part was the making of the doll especially with this kind of material, its stretchy and furry, which is hard to control while sewing. Also the placement of the circuit, because it is hard to see the conductive thread, so I had to be really careful and check if the circuit works more often.

Next steps:

After making this doll, it is really time-consuming sewing it. However, now I have more experiment with the sewing machine I want to develop a series of these doll.

Code:

int ledPin1 = 10; //LED connected to digital pin 10
int ledPin2 = 11; //LED connected to digital pin 11
int sensorPin = 2; //Force Sensor connected to analog pin 2
int sensorValue; //Variable to store value coming from the sensor
int LEDbrightness;

void setup()
{
Serial.begin(9600);
pinMode (ledPin1, OUTPUT); //sets the ledPin to be output
pinMode (ledPin2, OUTPUT); //sets the ledPin to be output
pinMode (sensorPin, INPUT); //sets the sensorPin to be input
}

void loop() {//run over and over again

sensorValue = analogRead(A2); //Read data from force sensor

// map light levels to LED brightness

LEDbrightness = map(sensorValue, 532, 0, 255, 0);

analogWrite (ledPin1, LEDbrightness);
analogWrite (ledPin2, LEDbrightness);

//print out the value you read;
Serial. println(sensorValue);
delay (1); //delay in between reads for stability

}