Adafruit is celebrating Lunar New Year🐍 Wednesday 1/29/2025. In combination with MLKDay, shipping could be delayed. Please allow extra time for your order to ship!
Robot trapeze with CRICKIT @adafruit #adafruit #CRICKIT #robots
This is a robot trapeze with CRICKIT. The accelerometer detects the best time to let the robot go. Learn, code, and video.
Crickit – A Creative Robotics & Interactive Construction Kit. It’s an add-on to our popular Circuit Playground Express that lets you #MakeRobotFriend using CircuitPython, MakeCode, Arduino, etc.. robotics, arts, crafts, audio animatronics, sensors, agriculture/robot farming, physical computing, kinetic sculptures, science experiments, telescope control…
The Crickit is powered by seesaw, an I2C-to-whatever bridge firmware. So you only need to use two data pins to control the huge number of inputs and outputs on the Crickit. All those timers, PWMs, sensors are offloaded to the co-processor.
from digitalio import DigitalInOut, Direction, Pull
import adafruit_lis3dh
from busio import I2C
from adafruit_seesaw.seesawimport Seesaw
from adafruit_seesaw.pwmoutimport PWMOut
from adafruit_motor import servo
import neopixel
import board
importtimeimportgc# create accelerometer
i2c1 = I2C(board.ACCELEROMETER_SCL, board.ACCELEROMETER_SDA)
lis3dh = adafruit_lis3dh.LIS3DH_I2C(i2c1, address=0x19)
lis3dh.range= adafruit_lis3dh.RANGE_8_G# Create seesaw object
i2c = I2C(board.SCL, board.SDA)
seesaw = Seesaw(i2c)# Create servo object
pwm = PWMOut(seesaw,17)# Servo 1 is on s.s. pin 17
pwm.frequency=50# Servos like 50 Hz signals
my_servo = servo.Servo(pwm)# Create my_servo with pwm signal# LED for debugging
led = DigitalInOut(board.D13)
led.direction= Direction.OUTPUT# two buttons!
button_a = DigitalInOut(board.BUTTON_A)
button_a.direction= Direction.INPUT
button_a.pull= Pull.DOWN
button_b = DigitalInOut(board.BUTTON_B)
button_b.direction= Direction.INPUT
button_b.pull= Pull.DOWN# NeoPixels!
pixels = neopixel.NeoPixel(board.NEOPIXEL,10, brightness=1)
pixels.fill((0,0,0))#################### log file for logging mode!
logfile ="/log.csv"# check that we could append if wanted totry:
fp =None
fp =open(logfile,"a")print("File system writable!")except:
print("Not logging, trapeeze mode!")# If we log, have some helper variableslogging=False
logpoints =0
outstr =""# When its time to release the trapeze
release =FalsewhileTrue:
if button_a.value: # A pressedwhile button_a.value: # wait for releasepassif fp: # start or stop logginglogging=notloggingprint("Logging: ",logging)time.sleep(0.25)else:
my_servo.angle=180# openif button_b.value: # B pressedwhile button_b.value: # wait for releasepass
my_servo.angle=0# close
x, y, z = lis3dh.acceleration# To keep from corrupting the filesys, take 25 readings at onceifloggingand fp:
outstr +="%0.2F, %0.2F, %0.2F\n" % (x, y, z)
logpoints +=1if logpoints >25:
led.value=True#print("Writing: "+outstr)
fp.write(outstr+"\n")
fp.flush()
led.value=False
logpoints =0else:
# display some neopixel output!if z >20:
# MAXIMUM EFFORT!
pixels.fill((0,255,0))if release:
my_servo.angle=180elif z <3and y >0: # means at the outer edge
release =True# flash red when we peak
pixels.fill((255,0,0))else:
pixels.fill((0,0,int(abs(z)*2)))
from digitalio import DigitalInOut, Direction, Pull
import adafruit_lis3dh
from busio import I2C
from adafruit_seesaw.seesaw import Seesaw
from adafruit_seesaw.pwmout import PWMOut
from adafruit_motor import servo
import neopixel
import board
import time
import gc
# create accelerometer
i2c1 = I2C(board.ACCELEROMETER_SCL, board.ACCELEROMETER_SDA)
lis3dh = adafruit_lis3dh.LIS3DH_I2C(i2c1, address=0x19)
lis3dh.range = adafruit_lis3dh.RANGE_8_G
# Create seesaw object
i2c = I2C(board.SCL, board.SDA)
seesaw = Seesaw(i2c)
# Create servo object
pwm = PWMOut(seesaw, 17) # Servo 1 is on s.s. pin 17
pwm.frequency = 50 # Servos like 50 Hz signals
my_servo = servo.Servo(pwm) # Create my_servo with pwm signal
# LED for debugging
led = DigitalInOut(board.D13)
led.direction = Direction.OUTPUT
# two buttons!
button_a = DigitalInOut(board.BUTTON_A)
button_a.direction = Direction.INPUT
button_a.pull = Pull.DOWN
button_b = DigitalInOut(board.BUTTON_B)
button_b.direction = Direction.INPUT
button_b.pull = Pull.DOWN
# NeoPixels!
pixels = neopixel.NeoPixel(board.NEOPIXEL, 10, brightness=1)
pixels.fill((0,0,0))
#################### log file for logging mode!
logfile = "/log.csv"
# check that we could append if wanted to
try:
fp = None
fp = open(logfile, "a")
print("File system writable!")
except:
print("Not logging, trapeeze mode!")
# If we log, have some helper variables
logging = False
logpoints = 0
outstr = ""
# When its time to release the trapeze
release = False
while True:
if button_a.value: # A pressed
while button_a.value: # wait for release
pass
if fp: # start or stop logging
logging = not logging
print("Logging: ", logging)
time.sleep(0.25)
else:
my_servo.angle = 180 # open
if button_b.value: # B pressed
while button_b.value: # wait for release
pass
my_servo.angle = 0 # close
x, y, z = lis3dh.acceleration
# To keep from corrupting the filesys, take 25 readings at once
if logging and fp:
outstr += "%0.2F, %0.2F, %0.2F\n" % (x, y, z)
logpoints += 1
if logpoints > 25:
led.value = True
#print("Writing: "+outstr)
fp.write(outstr+"\n")
fp.flush()
led.value = False
logpoints = 0
else:
# display some neopixel output!
if z > 20:
# MAXIMUM EFFORT!
pixels.fill((0, 255, 0))
if release:
my_servo.angle = 180
elif z < 3 and y > 0: # means at the outer edge
release = True
# flash red when we peak
pixels.fill((255, 0, 0))
else:
pixels.fill((0,0,int(abs(z)*2)))
Adafruit publishes a wide range of writing and video content, including interviews and reporting on the maker market and the wider technology world. Our standards page is intended as a guide to best practices that Adafruit uses, as well as an outline of the ethical standards Adafruit aspires to. While Adafruit is not an independent journalistic institution, Adafruit strives to be a fair, informative, and positive voice within the community – check it out here: adafruit.com/editorialstandards
Stop breadboarding and soldering – start making immediately! Adafruit’s Circuit Playground is jam-packed with LEDs, sensors, buttons, alligator clip pads and more. Build projects with Circuit Playground in a few minutes with the drag-and-drop MakeCode programming site, learn computer science using the CS Discoveries class on code.org, jump into CircuitPython to learn Python and hardware together, TinyGO, or even use the Arduino IDE. Circuit Playground Express is the newest and best Circuit Playground board, with support for CircuitPython, MakeCode, and Arduino. It has a powerful processor, 10 NeoPixels, mini speaker, InfraRed receive and transmit, two buttons, a switch, 14 alligator clip pads, and lots of sensors: capacitive touch, IR proximity, temperature, light, motion and sound. A whole wide world of electronics and coding is waiting for you, and it fits in the palm of your hand.
Have an amazing project to share? The Electronics Show and Tell is every Wednesday at 7:30pm ET! To join, head over to YouTube and check out the show’s live chat and our Discord!
Python for Microcontrollers – Adafruit Daily — Python on Microcontrollers Newsletter: CircuitPython 2025 Wraps, Focus on Using Python, Open Source and More! #CircuitPython #Python #micropython @ThePSF @Raspberry_Pi
EYE on NPI – Adafruit Daily — EYE on NPI Maxim’s Himalaya uSLIC Step-Down Power Module #EyeOnNPI @maximintegrated @digikey