DAMIAN'S BOARD GAME SPINNER

DAMIAN'S BOARD GAME SPINNER

OVERVIEW

This lesson challenges middle school students (grades 6-8) to design and create an accessible board game spinner for Damian, a 13-year-old with limited finger dexterity. Using the Smart Servo platform, students will apply human-centered design principles to develop a solution that allows Damian to independently play board games that require spinning. Throughout this 5E learning experience, students will move from empathizing with Damian's needs to designing, prototyping, and testing their solution, while developing technical skills in programming, mechanical design, and digital fabrication.

Client Profile

Name About Me My Challenge
Damian, 13 I'm an 8th grader who loves board games and strategy games. I play with my family and friends almost every weekend. I'm interested in art and science, and I'm learning to play the guitar. I have limited finger dexterity that makes it difficult for me to grip and spin traditional game spinners. I can press large buttons but struggle with pinching, twisting, or manipulating small objects. I want to be able to play games independently without always asking for help.

Learning Objectives

MATERIALS NEEDED

1. ENGAGE

How might we design technology that makes games more accessible and inclusive?

Activity: "Accessibility Challenge"

  1. Game Play Experience:
    • Form teams of 3-4 students
    • Provide each team with a board game that requires a spinner
    • Have students take turns attempting to play the game while wearing thick winter gloves or using only one hand
    • Document challenges experienced during gameplay
  2. Client Introduction:
    • Introduce Damian's profile to the class
    • Discuss how Damian's limited finger dexterity impacts her ability to play board games
    • Brainstorm specific challenges Damian might face with different types of game spinners
  3. Problem Framing:
    • Guide students to clearly articulate the problem in their own words
    • Have teams create initial "How might we..." statements to frame the challenge

Basic Servo Control Program

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:
    my_servo.angle = 0
    time.sleep(1)
    my_servo.angle = 90
    time.sleep(1)
    my_servo.angle = 180
    time.sleep(1)
            

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.1: Technical Vocabulary - Understanding and using design terminology HCD Skill #1: Problem Framing - Analyzing situations from multiple perspectives and identifying root causes
STEL 7Q: Apply the technology and engineering design process CAD 2.1: Freehand Sketching - Quick visualization of ideas HCD Skill #6: Stakeholder Dialogue - Gathering requirements and incorporating diverse feedback

2. EXPLORE

What technical solutions could help Damian operate a game spinner independently?

Activity: "Spinner Solutions Investigation"

  1. Setup:
    • Provide each team with Smart Servo units, assorted buttons, and cardboard prototyping materials
    • Demonstrate how to connect buttons to the Smart Servo's input ports
    • Show how to load and modify the servo sweep example program
  2. Control Exploration:
    • Have teams experiment with different button configurations to control the servo
    • Challenge teams to modify the servo sweep code to create different spinning patterns (fast/slow, partial/full rotation)
    • Experiment with different LED colors to provide visual feedback during spinning
  3. Mechanical Investigation:
    • Explore various ways to attach a game spinner pointer to the servo horn
    • Test different mounting options using LocLine parts and 10mm framing
    • Identify ideal placement and positioning for different board game layouts

Modified Button-Controlled Spinner with Visual Feedback

import time
import board
import neopixel
from digitalio import DigitalInOut, Direction, Pull
import pwmio
import servo

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

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

# Setup Neopixel
pixel = neopixel.NeoPixel(board.NEOPIXEL, 1)
pixel.brightness = 0.3

spinning = False
spin_time = 3  # Time in seconds to spin

while True:
    # Check if button is pressed (LOW when pressed)
    if button.value == False and not spinning:
        spinning = True
        start_time = time.monotonic()
        
        # Set LED to spinning color
        pixel.fill((0, 255, 0))  # Green while spinning
        
        # Random ending position can be added here
        
    if spinning:
        # Calculate how far into the spin we are
        elapsed = time.monotonic() - start_time
        
        if elapsed < spin_time:
            # While spinning, continuously rotate
            # Calculate angle based on time (720 degrees over spin_time)
            rotation = (elapsed / spin_time) * 2
            angle = (rotation % 1) * 360
            
            if angle > 180:
                angle = 360 - angle
                
            my_servo.angle = angle
        else:
            # Spinning complete
            spinning = False
            pixel.fill((0, 0, 255))  # Blue when done
            time.sleep(0.5)
            pixel.fill((0, 0, 0))  # Off when ready again
            

Technical Checkpoints:

Understanding Checkpoints:

Connections

Connections to Standards Connections to CAD Skills Connections to HCD Skills
STEL 2M: Differentiate between inputs, processes, outputs, and feedback in technological systems CAD 3.1: CAD Fundamentals - Interface navigation and basic modeling HCD Tool 1.2: Problem Statement - Creating clear, concise descriptions of specific problems
STEL 3F: Apply a product, system or process from one setting to another CAD 4.1: Manufacturing Awareness - Understanding processes and limitations HCD Tool 3.1: Sketching - Collaboratively generating and visualizing diverse solutions

3. EXPLAIN

How can we design a spinner system that meets Damian's needs while adapting to different games?

Key Concepts

Human-Centered Design Approach

