ISABELLA'S YARN HELPER

ISABELLA'S YARN HELPER

OVERVIEW

This challenging-level lesson guides 3rd-5th grade students through creating an assistive device for Isabella, a 9-year-old with juvenile rheumatoid arthritis. Using the Smart Servo platform, students will design and build a yarn holder and tensioner that helps Isabella pursue her love of knitting and crafts despite joint pain and limited mobility. Students will apply human-centered design principles, develop programming skills with Circuit Python, and create custom 3D-printed components to solve a real-world problem.

Client Profile

Name About Me My Challenge
Isabella, Age 9 I love making things with yarn - especially knitting small animals for my friends. I was diagnosed with juvenile rheumatoid arthritis last year, which makes my joints hurt, especially in my hands and wrists. On bad days, it's hard to hold the yarn with the right tension, and my projects get all uneven. When I'm knitting, I need to control how tight the yarn is. Sometimes I need to hold it tightly, and other times I need to let it feed easily. My hands get tired and painful when I try to maintain consistent tension, and I often have to stop before finishing projects. I'd love something that could hold my yarn ball and help me control the tension without hurting my hands.

Learning Objectives

MATERIALS NEEDED

1. ENGAGE

How might we design devices that adapt to users with different physical needs?

Activity: "A Day in Isabella's Life"

  1. Empathy Simulation:
    • Divide students into pairs
    • Have students wrap several rubber bands tightly around their finger joints before attempting to hold and control yarn for knitting or crafting
    • Ask students to attempt basic knitting or yarn-winding tasks while maintaining this restriction
  2. Discussion Circle:
    • Ask: "How did it feel to try to work with yarn with limited joint mobility?"
    • Ask: "What strategies did you develop to overcome the challenge?"
    • Introduce Isabella's profile and read her story to the class
    • Ask: "Based on your experience, what specific problems might Isabella face when working with yarn?"
  3. Problem Introduction:
    • Introduce the Smart Servo as a potential solution platform
    • Demonstrate basic servo operation with the following code:

Basic Servo Movement Demo

# Basic Servo Movement Demo
import time
import board
import pwmio
import servo

pwm = pwmio.PWMOut(board.A2, duty_cycle=2 ** 15, frequency=50)
my_servo = servo.Servo(pwm)

while True:
    for angle in range(0, 180, 5):  # 0 to 180 degrees, step 5
        my_servo.angle = angle
        time.sleep(0.05)
    for angle in range(180, 0, -5):  # 180 to 0 degrees, step 5
        my_servo.angle = angle
        time.sleep(0.05)

Checkpoints & Assessment

Technical Checkpoints:

Understanding Checkpoints:

Connections

Connections to Standards Connections to CAD Skills Connections to HCD Skills
STEL 4K: Examine positive and negative effects of technology CAD 1.2: Design Process - Following structured design processes HCD Skill #1: Problem Framing - Analyzing situations from multiple perspectives
STEL 4N: Analyze how technologies change human interaction CAD 2.1: Freehand Sketching - Quick visualization of ideas HCD Skill #6: Stakeholder Dialogue - Gathering requirements

2. EXPLORE

How can we control tension and movement with a programmable servo motor?

Activity: "Tension Testing Lab"

  1. Setup:
    • Provide teams with Smart Servo units and various yarn samples
    • Set up testing stations with different tensioning methods (simple pulleys, springs, etc.)
  2. Experiment: Servo Control Testing:
    • Students modify and test this code to explore different servo positions:

Tension Control Testing

# Tension Control Testing
import time
import board
import pwmio
import servo
from digitalio import DigitalInOut, Direction, Pull

# Setup servo
pwm = pwmio.PWMOut(board.A2, duty_cycle=2 ** 15, frequency=50)
my_servo = servo.Servo(pwm)

# Setup button
button = DigitalInOut(board.D2)
button.direction = Direction.INPUT
button.pull = Pull.UP

# Variables for tracking
current_angle = 90  # Start at middle position
tension_levels = [30, 60, 90, 120, 150]  # Different tension positions
current_level = 2  # Start at middle tension level

# Setup LED for feedback
led = DigitalInOut(board.LED)
led.direction = Direction.OUTPUT

