Week 3 HW: Lab Automation
from opentrons import types
metadata = { # see https://docs.opentrons.com/v2/tutorial.html#tutorial-metadata ‘author’: ‘Scarlett Kelly’, ‘protocolName’: ‘Art’, ‘description’: ‘Making art with Opentrons’, ‘source’: ‘HTGAA 2026 Opentrons Lab’, ‘apiLevel’: ‘2.20’ }
##############################################################################
Robot deck setup constants - don’t change these
##############################################################################
TIP_RACK_DECK_SLOT = 9 COLORS_DECK_SLOT = 6 AGAR_DECK_SLOT = 5 PIPETTE_STARTING_TIP_WELL = ‘A1’
well_colors = { ‘A1’ : ‘Red’, ‘B1’ : ‘Green’, ‘C1’ : ‘Orange’ }
def run(protocol): ##############################################################################
Load labware, modules and pipettes
##############################################################################
Tips
tips_20ul = protocol.load_labware(‘opentrons_96_tiprack_20ul’, TIP_RACK_DECK_SLOT, ‘Opentrons 20uL Tips’)
Pipettes
pipette_20ul = protocol.load_instrument(“p20_single_gen2”, “right”, [tips_20ul])
Modules
temperature_module = protocol.load_module(’temperature module gen2’, COLORS_DECK_SLOT)
Temperature Module Plate
temperature_plate = temperature_module.load_labware(‘opentrons_96_aluminumblock_generic_pcr_strip_200ul’, ‘Cold Plate’)
Choose where to take the colors from
color_plate = temperature_plate
Agar Plate
agar_plate = protocol.load_labware(‘htgaa_agar_plate’, AGAR_DECK_SLOT, ‘Agar Plate’) ## TA MUST CALIBRATE EACH PLATE!
Get the top-center of the plate, make sure the plate was calibrated before running this
center_location = agar_plate[‘A1’].top()
pipette_20ul.starting_tip = tips_20ul.well(PIPETTE_STARTING_TIP_WELL)
##############################################################################
Patterning
##############################################################################
Helper functions for this lab
pass this e.g. ‘Red’ and get back a Location which can be passed to aspirate()
def location_of_color(color_string): for well,color in well_colors.items(): if color.lower() == color_string.lower(): return color_plate[well] raise ValueError(f"No well found with color {color_string}")
For this lab, instead of calling pipette.dispense(1, loc) use this: dispense_and_detach(pipette, 1, loc)
def dispense_and_detach(pipette, volume, location): """ Move laterally 5mm above the plate (to avoid smearing a drop); then drop down to the plate, dispense, move back up 5mm to detach drop, and stay high to be ready for next lateral move. 5mm because a 4uL drop is 2mm diameter; and a 2deg tilt in the agar pour is >3mm difference across a plate. """ assert(isinstance(volume, (int, float))) above_location = location.move(types.Point(z=location.point.z + 5)) # 5mm above pipette.move_to(above_location) # Go to 5mm above the dispensing location pipette.dispense(volume, location) # Go straight downwards and dispense pipette.move_to(above_location) # Go straight up to detach drop and stay high
YOUR CODE HERE to create your design
Artistic coordinates from opentrons-art go here
coordinates = [
(-19.8, 11),
(-17.6, 8.8),
(-15.4, 6.6),
(1-13.2, 4.4),
(-11, 2.2),
(-11, 0),
(-8.8, -2.2),
(-6.6, -4.4),
(-4.4, -8.8),
(-2.2, -13.2)
]
Loop through design for x, y in coordinates:
Convert GUI coords into the plate’s frame
location = plate['A1'].top().move(
protocol_api.types.Point(x=x, y=y, z=0))
Move and dispense
pipette.move_to(location)
pipette.dispense(10)
Drop tip when done
pipette.drop_tip()
Don’t forget to end with a drop_tip()
Execute Simulation / Visualization – don’t change this code block
protocol = OpentronsMock(well_colors) run(protocol) protocol.visualize()
The art is published at opentrons-art.rcdonovan.com/?id=89w6rb219717q1z The code is generated with the help of GenAI.
Post-Lab Questions:
Article:
Bryant, J. A., Kellinger, M., Longmire, C., Miller, R., & Wright, R. C. (2023). AssemblyTron: flexible automation of DNA assembly with Opentrons OT-2 lab robots. Synthetic Biology (Oxford University Press), 8(1), ysac032. https://doi.org/10.1093/synbio/ysac032
The article presents AssemblyTron, an open-source automation platform that enables flexible and programmable DNA assembly workflows using Opentrons OT-2 liquid-handling robots. The system was developed to overcome common bottlenecks in synthetic biology — especially the manual, repetitive pipetting steps required for assembling DNA constructs.