Nintendo Labo Toy-Cons are a lot of fun to build, but customizing them is the real icing on the cake.  Let's spice up the Piano Toy-Con with sound-triggered lighting effects courtesy of Circuit Playground Express.

What you'll need

Circuit Playground Express has a built-in microphone, but we'll need to mount it away from the Switch's speakers in order to see our lighting effects.  Let's use a separate mic that we can mount close to the Switch's speaker - then use wires to connect it to the Circuit Playground Express.

Prep the wires

  • Cut three pieces of wire - each about 30cm long, one in blue, one in white, and one in red.
  • Strip about 7mm of shielding from both ends of each wire.
  • Tin each exposed end with solder.

Solder wires to the Circuit Playground Express

Now we'll connect those wires to the Circuit Playground's contacts. Each wire color connects to a specific contact pad:

  • Red wire connects to 3.3V
  • Blue wire connects to GND
  • White wire connects to A7 

circuitpython_labo-4a.jpg

circuitpython_labo-4b.jpg

Poke each tinned wire lead through its corresponding contact pad, bend the wire around the outside of the pad to keep it in place - and then solder it securely.

circuitpython_labo-5.jpg

At this point, you can loosely braid the wires in order to keep them grouped neatly together.  This is optional :)

 

 

 

 

 

 

 

Solder Wires to the Electret Microphone Amplifier

Next, we'll connect our wiring to the Microphone board. Each wire color connects to a specific pad on the Microphone board. Poke each wire through its respective pad and solder in place:

  • Red wire connects to V+
  • Blue wire connects to GND
  • White wire connects to Out

circuitpython_labo-6a.jpg

circuitpython_labo-6b.jpg

Once each wire is soldered to the board, clip any excess leads off to avoid accidental bridginf between the pads.

That's all for soldering and wiring - now we can move on to programming the board.

Now we'll add the software that will make Circuit Playground Express's neopixels light up whenever the Electret Microphone board detects sound.

Upload the code

Connect the Circuit Playground Express to your computer with a micro USB cable.  You should see a drive named "CIRCUITPY" appear on your computer. 

You'll need to have the Neopixel library installed on your Circuit Playground Express in order to run this project's CircuitPython code. Follow the steps on this page to install the CircuitPython library bundle.

Copy the following code, paste it into a plain text file or code editor such as Mu. Save the file as "code.py" to the CIRCUITPY drive.

import board
import neopixel
from analogio import AnalogIn

n_pixels = 10  # Number of pixels you are using
dc_offset = 0  # DC offset in mic signal - if unusure, leave 0
noise = 100  # Noise/hum/interference in mic signal
lvl = 10  # Current "dampened" audio level
maxbrt = 127  # Maximum brightness of the neopixels (0-255)
wheelStart = 0  # Start of the RGB spectrum we'll use
wheelEnd = 255  # End of the RGB spectrum we'll use

mic_pin = AnalogIn(board.A7)

# Set up NeoPixels and turn them all off.
strip = neopixel.NeoPixel(board.NEOPIXEL, n_pixels,
                          brightness=0.1, auto_write=False)
strip.fill(0)
strip.show()


def wheel(pos):
    # Input a value 0 to 255 to get a color value.
    # The colours are a transition r - g - b - back to r.
    if (pos < 0) or (pos > 255):
        return (0, 0, 0)
    if pos < 85:
        return (int(pos * 3), int(255 - (pos * 3)), 0)
    elif pos < 170:
        pos -= 85
        return (int(255 - pos * 3), 0, int(pos * 3))
    else:
        pos -= 170
        return (0, int(pos * 3), int(255 - pos * 3))


def remapRangeSafe(value, leftMin, leftMax, rightMin, rightMax):
    # this remaps a value from original (left) range to new (right) range

    # Force the input value to within left min & max
    if value < leftMin:
        value = leftMin
    if value > leftMax:
        value = leftMax

    # Figure out how 'wide' each range is
    leftSpan = leftMax - leftMin
    rightSpan = rightMax - rightMin

    # Convert the left range into a 0-1 range (int)
    valueScaled = int(value - leftMin) / int(leftSpan)

    # Convert the 0-1 range into a value in the right range.
    return int(rightMin + (valueScaled * rightSpan))


while True:
    n = int((mic_pin.value / 65536) * 1000)  # 10-bit ADC format
    n = abs(n - 512 - dc_offset)  # Center on zero

    if n >= noise:  # Remove noise/hum
        n = n - noise

    # "Dampened" reading (else looks twitchy) - divide by 8 (2^3)
    lvl = int(((lvl * 7) + n) / 8)

    # Color pixels based on rainbow gradient
    vlvl = remapRangeSafe(lvl, 0, 255, wheelStart, wheelEnd)
    for i in range(0, len(strip)):
        strip[i] = wheel(vlvl)
        # Set strip brightness based oncode audio level
        brightness = remapRangeSafe(lvl, 50, 255, 0, maxbrt)
        strip.brightness = float(brightness) / 255.0
    strip.show()

After the file saves, your Circuit Playground Express should reboot and start running the light effects code.

Test It

To make sure everything is working, disconnect the Circuit Playground Express from your computer and connect the LiPo battery.

Now, try tapping the microphone - If the Circuit Playground's neopixels light up with each tap, then you'll know it's good to go!

Install & Use It!

Now, we just need to install the Circuit Playground Express & Electret Microphone board in the Piano Toy-Con.

Install the mic

Push back the large cardboard plate that supports the Switch until the interlocking front lip pops up.

  • Pull the large backing plate forward a bit and slide the microphone board behind it - be sure to keep the silver microphone cylinder facing forward.
  • Pull the large backing plate forward a bit and slide the microphone board behind it - be sure to keep the silver microphone cylinder facing forward.
  • Tuck the wires behind the backing plate and route them up the right side - there's a triangular opening that will allow them to reach the Circuit Playground Express on top of the piano.

Once the wires are routed, push the front lip back in place with its tab locked into the backing plate.

Mount the Circuit Playground Express

Use a small piece of double-sided tape to stick the the LiPo battery to the back of the Circuit Playground Express.

circuitpython_labo-14a.jpg

circuitpython_labo-14b.jpg

circuitpython_labo-15.jpg

Use another piece of tape to secure the LiPo battery and Circuit Playground Express to the top of the piano.

Play - with lights!

Install the right Joy-Con in the holder at the back of the piano and place the Switch console in its spot at the center. Set the Switch's volume all the way up and start up the Piano Play mode in the Labo Variety pack cartridge. Now - you're good to go!

Now, when you play the piano - you'll have a light show with every performance :)

To preserve battery, remember to disconnect the battery from the Circuit Playground Express when not in use.
This guide was first published on Apr 27, 2018. It was last updated on Apr 27, 2018.