CircuitPlayground Minecraft Gesture Controller

Similar documents
Android GBoard Morse Code Control with Circuit Playground Express

Adabot Operation Game

Joy Featherwing. Created by Dean Miller. Last updated on :03:07 PM UTC

Interior Purse Light. Created by Becky Stern. Last updated on :41:08 PM UTC

PyPortal NeoPixel Color Picker Created by Kattni Rembor. Last updated on :42:41 PM UTC

Adafruit MMA8451 Accelerometer Breakout

Adafruit APDS9960 breakout

Bunny Ears with MakeCode

Circuit Playground Express Head-Tilt Ears

Crickit Dancing Marionette Kit Created by Dano Wall. Last updated on :03:11 PM UTC

Adafruit LED Sequins. Created by Becky Stern. Last updated on :02:00 AM UTC

Snake Charmer Box. Created by Dano Wall. Last updated on :07:25 PM UTC

Adafruit MMA8451 Accelerometer Breakout

Pushrod Garage. Created by John Park. Last updated on :07:30 PM UTC

Adafruit MCP9808 Precision I2C Temperature Sensor Guide

Slider Crank Mechanism -- from Cardboard and Craft Sticks

MCP Bit DAC Tutorial

Adafruit DRV2605 Haptic Controller Breakout

Adafruit AM2320 Sensor

Circuit Playground Digital Input

Adafruit CCS811 Air Quality Sensor

Adafruit MMA8451 Accelerometer Breakout

Adafruit Capacitive Touch Sensor Breakouts

Adafruit VL53L0X Time of Flight Micro-LIDAR Distance Sensor Breakout

Adafruit AMG8833 8x8 Thermal Camera Sensor

NeoPixie Dust Bag with Circuit Playground Express

Crawling Animatronic Hand

Trash Panda. Created by Dano Wall. Last updated on :30:46 AM UTC

Con Badge with Circuit Playground Express

MLX90393 Wide-Range 3-Axis Magnetometer

TSL2561 Luminosity Sensor

Circuit Playground Express Laser Tag

Ping Pong Ball Launcher

NeoMatrix 8x8 Word Clock

UFO Flying Saucer with Circuit Playground Express

Introducing Circuit Playground

Adafruit Si7021 Temperature + Humidity Sensor

Milk Jug Glow Skull. Created by John Park. Last updated on :28:36 PM UTC

The Scream: Interactive Screaming Painting

Adafruit GPIO Expander Bonnet for Raspberry Pi Created by Kattni Rembor. Last updated on :12:47 PM UTC

HalloWing Jump Scare Trap

Adafruit AS channel Visible Light Sensor

Adafruit DS3231 Precision RTC Breakout

Jewel Hair Stick. Created by Leslie Birch. Last updated on :47:17 PM UTC

NeoPixel Manicure. Created by Sophy Wong. Last updated on :50:38 PM UTC

i2c/spi LCD Backpack Created by lady ada Last updated on :11:04 PM UTC

Clockwork Goggles. Created by John Park. Last updated on :03:10 PM UTC

CircuitPython Media Dial

Adafruit PCF8523 Real Time Clock

Adafruit Color Sensors

Monochrome OLED Breakouts

Coffee Detonator: The TNT Plunger Grinder

Sino:bit with Arduino

Crickit Carnival Bumper Bot

NeoPixel Ring Bangle Bracelet

Adafruit SGP30 TVOC/eCO2 Gas Sensor

Stumble-Bot. Created by Dano Wall. Last updated on :04:06 AM UTC

'Sup Brows. Created by Kate Hartman. Last updated on :52:04 PM UTC

Adafruit Mini TFT " 160x80

Adafruit DRV2605 Haptic Controller Breakout

NeoPixel Basketball Hoop

Chirping Plush Owl Toy

Trinket-Powered Conference Room Occupancy Display

Crickit Powered Mini Chair Swing Ride!

Sword & Wand Prop Effects with Circuit Playground

LED Breath Stats Mask

FLORA TV-B-Gone. Created by Becky Stern. Last updated on :32:57 PM UTC

Sewable NeoPixels. Created by Becky Stern. Last updated on :50:14 PM EDT

Introducing Circuit Playground

Getting Started with FLORA

Neon LED Signs. Created by John Park. Last updated on :11:09 PM UTC

Trellis 3D Printed Enclosure

Adafruit ATWINC1500 WiFi Breakout

