DANIEL'S MICROSCOPE FOCUS ADJUSTER

DANIEL'S MICROSCOPE FOCUS ADJUSTER

OVERVIEW

This lesson challenges high school engineering students to design and build a precision microscope focus adjuster for Daniel, a 14-year-old with limited hand function. The project integrates digital design, physical computing, and human-centered design principles while addressing a real accessibility need in science education. Students will apply their knowledge of the Smart Servo platform to create a device that allows Daniel to make precise adjustments to a microscope focus knob using alternative input methods that accommodate his specific abilities.

Client Profile

Name About Me My Challenge
Daniel, 14 I'm a freshman who loves science, especially biology. I was born with arthrogryposis, which limits the motion and strength in my hands and wrists. I can use modified pencils for writing and adapted controllers for gaming, but I struggle with small, precise movements that require sustained finger dexterity. In my biology class, I can't operate the fine focus knob on our microscopes, which requires precise finger movements and sustained grip. This means I need a lab partner to make adjustments for me, which limits my independence and full participation in lab work. I'd like a way to adjust the microscope focus myself, ideally with inputs that work with my abilities.

Learning Objectives

MATERIALS NEEDED

1. ENGAGE

How can technology be designed to provide independence for users with physical disabilities in educational settings?

Activity: "Understanding the Challenge"

  1. Introduction to Client Profile:
    • Present Daniel's profile to the class, discussing his specific needs and challenges
    • Analyze the functional requirements of microscope focus adjustment (precision, force needed, range of motion)
    • Discuss the impact of limited hand function on educational participation
  2. Microscope Exploration:
    • Divide students into teams of 3-4
    • Provide each team with a school microscope
    • Have students analyze the mechanics of the focus knobs:
      • Measure the diameter and height of both coarse and fine adjustment knobs
      • Determine the force required to turn each knob
      • Calculate how many degrees of rotation produce meaningful focus changes
      • Document the space available around the microscope for mounting a device
  3. Simulation Experience:
    • Students attempt to use the microscope while wearing thick winter gloves or finger splints
    • Document the challenges encountered and potential workarounds
    • Discuss how this simulation differs from Daniel's actual experience

Example Code: Basic Servo Control with Button Input

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

# Initial position
position = 90
my_servo.angle = position

while True:
    # When button is pressed, move servo slightly
    if not button.value:  # Button is pressed
        position = position + 5
        # Keep position within bounds
        if position > 180:
            position = 180
        my_servo.angle = position
        time.sleep(0.2)  # Debounce delay

Technical Checkpoints:

Understanding Checkpoints:

Connections

Connections to Standards Connections to CAD Skills Connections to HCD Skills
STEL 4T: Evaluate how technologies alter human health and capabilities CAD 2.4: Understanding spatial constraints and relationships HCD Skill #1: Problem Framing - Analyzing situations from multiple perspectives
STEL 7Z: Apply principles of human-centered design CAD 1.2: Following structured design processes HCD Skill #6: Stakeholder Dialogue - Gathering requirements and incorporating diverse feedback

2. EXPLORE

What are the technical possibilities and constraints for creating a precision focus adjuster with the Smart Servo platform?

Activity: "Technical Exploration"

  1. Smart Servo Capabilities Analysis:
    • Investigate torque requirements for microscope focus knobs
    • Experiment with servo position control precision
    • Test different control inputs (buttons, switches, potentiometers)
    • Explore speed control options for precise adjustments
  2. Input Interface Testing:
    • Students test different accessible input methods:
      • Single vs. dual button control
      • Pressure-sensitive inputs
      • Timed or momentary activation
    • Document which inputs might work best for Daniel's specific abilities
  3. Mechanical Coupling Prototyping:
    • Design simple prototypes for connecting the servo to the microscope knob
    • Test different attachment mechanisms that allow for:
      • Secure connection during operation
      • Easy attachment/detachment without tools
      • Adaptability to different microscope models
    • Evaluate the stability and precision of each approach

