A reusable to do list that resets itself every morning to help you keep track of your daily tasks.
Photos
Process: Decision Points
One of the biggest decision points for me along this process was figuring out how I would reset the tasks each day. I had decided to use these manual switches in my design since I felt that turning them on and off reflected the same satisfaction of crossing something off a list, but this made it more difficult to reset the tasks compared to a button, as well as the challenge to scale up my design to accommodate five tasks. I contemplated several different methods such as a panel that could shift up and down to turn the switches back on, changing which side was “To Do” and which was “Done” each day, or finding a way to flip the switches internally, but these all had quite adverse effects on the human interaction with these switches, often compromising the ability to flip the switches manually. In my prototype and later my final design, I decided to use a servo arm to flip the switches manually since they worked consistently and did not interfere with the human interaction when not in use. While this was mechanically heavy and required many servos when applied to five tasks, I felt that this was the most efficient and effective method for my time.
Process Images
Discussion
Overall, I am quite happy with how this project turned out! Coming from very little coding experience and no experience with electronics, I think I am quite proud of what I have been able to accomplish. The main goal I had for myself with this project, in the words of one of my professors, was to have “simple things done well” and choose something that would allow me to ensure it would be functional and resolved to the best of my ability. While I had some feedback regarding “a reward / punishment route” to provide motivation for these tasks, I wanted to focus more on what made traditional to-do lists helpful and satisfying for me and what works best for my lifestyle. I didn’t want to add a punishment system because I felt that would hinder the likelihood of me using this in the future, and I enjoy the passive, no pressure nature of to-do lists as they are now with more gentle reminders of what I should get done. While the code and wiring seemed like it would be quite simple and straightforward, it was surprisingly still quite the challenge, especially when doing things five times over! One of the biggest challenges for me was getting the mechanism of the servos to actually flip the switches, as I had spent many hours troubleshooting having them hit and go too far, being at the wrong height to hit and have enough force, having servos that did not work or were too weak, and so on. The main takeaway from that experience for me was how many different problems can show up with the same error and to be mindful that what worked to solve the problem last time may not work again in the same way. Despite these challenges, I think I learned a lot about making something “real” as in design we often stop our process at the concept and rarely resolve the finer details to make a model that works as intended. If I were to do this project again, knowing what I know now, I would love to implement some of the feedback that I got from my peers, such as “being to control each section”, as I think that would make the product much more refined by only switching on the ones that had been turned off.
Block Diagram
Schematic Diagram
Code
/* Reusable To Do List Description: This project creates a 5 switch task system with LEDs to signal whether or not they are flipped and the task is done, additionally with a real-time-clock plugin for servo motors to reset the switches and tasks at aspecified time each day. Resources Used: Real Time Clock: https://create.arduino.cc/projecthub/MisterBotBreak/how-to-use-a-real-time-clock-module-ds3231-bc90fe Mechanism Inspiration: https://create.arduino.cc/projecthub/viorelracoviteanu/useless-box-with-arduino-d67b47 */ // PIN MAPPING // pin | mode | description // ------|--------|------------ // 2 input Switch 1 // 3 input Switch 2 // 4 input Switch 3 // 5 input Switch 4 // 6 input Switch 5 // 8 ouput LED 5 // 9 output LED 4 // 10 output LED 3 // 11 output LED 1 // 12 output LED 2 // A0 output Servo 4 // A1 output Servo 5 // A2 output Servo 3 // A3 output Servo 2 // A4 output Servo 1 // //#include <Wire.h> //#include <ds3231.h> #include <Servo.h> // Servo library //struct ts t; Servo servo1; // one servo for each switch, top to bottom Servo servo2; Servo servo3; Servo servo4; Servo servo5; const int SERVOPIN1 = A4; //Mappings change to fit wiring of switches const int SERVOPIN2 = A3; const int SERVOPIN3 = A2; const int SERVOPIN4 = A0; const int SERVOPIN5 = A1; const int SWITCHPIN1 = 2; const int SWITCHPIN2 = 3; const int SWITCHPIN3 = 4; const int SWITCHPIN4 = 5; const int SWITCHPIN5 = 6; const int LEDPIN1 = 11; const int LEDPIN2 = 12; const int LEDPIN3 = 10; const int LEDPIN4 = 9; const int LEDPIN5 = 8; unsigned long timerOne = 0; //Timer for demo mode reset void setup() { Serial.begin(9600); //Wire.begin(); //DS3231_init(DS3231_CONTROL_INTCN); //RTC setup //t.hour=9; //t.min=0; //t.sec=0; //t.mday=26; //t.mon=10; //t.year=2021; //DS3231_set(t); pinMode(SERVOPIN1, OUTPUT); pinMode(SERVOPIN2, OUTPUT); pinMode(SERVOPIN3, OUTPUT); pinMode(SERVOPIN4, OUTPUT); pinMode(SERVOPIN5, OUTPUT); pinMode (SWITCHPIN1, INPUT); pinMode (SWITCHPIN1, INPUT); pinMode (SWITCHPIN1, INPUT); pinMode (SWITCHPIN1, INPUT); pinMode (SWITCHPIN1, INPUT); pinMode (LEDPIN1, OUTPUT); pinMode (LEDPIN1, OUTPUT); pinMode (LEDPIN1, OUTPUT); pinMode (LEDPIN1, OUTPUT); pinMode (LEDPIN1, OUTPUT); servo1.attach(SERVOPIN1); // set up each servo on the corresponding data pin servo2.attach(SERVOPIN2); servo3.attach(SERVOPIN3); servo4.attach(SERVOPIN4); servo5.attach(SERVOPIN5); servo1.write(140); // servo reset to neutral position servo2.write(140); servo3.write(140); servo4.write(140); servo5.write(140); } void loop() { int switch1State; switch1State = digitalRead(SWITCHPIN1); int switch2State; switch2State = digitalRead(SWITCHPIN2); int switch3State; switch3State = digitalRead(SWITCHPIN3); int switch4State; switch4State = digitalRead(SWITCHPIN4); int switch5State; switch5State = digitalRead(SWITCHPIN5); if (switch1State == 1) { digitalWrite (LEDPIN1, HIGH); //Mapping switch state to LED state } if (switch1State == 0) { digitalWrite (LEDPIN1, LOW); } if (switch2State == 1) { digitalWrite (LEDPIN2, HIGH); } if (switch2State == 0) { digitalWrite (LEDPIN2, LOW); } if (switch3State == 1) { digitalWrite (LEDPIN3, HIGH); } if (switch3State == 0) { digitalWrite (LEDPIN3, LOW); } if (switch4State == 1) { digitalWrite (LEDPIN4, HIGH); } if (switch4State == 0) { digitalWrite (LEDPIN4, LOW); } if (switch5State == 1) { digitalWrite (LEDPIN5, HIGH); } if (switch5State == 0) { digitalWrite (LEDPIN5, LOW); } if (millis() - timerOne >= 30000) { //Refresh rate of screen every 30000 milliseconds // this is demo mode, in real mode: if (t.hour == 9 && millis - timerOne >= 3600000) { to occur once a day servo1.write(30); // tell the servo to go to 90º delay(200); servo1.write(140); delay(500); servo2.write(30); delay(200); servo2.write(140); delay(500); servo3.write(30); delay(200); servo3.write(140); delay(500); servo4.write(30); delay(200); servo4.write(140); delay(500); servo5.write(30); delay(200); servo5.write(140); delay(500); timerOne = millis(); } }