Week 3 Homework: Lab Automation

Python Script for Opentrons Artwork

I used the opentrons-art.rcdonovan.com site yo make a shrimp design:

The script made with collab:

from opentrons import types

metadata = { ‘author’: ‘Darabus Maria’, ‘protocolName’: ‘Shrimp’, ‘description’: ‘Shrimp Gel Art’, ‘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'
)

# Pipette
pipette_20ul = protocol.load_instrument(
    "p20_single_gen2",
    "right",
    [tips_20ul]
)

# Temperature module
temperature_module = protocol.load_module(
    'temperature module gen2',
    COLORS_DECK_SLOT
)

# Cold plate
temperature_plate = temperature_module.load_labware(
    'opentrons_96_aluminumblock_generic_pcr_strip_200ul',
    'Cold Plate'
)

color_plate = temperature_plate

# Agar plate
agar_plate = protocol.load_labware(
    'htgaa_agar_plate',
    AGAR_DECK_SLOT,
    'Agar Plate'
)

center_location = agar_plate['A1'].top()

pipette_20ul.starting_tip = tips_20ul.well(PIPETTE_STARTING_TIP_WELL)

##############################################################################
### Helper functions
##############################################################################

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}")

def dispense_and_detach(pipette, volume, location):
    above_location = location.move(types.Point(z=location.point.z + 5))
    pipette.move_to(above_location)
    pipette.dispense(volume, location)
    pipette.move_to(above_location)

##############################################################################
### DESIGN DATA (YOUR COORDINATES)
##############################################################################

