Syringe Control¶
Overview¶
The SyringeController
class provides complete automation of syringe pumps for precise fluid handling in SI systems. It supports Cavro XCalibur series.
Quick Start¶
from SI_API.devices import SyringeController
# Initialize syringe pump
syringe = SyringeController(
port="COM3", # Serial port
syringe_size=1000, # 1000 µL syringe
microstep_mode=False # Standard resolution
)
# Basic operations
syringe.initialize() # Home to zero position
syringe.set_speed_uL_min(1500) # Set flow rate
syringe.aspirate(500) # Draw 500 µL
syringe.dispense(250) # Dispense 250 µL
Supported Syringe Sizes¶
The controller supports standard syringe volumes:
- 50, 100, 250, 500, 1000, 2500, 5000 µL
Each size has optimized parameters for:
- Resolution: Volume per increment (0.02-1.67 µL depending on size)
- Speed limits: Minimum and maximum flow rates
Basic Operations¶
Initialization¶
Always start with syringe initialization:
# Initialize to home position (volume = 0)
syringe.initialize()
print(f"Syringe ready: {syringe.volume_counter} µL")
Volume Control¶
# Aspirate specific volume
syringe.aspirate(300) # Draw 300 µL
print(f"Current volume: {syringe.volume_counter} µL") # Shows 300
# Aspirate to full capacity
syringe.aspirate() # Fill completely (700 µL remaining)
# Dispense specific volume
syringe.dispense(200) # Dispense 200 µL
# Dispense all contents
syringe.dispense() # Empty completely
Flow Rate Control¶
# Set different speeds for different operations
syringe.set_speed_uL_min(3000) # Fast transfer
syringe.set_speed_uL_min(1000) # Precise dispensing
syringe.set_speed_uL_min(500) # Gentle mixing
# Speed limits depend on syringe size:
# Minimum: 0.05 × syringe_size µL/min
# Maximum: 60 × syringe_size µL/min
Emergency Operations¶
Emergency Stop¶
Volume Tracking¶
The controller automatically tracks syringe contents:
# Check current volume
syringe.print_volume_in_syringe()
# Output: "The current volume in the syringe is: 250.0 µl"
# Volume validation prevents errors
try:
syringe.aspirate(2000) # Exceeds 1000 µL capacity
except ValueError as e:
print(f"Error: {e}")
Valve Control¶
For syringes with attached valves:
# Configure valve type first
syringe.configuration_valve_type('3-Port')
# Control valve positions
syringe.valve_in() # Input position (aspiration)
syringe.valve_out() # Output position (dispensing)
syringe.valve_up() # Bypass/waste position
Supported Valve Types¶
- 'No' - No valve attached
- '3-Port' - Standard 3-way valve
- '4-Port' - 4-way selection valve
- '6-Port distribution' - 6-port selection
- '12-Port distribution' - 12-port selection
- And more (see documentation)
Advanced Features¶
Progress Monitoring¶
# Show progress bar during long operations
syringe.aspirate(1000, show_progress=True)
# Output: Processing: 67%|████████ | 4.2s/6.3s [00:04<00:02]
High-Resolution Mode¶
# Enable microstep mode for higher precision
syringe.set_microstep_mode(True)
print(f"Resolution: {syringe.resolution:.3f} µL/step")
# Standard: ~0.33 µL/step → Microstep: ~0.04 µL/step
Documentation References¶
For detailed hardware information, command specifications, and troubleshooting:
- Cavro XCalibur Operating Manual - Comprehensive pump specifications and setup