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.