For this challenge, we must center Damian's specific needs in our design process. Remember that Damian has limited finger dexterity but can press large buttons. Our solution needs to allow him to independently trigger a game spinner without requiring fine motor control. Additionally, the solution should be adaptable to different board games since Damian enjoys a variety of games with his family and friends.

System Components

The smart servo spinner system has several key components to consider:

  1. Input Method: Large, easy-to-press buttons that Damian can comfortably use
  2. Control Logic: Programming that determines how the spinner behaves when activated
  3. Spinning Mechanism: The servo motor that provides the rotational movement
  4. Visual Indicator: Using the Neopixel LED to provide feedback on system state
  5. Mounting System: How the device attaches to different game boards
  6. Pointer Design: The physical indicator that shows the spin result

Technical Considerations

Activity: "Design Specification Development"

  1. Client Requirements Analysis:
    • Review Damian's needs and constraints
    • Create a list of "must-have" and "nice-to-have" features
    • Develop specific criteria for success (e.g., button size, spinner visibility)
  2. System Design Planning:
    • Create detailed sketches of potential solutions
    • Identify key components and their relationships
    • Develop pseudocode for the spinner's behavior
  3. CAD Model Development:
    • Begin designing components in OnShape
    • Create a virtual assembly to test fit and function
    • Prepare files for 3D printing

Understanding Checkpoints:

  • Teams can articulate how their designs specifically address Damian's needs
  • Students can explain the relationship between system components
  • Teams have created detailed specifications with measurable criteria

Technical Checkpoints:

  • Students have developed valid pseudocode for their spinner behavior
  • CAD models accurately represent the physical components of the system
  • Teams have considered adaptability to different game boards
Connections to Standards Connections to CAD Skills Connections to HCD Skills
STEL 7S: Create solutions by applying human factors in design CAD 2.3: Advanced Visualization - Complex views including sections HCD Tool 2.1: Criteria & Constraints - Breaking down problems into prioritized components
STEL 7V: Improve essential design skills CAD 3.2: Parametric Modeling - Creating feature-based models with relationships HCD Skill #5: Knowledge Development - Identifying and acquiring necessary expertise while maintaining momentum

4. ELABORATE

How can we optimize our spinner design for Damian's independence and enjoyment?

Extension Activity: "Functional Prototype Development"

  1. Component Fabrication:
    • 3D print designed components
    • Assemble mounting system using LocLine and framing pieces
    • Integrate servo and controls into the physical prototype
  2. Programming Implementation:
    • Refine spinner behavior based on earlier experiments
    • Create efficient, commented code that meets design specifications
    • Implement random number generation for unpredictable spin results
    • Add advanced features like different spinning modes or visual effects
  3. Adaptability Testing:
    • Test the prototype with multiple board games
    • Document adjustments needed for different game layouts
    • Refine mounting system for quick game changes

Advanced Spinner Implementation with Randomization and Multiple Modes

# Advanced spinner implementation with randomization and multiple modes
import time
import board
import neopixel
import random
from digitalio import DigitalInOut, Direction, Pull
import pwmio
import servo

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

# Second button for mode switching (optional)
mode_button = DigitalInOut(board.D3)
mode_button.direction = Direction.INPUT
mode_button.pull = Pull.UP

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

# Setup Neopixel
pixel = neopixel.NeoPixel(board.NEOPIXEL, 1)
pixel.brightness = 0.3

# Variables
spinning = False
current_mode = 0  # 0: Random, 1: Sectors (like 1-6 for dice)
modes = ["Random", "Sectors"]
sectors = 6  # Number of equal sectors (can be adjusted for different games)
start_time = 0
spin_time = 0
last_button_state = True
mode_button_last = True

# Color constants
READY_COLOR = (0, 0, 255)  # Blue
SPINNING_COLOR = (0, 255, 0)  # Green
DONE_COLOR = (255, 165, 0)  # Orange

# Indicator we're ready
pixel.fill(READY_COLOR)

while True:
    # Mode button handling
    if mode_button.value == False and mode_button_last == True:
        current_mode = (current_mode + 1) % len(modes)
        print(f"Mode changed to: {modes[current_mode]}")
        
        # Visual feedback for mode change
        for _ in range(current_mode + 1):
            pixel.fill((255, 0, 0))  # Red flash for mode indicator
            time.sleep(0.1)
            pixel.fill((0, 0, 0))
            time.sleep(0.1)
        
        pixel.fill(READY_COLOR)  # Back to ready state
        time.sleep(0.5)  # Debounce
    
    mode_button_last = mode_button.value
    
    # Spin button handling with debounce
    button_state = button.value
    if button_state == False and last_button_state == True and not spinning:
        spinning = True
        start_time = time.monotonic()
        spin_time = random.uniform(2.0, 4.0)  # Random spin duration
        
        if current_mode == 0:  # Random mode
            final_angle = random.uniform(0, 180)  # Random final position
        else:  # Sectors mode
            sector = random.randint(0, sectors - 1)
            sector_size = 180 / sectors
            final_angle = sector * sector_size + sector_size/2  # Middle of sector
        
        # Visual feedback - spinning
        pixel.fill(SPINNING_COLOR)
    
    last_button_state = button_state
    
    if spinning:
        elapsed = time.monotonic() - start_time
        
        if elapsed < spin_time:
            # Calculate spin position with slowing down effect
            progress = elapsed / spin_time
            # Start fast, end slow (ease-out function)
            ease_factor = 1 - (1 - progress) ** 2
            
            # For continuous spinning effect with slowing
            spins = 3 * (1 - ease_factor)  # Number of complete revolutions
            angle = ((spins % 1) * 360) % 180
            
            # Gradually move toward final position
            if elapsed > spin_time * 0.7:  # Last 30% of spin time
                blend_factor = (elapsed - spin_time * 0.7) / (spin_time * 0.3)
                angle = angle * (1 - blend_factor) + final_angle * blend_factor
                
            my_servo.angle = angle
            
        else:
            # Ensure final position is precise
            my_servo.angle = final_angle
            spinning = False
            
            # Visual feedback - done
            pixel.fill(DONE_COLOR)
            time.sleep(1.0)
            pixel.fill(READY_COLOR)  # Ready for next spin