Fine Control Example: Using Two Buttons for Precision Movement

# Fine Control Example: Using Two Buttons for Precision Movement
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 buttons
button_forward = DigitalInOut(board.D2)
button_forward.direction = Direction.INPUT
button_forward.pull = Pull.UP

button_backward = DigitalInOut(board.D3)
button_backward.direction = Direction.INPUT
button_backward.pull = Pull.UP

# Indicator LED
import neopixel
pixel = neopixel.NeoPixel(board.NEOPIXEL, 1)

# Initial position and movement settings
position = 90
my_servo.angle = position
increment = 2  # Small increments for fine control
fast_increment = 10  # Larger increments for coarse adjustment
long_press_time = 1.0  # seconds to detect long press

while True:
    # Fine forward adjustment
    if not button_forward.value:
        start_time = time.monotonic()
        # Wait to see if it's a long press
        time.sleep(0.2)  # Initial debounce
        
        # Check if button is still pressed after debounce
        if not button_forward.value:
            # Monitor for long press
            while not button_forward.value:
                if time.monotonic() - start_time > long_press_time:
                    # Long press detected - use larger increment
                    position = position + fast_increment
                    if position > 180:
                        position = 180
                    my_servo.angle = position
                    pixel.fill((0, 255, 0))  # Green for fast mode
                    time.sleep(0.2)
                    break
                time.sleep(0.1)
            
            # If it wasn't a long press, use small increment
            if time.monotonic() - start_time <= long_press_time:
                position = position + increment
                if position > 180:
                    position = 180
                my_servo.angle = position
                pixel.fill((0, 0, 255))  # Blue for precision mode
        
        # Wait for button release
        while not button_forward.value:
            time.sleep(0.1)
        
        pixel.fill((0, 0, 0))  # Turn off LED
    
    # Similar logic for backward button
    if not button_backward.value:
        # (Code similar to above but decrementing position)
        # ...
    
    time.sleep(0.05)  # Small delay to prevent CPU hogging

Technical Checkpoints:

Understanding Checkpoints:

3. EXPLAIN

What are the key principles behind effective assistive technology design for precision tasks?

Key Concepts

Precision Control in Assistive Technology
When designing assistive technology for precision tasks like microscope focus adjustment, several key principles must be considered:

  1. Input/Output Ratio: The relationship between user input and device output must be calibrated for the user's abilities. For Daniel, who has limited hand function, we need to transform broad, low-precision movements he can make into fine, high-precision adjustments.
  2. Modes of Operation: Effective assistive devices often provide multiple modes:
    • Fine adjustment mode (small, precise movements)
    • Coarse adjustment mode (larger, faster movements)
    • Variable speed control based on input duration or pressure
  3. Feedback Mechanisms: Users need clear feedback about the system's operation:
    • Visual feedback (LED indicators for mode, direction)
    • Tactile feedback (resistance, detents)
    • Auditory feedback (beeps or clicks)
  4. Mechanical Stability: Precision devices require stable mounting to prevent unwanted movement:
    • Secure attachment to fixed surfaces
    • Balanced force application
    • Vibration damping
  5. Universal Design Principles: The solution should be:
    • Flexible (adaptable to different microscope models)
    • Simple to attach/detach (independence in setup)
    • Intuitive to operate (minimal cognitive load)

Activity: "Control System Design"

  1. Precision Programming Exploration:
    • Students analyze the sample code for fine/coarse control
    • Identify ways to improve precision control through code modification
    • Implement a control algorithm that:
      • Provides smooth, consistent movement
      • Offers multiple speed options
      • Uses LED feedback to indicate current mode
  2. Interface Design Sketching:
    • Based on their understanding of Daniel's abilities, students sketch interface designs
    • Focus on ergonomic placement of inputs
    • Consider mounting solutions that minimize setup complexity
  3. Technical Documentation Draft:
    • Students create initial documentation explaining:
      • How their system works
      • Installation and setup procedures
      • Operating instructions written for Daniel

