This is a redefined bag, personalized to cater to my schedule requirements.
Video of it working:
This is a video of the bag in practice. According to my schedule for Thursday, pockets one, two and, three are lit up ad only when all the three pockets are filled with the required things the LED strips turn off, indicating that my bag is packed and I am ready to go for the day.
Product photos:
Detail photos:
Usage photos:
Process images and review:
The next step was to measure each bag pocket and fabricate the base where the sensors will be installed and so that each pocket has support to avoid any bag fabric intervention. I measured the bases of each pocket and sensor sizes using calipers for accuracy. It was difficult to reach till the bottom of the bag and so since the bag was flexible I folded the pockets outward to measure the size, however I felt it didn’t give me exact dimensions and I had to sort of eyeball ay some points at the stitches didn’t align entirely.
Also, it was my first time working with plywood and I think it was a little challenging as in the very first place I made the boxes to align at the edges instead of making finger joints for the corner as that challenged me to be extra careful with the craft.
The fabrication was personally more difficult than coding the system for me. After making the device there was some wiring issue that I came across and wasn’t able to figure out which sadly crashed my device and the sensors stopped working. However to make the system work and convey my idea I tried to do a quick fix by making a prototype using the proximity sensor.
Discussion:
One critique I received during the in-class critique was about the limited time frame during which the project operates. The commenter felt that the restriction to operate only between 6:00 am to 8:00 am was a really sensitive consideration. In response, I feel that the project was designed to fit my personal schedule and needs, but I acknowledged that it may not be ideal for everyone. Another critique I received was about the use of IR break beam sensors. The commenter was unfamiliar with this type of sensor and questioned its reliability. They also suggested an E textiles class which could help me with the skills to incorporate my sensors into the bag so that I can get rid of the extra box like base that I had to create for the sensors. I feel how the sensors work and the advantages of using them in this project, such as their ability to detect object presence accurately and their low power consumption is beneficial. I also noted that there are other types of sensors that could be used in a similar project like pressure sensor, and that the choice of sensor depends on the specific design of the bag, like the pocket sizes and bag type(soft or stiff). I am pleased with the project’s overall outcome. It succeeded in helping me create a strategy that makes sure I have everything I need in my bag before leaving for the day. The usage of the IR break beam sensors, which have shown to be dependable and accurate, has particularly impressed me. I gained a lot of coding and technological knowledge while working on this project. The code for the RTC and LCD screen was simple, however initially I had trouble configuring the IR break beam sensors. Yet with perseverance and investigation, I was able to get beyond the difficulties and make them work. While I find them to be both tough and satisfying, I would like to keep working on projects that involve more condition-based applications in the future. Even though I am pleased with the project’s current state, I would like to keep tweaking and enhancing it. One potential improvement would be if creating the same bag I would think more about the wire connection and how I can improve the fabrication design so that I can avoid the wire chaos and have a more organized layout, which would also help in the sensors having any random intervention, making them more efficient. I would also like to explore other types of sensors that could be used in conjunction with the IR break beam sensors to provide more comprehensive information about the contents of the bag. Ultimately, my goal is to create a smart bag that can help users stay organized and prepared for the day ahead.
Technical Information:
Code:
// My Day Duffle // By: Juhi Kedia // The following code is intended to indicate whether the bag is ready for the day or not // according to my schedule. There is a RTC running in the code which tracks the day, date and time. // It can also be manually adjusted for testing. The LCD screen is coded to display the information // provided from the RTC so that the clock is visible to the user. There are 4 IR break beam sensors // attached to 4 inputs which detect whether the object is present or not. There is an emitter and // a receiver in the IR break beam sensor so if the object is present the receiver doesn't receive light // which indicates the LEDs attached to the sensor to either turn on or off accordingly. This thus indicates // whether stuff in bag is present or not. This is conditioned to work between 6:00 am to 8:00 am // so that the LEDs don't turn on and off during the day as it can become very distracting to carry a bag like that. // The code has different conditions for each sensor and LED strip respectively according to the day of the week // in this case for me according to my schedule. // Pin Mapping: // Arduino Pin / Role / Description // 2 Input Pocket 1 sensor // 3 Input Pocket 2 sensor // 4 Input Pocket 3 sensor // 5 Input Pocket 4 sensor // 7 Output Pocket 1 LED strip // 8 Output Pocket 2 LED strip // 9 Output Pocket 3 LED strip // 10 Output Pocket 4 LED strip // Reading the IR break beam sensor and turning on a LED code inspiration from: // https://www.sensingthecity.com/using-ir-breakbeam-senors-to-detect-the-fullness-of-a-trash-bin-and-change-rgb-color-accordingly/ // Understanding how the RTC needs to be coded and how the information from the RTC // can be displayed on the LCD screen code inspiration from: // https://www.youtube.com/watch?v=aJcncPB0GHg #include <Wire.h> #include <LiquidCrystal_I2C.h> #include <RTClib.h> #include <PololuLedStrip.h> // setup PololuLedStrip and set each strip to a pin number PololuLedStrip<7> ledStrip1; PololuLedStrip<8> ledStrip2; PololuLedStrip<9> ledStrip3; PololuLedStrip<10> ledStrip4; #define LED_COUNT 5 RTC_DS3231 rtc; #define SENSORPIN1 2 #define SENSORPIN2 3 #define SENSORPIN3 4 #define SENSORPIN4 5 int sensorState1 = 0, lastState1 = 0; int sensorState2 = 0, lastState2 = 0; int sensorState3 = 0, lastState3 = 0; int sensorState4 = 0, lastState4 = 0; rgb_color on[LED_COUNT]; rgb_color off[LED_COUNT]; char daysOfTheWeek[7][4] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; int Day; int Month; int Year; int Secs; int Minutes; int Hours; String dofweek; //days of week String myDate; String myTime; String dow; LiquidCrystal_I2C screen(0x27, 16, 2); void setup() { screen.init(); screen.backlight(); Serial.begin(9600); screen.begin(16, 2); delay(3000); // initialize the sensor pin as an input: pinMode(SENSORPIN1, INPUT); pinMode(SENSORPIN2, INPUT); pinMode(SENSORPIN3, INPUT); pinMode(SENSORPIN4, INPUT); digitalWrite(SENSORPIN1, HIGH); // turn on the pullup digitalWrite(SENSORPIN2, HIGH); // turn on the pullup digitalWrite(SENSORPIN3, HIGH); // turn on the pullup digitalWrite(SENSORPIN4, HIGH); // turn on the pullup Serial.begin(9600); for (int i = 0; i < LED_COUNT; i++) { // on is red on[i] = rgb_color(255, 0, 0); } for (int i = 0; i < LED_COUNT; i++) { // off is clear/nothing off[i] = rgb_color(0, 0, 0); } if (!rtc.begin()) { Serial.println(" RTC Module not Present"); while (1) ; } if (rtc.lostPower()) { Serial.println("RTC power failure, reset the time!"); // automatically sets the RTC to the date & time on PC this sketch was compiled rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // rtc.adjust(DateTime(2023, 2, 20, 3, 0, 0)); } else { rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // adjusts the rtc manually for demo // rtc.adjust(DateTime(2023, 2, 23, 6, 0, 0)); } } void loop() { // read the state of the sensors: sensorState1 = digitalRead(SENSORPIN1); sensorState2 = digitalRead(SENSORPIN2); sensorState3 = digitalRead(SENSORPIN3); sensorState4 = digitalRead(SENSORPIN4); // Serial.println(sensorState1); DateTime now = rtc.now(); screen.clear(); Day = now.day(); Month = now.month(); Year = now.year(); Secs = now.second(); Hours = now.hour(); Minutes = now.minute(); dofweek = daysOfTheWeek[now.dayOfTheWeek()]; myDate = myDate + dofweek + " " + Day + "/" + Month + "/" + Year; myTime = myTime + Hours + ":" + Minutes + ":" + Secs; // send to serial monitor Serial.println(dofweek); Serial.println(myDate); Serial.println(myTime); //print on lcd screen.setCursor(0, 0); screen.print(myDate); screen.setCursor(0, 1); screen.print(myTime); myDate = ""; myTime = ""; delay(1000); // check if the sensor beam is broken // if it is, the sensorState is LOW: // turn LED off: // Red (turn the red LED off): if (now.hour() >= 6 && now.hour() < 8) { if (dofweek == "Mon") { if ((sensorState1 == LOW) && (sensorState4 == LOW)) { ledStrip1.write(off, LED_COUNT); ledStrip2.write(off, LED_COUNT); ledStrip3.write(off, LED_COUNT); ledStrip4.write(off, LED_COUNT); } else { // On (LED on): ledStrip1.write(on, LED_COUNT); ledStrip2.write(off, LED_COUNT); ledStrip3.write(off, LED_COUNT); ledStrip4.write(on, LED_COUNT); } } if (dofweek == "Tue") { if ((sensorState1 == LOW) && (sensorState2 == LOW)) { ledStrip1.write(off, LED_COUNT); ledStrip2.write(off, LED_COUNT); ledStrip3.write(off, LED_COUNT); ledStrip4.write(off, LED_COUNT); } else { // On (LED on): ledStrip1.write(off, LED_COUNT); ledStrip2.write(off, LED_COUNT); ledStrip3.write(on, LED_COUNT); ledStrip4.write(on, LED_COUNT); // Serial.println("sensorState1"); } } if (dofweek == "Wed") { if ((sensorState1 == LOW) && (sensorState3 == LOW) && (sensorState4 == LOW)) { ledStrip1.write(off, LED_COUNT); ledStrip2.write(off, LED_COUNT); ledStrip3.write(off, LED_COUNT); ledStrip4.write(off, LED_COUNT); } else { // On (LED on): ledStrip1.write(on, LED_COUNT); ledStrip2.write(off, LED_COUNT); ledStrip3.write(on, LED_COUNT); ledStrip4.write(on, LED_COUNT); } } if (dofweek == "Thu") { if ((sensorState1 == LOW) && (sensorState2 == LOW) && (sensorState3 == LOW)) { ledStrip1.write(off, LED_COUNT); ledStrip2.write(off, LED_COUNT); ledStrip3.write(off, LED_COUNT); ledStrip4.write(off, LED_COUNT); } else { // On (LED on): ledStrip1.write(on, LED_COUNT); ledStrip2.write(on, LED_COUNT); ledStrip3.write(on, LED_COUNT); ledStrip4.write(off, LED_COUNT); } } if (dofweek == "Fri") { if ((sensorState1 == LOW) && (sensorState2 == LOW)) { ledStrip1.write(off, LED_COUNT); ledStrip2.write(off, LED_COUNT); ledStrip3.write(off, LED_COUNT); ledStrip4.write(off, LED_COUNT); } else { // On (LED on): ledStrip1.write(on, LED_COUNT); ledStrip2.write(on, LED_COUNT); ledStrip3.write(off, LED_COUNT); ledStrip4.write(off, LED_COUNT); } } } else { ledStrip1.write(off, LED_COUNT); ledStrip2.write(off, LED_COUNT); ledStrip3.write(off, LED_COUNT); ledStrip4.write(off, LED_COUNT); } // if (sensorState && !lastState) { // Serial.println("Unbroken"); // } // if (!sensorState && lastState) { // Serial.println("Broken"); // } // lastState = sensorState; }