RAVI'S PAINTBRUSH CLEANER

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

MATERIALS NEEDED

1. ENGAGE

How might we use technology to make art more accessible for people with physical limitations?

Activity: "Step Into Their Brushes"

  1. 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
  2. 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
  3. 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:

Understanding Checkpoints:

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"

  1. 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)
  2. 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
  3. 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:

Understanding Checkpoints:

3. EXPLAIN

How can we optimize our servo's mechanical advantage to provide effective brush cleaning with minimal strain?

Key Concepts

Activity: "Design Decision Matrix"

  1. Compile Findings:
    • Teams present their motion experiments and observations
    • Create a class list of effective motion patterns for different brush types
  2. 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
  3. 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"

  1. CAD Design Work:
    • Guide students to design mounting components in OnShape
    • Create brackets, brush holders, and button mounts
    • Prepare files for 3D printing
  2. Physical Construction:
    • Assemble servo mounting systems using LocLine and framing pieces
    • Incorporate 3D printed components
    • Set up button placement for easy access
  3. 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

  1. 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
  2. Technical Performance Assessment:
    • Measure cleaning effectiveness with different brush types
    • Test button activation force requirements
    • Evaluate stability and reliability during operation
  3. 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