Understanding Checkpoints:

Technical Checkpoints:

4. ELABORATE

How can we optimize our design for both functionality and user experience?

Extension Activity: "Advanced System Integration"

  1. Mechanical Optimization:
    • Refine the attachment mechanism using 3D printing
    • Design custom adapters for different microscope models
    • Implement a quick-release system for easy attachment/detachment
    • Use CAD to optimize the mechanical design for:
      • Strength
      • Weight
      • Material efficiency
      • Ease of manufacturing
  2. Enhanced Control Features:
    • Program memory positions for frequently used magnifications
    • Add auto-calibration routine for different microscope models
    • Implement a "home" function to return to a starting position
    • Create a sleep mode to conserve battery when not in use
  3. User Experience Refinement:
    • Create a customized control layout based on Daniel's preferences
    • Design a mounting system that doesn't interfere with microscope use
    • Add visual indicators (using the Neopixel LED) for:
      • Current mode (fine/coarse adjustment)
      • Direction of movement
      • When limits are reached

Advanced Control System with Memory Positions

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
button_up = DigitalInOut(board.D2)
button_up.direction = Direction.INPUT
button_up.pull = Pull.UP

button_down = DigitalInOut(board.D3)
button_down.direction = Direction.INPUT
button_down.pull = Pull.UP

# Mode switch
mode_switch = DigitalInOut(board.D4)
mode_switch.direction = Direction.INPUT
mode_switch.pull = Pull.UP

# Indicator LED
pixel = neopixel.NeoPixel(board.NEOPIXEL, 1)

# Mode settings
FINE_MODE = 0
COARSE_MODE = 1
MEMORY_MODE = 2
current_mode = FINE_MODE

# Memory positions (simulating three common focus positions)
memory_positions = [45, 90, 135]
memory_index = 0

# Initial position
position = 90
my_servo.angle = position

# Speed settings
fine_increment = 1
coarse_increment = 5

# Colors for different modes
fine_color = (0, 0, 255)  # Blue
coarse_color = (0, 255, 0)  # Green
memory_color = (255, 0, 255)  # Purple

# Set initial color based on mode
pixel.fill(fine_color)

# Track last button states
last_up = True
last_down = True
last_mode = True

def update_position(new_position):
    """Update servo position with bounds checking"""
    global position
    position = max(0, min(180, new_position))
    my_servo.angle = position
    
    # Visual feedback based on position
    if position <= 45:
        # Near minimum - show partially red
        intensity = int((45 - position) / 45 * 255)
        if current_mode == FINE_MODE:
            pixel.fill((intensity, 0, 255 - intensity))
        elif current_mode == COARSE_MODE:
            pixel.fill((intensity, 255 - intensity, 0))
    elif position >= 135:
        # Near maximum - show partially red
        intensity = int((position - 135) / 45 * 255)
        if current_mode == FINE_MODE:
            pixel.fill((intensity, 0, 255 - intensity))
        elif current_mode == COARSE_MODE:
            pixel.fill((intensity, 255 - intensity, 0))
    else:
        # Normal range - show mode color
        if current_mode == FINE_MODE:
            pixel.fill(fine_color)
        elif current_mode == COARSE_MODE:
            pixel.fill(coarse_color)
        elif current_mode == MEMORY_MODE:
            pixel.fill(memory_color)