while True:
    # Check if button is pressed
    if not button.value:  # Button is pressed (pulled to ground)
        # Move to next tension level
        current_level = (current_level + 1) % len(tension_levels)
        current_angle = tension_levels[current_level]
        my_servo.angle = current_angle
        
        # Blink LED to show level change
        for _ in range(current_level + 1):
            led.value = True
            time.sleep(0.1)
            led.value = False
            time.sleep(0.1)
            
        # Debounce
        time.sleep(0.5)
  1. Investigation: Tensioning Mechanisms:
    • Students experiment with different ways to create yarn tension:
      • Direct tension (yarn wrapped around servo arm)
      • Pulley systems (yarn routed through moving guides)
      • Pressure mechanisms (servo pressing yarn against surface)
    • For each method, students record:
      • How easy it is to adjust
      • How consistent the tension remains
      • How it affects yarn feeding
  2. Brainstorming:
    • Based on their experiments, students sketch at least three different mechanisms for how a servo could provide adjustable tension for yarn

Checkpoints & Assessment

Technical Checkpoints:

Understanding Checkpoints:

3. EXPLAIN

How can we design assistive technology that balances functionality, ease of use, and adaptability?

Key Concepts

Assistive Technology Design Principles:

  1. User-Centered: The device must address Isabella's specific needs, not generic solutions
  2. Accessible Control: Input methods must accommodate limited joint mobility
  3. Adaptability: The device should adjust to different yarn types and tensions
  4. Feedback: Visual or auditory signals help users understand device state
  5. Mechanical Advantage: Using technology to reduce physical effort required

Programming Concepts:

  1. Input Processing: Reading button or switch states
  2. State Management: Tracking and changing modes of operation
  3. Servo Control: Precise positioning based on user needs
  4. Visual Feedback: Using LEDs to communicate device status

Activity: "Designing Isabella's Solution"

  1. Define Requirements:
    • Students create a list of "must have" and "nice to have" features for Isabella's yarn helper
    • Requirements should include specific tension levels needed and control methods
  2. Initial Design:
    • Teams create detailed sketches of their proposed solution
    • Sketches must include:
      • Position of the Smart Servo
      • Yarn path through the device
      • Control method (button placement)
      • Mounting or stabilizing features
      • LED feedback positioning
  3. Pseudocode Development:
    • Students write pseudocode for their solution, focusing on:
      • How many tension settings will be available
      • How user inputs will change tension
      • What feedback the system will provide

Technical Checkpoints:

  • Designs show clear understanding of servo movement capabilities
  • Pseudocode demonstrates logical flow for tension adjustments

Understanding Checkpoints:

  • Designs directly address Isabella's specific needs
  • Student designs show consideration of joint limitations in control placement

4. ELABORATE

How can we refine our solution to make it more effective and user-friendly?

Activity: "Prototype Development"

  1. CAD Design and 3D Printing:
    • Students create CAD designs in OnShape for custom components:
      • Servo mounts or enclosures
      • Yarn guides or tension mechanisms
      • Button holders or mounting brackets
    • Export designs for 3D printing
  2. Assembly and Integration:
    • Assemble mechanical components with the Smart Servo
    • Install input devices (buttons) in accessible positions
    • Test mechanical movement and stability
  3. Programming and Refinement:
    • Students complete and upload their code to the Smart Servo:

Isabella's Yarn Helper

# Isabella's Yarn Helper
import time
import board
import pwmio
import servo
from digitalio import DigitalInOut, Direction, Pull
import neopixel

# Setup servo
pwm = pwmio.PWMOut(board.A2, duty_cycle=2 ** 15, frequency=50)
my_servo = servo.Servo(pwm)

# Setup buttons - primary control and mode button
tension_button = DigitalInOut(board.D2)
tension_button.direction = Direction.INPUT
tension_button.pull = Pull.UP

mode_button = DigitalInOut(board.D4)
mode_button.direction = Direction.INPUT
mode_button.pull = Pull.UP

# Setup NeoPixel for better visual feedback
pixel = neopixel.NeoPixel(board.NEOPIXEL, 1, brightness=0.3)

