Text Editor
Adafruit recommends using the Mu editor for editing your CircuitPython code. You can get more info in this guide.
Alternatively, you can use any text editor that saves simple text files.
Download the Project Bundle
Your project will use a specific set of CircuitPython libraries and the code.py file, along with a folder full of key configuration files. To get everything you need, click on the Download Project Bundle link below, and uncompress the .zip file.
Drag the contents of the uncompressed bundle directory onto your Feather board's CIRCUITPY drive, replacing any existing files or directories with the same names, and adding any new ones that are necessary.
# SPDX-FileCopyrightText: 2021 John Park for Adafruit Industries # SPDX-License-Identifier: MIT import time import random import board import audiomp3 import audiopwmio from adafruit_crickit import crickit ss = crickit.seesaw # Crickit seesaw setup button = crickit.SIGNAL1 # momentary switch to trigger animation ss.pin_mode(button, ss.INPUT_PULLUP) LED = crickit.SIGNAL4 # standard LED for eyeball lighting ss.pin_mode(LED, ss.OUTPUT) attract_switch = crickit.SIGNAL8 # attract mode switch or jumper ss.pin_mode(attract_switch, ss.INPUT_PULLUP) audio = audiopwmio.PWMAudioOut(board.A0) # Feather outputs this pin to Crickit amplifier audio_files = [ # use your own mono .mp3 files "phrase_01.mp3", "phrase_02.mp3", "phrase_03.mp3" ] current_audio_file = 0 # two motors motor_eye = crickit.dc_motor_1 motor_lid = crickit.dc_motor_2 def open_lid(): motor_lid.throttle = 1 # full speed open time.sleep(0.25) motor_lid.throttle = 0 # hold def close_lid(): motor_lid.throttle = -1 # full speed closed time.sleep(0.25) motor_lid.throttle = 0 def blink(times): for _ in range(times): ss.digital_write(LED, True) time.sleep(0.1) ss.digital_write(LED, False) time.sleep(0.1) def eye_look(): motor_eye.throttle = random.uniform(0.6, 1.0) time.sleep(random.random()) # 0 to 1.0 seconds motor_eye.throttle = 0 time.sleep(random.random()) motor_eye.throttle = random.uniform(-1.0, -0.6) time.sleep(random.random()) motor_eye.throttle = 0 time.sleep(random.random()) while True: if ss.digital_read(attract_switch): # regular mode, attrack switch not closed/shorted if not ss.digital_read(button): # button has been pressed decoder = audiomp3.MP3Decoder(open("ring.mp3", "rb")) audio.play(decoder) while audio.playing: pass open_lid() blink(3) ss.digital_write(LED, True) # light the eye decoder = audiomp3.MP3Decoder(open(audio_files[current_audio_file], "rb")) audio.play(decoder) while audio.playing: eye_look() motor_eye.throttle = 0 # audio is finished, pause the eye blink(5) close_lid() current_audio_file = ((current_audio_file + 1) % (len(audio_files))) # go to next file else: # attract mode open_lid() blink(3) ss.digital_write(LED, True) for _ in range(4): eye_look() time.sleep(1) blink(5) close_lid() time.sleep(random.randint(2, 8))
Use The Hacked Animatronic
You can now run your customized animatronic using the Crickit board! Press the original pushbutton to get it started. It will then play the ring.mp3 audio file, open the eyelid, blink the LED, and start playing the first phrase file.
While the audio file plays, it'll run the eyeball motor back and forth, with some randomized speeds and timing. When the audio file is finished playing, the current loop of eye animation will complete and then the LED will turn off and the lid will close, ready for the next press of the button.
The next time the button is pressed the next audio file in the list will play, and so on until it loops back around to the first one.
Create Your Own Audio Files
You can make and load any .mp3 file you like onto your Feather RP2040's CIRCUITPY drive. Here's a guide on how to create them.
Make Your Own
To make your own .mp3, use audio software such as Audacity to save them with these settings:
- bit rate: anywhere from 16 to 320 kb/s (lower will be smaller, higher is better quality)
- sample rate: 22050Hz or 44100Hz are recommended, although 16kHz, 24kHz, and 48kHz should also work
- channels: mono or stereo
- must be DRM free
Then, simply change the name in the audio file list in code and you can enjoy your own spooky/funny/weird/sassy/you-name-it phrases being uttered by a disembodied eyeball doorbell!
Text editor powered by tinymce.