The topic for this Arduino project was to make a timer. When I started ideation, the thought came to me that I did not want to make a just simple time checking device but wanted to try the new functions. Even though I did not have any much experience about Arduino, I already had taken the ‘Intro to Arduino’ 3-week micro class at the beginning of the semester, which was really helpful for me to grasp basic understandings on it.
While ideation, I tried to think about the real problem that I have in my daily lives about time. The first problem I found was about the heater in my room. Since it does not have a time-checking function, I usually have to turn it off every in the morning. When I wake up late especially on the weekends, I have to worry about the overuse of electricity. If I could make any device that is attached on its turning button and automatically turns it off when the certain amount of time is passed, it will be so useful in my life to deal with this heater.
After that, I also found another problem that I have on normal days. I usually try to set an alarm (an hour or 30 minutes) when I have to concentrate on something. Since my concentration does not last for several hours, I try to set my time schedule. After an hour or 30 minutes, I intentionally take a break shortly about from 5 to 15 minutes. This method is helpful for me because whenever I set a goal and a time deadline I can push myself further to reach that goal.
Furthermore, setting a timer is useful when we have a team meeting. Sometimes meeting lasts too long without productive results. Also, as a designer, when we conduct ideation in the meeting, limiting our time in several minutes is helpful to come up with new, strange, or sometimes creative ideas. Thus, I thought that it might be great if I could make a time scheduler in this project.
While thinking about the interface, I came up with a Tangible User Interface(TUI). Since I have an industrial design background and a lot of interest in tangible interactions, I felt attracted to prototype in this type of interface. The interface I sketched was a block and a deck. What I imagined was this; When a user put the block on the deck, the deck can read the certain amount of time allocated in that surface. Users can make a simple time schedule tagging the block on the deck multiple times.
Before starting to make a prototype, I had to define functions of my timer and make a list of components that I need.
- It is able to set multiple timers, which are counted down one-by-one in order. For this function, it should save and stack up the amount of time that a user input.
- It has to show the total amount of stacked time, as well as the remaining seconds of the current timer.
- It also should show how many layers are stacked.
- As a basic function, it can be paused, restarted, and reset.
1) RFID Reader
I started coding with activating RFID reader. I could assign different time values(30 seconds, 1 minute, 5 minutes, 10 minutes, 30 minutes, 60 minutes) to each RFID stickers. Since each of them has their own id number, when I tag them, it can match its id number with the assigned time values.
2) LCD Display
Then, I connected the LCD display to the Arduino. Through this display, I should show the necessary information in each state — counting down, pausing, restarting, or else. I spent quite a lot of time to figure out what information do I have to show here and how can I convey them in a better way.
3) Counting Time
— Object-Oriented Programming
Counting time was the hardest part of me to code. At the first time, I did not know much about Object-Oriented Programming(OOP). I spent a lot of time to calculate and write the time into hours, minutes, and seconds on the display. Even though I succeeded to realize the function that I want, it was not a good code — the length was more than 600 lines. While keeping the code that I wrote in the first time, I tried to learn OOP and apply this approach to my codes.
OOP is literally thinking in the perspective of objects. Thus, it is important to define the crucial and appropriate values. I tried to do this, and the photo on the left shows the values I used for counting time and reading blocks.
Hours, minutes, and seconds will be keep updated in the values, instead of defining and calculating it every moment.
— Counting Down
At the first time, I had no idea how to count time. One of my cohorts, Cathryn, taught me about how to use ‘millis()’ to count down time. However, it was quite hard for me to fully understand in a short time. So I decided to find another way by using ‘delay(1000)’. This code is usually used to give some time between the functions or events, slowing down the cycle. Since using numbers between the brackets, I could calculate the accurate milliseconds. It was the easiest way to code the timer function for me.
— Stack time
After coding the function for counting time, I added time stacking function. I used an array to save the amount of time it received as a value in order. It can stack 99 layers of time.
4) Touch Sensor
I used two touch sensors — one is for start/pause function and the other is for reset the time. I used touch sensors instead of physical buttons. Even though it is so sensitive and not easy to deal with, I thought it was appropriate components for my project.
However, there was a problem. Since the 9V battery had not enough to power 5 components(an LCD display, an RFID reader, a speaker, two touch sensors), the sensor buttons did not work well. I tried to resolve this problem by changing resistance in the LCD display. Even though the visibility of LCD became lower, the buttons barely worked well. But I could be satisfied with it. I tried to find another way to make buttons. There was a simple way by using cooper stickers. It worked well.
When I finished the coding, I decided to solder the parts with Arduino Nano to make it small. Also, I used a much smaller breadboard for the size. It helped me to shrink down the size.
It was my first time to solder so at the first time, it was not easy. But I could learn it fast since I like to make something with my hands. It took several hours to finish the work, but the result was satisfying in terms of compact size.
6) Enclosure Modeling / 3D Printing
After soldering, I could finally decide the form and size of the enclosure. I tried to make it in a simple shape using gradual curves and round corners. Since it is small and thin, it did not take a long time for 3d printing. However, I have to re-print the upper part because of the bad printing quality.
I used paper tape and a glue gun to assemble the pieces. While I was assembling, I realized that I did not make any power button which can turn it on or off outside of the enclosure. Maybe later, I could add a button extending the wires from the battery.
I shared my work with friends. While watching others using the cube interface, I found an interesting point that people have different opinions about the intuitiveness of block interface. Some of them expected to input the amount of time written on the surface that they are looking at, while some of them thought the amount of time written on the surface that they tag on the deck. It might be great if I do some tests or research on how people actually use this interface.