MartinRissseeuw how to make almost anything

Final project - Design for happiness

Workshop image
The happiness book with the Happylamp

One thing all humans have in common is that each of us wants to be happy. However, sometimes we need a stoplight and figure out what makes us happy. The happiness lamp will help you slow down and step back in this fast paced life. It helps you notice your personal needs, and above all, it is a reminder of what makes you truly happy.

What is the happiness lamp exactly?
When researching the topic design for happiness I was trying to figure out how to measure happiness. First of all I started with researching techniques such as an EEG scan or ECG scan but in that sense happiness is something hard to grasp. However when thinking a bit more about it happiness was quite clear to me. Happiness is a persons needs being satisfied.

For a project concerning this needs a colleague and I created a booklet. The book is an object where you could sort your personal needs by importance. We noticed that this had a good influence on the persons happiness. It made the user reflect and think about their own happiness and needs. There was only one problem, at a certain point the user forgets about the book its existence. This is how I decided to create the happiness lamp, a lamp that notifies you to think about your personal needs.

Self build lamp:
A wired lamp that the user can plug into your computer. The lamp is customisable, the user can build your own shape with the use of geometrical shapes from acrylic. This was the first model created. I wanted to let the user have a really personal unique object that they would get attached to. Because of this I wanted to give the user the option to build their own small lamp as a fun object to play around with. As a result of the size of the lamp I wasn't able to create a wireless connection. Because of this the lamp needs to be wired to a computer.

Bill of materials:

For the other things I mostly used leftovers

Workshop image
A custom lamp made by one of my colleagues
Workshop image
Package happiness lamp kit

Pre build lamp
This lamp is already made and does not have a custom shape. The lamp is made out of one big piece of satin acrylic and one piece of ash wood. The ash wood is milled out into a casing for the electronics. The lamp is a standalone object powered by a 9V battery. The lamp receives it's data wirelessly from a computer that has the wireless transmitter connected. Aesthetics where very important for this object as it should be a likeable object that the user want to put on his or her desk.

Workshop image
The pre build lamp
Workshop image
Lamp with package

What parts and systems will be made?

  • Packaging
  • Circuit boards
  • Lamp construction-kit parts
  • Interface to set the lamps colours

What processes will be used?

  • Laser cutting
  • Electronics design
  • Electronics production
  • Embedded programming
  • Networking
  • Interface and application programming
  • 2D design
  • Milling
  • Surface finishing

Check out the Applications and implications over here

Invention, intellectual property, and income here

Laser cutting
I created the package and engraved the logo into the casing with the laser cutter.

Workshop image
Acrylic press fit test
Workshop image
Cutsheet for the Acrylic
Workshop image
Package cutsheet

Electronics design
I designed two custom boards for receiving and transmitting data over a wireless connection. For this I used the nRF24L01(+) 2.4GHz Wireless Transceiver.

Workshop image
Transmitter schematics
Workshop image
Transmitter board design
Workshop image
Receiver schematics
Workshop image
Receiver board design

Electronics production
With the use of the Roland Modela I created the two circuit boards. This process is now really familiar to me and everything went well. Maybe I could have used a newer milling bit so the lines would be a bit more precise.

Workshop image
Receiver electronics

Embedded programming
For the programming I created some software to wirelessly send data from my computer. Also because I did not have enough PWM pins available I needed to implement software PWM to be able to use all the colours of the RGB led.


#include <SPI85.h>
#include <Mirf.h>
#include <MirfHardwareSpi85Driver.h>
#include <nRF24L01.h>

#define CE    7    
#define CSN   3 

// ATMEL ATTINY84 / ARDUINO
//
//                           +-\/-+
//                     VCC  1|    |14  GND
//  SerialTx   (D  0)  PB0  2|    |13  AREF (D 10)
//             (D  1)  PB1  3|    |12  PA1  (D  9) 
//  RESET              PB3  4|    |11  PA2  (D  8) 
//  PWM  INT0  (D  2)  PB2  5|    |10  PA3  (D  7)  CE
//  SS/CSN     (D  3)  PA7  6|    |9   PA4  (D  6)  USCK
//  USI-DI     (D  4)  PA6  7|    |8   PA5  (D  5)  USI-DO
//                           +----+


int redVal = 0;
int greenVal = 0;
int blueVal = 0;
int next = 0;

int ledPinRed = 1;
int ledPinGreen = 8;
int ledPinBlue = 10;

int bufferSize = 0;
char buffer[32] = "";
unsigned int counter = 0; 
uint8_t nodeID = 0;

void setup(){  
  Serial.begin( 9600 );    // for tiny_debug_serial 
  
  Mirf.cePin = CE;
  Mirf.csnPin = CSN;
  Mirf.spi = &MirfHardwareSpi85;
  Mirf.init();
  
  pinMode(ledPinRed, OUTPUT);
  pinMode(ledPinGreen, OUTPUT);
  pinMode(ledPinBlue, OUTPUT);

  Mirf.setRADDR((byte *)"serv1");
  //Mirf.payload = sizeof(char);
  Mirf.payload = 4;
   
  Mirf.config();  
  
  Serial.println("Listening..."); 
  
  redVal = 0;
  greenVal = 0;
  blueVal = 0;
}

