Animated Professor That Talks!
This is a piece of art that when interacted with displays a light animation and talks!
Supplies
1/8 and 1/4 inch birch wood
Laser Cutter
Wires
Adabluefruit CPB
Speaker
Button
LED Light strip
Hot Glue
Cardboard
Battery pack
Tape
Sketch the image you want to engrave and format it in illustrator. Then push project to a laser cutter that will engrave it into 1/8th inch baltic birch.
Tape or glue the LEDs into the whole that were cut for them and wire them into the CPB
Glue the speaker down and wire it correctly to the CPB
Wire the button in and seat it properly into the face of the project
Measure and cut out a stand and attach it with hot glue and measure out a box to enclose eveything in. You can use cardboard or wood.
Code whichever animations and sounds you'd like.
Here is my code:
# import lines needed to play sound files
import board, digitalio, time, neopixel, random
from audiopwmio import PWMAudioOut as AudioOut
from audiocore import WaveFile
# Speaker
speaker = digitalio.DigitalInOut(board.SPEAKER_ENABLE)
speaker.direction = digitalio.Direction.OUTPUT
speaker.value = True
audio = AudioOut(board.AUDIO)
path = "sounds/"
filename="untitled.wav"
# play_sound function - pass in the FULL NAME of file to play
def play_sound(filename, anim):
with open(path + filename, "rb") as wave_file:
wave = WaveFile(wave_file)
audio.play(wave)
while audio.playing:
anim.animate()
# Button
# Use Pull.UP for external buttons wired to ground
button = digitalio.DigitalInOut(board.A4) # Wired to pin GP15
button.switch_to_input(pull=digitalio.Pull.UP)
from adafruit_led_animation.animation.blink import Blink
from adafruit_led_animation.animation.colorcycle import ColorCycle
from adafruit_led_animation.animation.chase import Chase
from adafruit_led_animation.animation.comet import Comet
from adafruit_led_animation.animation.pulse import Pulse
from adafruit_led_animation.animation.sparkle import Sparkle
from adafruit_led_animation.animation.sparklepulse import SparklePulse
from adafruit_led_animation.animation.rainbow import Rainbow
from adafruit_led_animation.animation.rainbowchase import RainbowChase
from adafruit_led_animation.sequence import AnimationSequence
from adafruit_led_animation.color import (
AMBER, # (255, 100, 0)
AQUA, # (50, 255, 255)
BLACK, # OFF (0, 0, 0)
BLUE, # (0, 0, 255)
CYAN, # (0, 255, 255)
GOLD, # (255, 222, 30)
GREEN, # (0, 255, 0)
JADE, # (0, 255, 40)
MAGENTA, # (255, 0, 20)
OLD_LACE, # (253, 245, 230)
ORANGE, # (255, 40, 0)
PINK, # (242, 90, 255)
PURPLE, # (180, 0, 255)
RED, # (255, 0, 0)
TEAL, # (0, 255, 120)
WHITE, # (255, 255, 255)
YELLOW, # (255, 150, 0)
RAINBOW, # a list of colors to cycle through
# RAINBOW is RED, ORANGE, YELLOW, GREEN, BLUE, and PURPLE ((255, 0, 0), (255, 40, 0), (255, 150, 0), (0, 255, 0), (0, 0, 255), (180, 0, 255))
)
pixels_pin = board.NEOPIXEL
pixels_num_of_lights = 10
pixels = neopixel.NeoPixel(pixels_pin, pixels_num_of_lights, brightness=0.5)
strip_pin = board.A1
strip_num_of_lights = int(20)
strip = neopixel.NeoPixel(strip_pin, strip_num_of_lights, brightness=0.5, auto_write=True)
INDIGO = (63, 0, 255)
VIOLET = (127, 0, 255)
OFF = 0, 0, 0
pause = 0.3
mycolors = [
RED,
MAGENTA,
ORANGE,
YELLOW,
GREEN,
JADE,
BLUE,
INDIGO,
VIOLET,
PURPLE,
OFF,
]
blink = Blink(pixels, speed=0.5, color=JADE)
blink_strip = Blink(strip, speed=0.5, color=AMBER)
colorcycle = ColorCycle(pixels, 0.1, colors=mycolors)
colorcycle_strip = ColorCycle(strip, 0.1, colors=mycolors)
chase = Chase(pixels, speed=0.1, color=WHITE, size=3, spacing=6)
chase_strip = Chase(strip, speed=0.1, color=WHITE, size=1, spacing=1)
comet = Comet(pixels, speed=0.05, color=RED, tail_length=10, bounce=True)
comet_strip = Comet(
strip, speed=0.05, color=RED, tail_length=int(strip_num_of_lights / 4), bounce=True
)
pulse = Pulse(pixels, speed=0.05, color=AMBER, period=2)
pulse_strip = Pulse(strip, speed=0.05, color=BLUE, period=2)
sparkle = Sparkle(pixels, speed=0.05, color=PURPLE)
sparkle_strip = Sparkle(strip, speed=0.05, color=PURPLE)
sparkle_pulse = SparklePulse(pixels, speed=0.05, period=5, color=BLUE)
sparkle_pulse_strip = SparklePulse(strip, speed=0.05, period=5, color=BLUE)
rainbow = Rainbow(pixels, speed=0.05, period=2)
rainbow_strip = Rainbow(strip, speed=0.05, period=2)
rainbow_chase = RainbowChase(pixels, speed=0.01, size=5, spacing=0, step=8)
rainbow_chase_strip = RainbowChase(strip, speed=0.01, size=5, spacing=0, step=8)
animations = AnimationSequence(
blink,
colorcycle,
chase,
comet,
pulse,
sparkle,
sparkle_pulse,
rainbow,
rainbow_chase,
advance_interval=5,
auto_clear=True,
)
animations_strip = AnimationSequence(
blink_strip,
colorcycle_strip,
chase_strip,
comet_strip,
pulse_strip,
sparkle_strip,
sparkle_pulse_strip,
rainbow_strip,
rainbow_chase_strip,
advance_interval=5,
auto_clear=True,
)
while True:
if button.value == False:
print("Button pressed!")
q = random.randint(0,6)
print(q)
if q == 0:
play_sound("untitled.wav", rainbow_strip)
elif q == 1:
play_sound("untitled.wav", chase_strip)
elif q == 2:
play_sound("letscode.wav", sparkle_strip)
elif q == 3:
play_sound("letscode.wav", comet_strip)
elif q == 4:
play_sound("keepatit.wav", pulse_strip)
elif q == 5:
play_sound("keepatit.wav", colorcycle_strip)
elif q == 6:
#for i in range(0,20,1):
# strip.show()
# w = int(random.randint(0,255))
# print(w)
# e = int(random.randint(0,255))
# print(e)
# r = int(random.randint(0,255))
# print(r)
# strip[i] =((w,e,r))
# time.sleep(0.05)
play_sound("untitled.wav", rainbow_chase_strip)
strip.fill(BLACK)
strip.show()
#else:
#strip.fill((0,0,0))
#pixels.fill((0,0,0))
# blink_strip.animate()
# colorcycle.animate()
# colorcycle_strip.animate()
# chase.animate()
# chase_strip.animate()
# comet.animate()
# comet_strip.animate()
# pulse.animate()
# pulse_strip.animate()
# sparkle.animate()
# sparkle_strip.animate()
# sparkle_pulse.animate()
# sparkle_pulse_strip.animate()
# rainbow.animate()
# rainbow_strip.animate()
# rainbow_chase.animate()
# rainbow_chase_strip.animate()
# animations.animate()