design_data = {

    'Red': [

(-9.9, 36.3),(-7.7, 36.3),(-5.5, 36.3),(-3.3, 36.3),(-1.1, 36.3), (-18.7, 34.1),(-16.5, 34.1),(-14.3, 34.1),(-23.1, 31.9),(-20.9, 31.9), (-25.3, 29.7),(-23.1, 29.7),(-5.5, 29.7),(-3.3, 29.7),(-1.1, 29.7), (1.1, 29.7),(3.3, 29.7),(5.5, 29.7),(7.7, 29.7),(-27.5, 27.5),(-25.3, 27.5), (-14.3, 27.5),(-12.1, 27.5),(-9.9, 27.5),(-7.7, 27.5),(-29.7, 25.3), (-20.9, 25.3),(-18.7, 25.3),(-16.5, 25.3),(-27.5, 23.1),(-25.3, 23.1), (-27.5, 20.9),(-9.9, 14.3),(-7.7, 14.3),(-5.5, 14.3),(-3.3, 14.3), (-1.1, 14.3),(1.1, 14.3),(-18.7, 12.1),(-16.5, 12.1),(-14.3, 12.1), (-12.1, 12.1),(-9.9, 12.1),(-7.7, 12.1),(-5.5, 12.1),(-3.3, 12.1), (-1.1, 12.1),(1.1, 12.1),(3.3, 12.1),(5.5, 12.1),(7.7, 12.1),(9.9, 12.1), (12.1, 12.1),(-12.1, 9.9),(7.7, -7.7),(12.1, -9.9),(25.3, -9.9), (12.1, -18.7),(14.3, -18.7), (3.3, 34.1),(7.7, 27.5),(12.1, 25.3),(-31.9, 23.1),(14.3, 23.1), (-31.9, 20.9),(18.7, 20.9),(-31.9, 18.7),(-29.7, 18.7),(20.9, 18.7), (-31.9, 16.5),(-31.9, 14.3),(-29.7, 12.1),(-25.3, 9.9),(-20.9, 9.9), (-18.7, 9.9),(-16.5, 9.9),(-14.3, 9.9),(-7.7, 9.9),(-5.5, 9.9),(-3.3, 9.9), (-1.1, 9.9),(1.1, 9.9),(3.3, 9.9),(5.5, 9.9),(7.7, 9.9),(9.9, 9.9), (12.1, 9.9),(14.3, 9.9),(16.5, 9.9),(-25.3, 7.7),(-18.7, 7.7),(-16.5, 7.7), (-14.3, 7.7),(-12.1, 7.7),(-9.9, 7.7),(-7.7, 7.7),(-5.5, 7.7),(-3.3, 7.7), (-1.1, 7.7),(1.1, 7.7),(3.3, 7.7),(5.5, 7.7),(7.7, 7.7),(12.1, 7.7),(14.3, 7.7), (16.5, 7.7),(18.7, 7.7),(20.9, 7.7),(-16.5, 5.5),(-14.3, 5.5),(-12.1, 5.5), (-9.9, 5.5),(-7.7, 5.5),(-5.5, 5.5),(-3.3, 5.5),(-1.1, 5.5),(1.1, 5.5), (3.3, 5.5),(5.5, 5.5),(7.7, 5.5),(12.1, 5.5),(14.3, 5.5),(16.5, 5.5), (18.7, 5.5),(23.1, 5.5),(-14.3, 3.3),(-12.1, 3.3),(-9.9, 3.3),(-7.7, 3.3), (-5.5, 3.3),(-3.3, 3.3),(-1.1, 3.3),(1.1, 3.3),(3.3, 3.3),(5.5, 3.3), (7.7, 3.3),(12.1, 3.3),(14.3, 3.3),(16.5, 3.3),(18.7, 3.3),(23.1, 3.3), (25.3, 3.3),(-9.9, 1.1),(-7.7, 1.1),(-5.5, 1.1),(-3.3, 1.1),(-1.1, 1.1), (1.1, 1.1),(3.3, 1.1),(5.5, 1.1),(7.7, 1.1),(9.9, 1.1),(12.1, 1.1), (14.3, 1.1),(16.5, 1.1),(18.7, 1.1),(20.9, 1.1),(23.1, 1.1),(25.3, 1.1), (27.5, 1.1),(-5.5, -1.1),(-3.3, -1.1),(-1.1, -1.1),(1.1, -1.1),(3.3, -1.1), (5.5, -1.1),(7.7, -1.1),(9.9, -1.1),(12.1, -1.1),(14.3, -1.1),(16.5, -1.1), (18.7, -1.1),(20.9, -1.1),(23.1, -1.1),(25.3, -1.1),(27.5, -1.1),(-5.5, -3.3), (9.9, -3.3),(12.1, -3.3),(14.3, -3.3),(18.7, -3.3),(20.9, -3.3),(23.1, -3.3), (25.3, -3.3),(27.5, -3.3),(12.1, -5.5),(16.5, -5.5),(18.7, -5.5),(20.9, -5.5), (23.1, -5.5),(25.3, -5.5),(27.5, -5.5),(29.7, -5.5),(14.3, -7.7),(16.5, -7.7), (18.7, -7.7),(20.9, -7.7),(23.1, -7.7),(25.3, -7.7),(27.5, -7.7),(29.7, -7.7), (16.5, -9.9),(18.7, -9.9),(20.9, -9.9),(27.5, -9.9),(29.7, -9.9), (18.7, -12.1),(20.9, -12.1),(23.1, -12.1),(25.3, -12.1),(27.5, -12.1), (29.7, -12.1),(18.7, -14.3),(20.9, -14.3),(23.1, -14.3),(25.3, -14.3), (27.5, -14.3),(29.7, -14.3),(18.7, -16.5),(20.9, -16.5),(23.1, -16.5), (25.3, -16.5),(27.5, -16.5),(29.7, -16.5),(29.7, -18.7),(18.7, -20.9), (20.9, -20.9),(23.1, -20.9),(25.3, -20.9),(27.5, -20.9),(18.7, -23.1), (20.9, -23.1),(23.1, -23.1),(25.3, -23.1),(27.5, -23.1),(18.7, -25.3), (20.9, -25.3),(23.1, -25.3),(25.3, -25.3),(20.9, -27.5),(23.1, -27.5), (-23.1, 9.9),(-23.1, 7.7),(-20.9, 7.7),(9.9, 7.7),(9.9, 5.5),(20.9, 5.5), (9.9, 3.3),(20.9, 3.3),(-9.9, -3.3),(-7.7, -3.3),(1.1, -3.3),(3.3, -3.3), (5.5, -3.3),(7.7, -3.3),(16.5, -3.3),(-12.1, -5.5),(-3.3, -5.5),(5.5, -5.5), (14.3, -5.5),(-5.5, -7.7),(9.9, -7.7),(12.1, -7.7),(14.3, -9.9),(23.1, -9.9), (12.1, -12.1),(14.3, -12.1),(16.5, -12.1),(14.3, -14.3),(16.5, -14.3), (12.1, -16.5),(16.5, -18.7),(18.7, -18.7),(20.9, -18.7),(23.1, -18.7), (25.3, -18.7),(27.5, -18.7),(16.5, -27.5),(18.7, -27.5),(9.9, -29.7), (12.1, -29.7),(14.3, -29.7),(16.5, -29.7),(18.7, -29.7),(20.9, -29.7), (5.5, -31.9),(7.7, -31.9),(9.9, -31.9),(12.1, -31.9),(14.3, -31.9),(16.5, -31.9), (18.7, -31.9),(9.9, -34.1),(12.1, -34.1),(14.3, -34.1),(9.9, -36.3)

    ],

    'Green': [

(-9.9, 9.9) ] }

##############################################################################
### PATTERNING
##############################################################################