Adafruit IO Basics: Servo

Adafruit LIS3DH Triple-Axis Accelerometer Breakout

Flora Wearable GPS. Created by Becky Stern. Last updated on :32:36 PM UTC

GPS Logging Dog Harness

Adafruit LED Sequins. Created by Becky Stern. Last updated on :00:06 PM EST

Data Logging with Feather and CircuitPython

MCP Bit DAC Tutorial

DIY Circuit Playground Shields

CPX Mystery Dreidel. Created by Kathy Ceceri. Last updated on :51:40 PM UTC

Hammer Time Mini Golf Hazard with Crickit

Adafruit IO Basics: Analog Input

Adafruit 8x16 LED Matrix FeatherWing

Adafruit TPL5110 Power Timer Breakout

Adafruit 10-DOF IMU Breakout

Adafruit IO Basics: Digital Input

Crickit Powered Holiday Diorama

Adafruit I2C FRAM Breakout

Light-Up Angler Fish Embroidery

Adafruit 9-DOF IMU Breakout

Getting Started with FLORA

BLE Light Switch with Feather nrf52840 and Crickit

Secret Hollow Book Intrusion Detector

Mystical LED Halloween Hood

Introducing Adafruit Trellis

Crawling Baby Sea Turtle Robot

Infinity Mirror Valentine's Candy Box

Feather Weather Lamp. Created by Ruiz Brothers. Last updated on :54:26 PM UTC

Transcription:

CircuitPlayground Minecraft Gesture Controller Created by Jen Fox Last updated on 2018-08-22 04:03:44 PM UTC

Guide Contents Guide Contents Overview Helpful Background Info Materials Materials Tools Build the Glove Controller! (Pt. 1) Build the Glove Controller! (Pt. 2) Plan out your Controller! Determine (crucial) game controls. Movement: Actions: Decide how you want to use gestures and/or the finger pads to trigger these controls. Recommended to sketch out your plan. Here is my design thought process: Program the Circuit Playground Express! Required Libraries Configure and initialize the libraries Write short functions for each of the controls Test & Adjust Test #1 Test #2 Run Wild! 2 3 4 5 5 5 6 8 10 10 10 10 10 10 12 15 16 17 18 18 18 19 Adafruit Industries https://learn.adafruit.com/circuitplayground-minecraft-gesture-controller Page 2 of 19

Overview Move your body to play Minecraft! What!! Yes. Check the video for a demo :) This tutorial will show you how to make your very own gesture game controller for Minecraft (or your other fav. computer game). Move your hand(s) to walk/run/jump, look around, and attack* all the things! Let's get started! Grab yourself a Circuit Playground Express (https://adafru.it/wpf), snag my program code (https://adafru.it/btb), and get shakin' to play Minecraft in (srsly) the most fun way ever! :D Read time: 20 min Build Time: ~ 2 hours Cost: ~$30 *It is a biiiiit tricky to attack moving things (like monsters), so be careful in survival mode! Or use this to challenge your skills :) Adafruit Industries https://learn.adafruit.com/circuitplayground-minecraft-gesture-controller Page 3 of 19

Helpful Background Info To keep things short as possible, set up your Circuit Playground Express to program it in CircuitPython, add libraries, and use the Serial Monitor. If you're like "what are those words", here are some tutorials to get ya started! 1. Setting up the Circuit Playground Express (https://adafru.it/afi) 2. Installing (all the) libraries for CPX (https://adafru.it/c9m) 3. Using the Serial Monitor (https://adafru.it/cgr) 4. More info on CircuitPython! (https://adafru.it/cgs) Adafruit Industries https://learn.adafruit.com/circuitplayground-minecraft-gesture-controller Page 4 of 19

