
Sometimes we wonder if robotics engineers ever watch movies. If they did, they'd know that making robots into servants always ends up in a robot rebellion. Why even go down that...
guides with product
$29.95
In Stock

Circuit Playground Express is the next step towards a perfect introduction to electronics and programming. We've taken the original Circuit Playground Classic and...
guides with product
Out of Stock

This Panel Mount Right Angle 10K Linear Potentiometer w/ On-Off Switch is a two-in-one, with both a breadboard-friendly potentiometer and a switch. For the...
$1.50
In Stock

This is really the fanciest, best-feeling knob we've ever seen. Using this knob sort of reminded us of driving along the Amalfi coast in a perfectly restored '65 Porsche...
$3.95
In Stock

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...
$3.95
In Stock

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!...
guides with product
$27.50
In Stock
1 x
Fog Machine with Remote
https://www.amazon.com/Virhuck-400-Watt-Portable-Halloween-Christmas/dp/B074WMWWS5
1 x
Cow Bell
Craft store cowbell
For the remote, we soldered four wires
- Black ground wire to the battery spring (negative) terminal
- Red +5V wire to the battery flat (positive) terminal
- White and Purple go to the 'switched' part of each switch, which, when connected to 5V activates that switch
# SPDX-FileCopyrightText: 2018 Limor Fried for Adafruit Industries # # SPDX-License-Identifier: MIT import time import audioio import audiocore from digitalio import DigitalInOut, Pull, Direction from adafruit_seesaw.seesaw import Seesaw from adafruit_seesaw.pwmout import PWMOut from adafruit_motor import servo from busio import I2C import neopixel import board # Create seesaw object i2c = I2C(board.SCL, board.SDA) seesaw = Seesaw(i2c) led = DigitalInOut(board.D13) led.direction = Direction.OUTPUT # Two onboard CPX buttons for FOG buttona = DigitalInOut(board.BUTTON_A) buttona.direction = Direction.INPUT buttona.pull = Pull.DOWN buttonb = DigitalInOut(board.BUTTON_B) buttonb.direction = Direction.INPUT buttonb.pull = Pull.DOWN # Use the signal port for potentiometer w/switch MORECOW = 2 # A switch on Signal #1 SWITCH = 3 # A potentiometer on Signal #2 # Add a pullup on the switch seesaw.pin_mode(SWITCH, seesaw.INPUT_PULLUP) # Servo angles BELL_START = 60 BELL_END = 75 MOUTH_START = 95 MOUTH_END = 105 # Create servos list servos = [] for ss_pin in (17, 16): #17 is labeled 1 on CRICKIT, 16 is labeled 2 pwm = PWMOut(seesaw, ss_pin) pwm.frequency = 50 #must be 50 cannot change _servo = servo.Servo(pwm, min_pulse=400, max_pulse=2500) servos.append(_servo) # Starting servo locations servos[0].angle = BELL_START servos[1].angle = MOUTH_START # For the fog machine we actually use the PWM on the motor port cause it really needs 5V! fog_off = PWMOut(seesaw, 22) fog_off.duty_cycle = 0 fog_on = PWMOut(seesaw, 23) fog_on.duty_cycle = 0 # Audio playback object and helper to play a full file a = audioio.AudioOut(board.A0) def play_file(wavfile): with open(wavfile, "rb") as file: wavf = audiocore.WaveFile(file) a.play(wavf) while a.playing: servos[1].angle = MOUTH_START time.sleep(.2) servos[1].angle = MOUTH_END time.sleep(.2) # NeoPixels for EYES pixels = neopixel.NeoPixel(board.A1, 9, brightness=0.5) pixels[8] = (255, 255, 0) pixels[7] = (255, 255, 0) # Maps a number from one range to another. def map_range(x, in_min, in_max, out_min, out_max): 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) # Wait before starting up time.sleep(3) play_file("i-gotta-have-more-cowbell.wav") # a pause between audio clips time.sleep(1) play_file("only-prescription-more-cowbell.wav") while seesaw.digital_read(SWITCH): pass print("Ready for playing audio") time.sleep(1) f = open("fear11.wav", "rb") wav = audiocore.WaveFile(f) a.play(wav) while True: if seesaw.digital_read(SWITCH): break # time to bail! pot = seesaw.analog_read(MORECOW) print(pot) eyecolor = (int(map_range(pot, 0, 1023, 255, 0)), int(map_range(pot, 0, 1023, 0, 255)), 0) pixels[8] = eyecolor pixels[7] = eyecolor if buttonb.value: fog_on.duty_cycle = 65535 else: fog_on.duty_cycle = 0 if buttona.value: fog_off.duty_cycle = 65535 else: fog_off.duty_cycle = 0 if pot < 200: # wait for a bit before we start continue delay = map_range(pot, 200, 1023, 1.0, 0.1) servos[0].angle = BELL_END time.sleep(0.1) servos[0].angle = BELL_START time.sleep(delay) a.stop() f.close() # Fog machine test fog_off.duty_cycle = 65535 fog_on.duty_cycle = 0 time.sleep(0.1) fog_off.duty_cycle = 0 pixels[8] = (255, 255, 0) pixels[7] = (255, 255, 0) time.sleep(1.5) play_file("i-coulda-used-more-cow-bell.wav")
Page last edited January 22, 2025
Text editor powered by tinymce.