Introduction: Weight Sensing Tote Bag
This instructable is for a weight sensing bag. It helps people who carry a lot in their bags and improves on scales by providing constant ambient feedback and an automatic warning alert for excess weight.
How it works
It works by using a force sensitive resistor to measure how much the strap is pressing on the wearer's shoulder, and using the value to control how fast LEDs pulsate, or how many LEDs have lit up (when a switch is pressed), giving the user feedback. When the wearer wears excessive weight (currently calibrated at approximately 10-11 pounds), the LEDs blink rapidly to warn the wearer. The entire apparatus is powered by an AAA battery and controlled by a Lilypad Arduino, which is attached to components by conductive thread sewn into the surface of the bag.
Illustrations and photographs of the bag are below.
Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.
Step 1: Components
Step 2: Basting
This is an essential step to prevent components from moving around during sewing. See the pictures for how to lay out the components for the bag. Use a reverse stitch to keep the petals in place.
Picture 1 shows the overall layout for basting. The view is from the inside of the bag. Grey components are on the outside of the bag, and white components are on the inside of the bag.
Picture 2 shows how to sew components with 2 petals (LED, Switch) to prevent them wobbling
Picture 3 shows how to sew components with multiple petals (Lilypad, Battery pack).
Picture 4 shows how to place the FSR inside the strap.
Picture 4 shows how to sew the FSR to one side of the strap.
Step 3: Sewing
Picture 1 shows the layout for all the sewing on the bag.
Picture 2 shows the circuit diagrams for each comoponent. Specific Arduino pins are mentioned to ensure compatibility with the code.
Picture 3: Sew through the petals multiple times to ensure a good connection between the thread and the petal.
Picture 4 and 5: I used a straight stitch to reduce thread length and resistance (picture 4), but I later learned that a diagonal stitch allows more stretch, so it is preferable (picture 5).
Picture 6: Stitch around the FSR pins to hold them in place
Picture 7: Curl the ends of the resistors to form loops that you can sew through.
Picture 8: Tie a thread to an existing stitch to merge threads (black arrows on schematic).
Picture 9: Sew threads on opposite sides of fabric when they cross to prevent shorting.
Picture 10: Test stitches with the multimeter to check resistance.
Picture 11. Glue the knots that you tie to end a stitch, to prevent them unravelling, and paint the exposed threads along the stitch to reduce chances of shorting.
The photographs show how the sewing will look on your bag when finished.
Step 4: Coding
The code consists of several distinct parts.
The variable declarations declare variables for the Lilypad petals, an array and reading variables for measuring the force, variables to control the LED pulsing, and a variable to keep track of excessive pressure.
setup() activates all the pins, and enables Serial (for debugging).
loop() checks the pressure, logs excessive pressure, and either issues a warning if there is excessive force, shows the level if the switch is pressed, or pulsates otherwise. It also calls printReading().
getReading() uses an array to record the pressure.
printReading() helps with debugging, by printing all the reading variables.
checkWarning() logs a continuous period of high force before triggering warning().
warning() causes the LEDs to blink.
level() shows more LEDs for larger force.
pulse() shows faster pulsations for larger force.
ledLight() helps light the LEDs for level() and pulse().
Step 5: Calibration
Use objects with equal weight to gradually add weight. A set of cans or bottles works well.
Wear the arduino with the cable attached.
Use the Serial Monitor feature to read off printReading and check the force.
Repeat this process to log how the force reading changes with weight.
Once you are done, tweak the code to match the calibration, and you should be ready to go.