Materials Materials Tools Circuit Playground Express (https://adafru.it/wpf) (FYI: gonna call this the "CPX" to save typing) MicroUSB to USB cable (https://adafru.it/iia) Glove -- use a thick glove or one with multiple layers (to avoid shorting the conductive thread) Conductive Fabric (https://adafru.it/ybm) (~ 6 in. x 6 in.) Conductive Thread (https://adafru.it/dme) (~ 24 in.) Regular Thread (~ 24 in.) Velcro Strips (two 1 in. x 1 in.) Sewing Needle Scissors Adafruit Industries https://learn.adafruit.com/circuitplayground-minecraft-gesture-controller Page 5 of 19

Build the Glove Controller! (Pt. 1) You can make the gesture controller without the glove, but the glove controller makes it easier to play, keeps the CPX in the same orientation (very important), and means you can use your fingers as added controls! 1. Cut rectangles of conductive fabric for the finger pads (~ 0.5 in. x 1 in.). 2. Use regular thread to sew the conductive fabric pads onto each of the glove fingers. Suggested to use a highlighter or other pen to avoid sewing the two sides of the glove together (learn from my mistakes bbies). 3. Attach CPX to the glove with velcro squares. Adafruit Industries https://learn.adafruit.com/circuitplayground-minecraft-gesture-controller Page 6 of 19

Adafruit Industries https://learn.adafruit.com/circuitplayground-minecraft-gesture-controller Page 7 of 19

Build the Glove Controller! (Pt. 2) Use an alligator clip or insulated wire to connect the CPX ground ("GND") to the thumb pad. Stitch conductive thread from the CPX capacitive touch pads (A1, A2, A3 & A4) to each of the four fingers. Stitch conductive thread from the CPX capacitive touch pads (A1, A2, A3 & A4) to each of the four fingers. Adafruit Industries https://learn.adafruit.com/circuitplayground-minecraft-gesture-controller Page 8 of 19

If you have a multimeter, check continuity between the CPX pins and the conductive thread pads. Adafruit Industries https://learn.adafruit.com/circuitplayground-minecraft-gesture-controller Page 9 of 19

Plan out your Controller! First! What do we need to do to control Minecraft (or another awesome game)? This is a super helpful & fun lesson in Design Thinking, but you can skip this if you want to just use my controls. You can always come back here later if you want to make changes later :D Determine (crucial) game controls. Note: Start simple! Figure out the most important controls for the game and start there. You can always add more later. Here are the controls that I wanted to use while playing Minecraft.. in creative mode :) (you can use the same ones or customize your own controller!): Movement: Actions: Walk forward: W key Run: Ctrl + W Jump: Space bar Look Left & Right: Mouse rotate Walk backward: S key Attack: Mouse Left Click Place Block/Push/Open: Mouse Right Click Inventory: E key Escape: ESC key Decide how you want to use gestures and/or the finger pads to trigger these controls. Recommended to sketch out your plan. Here is my design thought process: I've always wanted to feel like I was actually *in* a game, so I went the "cheap VR" route and used gestures to control basic movements. For walking, I went the "let's move my arms like I'm walking" route, which easily transitioned into running and jumping by increasing the speed of motion. To make it easy to place a block or exchange items, I decided to use an "awkward handshake" motion. Turning was a bit of a challenge, but my goal was to be able to look around by moving my hands in the direction I wanted to look. Attack became the pointer finger pad, inventory the middle finger pad (which I ended up removing), Escape the ring finger pad, and the pinky finger pad to let me to walk backwards. Again, you can keep these same controls or design your own :D Adafruit Industries https://learn.adafruit.com/circuitplayground-minecraft-gesture-controller Page 10 of 19

Adafruit Industries https://learn.adafruit.com/circuitplayground-minecraft-gesture-controller Page 11 of 19

