RAVI'S PAINTBRUSH CLEANER
OVERVIEW
This 5E lesson plan guides middle school STEM camp students through creating an assistive device for artists with muscular weakness. Students will design and build a servo-controlled paintbrush cleaner that helps users with limited arm strength effectively clean their brushes without the repetitive motion typically required. The project integrates human-centered design principles, physical computing with the Smart Servo platform, and digital fabrication to create a solution addressing a real-world accessibility challenge.
Client Profile
Name | About Me | My Challenge |
---|---|---|
Ravi, 15 | I'm a high school sophomore who discovered a passion for painting during art therapy after being diagnosed with a form of muscular weakness that affects my arms and shoulders. I love creating watercolor landscapes but have difficulty with the repetitive motions required to clean my brushes between colors. | When painting, I need to clean my brushes frequently, but the repetitive motion of agitating brushes in water causes fatigue and pain in my arms. I need a way to clean my brushes effectively without the physical strain, allowing me to paint for longer periods without assistance. |
Learning Objectives
- Apply human-centered design principles to develop an assistive technology solution for a specific user need
- Program a Smart Servo to create controlled, timed movements for a practical application
- Design and fabricate mounting components that optimize the mechanical advantage of the servo
- Evaluate and iterate designs based on specific criteria and constraints
- Communicate effectively about assistive technology design decisions and trade-offs
MATERIALS NEEDED
- Smart Servo units (1 per 2-3 students)
- Programmer's Kit with USB-C cables
- Jelly Bean or AT Test buttons
- LocLine flexible connectors
- 10mm framing pieces
- M5 screws and fasteners
- Allen wrenches and screwdrivers
- 3D printer and PLA filament
- Water containers (cups or jars)
- Sample paintbrushes (various sizes)
- Craft materials (foam core, cardboard, hot glue, etc.)
- Computers with OnShape CAD software
1. ENGAGE
How might we use technology to make art more accessible for people with physical limitations?
Activity: "Step Into Their Brushes"
- Introduce the Challenge:
- Present Ravi's profile and challenge to the students
- Show videos of artists with disabilities creating art with and without assistive technologies
- Discuss how assistive technology can make activities of daily living and hobbies more accessible
- Simulated Experience:
- Provide students with hand weights or restrictive gloves
- Have them attempt to clean paintbrushes properly for 2 minutes
- Discuss the fatigue and challenges they experienced
- Explore Smart Servo Capabilities:
- Demonstrate the Smart Servo in action with example code
- Show how servo movement could potentially help with the brush cleaning task
Example code for demonstration
import time import board import pwmio import servo # Set up servo on pin A2 pwm = pwmio.PWMOut(board.A2, duty_cycle=2 ** 15, frequency=50) my_servo = servo.Servo(pwm) # Demonstrate back-and-forth motion (like brush cleaning) while True: for angle in range(0, 180, 10): # 0 to 180 degrees in steps of 10 my_servo.angle = angle time.sleep(0.1) for angle in range(180, 0, -10): # 180 to 0 degrees in steps of 10 my_servo.angle = angle time.sleep(0.1)
Checkpoints & Assessment
Technical Checkpoints:
- Students can explain the basic function of the Smart Servo
- Students understand the concept of servo angle control
Understanding Checkpoints:
- Students can articulate the challenges faced by the client
- Students can identify at least three requirements for an effective solution
Connections
Connections to Standards | Connections to CAD Skills | Connections to HCD Skills |
---|---|---|
STEL 4N: Analyze how technologies change human interaction and communication | CAD 1.1: Technical Vocabulary - Understanding and using design terminology | HCD Skill #1: Problem Framing - Analyzing situations from multiple perspectives |
STEL 3F: Apply a product, system or process from one setting to another | CAD 2.1: Freehand Sketching - Quick visualization of ideas | HCD Skill #6: Stakeholder Dialogue - Gathering requirements |
2. EXPLORE
What functional requirements must our paintbrush cleaner meet to truly help Ravi?
Activity: "Mechanical Motion Experiments"
- Setup:
- Divide students into teams of 2-3
- Provide each team with a Smart Servo, water container, and sample paintbrushes
- Supply basic materials for quick prototyping (cardboard, popsicle sticks, tape)
- Motion Testing:
- Have teams experiment with different servo motion patterns
- Test the effect of different movements on brush cleaning
- Observe how brush size and water resistance affect servo performance
- Code Exploration:
- Provide students with a base code template
- Guide them to modify variables like angle range, speed, and cycle count
Base code template for exploration
# Base code template for exploration import time import board import pwmio import servo # Set up servo pwm = pwmio.PWMOut(board.A2, duty_cycle=2 ** 15, frequency=50) my_servo = servo.Servo(pwm) # Variables students can modify min_angle = 45 # Minimum angle position max_angle = 135 # Maximum angle position speed = 0.1 # Time between movements (smaller = faster) cycles = 5 # Number of complete back-and-forth cycles # Function for brush cleaning motion def clean_brush(min_a, max_a, spd, cyc): for c in range(cyc): for angle in range(min_a, max_a, 5): my_servo.angle = angle time.sleep(spd) for angle in range(max_a, min_a, -5): my_servo.angle = angle time.sleep(spd) # Run the function once clean_brush(min_angle, max_angle, speed, cycles) # Return to starting position my_servo.angle = 90
Checkpoints & Assessment
Technical Checkpoints:
- Students successfully modify the base code to create different motion patterns
- Students can explain how angle range affects servo torque and motion effectiveness
- Students document 2-3 different motion patterns and their effects on brush cleaning
Understanding Checkpoints:
- Students identify critical design requirements based on experimentation
- Students articulate the tradeoffs between different motion patterns
3. EXPLAIN
How can we optimize our servo's mechanical advantage to provide effective brush cleaning with minimal strain?
Key Concepts
- Mechanical Advantage: Designing mounting systems that increase efficiency and decrease strain on the servo
- Motion Patterns: Different agitation patterns' effectiveness for various brush types and paint consistencies
- Input Systems: Designing accessible buttons and controls for users with muscular weakness
- Program Structure: Using functions, variables, and loops to create adaptable code
Activity: "Design Decision Matrix"
- Compile Findings:
- Teams present their motion experiments and observations
- Create a class list of effective motion patterns for different brush types
- Create Design Criteria:
- Guide students to develop specific criteria for their solutions:
- Must clean standard paintbrushes in under 30 seconds
- Must be easily activated by someone with limited hand strength
- Must operate without supervision once activated
- Must be stable and not tip during operation
- Must be adjustable for different water containers and brush sizes
- Guide students to develop specific criteria for their solutions:
- Introduce Advanced Servo Control:
- Demonstrate button control for servo activation
- Show how to add timing components to automatically stop after cleaning
- Explain LED feedback for operational states
Enhanced Smart Servo control with button and timing
import time import board import pwmio import servo from digitalio import DigitalInOut, Direction, Pull import neopixel # Set up servo pwm = pwmio.PWMOut(board.A2, duty_cycle=2 ** 15, frequency=50) my_servo = servo.Servo(pwm) # Set up button button = DigitalInOut(board.D2) button.direction = Direction.INPUT button.pull = Pull.UP # Set up Neopixel LED pixel = neopixel.NeoPixel(board.NEOPIXEL, 1) pixel.brightness = 0.3 # Function for brush cleaning cycle with LED feedback def clean_brush_cycle(): # Blue means running pixel[0] = (0, 0, 255) # Do 10 cycles of cleaning motion for c in range(10): # Forward motion for angle in range(45, 135, 5): my_servo.angle = angle time.sleep(0.05) # Backward motion for angle in range(135, 45, -5): my_servo.angle = angle time.sleep(0.05) # Green means complete pixel[0] = (0, 255, 0) # Return to neutral position my_servo.angle = 90 # Wait a bit with green light on time.sleep(3) # Turn off LED pixel[0] = (0, 0, 0) # Main loop while True: # Yellow means ready pixel[0] = (255, 255, 0) # Check if button is pressed if not button.value: # Button pressed (reads False when pressed) time.sleep(0.1) # Debounce if not button.value: # Still pressed after debounce clean_brush_cycle() time.sleep(0.1) # Small delay in main loop
Technical Checkpoints:
- Students understand how to implement button control for the servo
- Students can modify and customize the cleaning cycle function
- Students can explain how the LED provides feedback about system state
Understanding Checkpoints:
- Students can explain their design criteria and priorities
- Students articulate how their technical decisions address Ravi's specific needs
4. ELABORATE
How can we refine our prototype to create a robust, user-friendly assistive device?
Activity: "Prototype Refinement and Testing"
- CAD Design Work:
- Guide students to design mounting components in OnShape
- Create brackets, brush holders, and button mounts
- Prepare files for 3D printing
- Physical Construction:
- Assemble servo mounting systems using LocLine and framing pieces
- Incorporate 3D printed components
- Set up button placement for easy access
- Code Refinement:
- Add customization options to the code
- Implement multiple cleaning modes for different brush types
- Create error handling for when buttons are held too long
Enhanced code with multiple cleaning modes
import time import board import pwmio import servo from digitalio import DigitalInOut, Direction, Pull import neopixel # Setup hardware pwm = pwmio.PWMOut(board.A2, duty_cycle=2 ** 15, frequency=50) my_servo = servo.Servo(pwm) button = DigitalInOut(board.D2) button.direction = Direction.INPUT button.pull = Pull.UP mode_button = DigitalInOut(board.D3) mode_button.direction = Direction.INPUT mode_button.pull = Pull.UP pixel = neopixel.NeoPixel(board.NEOPIXEL, 1) pixel.brightness = 0.3 # Variables current_mode = 0 # 0=gentle, 1=medium, 2=thorough mode_colors = [(0, 100, 255), (100, 100, 255), (150, 0, 255)] # Colors for each mode cleaning = False # Cleaning mode parameters modes = [ {"cycles": 5, "speed": 0.08, "angle_min": 60, "angle_max": 120}, # Gentle {"cycles": 10, "speed": 0.05, "angle_min": 45, "angle_max": 135}, # Medium {"cycles": 15, "speed": 0.03, "angle_min": 30, "angle_max": 150} # Thorough ] # Function to run a cleaning cycle def clean_brush_cycle(mode_settings): global cleaning cleaning = True # Blue means running pixel[0] = (0, 0, 255) # Run the specified number of cycles for c in range(mode_settings["cycles"]): # Forward motion for angle in range(mode_settings["angle_min"], mode_settings["angle_max"], 5): my_servo.angle = angle time.sleep(mode_settings["speed"]) # Backward motion for angle in range(mode_settings["angle_max"], mode_settings["angle_min"], -5): my_servo.angle = angle time.sleep(mode_settings["speed"]) # Green means complete pixel[0] = (0, 255, 0) # Return to neutral position my_servo.angle = 90 # Wait a bit with green light on time.sleep(3) # Turn off LED pixel[0] = (0, 0, 0) cleaning = False # Main loop while True: if not cleaning: # Show current mode color pixel[0] = mode_colors[current_mode] # Check if mode button is pressed if not mode_button.value and not cleaning: time.sleep(0.1) # Debounce if not mode_button.value: # Still pressed after debounce # Change to next mode current_mode = (current_mode + 1) % len(modes) # Flash the new mode color pixel[0] = (0, 0, 0) time.sleep(0.2) pixel[0] = mode_colors[current_mode] time.sleep(0.5) # Check if start button is pressed if not button.value and not cleaning: # Button pressed and not already cleaning time.sleep(0.1) # Debounce if not button.value: # Still pressed after debounce clean_brush_cycle(modes[current_mode]) time.sleep(0.1) # Small delay in main loop
Technical Checkpoints:
- Students successfully modify code to include multiple cleaning modes
- Students create functional 3D printed components that integrate with the Smart Servo
- Prototypes show evidence of refined mechanical design
Understanding Checkpoints:
- Students document their design decisions and relate them to client needs
- Students can explain the tradeoffs in their design choices
5. EVALUATE
How well does our assistive device meet Ravi's needs and address the design criteria?
Assessment Activities
- User Testing Simulation:
- Teams test their devices with various paintbrushes and water containers
- One student role-plays as Ravi, providing feedback
- Document performance against design criteria
- Technical Performance Assessment:
- Measure cleaning effectiveness with different brush types
- Test button activation force requirements
- Evaluate stability and reliability during operation
- Design Documentation and Presentation:
- Teams create documentation of their final designs
- Prepare short presentations explaining their design decisions
- Include suggestions for future improvements
Assessment Rubric
Criteria | Level 1 | Level 2 | Level 3 | Level 4 |
---|---|---|---|---|
Human-Centered Design | Solution shows minimal consideration of user needs | Solution addresses basic user needs but lacks customizability | Solution effectively addresses user needs with some customization options | Solution comprehensively meets user needs with multiple customization options that reflect deep understanding of the challenge |
Technical Implementation | Basic servo movement implemented with minimal programming | Functional servo control with button activation and simple cleaning cycle | Well-implemented solution with reliable operation and feedback mechanisms | Advanced implementation with multiple modes, error handling, and intuitive user feedback |
Mechanical Design | Basic mounting with minimal stability | Functional mounting that provides adequate stability | Well-designed mounting system with good mechanical advantage | Optimized mounting system with excellent stability and mechanical efficiency |
Testing & Iteration | Minimal testing with few improvements | Some testing conducted leading to basic improvements | Thorough testing with evidence-based improvements | Comprehensive testing across multiple variables with documented iterations and improvements |
Documentation & Communication | Basic documentation of final design | Clear documentation with some explanation of design decisions | Detailed documentation with well-explained design decisions and performance data | Exceptional documentation with comprehensive analysis of design choices, performance data, and future improvement recommendations |