SaveMo
Made by Keegan Dsouza, Xingsuo Liu and Yolanda Chen
Made by Keegan Dsouza, Xingsuo Liu and Yolanda Chen
The idea is to assist people in saving money with increase in spending trends .
Created: February 3rd, 2016
Save Mo is a product which indicates and makes the user aware of his spending patterns through the use of ambient lights . Users can set daily , weekly or monthly budgets for expenditure. If the users start crossing the budget they have set for themselves , a pre decided percentage of the money they spend above the budget is deducted and transferred to a one /two/three months or custom time frame lock in period savings account. The more the users spend beyond their budget the percentage of money deducted increases thus the money saved increases. The key idea is to encourage saving along with increase in spending.
The spending pattern is recorded via the SaveMo App and is translated into lights . The more you spend the more the Red Lights will light up on the circular lamp , Once the user crossed the budget , a green light will also light up signifying money is now being saved along with the rise in expenditure.
//#include <SoftwareSerial.h>
//#include <Wire.h>
#define REDPIN D0
#define GREENPIN D1
#define BLUEPIN D2
#define FADESPEED 5 // make this higher to slow down
//SoftwareSerial ser(0,1);
int v;
String inputString="";
boolean stringComplete = false;
int r = 0;
int g = 0;
int b = 0;
int s = 0;
void setup() {
pinMode(REDPIN, OUTPUT);
pinMode(GREENPIN, OUTPUT);
pinMode(BLUEPIN, OUTPUT);
Serial.begin(9600);
inputString.reserve(200);
serialEvent();
// Keep a cloud variable for the current position
Particle.variable( "spend" , v);
Particle.variable( "save", s);
Particle.variable("buget", (int)(v/0.75));
}
void loop() {
analogWrite(REDPIN, 1200);
analogWrite(BLUEPIN, 1200);
if (stringComplete) {
Serial.println(inputString);
v = inputString.toInt();
Serial.println(v);
s = (int)(v * 0.33);
analogWrite(GREENPIN, v);
inputString = "";
stringComplete = false;
}
}
void serialEvent(){
while (Serial.available()) {
// get the new byte:
char inChar = (char)Serial.read();
//Serial.println(inChar);
inputString += inChar;
// if the incoming character is a newline, set a flag
// so the main loop can do something about it:
if (inChar == '\n') {
stringComplete = true;
}
}
}
Click to Expand
import processing.serial.*;
import cc.arduino.*;
import controlP5.*;
import processing.serial.*;//引入serial
Serial myPort;
//Arduino arduino;
ControlP5 cp5;
int spend = 0;
int save = 0;
int buget = 0;
int range = 1000;
Knob myKnobA;
Knob myKnobB;
Knob myKnobC;
void setup() {
size(500, 800);
println(Arduino.list());
// arduino = new Arduino(this,"/dev/cu.usbmodem1411", 9600);
myPort = new Serial(this, "/dev/cu.usbmodem1421", 9600);
cp5 = new ControlP5(this);
myKnobA = cp5.addKnob("Buget")
.setRange(0,range)
.setValue(75)
.setPosition(210,350)
.setRadius(50)
.setDragDirection(Knob.VERTICAL)
;
myKnobB = cp5.addKnob("Spend")
.setRange(0,range*0.75)
.setValue(100)
.setPosition(210,150)
.setRadius(50)
.setDragDirection(Knob.VERTICAL)
;
myKnobC = cp5.addKnob("Save")
.setRange(0,range*0.25)
.setValue(25)
.setPosition(210,600)
.setRadius(50)
.setDragDirection(Knob.VERTICAL)
;
// arduino.pinMode(9, Arduino.OUTPUT);
//arduino.pinMode(10, Arduino.OUTPUT);
//arduino.pinMode(11, Arduino.OUTPUT);
}
void draw() {
int buget = (int)(cp5.get(Knob.class,"Buget").getValue());
myKnobB.setValue(myKnobA.getValue()*0.75);
myKnobC.setValue(myKnobA.getValue()*0.25);
spend = (int)myKnobB.getValue();
save = (int)myKnobC.getValue();
textSize(20);
noStroke();
fill((int)(spend/2.9),60,60);
rect(0,0, 500,400);
fill(255,255,255);
text("SPEND:" + String.valueOf(spend), 220, 140);
fill(60,(int)(save/0.98),60);
rect(0,400, 500,400);
fill(255,255,255);
text("SAVE:" + String.valueOf(save), 220, 580);
//delay(100);
//arduino.analogWrite(9, (int)(spend/2.9));
//arduino.analogWrite(10, 105);
//arduino.analogWrite(11, 255);
//println((int)(spend/2.97)+"\n");
String d = (int)(spend*1.2)+"\n";
myPort.write(d);
}
Click to Expand
People end up spending more money than the budget they set for themselves . Excessive spending leads to running out of money and go broke before the month is over . You end up broke and start digging into savings .
The goal of the project was to encourage saving while spending money . As the user increases his spending amount beyond the budget , a certain amount will be saved. The lamp displays intensity of money spent and and change in color reflects money being saved while overspending .
Bill of Materials :
1. Breadboard
2. Jumper Wires
3. Insulted copper wires
4. MOSFET transistors
5. RGB Led strip
6. 12V DC power
7. Particle Photon
8. Lamp casing
9. Foam core
We were inspired by the idea of encouraging saving and at the same time curbing expenditure to stay within budgets . We ideated many concepts ranging from Stock Markets , Stock investments , Monetary investments etc. We also decided the ambient product form to resonate with something like a clock to engage the user with familiar forms.
By doing this project, we learn more about using particle board to develop IoT devices. We met a lot of difficulties in trying to figure out how to make the RGB Led work in the particle. At first we can make it work on the Arduino but not particle. So we even just want to go with Arduino for this project. And then we coded a interface by Processing. After these all worked, we try to use the Particle again, it worked this time but the brightness is not enough. So we spent a lot of time to make it brighter but we fail. So we tried to shoot the video on the dark room. I think if we have much more time, we will make a better job next time.
This course charts the emergence of the now "connected world" to explore the possibilities for future products and connected spaces.
The idea is to assist people in saving money with increase in spending trends .