Program the Circuit Playground Express! The CPX has an on-board compiler, which means you can program it in (pretty much) any language you want! I opted for CircuitPython, a version of Python for microcontrollers, 'cause Python is awesome. Here's the GitHub repository (https://adafru.it/btg) that has the full code. The same code is embeded below, simply click the Download link to save as main.py on your CIRCUITPY drive on the CPX # Minecraft Gesture Controller # # Written by <jenfoxbot@gmail.com> # MIT License V.asof2018 # Also coffee/beer ware license :) # Super awesome thanks to: # Richard Albritton, Tony DiCola, John Parker # All the awesome people who wrote the libraries # Libraries import time # Libraries for accelerometer import adafruit_lis3dh import board import busio # General purpose libraries import touchio # Libraries for HID Keyboard & Mouse from adafruit_hid.keyboard import Keyboard from adafruit_hid.keyboard_layout_us import KeyboardLayoutUS from adafruit_hid.keycode import Keycode from adafruit_hid.mouse import Mouse # CPX Setup touch_a1 = touchio.touchin(board.a1) touch_a1.threshold = 2000 touch_a2 = touchio.touchin(board.a2) Adafruit Industries https://learn.adafruit.com/circuitplayground-minecraft-gesture-controller Page 12 of 19

touch_a2.threshold = 2000 touch_a3 = touchio.touchin(board.a3) touch_a3.threshold = 2000 touch_a4 = touchio.touchin(board.a4) touch_a4.threshold = 2000 # Keyboard & Mouse Setup # The keyboard object! kbd = Keyboard() # we're americans :) layout = KeyboardLayoutUS(kbd) # The mouse object! mouse = Mouse() # Accelerometer Setup # Initialize Accelerometer i2c = busio.i2c(board.accelerometer_scl, board.accelerometer_sda) lis3dh = adafruit_lis3dh.lis3dh_i2c(i2c, address=25) # Set range of accelerometer # (can be RANGE_2_G, RANGE_4_G, RANGE_8_G or RANGE_16_G). lis3dh.range = adafruit_lis3dh.range_8_g # Controller Functions # A helper to 'remap' an input range to an output range def Map(x, in_min, in_max, out_min, out_max): return int( (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min ) def Move(upDown_axis, isbackward): axis_new = abs(updown_axis) # If you are touching A4, walk backwards, else walk forwards if isbackward: print("backwards") # Debugging if axis_new > 1.2: # walk threshold if axis_new > 2.5: # run threshold kbd.press(keycode.left_control, Keycode.S) time.sleep(0.1) kbd.release_all() else: kbd.press(keycode.s) time.sleep(0.1) kbd.release_all() else: if axis_new > 1.2: # walk threshold if axis_new > 2.5: # run threshold kbd.press(keycode.left_control) time.sleep(0.1) kbd.release_all() else: kbd.press(keycode.w) time.sleep(0.1) kbd.release_all() Adafruit Industries https://learn.adafruit.com/circuitplayground-minecraft-gesture-controller Page 13 of 19

def Turn(upDown_axis, leftright_axis, lookup): leftright_adj = int(leftright_axis) # currently z_axis updown_adj = int(updown_axis) # currently y_axis leftright_new = Map(leftRight_adj, -3, 3, -100, 100) if lookup and abs(updown_adj) < 1.2: updown_new = Map(upDown_adj, -1, 1, -100, 100) else: updown_new = 0 if abs(leftright_new) < 127: mouse.move(-leftright_new, updown_new) else: mouse.move(0, 0) def Jump(upDown_axis): updown = abs(updown_axis) if updown > 3: kbd.press(keycode.space, Keycode.W) kbd.release_all() def Give(upDown_axis, frontback_axis): frontback_new = abs(frontback_axis) if abs(updown_axis) < 1: if frontback_new > 2: print("give") mouse.click(mouse.right_button) mouse.release_all() def Attack(): """Attack! By clicking the left mouse button""" print("attack") mouse.click(mouse.left_button) time.sleep(0.1) mouse.release_all() def Inventory(): """Open up inventory, press the E keyboard key""" print("inventory") # Debugging -- view in serial monitor kbd.press(keycode.e) time.sleep(0.01) kbd.release_all() def ESC(): """Escape by pressing the ESCape key""" print("esc") # Debugging -- view in serial monitor kbd.press(keycode.escape) time.sleep(0.01) kbd.release_all() def readaxes(): """Convert acceleration from m/s^2 to G, with a delay""" x, y, z = lis3dh.acceleration time.sleep(0.01) Adafruit Industries https://learn.adafruit.com/circuitplayground-minecraft-gesture-controller Page 14 of 19

return (x / 9.806, y / 9.806, z / 9.806) # 9.806 m/s^2 per G # Main Function while True: # Read accelerometer values (in G). Returns a 3-tuple of x, y, x axis pos_x, pos_y, pos_z = readaxes() # Read finger pads and act accordingly if touch_a1.value: Attack() if touch_a2.value: Inventory() if touch_a3.value: ESC() is_backward = touch_a4.value look_up = touch_a4.value # Run through the motions!.. literally :) Move(pos_y, is_backward) Turn(pos_y, pos_z, look_up) Jump(pos_y) Give(pos_y, pos_x) # Small delay to keep things responsive but # give time for interrupt processing. time.sleep(0.01) # Debugging Ahead!! # Use the following 2 lines to figure out which # axis is updown, frontback, or LeftRight # and also for debugging! # print('x = {}G, y = {}G, z = {}G'.format(x, y, z)) # time.sleep(0.3) Keep readin' if you want to understand how the program works (definitely suggested) or if you want to modify the code. Required Libraries To do the things we want with our controller, we need the following CircuitPython libraries. All are available in the bundle, you can learn how to install it here (https://adafru.it/c9m). LIS3DH accelerometer This allows us to use motion to trigger various things. Human Interface Device ("HID") keyboard HID mouse This library allows us to control the keyboard! This library means we can control the mouse! Adafruit Industries https://learn.adafruit.com/circuitplayground-minecraft-gesture-controller Page 15 of 19

CPX capacitive touch This library lets us use the capacitive touch feature on the CPX, hooray! A couple of other libraries to make our lives easier: time, busio, and board. ########################## ## Libraries ## ########################## import touchio import board import busio import time #Libraries for HID Keyboard & Mouse from adafruit_hid.keyboard import Keyboard from adafruit_hid.keycode import Keycode from adafruit_hid.keyboard_layout_us import KeyboardLayoutUS from adafruit_hid.mouse import Mouse #Libraries for accelerometer import adafruit_lis3dh Configure and initialize the libraries Assign variables for the keyboard, mouse, and accelerometer objects. Select a range for the accelerometer. ####################### # CPX Setup # ####################### touch_a1 = touchio.touchin(board.a1) touch_a1.threshold = 2000 touch_a2 = touchio.touchin(board.a2) touch_a2.threshold = 2000 touch_a3 = touchio.touchin(board.a3) touch_a3.threshold = 2000 touch_a4 = touchio.touchin(board.a4) touch_a4.threshold = 2000 ############################ # Keyboard & Mouse Setup # ############################ # The keyboard object! kbd = Keyboard() # we're americans :) layout = KeyboardLayoutUS(kbd) #The mouse object! mouse = Mouse() ####################### # Accelerometer Setup # ####################### #Initialize Accelerometer i2c = busio.i2c(board.accelerometer_scl, board.accelerometer_sda) lis3dh = adafruit_lis3dh.lis3dh_i2c(i2c, address=25) # Set range of accelerometer (can be RANGE_2_G, RANGE_4_G, RANGE_8_G or RANGE_16_G). lis3dh.range = adafruit_lis3dh.range_8_g Adafruit Industries https://learn.adafruit.com/circuitplayground-minecraft-gesture-controller Page 16 of 19

Write short functions for each of the controls The motion controls can be tricky. We did some initial testing with the accelerometer by printing the values in a serial monitor (in the source code, go to the 'main loop' while True: section and uncomment the two debugging lines). This will help you to determine thresholds for walking, running and jumping, looking left and right, and placing objects. The touch pad triggers are much easier as you are only looking for a capacitive trigger ( True / False ) when you read the touch_an.value Remember to release all of the keyboard and mouse keys at the end of each function! Otherwise you'll end up with stuck keys, in which case you can always unplug the USB cable Adafruit Industries https://learn.adafruit.com/circuitplayground-minecraft-gesture-controller Page 17 of 19

Test & Adjust Don't forget you have to load the program onto the CPX by dragging and dropping the python file onto the CIRCUITPY drive, then rename the file as code.py or main.py (and back up your previous program first) Like pretty much every project, this one will likely be a little wonky when you first get it running. If the touch pads are acting strange, reset the CPX (this recalibrates the capacitive input pins) by clicking the RESET mini button Test #1 1. Open up the serial monitor with Mu (https://adafru.it/cgr) (or PuTTY or any other serial monitor) and run the program (CTRL + D) 2. Test each of the movement controls (you ll see the mouse moving on the screen and make sure the program doesn t crash as well as the touch pads (which should display relevant text on the serial monitor). Test #2 Deploy in Minecraft creative mode! Test the movement and action controls to see if anything breaks or doesn t work as expected (plz keep in mind that this is a prototype!) Update the program based on your testing. Remember, it s OK if it s not perfect, there s always time to make it better! :) Adafruit Industries https://learn.adafruit.com/circuitplayground-minecraft-gesture-controller Page 18 of 19

Run Wild! You re ready to run through Minecraft!! Just be wary of monsters, it might be a bit tricky to protect yourself.. dun dun dunnnnn!! Supplementing your gesture controller with a keyboard is a good idea if you want play for reals. Please like and/or leave a comment if you enjoyed the tutorial! And of course, let me know if you have any comments or questions! Happy Building! <3, jenfoxbot Adafruit Industries Last Updated: 2018-08-22 04:03:43 PM UTC Page 19 of 19