If you are a fan of physics wunderkind Richard Feynman and you like bongo drums, this Feynman simulator will satisfy your every desire. Between wise quips, this Feyn-bot will dazzle you with its drumming expertise.
Wiring Diagram
Solenoids don't have 'direction' - any current will make them push. So even though we wired the black wire to 5V and the red wires to the #1 and #2 drive ports, they'll work just fine.
The microservo is taped to a wooden stick that moves the paper cut-out mouth up and down, for a Monty-Python-style puppet.
Our code plays through a few wave file quips and quotes we found online, with some interstitial bongo drumming. Once all the audio has been played, it bongos for a long time, then repeats!
# SPDX-FileCopyrightText: 2018 Limor Fried for Adafruit Industries # # SPDX-License-Identifier: MIT # CircuitPython 3.0 CRICKIT demo import gc import time import audioio import audiocore import board from adafruit_motor import servo from adafruit_seesaw.pwmout import PWMOut from adafruit_seesaw.seesaw import Seesaw from busio import I2C i2c = I2C(board.SCL, board.SDA) ss = Seesaw(i2c) print("Feynbot demo!") # 1 Servo pwm = PWMOut(ss, 17) pwm.frequency = 50 myservo = servo.Servo(pwm) myservo.angle = 180 # starting angle, highest # 2 Drivers drives = [] for ss_pin in (13, 12): _pwm = PWMOut(ss, ss_pin) _pwm.frequency = 1000 drives.append(_pwm) # Audio files wavfiles = ["01.wav", "02.wav", "03.wav", "04.wav", "05.wav"] a = audioio.AudioOut(board.A0) # Start playing the file (in the background) def play_file(wavfile): f = open(wavfile, "rb") wav = audiocore.WaveFile(f) a.play(wav) # Tap the solenoids back and forth def bongo(t): for _ in range(t): drives[0].duty_cycle = 0xFFFF time.sleep(0.1) drives[0].duty_cycle = 0 time.sleep(0.1) drives[1].duty_cycle = 0xFFFF time.sleep(0.1) drives[1].duty_cycle = 0 time.sleep(0.1) # Move mouth back and forth def talk(t): for _ in range(t): myservo.angle = 150 time.sleep(0.1) myservo.angle = 180 time.sleep(0.1) filenum = 0 # counter to play all files while True: gc.collect() print(gc.mem_free()) # time to play the bongos! bongo(5) time.sleep(1) # OK say something insightful play_file(wavfiles[filenum]) # and move the mouth while it does while a.playing: talk(1) # Done being insightful, take a break time.sleep(1) # If we went thru all the files, JAM OUT! filenum += 1 if filenum >= len(wavfiles): bongo(20) filenum = 0
Text editor powered by tinymce.