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
- Apply the human-centered design process to develop a solution for a client with specific physical needs
- Design and program a Smart Servo system with large button activation for board game spinners
- Create a mechanically sound mounting system that adapts to different board games
- Evaluate and iterate on designs based on client feedback and technical performance
MATERIALS NEEDED
- Smart Servo units (1 per team)
- AT Test Buttons and/or Jelly Bean Buttons
- LocLine flexible connectors
- 10mm framing pieces
- M5 screws and fasteners
- Allen wrenches and LocLine pliers
- 3D printer with PLA filament
- OnShape CAD software (free classroom license)
- Assorted board games with spinners for testing
- Circuit Python programming environment
- Cardboard, foam core, and craft materials for early prototyping
1. ENGAGE
How might we design technology that makes games more accessible and inclusive?
Activity: "Accessibility Challenge"
- 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
- 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
- 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:
- Students can identify the input and output components in the sample code
- Students understand how the servo angle values relate to physical movement
Understanding Checkpoints:
- Teams have developed clear problem statements that address Damian's specific needs
- Students can articulate how Damian's limited finger dexterity impacts gameplay
- Teams understand the connection between accessible design and independence
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"
- 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
- 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
- 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:
- Teams can successfully modify the servo code to create different spinning behaviors
- Students can create a button-controlled servo system with visual feedback
- Teams have explored multiple mechanical mounting options and identified strengths/weaknesses
Understanding Checkpoints:
- Students can explain how their technical solutions address Damian's specific needs
- Teams understand the relationship between code parameters and physical behavior
- Students can articulate design tradeoffs between different approaches
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:
- Input Method: Large, easy-to-press buttons that Damian can comfortably use
- Control Logic: Programming that determines how the spinner behaves when activated
- Spinning Mechanism: The servo motor that provides the rotational movement
- Visual Indicator: Using the Neopixel LED to provide feedback on system state
- Mounting System: How the device attaches to different game boards
- Pointer Design: The physical indicator that shows the spin result
Technical Considerations
- Random vs. Controlled Rotation: Should the spinner rotate a random amount each time or should it have fixed positions?
- Speed and Duration: How fast should the spinner rotate and for how long?
- Visual Feedback: How can we use the LED to communicate the spinner's status?
- Adaptability: How can we design a mounting system that works with different game boards?
- Durability: How can we ensure the system is sturdy enough for regular use?
Activity: "Design Specification Development"
- 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)
- System Design Planning:
- Create detailed sketches of potential solutions
- Identify key components and their relationships
- Develop pseudocode for the spinner's behavior
- 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"
- Component Fabrication:
- 3D print designed components
- Assemble mounting system using LocLine and framing pieces
- Integrate servo and controls into the physical prototype
- 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
- 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:
- 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?
- 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?
- 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"
- 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)
- Testing Protocol:
- Test each solution with at least three different board games
- Document success rates, challenges, and observations
- Collect feedback from the "Damian" perspective
- 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
- How did focusing on Damian's specific needs influence your design decisions?
- What surprised you most about the challenges of creating an accessible game spinner?
- How might your solution be adapted for users with different abilities?
- What would you change or improve if you had more time or resources?
- 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 |