Slime Night

Ladyada was unable to get to sleep. Feeling restless she decided to visit her workshop and make some slime to help soothe her soul. Then her companion showed up to lend a hand and have fun together!

How to Make Slime

  • 1 Bottle Elmers Glue - we like the glitter glue but you can use plain white glue and add food coloring!
  • 1/2 Tablespoon Baking Soda - not baking powder! You probably have some in your freezer, fridge, or baking cabinet
  • 1 Tablespoon Contact Lens Solution - make sure to get the stuff with Boric Acid!

Put glue in a glass container, add soda and solution, mix & enjoy!

The quantities are flexible and you don't have to be exact. Add a little more or less to change gooeyness.

Parts Used

Adafruit CRICKIT for Circuit Playground Express

Sometimes we wonder if robotics engineers ever watch movies. If they did, they'd know that making robots into slaves always ends up in a robot rebellion. Why even go down that...

Circuit Playground Express

Circuit Playground Express is the next step towards a perfect introduction to electronics and programming. We've taken the original Circuit Playground Classic and...

DC Gearbox Motor - "TT Motor" - 200RPM - 3 to 6VDC

Perhaps you've been assembling a new robot friend, adding a computer for a brain and other fun personality touches. Now the time has come to let it leave the nest and fly on...

Foot Pedal Potentiometer - Sewing Machine Speed Controller

We've had a foot pedal switch in the store for a while but some people have contacted us asking if there was a way to retrofit it to perform variable speed control, like a...

3.5mm (1/8") Stereo Audio Jack Terminal Block

One truth about working with audio is you always need the cable or adapter you don't have in your toolbox. That's why we love these terminal-block audio connectors so...

Mono Enclosed Speaker - 3W 4 Ohm

Listen up! This 2.8" x 1.2" speaker is a great addition to any audio project where you need 4 ohm impedance and 3W or less of power. We particularly like...

Adafruit NeoPixel LED Dots Strand - 20 LEDs at 2" Pitch

Attaching NeoPixel strips to your costume can be a struggle as the flexible PCBs can crack when bent too much. So how to add little dots of color? Use these stranded NeoPixel dots!...

Wiring Diagram

CircuitPython Code

This project has a foot pedal potentiometer that controls the speed of the TT motor that spins the platter around. Since foot pedals are rheostats (variable resistors) you need another resistor to finish the divider. We use a plain 10K, any value from about 4.7K to 47K will do fine.

When not pressed, the analog reading value is about 700. When pressed, the reading goes down to about 50. You may need to calibrate these numbers for your foot pedal!

We map the analog press values to motor speed, our max speed we want is 0.5 throttle (1.0 was waaay to fast) using our simple mapper helper. If its our first time pressing the pedal, we play the audio file 3 seconds later, to give some ambience.

You can also press the A button to turn on/off some pretty NeoPixels.

import time
from digitalio import DigitalInOut, Direction, Pull
from adafruit_seesaw.seesaw import Seesaw
from adafruit_seesaw.analoginput import AnalogInput
from adafruit_seesaw.pwmout import PWMOut
from adafruit_motor import motor
from busio import I2C
import neopixel
import audioio
import board

# Create seesaw object
i2c = I2C(board.SCL, board.SDA)
seesaw = Seesaw(i2c)

# built in CPX button A
button = DigitalInOut(board.BUTTON_A)
button.direction = Direction.INPUT
button.pull = Pull.DOWN

# NeoPixels
pixels = neopixel.NeoPixel(board.A1, 10, brightness=0)

# Analog reading from Signal #1 (ss. #2)
foot_pedal = AnalogInput(seesaw, 2)

# Create one motor on seesaw PWM pins 22 & 23
motor_a = motor.DCMotor(PWMOut(seesaw, 22), PWMOut(seesaw, 23))
motor_a.throttle = 0

def map_range(x, in_min, in_max, out_min, out_max):
    # Maps a number from one range to another.
    mapped = (x-in_min) * (out_max - out_min) / (in_max-in_min) + out_min
    if out_min <= out_max:
        return max(min(mapped, out_max), out_min)
    return min(max(mapped, out_max), out_min)

# Get the audio file ready
wavfile = "unchained.wav"
f = open(wavfile, "rb")
wav = audioio.WaveFile(f)
a = audioio.AudioOut(board.A0)

time_to_play = 0  # when to start playing
played = False  # have we played audio already? only play once!
while True:
    # Foot pedal ranges from about 700 (unpressed) to 50 (pressed)
    # make that change the speed of the motor from 0 (stopped) to 0.5 (half)
    press = foot_pedal.value
    speed = map_range(press, 700, 50, 0, 0.5)
    print("%d -> %0.3f" % (press, speed))
    motor_a.throttle = speed

    if not time_to_play and speed > 0.1:
        print("Start audio in 3 seconds")
        time_to_play = time.monotonic() + 3
    elif time_to_play and time.monotonic() > time_to_play and not played:
        print("Playing audio")
        played = True

    # turn on/off blue LEDs
    if button.value:
        if pixels.brightness < 0.1:
            pixels.brightness = 1
            pixels.brightness = 0

    # loop delay
This guide was first published on May 16, 2018. It was last updated on May 16, 2018. This page (Slime Night) was last updated on Dec 12, 2018.