LumiSense, Nathan Ynson, Viola
Context
When thinking of what to do for my midterm project, I looked back on how I would want my project to have a purpose not just made for the sake of making it. Thinking back on what our class has done before, such as previously making products and making things that have more than just one form of interaction. My partner and I decided on a new take on the conventional lamp, we wanted to make it interactive. From the readings that I have read before in this class, my understanding of interaction stems from two parties engaging on an equal playing field, giving and taking in simpler terms. We decided on our interactive lamp where we could give it inputs that it would react to, and those reactions could effect our mood for the time. We wanted to make our project like a prototype of something that could be sold commercially. The uniqueness of our lamp comes from being able to change the lights according to the distance an object is from it, and to be able to switch between creative fun music, and calm focused music by tilting our project left or right. This project is meant for those who want to se the tone and mood of a room based on how they are feeling. It would help them have external output for what they are feeling or want to feel, and not just keep that feeling internally.
Concept
When making our project we decided on a box shape as it is much easier to tilt with. We had fabric around the RGB light and encaging it to diffuse the light and let it come out way smoother. This fabric did a good job with our intended purpose however it was suggested to us that it could be furthered using a different type of material. We had thoughts about that material briefly, but we did not know how to use it, so we decided against it. We use cardboard for the base as it was lightweight, and could encapsulate all of our wiring. We decided to use fake grass on one side, and flashy paper on the other side. This was done to show the calm and energetic sides. The grass symbolized calmness and tranquility, and the flashy paper symbolizes and energy, and sort of gives more of a party vibe.
Production
The making of this project included a brainstorming phase where would think of various ideas. The problem at first was that our ideas were a bit scattered and not feasible yet with our current skill set. When making the project we had a very equal role in this project, I would help in the wiring and design, but the design and more physical aspects was mostly my partner Jacky's department, and he would help in the technical side and code, but this was mostly my department. We used a process in which we would work together side by side for the most part, and we would either come early or stay behind if either of us was behind on our tasks. We encountered several problems along the way such as having trouble first wiring the RGB light to illuminate, it was eventually solved when the correct wiring was made, and it was connected back to the ground. In the code our serial number was not set to the default 9600, so we had trouble checking the outputs of our code in the serial monitor, until we changed our serial monitor number to the correct one. We had several issues with the code being too overly complicated and not working, only when we separated them and ran each function separately was when we were able to identify the problems, we were also able to declutter our code this way. During the user testing session we received positive feedbacks, but were given so many suggestions on how we could make it better. We then decided to respond to those suggestions by deciding add diagrams to show the functions of our project because we received feedback that it was hard to find out what to do with our project. Though the biggest addition was swapping out the piezo sensor to a tilt sensor to switch between the calm and creative music. We realized that the tilt sensor was a much more interesting interaction, and was more interactive than the piezo sensor. In my opinion switching toa tilt sensor was a good decision as we had a more fun interaction that was more unique compared to using the piezo sensor. The switching of interactions was not easy however, we had issues as we had to rewire the entire thing, and finding the right x and y threshold to set for the tilt sensor. Overall I believe that this new interaction worked in our favor as our project now seems more like something that could be sold commercially, which was one of our desired outcomes.
Conclusions
Making a new more interactive lamp, that could be sold commercially in the future was what we set out to do. I believe our project was highly interactive, as being able to control the lights and the music through physical actions, and those lights and music affecting our moods. To me that fits my idea of interaction as I believe the user and our project are equal and they are both giving and taking just like how interaction should be. The audience reaction to our product made me feel accomplished, as I could see how their emotions were effected by the interaction such as the changing of lights and music. I would try to make our project cleaner and less buggy if i could improve on it. As well as add more presets for the lights to make it more colorful, and maybe making a set of light presets unique to each song. Each setback I had in this project made me more well versed an knowledgeable in Arduino, and for that I feel grateful for the setbacks as they were learning experiences. After completing this assignment I feel more confident in my abilities as I was able to complete a project I felt was totally daunting and impossible at the beginning. The most important thing for me however is that if I face setbacks, I should just persevere and keep trying because that will make the accomplishment feel all the more amazing.
Appendix:
Concept:
Production:
Code:
#include "DFRobotDFPlayerMini.h"
#include <SoftwareSerial.h>
#include <Wire.h>
// Color pins
const int redPin = 9;
const int greenPin = 10;
const int bluePin = 11;
// Init our vars
int colorRed;
int colorGreen;
int colorBlue;
int triggerPin = 7;
int echoPin = 6;
long distance;
SoftwareSerial softSerial(3, 5); //rx, tx
DFRobotDFPlayerMini myDFPlayer;
void setup() {
// put your setup code here, to run once:
// Setup color pins
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
// Setup distance pins
pinMode(triggerPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(115200);
softSerial.begin(9600);
if (!myDFPlayer.begin(softSerial, /*isACK = */ false, /*doReset = */ false)) { //Use serial to communicate with mp3.
Serial.println("Error starting DFplayer");
}
myDFPlayer.volume(100); //Set volume value. From 0 to 30
myDFPlayer.play(3); //Play the first mp3
}
void loop() {
// put your main code here, to run repeatedly:
// Distance sensing
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
// Read the echo time
long duration = pulseIn(echoPin, HIGH, 17400);
// Calculate the distance
distance = duration / 29 / 2;
// Serial.println(distance);
// Set color based on distance
if (distance >= 2 && distance <= 10) {
colorRed = 0;
colorBlue = 255;
colorGreen = 0;
} else if (distance >= 11 && distance <= 20) {
colorRed = 0;
colorBlue = 0;
colorGreen = 255;
} else if (distance >= 21 && distance <= 30) {
colorRed = 255;
colorBlue = 0;
colorGreen = 0;
} else if (distance >= 31 && distance <= 40) {
colorRed = 255;
colorBlue = 255;
colorGreen = 0;
} else if (distance >= 41 && distance <= 50) {
colorRed = 125;
colorBlue = 125;
colorGreen = 0;
} else {
colorRed = 0;
colorBlue = 0;
colorGreen = 0;
}
// Write to LEDs
analogWrite(redPin, colorRed);
analogWrite(bluePin, colorBlue);
analogWrite(greenPin, colorGreen);
delay(40);
int x = analogRead(A0); // Read X-axis
int y = analogRead(A1); // Read Y-axis
int z = analogRead(A2); // Read Z-axis
if (x < 220) { // If it is tilted
Serial.println("Track 1");
myDFPlayer.play(1); // plays the next track
delay(500); // Delay to avoid multiple triggers
} else if ( x > 300){
Serial.println("Track 2");
myDFPlayer.play(2);
delay(500);
}
Serial.print("x,y,z = ");
Serial.print(x);
Serial.print(", ");
Serial.print(y);
Serial.print(", ");
Serial.print(z);
Serial.println();
}
Pictures of Production:
(This is my partner Jacky with our project)
Disassembly