# Tension settings - tuned for different yarn weights
# [loose, medium-loose, medium, medium-tight, tight]
tension_positions = [20, 60, 90, 120, 160]  
tension_colors = [(0,0,255), (0,255,255), (0,255,0), (255,255,0), (255,0,0)]
current_tension = 2  # Start at medium tension

# Mode settings - different yarn feeding modes
modes = ["regular", "auto-feed"]  # Regular or pulsing for auto-feed
current_mode = 0

def display_tension():
    """Display current tension level with color"""
    pixel.fill(tension_colors[current_tension])
    
    # Also blink to indicate level
    for _ in range(current_tension + 1):
        pixel.brightness = 0.1
        time.sleep(0.1)
        pixel.brightness = 0.3
        time.sleep(0.1)

def change_tension():
    """Change to next tension level"""
    global current_tension
    current_tension = (current_tension + 1) % len(tension_positions)
    my_servo.angle = tension_positions[current_tension]
    display_tension()

def change_mode():
    """Toggle between regular and auto-feed modes"""
    global current_mode
    current_mode = (current_mode + 1) % len(modes)
    
    # Blink white to indicate mode change
    pixel.fill((255, 255, 255))
    time.sleep(0.5)
    display_tension()

# Initial setup
my_servo.angle = tension_positions[current_tension]
display_tension()

# Main loop
while True:
    # Check tension button
    if not tension_button.value:
        change_tension()
        time.sleep(0.5)  # Debounce
        
    # Check mode button
    if not mode_button.value:
        change_mode()
        time.sleep(0.5)  # Debounce
        
    # If in auto-feed mode, gently pulse the servo
    if modes[current_mode] == "auto-feed":
        current_pos = tension_positions[current_tension]
        # Small movements to help feed yarn
        my_servo.angle = current_pos - 5
        time.sleep(0.5)
        my_servo.angle = current_pos
        time.sleep(0.5)
        my_servo.angle = current_pos + 5
        time.sleep(0.5)
        my_servo.angle = current_pos
        time.sleep(0.5)
            
  1. Refinement Through Testing:
    • Test the prototype with various yarn types
    • Measure the effectiveness of tension control
    • Evaluate the accessibility of controls for someone with limited joint mobility

Technical Checkpoints:

  • Working prototype demonstrates at least three different tension levels
  • LED provides clear visual feedback about current settings
  • Code properly manages button inputs and servo control

Application Checkpoints:

  • Design shows consideration of stability during use
  • Control mechanisms are accessible for someone with joint limitations
  • Device successfully holds yarn while maintaining adjustable tension

5. EVALUATE

How well does our solution meet Isabella's needs, and how might we further improve it?

Assessment: "Client Testing and Reflection"

  1. User Testing Simulation:
    • Student teams trade prototypes and evaluate each other's designs
    • Students use the rubber band joint limitation method again while testing
    • Teams document strengths and areas for improvement in each design
  2. Design Presentation:
    • Teams present their solutions to the class, explaining:
      • Key features and how they address Isabella's specific needs
      • Technical challenges they encountered and overcame
      • Testing results and future improvements
  3. Reflection Discussion:
    • What was the most challenging aspect of designing for someone with joint limitations?
    • How did your understanding of Isabella's needs change during the design process?
    • What would you do differently if you could start over?

Assessment Rubric

Criteria Level 1 Level 2 Level 3 Level 4
User Needs Focus Solution addresses basic yarn holding but does not consider joint limitations Solution addresses yarn holding with some consideration of accessibility Solution clearly addresses yarn tension with accessible controls Solution elegantly addresses yarn tension with highly accessible controls and adaptability for different days/needs
Technical Implementation Basic servo control with single function Multi-position servo control with button input Multi-position servo with feedback and error handling Advanced features (multiple modes, visual feedback, fine tension control)
Design Quality Basic assembly with minimal custom parts Functional design with some custom components Well-integrated design with thoughtful component placement Highly refined design with excellent ergonomics and aesthetics
Programming Basic servo movement with limited input Multiple tension settings with simple control Multiple settings with feedback and mode options Advanced features (auto-detect, memory of settings, adaptive behavior)
HCD Application Limited evidence of considering user needs Clear consideration of user needs in some aspects Consistent application of user-centered design principles Exceptional empathy and understanding of user needs throughout design