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.
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.
# SPDX-FileCopyrightText: 2018 Limor Fried for Adafruit Industries
#
# SPDX-License-Identifier: MIT
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 audiocore
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)
pixels.fill((0,0,250))
# 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 = audiocore.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")
a.play(wav)
played = True
# turn on/off blue LEDs
if button.value:
if pixels.brightness < 0.1:
pixels.brightness = 1
else:
pixels.brightness = 0
time.sleep(0.5)
# loop delay
time.sleep(0.1)
Page last edited January 22, 2025
Text editor powered by tinymce.