BigBear Orbital Shaker#
The BigBear orbital shaker is a plate shaker with a serial (RS-232 / ASCII) interface. A single serial line can drive up to 16 shaker positions – called nests – wired together in a daisy chain, each addressed independently.
Property |
Value |
|---|---|
Communication |
Serial, ASCII line protocol |
Serial settings |
9600 baud, 8 data bits, no parity, 1 stop bit, no handshake |
Line terminator |
carriage return ( |
Speed range |
60–3570 rpm |
Acceleration |
1–10 (device scale) |
Nests per chain |
1–16 |
Warning
This driver has NOT been tested against hardware in PyLabRobot. The protocol, line terminator, and reply formats are reconstructed from the vendor software. If you verify it on a shaker, please open a PR to remove the not-tested warning.
Daisy chaining#
Multiple shaker units share one serial connection: the host talks to the first unit, which is wired to the second, and so on down the chain. Each unit is a nest with a 1-based address.
Every command is addressed with an @<id> prefix, where <id> is the nest number written in hexadecimal – so nest 10 is @A and nest 16 is @10. A command reaches only the nest it names; the others ignore it. This lets one port run up to 16 shakers with independent speed, direction, and start/stop.
At setup() the driver:
sends
Uto put the chain into daisy-chain (addressing) mode,sends
~to ask how many units are present, andchecks that the reported count matches the
num_shakersyou passed.
If the counts disagree (a unit is off, unplugged, or num_shakers is wrong) setup raises a BigBearError. Set num_shakers to the number of physical units on the chain.
Physical setup#
Connect the shaker’s serial port to your computer, typically through a USB-to-serial adapter. Chain any additional units in series and give the whole chain a single port.
Make sure the shaker’s serial parameters match the driver defaults (9600 baud, 8 data bits, no parity, 1 stop bit, no handshake).
Connect#
setup() opens the serial port, enters daisy-chain mode, and verifies the shaker count. It also logs the not-tested warning. Pass num_shakers to match your chain.
from pylabrobot.big_bear import BigBearOrbitalShaker
shaker = BigBearOrbitalShaker(port="/dev/ttyUSB0", num_shakers=1) # replace with your port
await shaker.setup()
Start shaking#
start_shaking() sets the acceleration, speed, and direction for a nest and starts it. Shaking continues until you stop it. device_id selects which nest (default 1).
await shaker.start_shaking(
rpm=750,
acceleration=3,
sequence="CW",
device_id=1,
)
Stop shaking#
Stop a single nest with stop_shaking(), or every nest on the chain with stop_all().
await shaker.stop_shaking(device_id=1)
# or, for the whole chain:
# await shaker.stop_all()
Driving multiple nests#
With a multi-unit chain, address each nest by its device_id. Each runs independently.
# Example for a 3-nest chain (create with num_shakers=3)
# await shaker.start_shaking(rpm=500, device_id=1)
# await shaker.start_shaking(rpm=900, sequence="CCW", device_id=2)
# await shaker.start_shaking(rpm=1200, device_id=3)
Homing#
Home a single nest with find_home(), or every nest with home_all().
await shaker.find_home(device_id=1)
# or, for the whole chain:
# await shaker.home_all()
Device info#
Read a nest’s serial-number fields (Y, X, Z). The reply format is device-defined; the raw fields are returned joined.
print("Serial number:", await shaker.get_serial_number(device_id=1))
Teardown#
stop() stops every nest and closes the serial connection.
await shaker.stop()