drop_volume = 4

for color, coordinates in design_data.items():

    # Pick up a new tip for each color
    pipette_20ul.pick_up_tip()

    source_well = location_of_color(color)

    for (x, y) in coordinates:

        pipette_20ul.aspirate(drop_volume, source_well)

        dispense_location = center_location.move(
            types.Point(x=x, y=y, z=0)
        )

        dispense_and_detach(
            pipette_20ul,
            drop_volume,
            dispense_location
        )

    # Drop tip before switching colors
    pipette_20ul.drop_tip()

Post-Lab Questions

1.Find and describe a published paper that utilizes the Opentrons or an automation tool to achieve novel biological applications.

For this part I chose the paper: Shotgun Proteomics Sample Processing Automated by an Open‑Source Lab Robot, Han et al., Journal of Visualized Experiments, 2021. The study focuses on automating shotgun proteomics workflows using the open-source Opentrons OT‑2 liquid handling robot. Shotgun proteomics is a widely used technique for identifying and quantifying large numbers of proteins in complex samples such as tissues or cell lysates. Traditional workflows are labor-intensive, including protein extraction, concentration measurement, chemical reduction and alkylation, enzymatic digestion, and peptide clean-up. Manual handling introduces variability and errors, which can affect reproducibility and data quality. Han et al. addressed these issues by developing a semi-automated workflow on the OT‑2, reducing manual labor, improving consistency, and making proteomics automation more accessible for academic labs. The OT‑2 robot provides a platform for automated liquid handling. Han et al. configured the OT‑2 with single-channel electronic pipettes, a magnetic module, a temperature module, and specialized tube racks and deep-well plates. Their automated workflow included three main steps: Protein reduction, alkylation, and digestion: proteins were prepared for enzymatic cleavage into peptides. Peptide clean-up using SP3 paramagnetic beads: proteins in common detergents can interfere with downstream analysis. LC-MS/MS analysis: After automation, peptides were dried, reconstituted, and analyzed by LC-MS/MS Three Python scripts supported the automation: NoSP3_digestion.py, SP3_peptide_cleanup.py, SP3_digestion.py . Han et al., 2021, demonstrate that low-cost open-source robots like the OT‑2 can automate complex proteomics workflows effectively. Their study highlights the benefits of automation: consistent sample preparation, reduced manual labor, flexibility for different sample types, and affordable access for academic or resource-limited laboratories.

2.Write a description about what you intend to do with automation tools for your final project. You may include example pseudocode, Python scripts, 3D printed holders, a plan for how to use Ginkgo Nebula, and more. You may reference this week’s recitation slide deck for lab automation details.

Final Project Ideas

Idea I: A Programmable Probiotic Platform for Microbiome-Modulated Skincare

My first idea is a project that explores how engineered living systems can be used to modulate the skin microbiome. Instead of relying on chemical antimicrobials, this project proposes a programmable probiotic designed to selectively respond to acne-associated microenvironments. Acne is often linked to dysbiosis and inflammatory strains of Cutibacterium acnes, rather than the mere presence of bacteria. The system uses a skin-safe bacterial chassis engineered with a pH-sensitive genetic circuit. When exposed to the slightly acidic conditions characteristic of inflamed acne lesions, the circuit activates expression of a targeted antimicrobial peptide.

Documentation: https://pages.htgaa.org/2026a/maria-darabus/homework/week-01-hw-principles-and-practices/index.html

Idea II: Living flowers that glow in response

to environmental triggers

My second idea is a synthetic biology project that creates living flowers that glow in response to environmental triggers, such as allergens, pollutants, or changes in pH. Instead of passive decoration, these flowers act as living biosensors, showing you what’s happening around them. The flower’s cells are engineered with a genetic circuit that detects a specific trigger, like pollen proteins or chemical pollutants. When the trigger is present, the circuit switches on and activates bioluminescent genes, making the flower glow. The glow stops when the trigger is gone.

Documentation: https://news.harvard.edu/gazette/story/2016/02/plants-with-biosensors-may-light-the-way/?utm_source=chatgpt.com https://www.sciencedirect.com/science/article/pii/S2693125724000621?utm_source=chatgpt.com

Idea III: Edible Living Vitamin Patch

My third idea is a living, edible fungal patch designed to produce essential vitamins such as B12, B9 and K2. Fungi are grown in small hydrogel scaffolds containing optimized nutrients, which support both growth and vitamin synthesis. As the patch develops over several days,it can be observed the living system in action, with growth and optional color indicators reflecting vitamin production.

Documentation: https://www.sciencedirect.com/science/article/pii/S2212429225010260?utm_source=chatgpt.com https://pubmed.ncbi.nlm.nih.gov/3290883/