Application Checkpoints:

  • Prototypes function reliably with button input
  • Solutions adapt to at least three different board games
  • Code implementation includes randomization and visual feedback features
  • Mounting system is stable and adjustable

Technical Refinement:

  • Teams have optimized their code for reliability and efficiency
  • 3D printed components are functionally sound and durable
  • Button placement is optimized for Damian's abilities
Connections to Standards Connections to CAD Skills Connections to HCD Skills
STEL 4N: Analyze how technologies change human interaction and communication CAD 3.3: Assembly Modeling - Creating assemblies with constraints HCD Tool 4.3: Proof of Concept - Building functional prototypes for testing
STEL 7T: Assess design quality based on principles and elements CAD 4.2: 3D Printing - Preparing models for additive manufacturing HCD Skill #8: Iteration Cycles - Quickly testing, evaluating, and modifying designs based on results

5. EVALUATE

How effectively does our solution meet Damian's specific needs and enhance his gaming experience?

Assessment Criteria

Students will evaluate their solutions based on both technical performance and user-centered design principles. The assessment will focus on three key areas:

  1. Functionality: Does the spinner reliably perform when activated by Damian's specified input method? Does it provide clear visual feedback? Is the spinning mechanism appropriately random or controlled based on game requirements?
  2. Usability: Is the solution easy for Damian to use independently? Does it accommodate his limited finger dexterity? Is the button size and placement optimized for his abilities?
  3. Adaptability: Can the solution be used with multiple board games? Is it easy to adjust or reposition? Does it maintain stability during use?

Activity: "Client Testing Simulation"

  1. User Testing Preparation:
    • Create testing scenarios that simulate Damian's abilities and game preferences
    • Develop evaluation rubrics based on design criteria
    • Assign team members to play different roles (Damian, observer, data collector)
  2. Testing Protocol:
    • Test each solution with at least three different board games
    • Document success rates, challenges, and observations
    • Collect feedback from the "Damian" perspective
  3. Design Review and Reflection:
    • Conduct team design reviews
    • Identify strengths and opportunities for improvement
    • Create action plans for refinement
    • Document the design journey and lessons learned

Assessment Rubric

Criteria Level 1 Level 2 Level 3 Level 4
Functionality Spinner operates inconsistently or requires multiple attempts to activate Spinner operates reliably but with limited features Spinner operates reliably with appropriate visual feedback Spinner operates reliably with multiple features, visual feedback, and thoughtful behaviors
Usability Solution requires assistance for Damian to use Solution can be used independently but with some difficulty Solution can be used independently with ease Solution enhances Damian's gaming experience beyond basic spinner functionality
Adaptability Solution works with only one game configuration Solution can be adjusted to work with 2-3 games with significant effort Solution easily adapts to multiple games with minor adjustments Solution universally adapts to various game layouts with minimal effort
Technical Implementation Code is functional but poorly organized or commented Code is well-organized with basic functionality Code is well-organized, commented, and implements additional features Code is exemplary with advanced features, excellent organization, and optimization
Human-Centered Design Limited evidence of considering Damian's specific needs Basic consideration of Damian's needs with some accommodations Clear focus on Damian's specific needs throughout the design Exceptional attention to Damian's needs with innovative accommodations

Final Reflection Questions

  1. How did focusing on Damian's specific needs influence your design decisions?
  2. What surprised you most about the challenges of creating an accessible game spinner?
  3. How might your solution be adapted for users with different abilities?
  4. What would you change or improve if you had more time or resources?
  5. How has this project changed your understanding of assistive technology?
Connections to Standards Connections to CAD Skills Connections to HCD Skills
STEL 4N: Analyze how technologies change human interaction and communication CAD 3.3: Assembly Modeling - Creating assemblies with constraints HCD Tool 4.3: Proof of Concept - Building functional prototypes for testing
STEL 7T: Assess design quality based on principles and elements CAD 4.2: 3D Printing - Preparing models for additive manufacturing HCD Skill #8: Iteration Cycles - Quickly testing, evaluating, and modifying designs based on results