The idea is to assist people in saving money with increase in spending trends .

Created: February 3rd, 2016

0

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.

0
//#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
0
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
0
Notification of money Spent and Saved
Img 7144.png.thumb
0
Interface Of DIot Creative Assignment#2
Xingsuo Liu - https://vimeo.com/154134503
0
SaveMo Prototype Test
Xingsuo Liu - https://vimeo.com/154142890
0

Problem Statement 

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 .  

Goal

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 . 

Process

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.