void loop(){
  byte data[Mirf.payload];
  
  if(!Mirf.isSending() && Mirf.dataReady()){
    Serial.println("Got packet");
     
     Mirf.getData(data);
    
    if (data[0] = 255){ 
     redVal = data[1];
     greenVal = data[2];
     blueVal = data[3];
    }

      
        
  Mirf.send(data);  
  }
//  redVal = 120;
//  greenVal = 250;
//  blueVal = 10;
  setRed();
  setGreen();
  setBlue();
} 


void setRed(){
    if(redVal == 0){
      digitalWrite(ledPinRed,HIGH);
      return;
    }
    else if(redVal == 255){
      digitalWrite(ledPinRed,LOW);
      return;
    }
    // On period  
    for (int x=0;x<redVal;x++){
    digitalWrite(ledPinRed,LOW);
    } 
    // Off period
    for(int x=0;x<(255-redVal);x++){
    digitalWrite(ledPinRed,HIGH);
    } 
}

void setGreen(){
    if(greenVal == 0){
      digitalWrite(ledPinGreen,HIGH);
      return;
    }
    else if(greenVal == 255){
      digitalWrite(ledPinGreen,LOW);
      return;
    }
    // On period  
    for (int x=0;x<greenVal;x++){
    digitalWrite(ledPinGreen,LOW);
    } 
    // Off period
    for(int x=0;x<(255-greenVal);x++){
    digitalWrite(ledPinGreen,HIGH);
    } 
}

void setBlue(){
    if(blueVal == 0){
      digitalWrite(ledPinBlue,HIGH);
      return;
    }
    else if(blueVal == 255){
      digitalWrite(ledPinBlue,LOW);
      return;
    }
    // On period  
    for (int x=0;x<blueVal;x++){
    digitalWrite(ledPinBlue,LOW);
    } 
    // Off period
    for(int x=0;x<(255-blueVal);x++){
    digitalWrite(ledPinBlue,HIGH);
    } 
}


#include <SoftwareSerial.h>
#include <SPI85.h>
#include <Mirf.h>
#include <MirfHardwareSpi85Driver.h>
#include <nRF24L01.h>

SoftwareSerial mySerial(0, 9); // RX, TX

#define MAXBUFF 4
#define CE    7    
#define CSN   3 

// ATMEL ATTINY84 / ARDUINO
//
//                           +-\/-+
//                     VCC  1|    |14  GND
//  SerialTx   (D  0)  PB0  2|    |13  AREF (D 10)
//             (D  1)  PB1  3|    |12  PA1  (D  9) 
//  RESET              PB3  4|    |11  PA2  (D  8) 
//  PWM  INT0  (D  2)  PB2  5|    |10  PA3  (D  7)  CE
//  SS/CSN     (D  3)  PA7  6|    |9   PA4  (D  6)  USCK
//  USI-DI     (D  4)  PA6  7|    |8   PA5  (D  5)  USI-DO
//                           +----+

byte buffer[MAXBUFF];
byte bufferSize = 0;

byte bufferRec[MAXBUFF];

void setup()
{
Mirf.cePin = CE;
Mirf.csnPin = CSN;
Mirf.spi = &MirfHardwareSpi85;
Mirf.init();
Mirf.setRADDR((byte *)"clie1");
Mirf.payload = MAXBUFF;
Mirf.config();

mySerial.begin(9600);
}

void loop()
{ 
  Mirf.setTADDR((byte *)"serv1");
  if (mySerial.available() > 0)
  {
    buffer[bufferSize++] = mySerial.read();
  }
 
if (bufferSize >= MAXBUFF) 
   {
     Mirf.send(buffer);
//     for (int i = 0 ; i < bufferSize;i++)
//     {
//     mySerial.write(buffer[i]);
//     }
     bufferSize = 0;
  }
  
//if (Mirf.dataReady())
//{
//  Mirf.getData(bufferRec);
//    for (int i = 0 ; i < MAXBUFF ; i++)
//    {
//     mySerial.write(buffer[i]);
//    }
//}  
}


Networking
With the use of the nRF24L01(+) 2.4GHz Wireless Transceiver and the mirf library I setup a wireless connection between two board. The lamp and the computer.

Wireless communication

Interface and application programming
For the interface I created a simple interface with three sliders in processing. In the future I would like to be able to use the interface designs I made of the whole platform.

Lamp interface the colour represent the colour of the lamp

2D design
For the Shopbot I created a 2D design of my 3D model this because I prefer to use the partworks2d software for the Shopbot.

Workshop image
2D design for the electronic casing.
Workshop image
2D design for the acrylic holes and the mold.

3D design
With rhino I created a 3D model of the casing to get an idea of the electronic casing. I made two models because the first model was to big for the acrylic. This because to buy custom cut acrylic was to expensive.

Workshop image
3D model of the casing for the electronics
Workshop image
3D model of the final casing

Milling

Workshop image
Collet error because of going to deep.
Workshop image
To have the pins at the exact position I created a mold where I could lay in the acrylic. This so the position will be exactly the same.
Workshop image
Acrylic in the mold
Workshop image
Checking the pins position on the casing
Workshop image
Checking the pins position on the casing

Other images:

Workshop image
The happiness book created on the shopbot (2d design & milling).
Workshop image
Package and casing. The casing is finished with an surface finishing oil.
Workshop image
Trying out different oils. I prefer without oil.
Workshop image
Testing different diffuse acrylics.

Next prototype steps:

  • Expand the interface
  • USB transmitter (design already made)
  • Casing for USB transmitter
  • Casing for the FabtinyStar (used for the wired lamp)