Temperature Controllers#
Temperature controllers are defined as machines with one or both of these features:
heating
actively cooling
a material or enclosed volume from a room-temperature baseline (≈20-25°C).
Based on this definition machines that include temperature control, but are not primarily temperature controllers, should build on top of the TemperatureController
definition.
These multi-functional machines can be described as “composite machines”. Examples of such machines include:
Heater shakers:
shake
+heat
(e.g. Inheco Thermoshake)qPCR machines:
measure fluorescence
+heat
+cool
(e.g. Thermo Fisher Scientific QuantStudio 5)Smart storage machines:
store
+heat
+ (cool
) (e.g. Thermo Fisher Scientific Cytomats)
Temperature Controller machines can be implemented with a variety of heating/cooling technologies suited to different workflows.
Actuation technologies#
Multiple technologies can be used to implement temperature control, each with its own advantages and limitations. The two most common types are:
Thermoelectric (Peltier) modules are solid-state devices that pump heat via the Peltier effect, enabling both heating and cooling by reversing current flow. Compact and modular, they mount directly on robotic decks.
Examples:
Inheco Cold Plate Air Cooled (CPAC) Heater/Cooler (not yet supported in PLR)
Hamilton Heater Cooler (HHC)
Opentrons Temperature Module GEN2
Pros: Bidirectional control; fast response; minimal footprint
Cons: Limited ΔT from ambient (±65°C max); efficiency drops near extremes; requires heatsinking/ventilation
Liquid-circulation systems use external chillers or heaters to pump fluid (water or glycol) through channels around a sample block, delivering uniform, stable temperatures well below and above ambient.
Examples:
Inheco Cold Plate Liquid Cooled (CPLC) Heater/Cooler (not yet supported in PLR)
Pros: Broad temperature range; excellent uniformity; precise PID control
Cons: Bulky; requires plumbing and space; higher cost
Implementation#
Backend#
PyLabRobot programmatically defines Temperature Controller machines based on the TemperatureController
base class.
e.g.:
from pylabrobot.temperature_controlling.temperature_controller import (
TemperatureControllerBackend
)
hhc_backend = HamiltonHeaterCoolerBackend(device_address="/dev/ttyUSB0")
Resource Model#
Physically speaking, PLR models most standalone temperature controllers as either ResourceHolder
or PlateHolder
objects.
I.e. these machines have physical dimensions and can hold plates or other resources in a specified child_location
.
e.g.:
def Hamilton_heater_cooler_resource(name: str) -> PlateHolder:
"""
Hamilton cat. no.: 6601900-01
"""
return PlateHolder(
name=name,
size_x=145.5,
size_y=104.0,
size_z=67.8,
child_location=Coordinate(11.5, 8.0, 67.8),
model="hamilton_heater_cooler",
pedestal_size_z=0,
)
hhc_resource_model = Hamilton_heater_cooler_resource(
name="Hamilton Heater Cooler no1"
)
Frontend#
The frontend then enables fast and user-friendly access to the temperature controller’s functionality and storing of complete machine interfaces using familiar names.
e.g.:
Hamilton_heater_cooler = TemperatureController(
backend=hhc_backend,
resource_model=hhc_resource_model
)
# Action command:
Hamilton_heater_cooler.set_temperature(37)
# Read command:
current = Hamilton_heater_cooler.get_temperature()