while True:
    # Check for mode switch press (detect change)
    if last_mode and not mode_switch.value:
        # Button was just pressed
        current_mode = (current_mode + 1) % 3
        
        # Visual feedback for mode change
        if current_mode == FINE_MODE:
            pixel.fill(fine_color)
        elif current_mode == COARSE_MODE:
            pixel.fill(coarse_color)
        elif current_mode == MEMORY_MODE:
            pixel.fill(memory_color)
        
        # Debounce
        time.sleep(0.2)
    
    # Up button logic
    if last_up and not button_up.value:
        if current_mode == FINE_MODE:
            update_position(position + fine_increment)
        elif current_mode == COARSE_MODE:
            update_position(position + coarse_increment)
        elif current_mode == MEMORY_MODE:
            # Go to next memory position
            memory_index = (memory_index + 1) % len(memory_positions)
            update_position(memory_positions[memory_index])
        
        # Debounce
        time.sleep(0.1)
    
    # Down button logic
    if last_down and not button_down.value:
        if current_mode == FINE_MODE:
            update_position(position - fine_increment)
        elif current_mode == COARSE_MODE:
            update_position(position - coarse_increment)
        elif current_mode == MEMORY_MODE:
            # Go to previous memory position
            memory_index = (memory_index - 1) % len(memory_positions)
            update_position(memory_positions[memory_index])
        
        # Debounce
        time.sleep(0.1)
    
    # Update button states
    last_up = button_up.value
    last_down = button_down.value
    last_mode = mode_switch.value
    
    # Small delay to prevent CPU hogging
    time.sleep(0.05)
            

Application Checkpoints:

Technical Checkpoints:

Connections to Standards Connections to CAD Skills Connections to HCD Skills
STEL 4T: Evaluate how technologies alter human health and capabilities CAD 2.4: Understanding spatial constraints and relationships HCD Skill #1: Problem Framing - Analyzing situations from multiple perspectives
STEL 7Z: Apply principles of human-centered design CAD 1.2: Following structured design processes HCD Skill #6: Stakeholder Dialogue - Gathering requirements and incorporating diverse feedback

5. EVALUATE

How well does our assistive solution meet the needs of our client while demonstrating engineering excellence?

Assessment Criteria

Students will evaluate their microscope focus adjuster solutions based on both technical performance and user-centered design principles. The evaluation should include:

  1. Technical Performance Assessment:
    • Precision of focus control (minimum adjustment increment)
    • Stability of the attachment mechanism
    • Reliability of the control system
    • Battery life or power efficiency
  2. User Experience Assessment:
    • Ease of installation and removal
    • Intuitiveness of controls
    • Appropriateness for Daniel's specific abilities
    • Aesthetic and non-stigmatizing design
  3. Documentation Quality:
    • Clear user instructions
    • Technical specifications
    • Troubleshooting guide
    • Future improvement recommendations
  4. Final Demonstration:
    • Teams will demonstrate their solutions on actual microscopes
    • Each team member should be able to explain design decisions
    • If possible, arrange for feedback from someone with similar needs to Daniel's

Assessment Rubric

Criteria Level 1 Level 2 Level 3 Level 4
Human-Centered Design Basic consideration of user needs; minimal evidence of empathic design Solution addresses primary user needs; some evidence of user consideration in design decisions Thoughtful design that clearly addresses specific user needs; evidence of iteration based on user considerations Exceptional attention to user experience; innovative solutions to accessibility challenges; design reflects deep understanding of user needs
Technical Implementation Basic functioning system with limited precision; rudimentary attachment mechanism Functioning system with moderate precision; stable attachment mechanism Well-engineered system with good precision; reliable and secure attachment mechanism Sophisticated system with excellent precision; innovative attachment solution; optimized for performance
Programming Quality Basic control program with minimal features Functional control program with some advanced features Well-structured program with multiple modes and feedback systems Exceptionally well-designed program with innovative features, efficiency, and error handling
Documentation & Communication Basic documentation of solution; limited explanation of design decisions Clear documentation with adequate explanation of key design decisions Comprehensive documentation with thorough explanation of design process and decisions Exceptional documentation that could serve as a guide for others; professional-quality presentation of design process
Integration of Standards Limited evidence of standards application Clear application of some relevant standards Thorough integration of multiple relevant standards Exemplary integration of standards with clear connections between theory and practice