Homework

Weekly homework submissions:

  • Week 1 HW: Principles and Practices

    Synthetic Bioogy in Regenerative Medicine: Drug Delivery The convergence of biology and engineering offers innovative potential to address complex healthcare challenges. More specifically, regenerative medicine has advanced enormously through inspiration from nature. Nowadays, bioengineered materials can be adapted to mimic and integrate natural designs with intricate mechanisms found in living organisms, ecosystems, and evolutionary processes. The main goal is to develop new materials, devices, and systems that can restore and enhance tissue performance and function, leading to new therapeutic approaches. Several essential synthetic biology techniques are used toward this aim, such as genetic engineering, cellular reprogramming, cellular pathway engineering, CRISPR-Cas9, delivery systems, artificial cells and organs, stem cell engineering, biomechanics, and bioinformatics.

  • week-03-hw-lab-automation

    πŸ€– Opentrons Liquid-Handling Artwork 🧠 Project Overview This project transforms the Opentrons OT-2 liquid handling robot into a biological plotter. Using coordinate-based programming, the robot deposits fluorescent bacterial droplets onto an agar plate to form a structured artistic pattern.

Subsections of Homework

Week 1 HW: Principles and Practices

Synthetic Bioogy in Regenerative Medicine: Drug Delivery

cover image cover image

The convergence of biology and engineering offers innovative potential to address complex healthcare challenges. More specifically, regenerative medicine has advanced enormously through inspiration from nature. Nowadays, bioengineered materials can be adapted to mimic and integrate natural designs with intricate mechanisms found in living organisms, ecosystems, and evolutionary processes. The main goal is to develop new materials, devices, and systems that can restore and enhance tissue performance and function, leading to new therapeutic approaches. Several essential synthetic biology techniques are used toward this aim, such as genetic engineering, cellular reprogramming, cellular pathway engineering, CRISPR-Cas9, delivery systems, artificial cells and organs, stem cell engineering, biomechanics, and bioinformatics.

One particularly important tool is delivery systems. A common strategy to target specific locations is the use of nanoparticles (NPs). Due to their size and biocompatibility, NPs can breach biological barriers, penetrate deep tissues, and release therapeutic agents in a precisely controlled manner. Moreover, delivery system carriers can be tailored to respond to different conditions such as pH and temperature, enhancing treatment effectiveness while reducing unintended side effects.

Numerous studies have implemented this technique to deliver viral vectors for gene therapies in diseases such as hemophilia A and glioblastoma, as well as non-viral vectors, including proteins such as vascular endothelial growth factor. One particularly interesting protein that could be carried using NPs is the damage suppressor protein (Dsup), a nucleosome-binding protein found in the tardigrade Ramazzottius varieornatus (a resilient invertebrate commonly known as a water bear). This protein has been shown to significantly improve cell survival and growth by protecting against extreme stress conditions, specifically oxidative stress (hydrogen peroxide, Hβ‚‚Oβ‚‚) and UV-C irradiation in HEK293 human cells (human embryonic kidney cells).

Given the possibility of tailoring release conditions in nanoparticle-based delivery systems and the potential of Dsup to prevent DNA damage, I propose to study the delivery of Dsup using different types of nanoparticles into fibroblasts, the main cells found in skin. The skin is the largest organ of the human body and performs multiple functions, including homeostatic regulation; prevention of percutaneous loss of fluid, electrolytes, and proteins; temperature maintenance; sensory perception; and immune surveillance. This approach could help prevent cellular damage in degenerative phenomenon such as skin aging, which do affect every single person worldwide.

Governance and Policiy Goals for Ethical Future

  1. Minimize Biological and Long-Term Risks

    • Ensure that nanoparticle carriers and delivered proteins do not induce genotoxicity, immune dysregulation, or unintended cellular adaptations.

    • Prevent long-term accumulation or persistence of nanoparticles in tissues.

  2. Prevent Misuse or Dual-Use Risks

    • Avoid applications that could enable enhancement beyond therapeutic intent (e.g., extreme stress resistance for non-medical or military use).

    • Ensure that the technology is not repurposed for harmful or coercive applications.

  3. Promote Responsible and Equitable Access

    • Ensure that benefits are not restricted to cosmetic or luxury applications while excluding broader public health needs.

    • Encourage transparency and public engagement regarding intended uses.

Governence Actions

  1. Mandatory Preclinical Risk Assessment Framework

    • Actors: Academic researchers, funding agencies, Institutional Review Boards (IRBs)

    • Purpose: Current research on nanoparticle-based protein delivery systems often prioritizes short-term efficacy and cytotoxicity. This action proposes expanding existing requirements to include standardized assessments of long-term genomic stability, epigenetic alterations, immune responses, and nanoparticle persistence prior to clinical translation.

    • Design:

      • Funding agencies require comprehensive long-term safety evaluations as a condition for grant approval.

      • Scientific journals mandate extended safety datasets for publication.

      • IRBs implement nanoparticle-specific risk assessment protocols during project approval.

    • Assumptions:

      • Long-term biological effects can be reasonably predicted using advanced in vitro and animal models.

      • Research institutions possess or can access the infrastructure needed for extended safety testing.

    • Risks of Failure & β€œSuccess”:

      • Failure: Increased regulatory requirements may slow innovation or disproportionately impact under-resourced laboratories.

      • Success Risk: Excessive standardization could discourage exploratory research or unconventional delivery strategies.

  2. Use-Based Regulatory Classification of Nanoparticle Applications

    • Actors: Federal regulators, public health authorities, regulatory agencies

    • Purpose: Instead of regulating nanoparticle delivery systems solely based on their material composition, this action proposes classifying them according to intended use (therapeutic, preventive, cosmetic, or enhancement-related), allowing for proportional oversight.

    • Design:

      • Regulatory agencies establish distinct approval pathways based on application category.

      • Therapeutic and disease-prevention uses receive prioritized evaluation.

      • Enhancement-oriented or cosmetic applications are subject to stricter scrutiny or limitations.

    • Assumptions:

      • Clear and enforceable distinctions between therapeutic and enhancement uses can be maintained.

      • Developers will accurately disclose the intended use of their products.

    • Risks of Failure & β€œSuccess”:

      • Failure: Ambiguous classifications could create regulatory loopholes.

      • Success Risk: Over-restriction may incentivize unregulated or informal markets for enhancement applications.

  3. Technical Safeguards Embedded in Delivery System Design

    • Actors: Bioengineers, biotechnology companies, translational researchers

    • Purpose: This action promotes the integration of safety and misuse-prevention mechanisms directly into nanoparticle delivery systems to reduce the risk of unintended or unethical applications.

    • Design:

      • Nanoparticles engineered to degrade rapidly outside specific tissue microenvironments.

      • Activation of therapeutic cargo dependent on cell-type-specific enzymes or physiological conditions.

      • Regulatory agencies offer expedited review pathways for designs incorporating built-in safeguards.

    • Assumptions:

      • High levels of biological specificity can be reliably engineered into delivery systems.

      • Added design complexity does not compromise therapeutic performance.

    • Risks of Failure & β€œSuccess”:

      • Failure: Biological variability may limit the effectiveness of technical safeguards.

      • Success Risk: Increased development costs could reduce accessibility, particularly in low-resource settings.

Does the option:Option 1Option 2Option 3
Enhance Biosecurity
β€’ By preventing incidents121
β€’ By helping respond213
Foster Lab Safety
β€’ By preventing incidents122
β€’ By helping respond123
Protect the environment
β€’ By preventing incidents221
β€’ By helping respond232
Other considerations
β€’ Minimizing costs and burdens to stakeholders312
β€’ Feasibility212
β€’ Not impede research312
β€’ Promote constructive applications111

Governance Prioritization and Recommendation

Based on the scoring, I recommend prioritizing Option 1 (Mandatory Preclinical Risk Assessment) and Option 2 (Use-Based Regulatory Classification), with selective use of Option 3 (Embedded Technical Safeguards) in later-stage applications.

Option 1 provides the strongest protection against biological and laboratory risks, which is essential given uncertainties around the long-term effects of nanoparticle-mediated protein delivery. Although it increases research burden, this trade-off is justified at early stages where prevention is most effective.

Option 2 adds proportional, use-based oversight that is highly feasible and minimizes unnecessary constraints on innovation, particularly during translation and commercialization.

Option 3 should be incentivized rather than required, as embedded safeguards reduce misuse risks but may increase complexity and costs. Together, this layered approach balances safety, feasibility, and responsible innovation.

References

  1. Springer Reference. (2016). Nanoparticles in drug delivery. In Encyclopedia of Nanotechnology. Springer.
    https://doi.org/10.1007/978-3-662-47398-6_4

  2. Springer. (2024). Advances in regenerative medicine and tissue engineering. In Handbook of Regenerative Medicine (pp. 521–525). Springer.
    https://doi.org/10.1007/978-3-031-87744-5

  3. Madkour, L. H., et al. (2021). Nanoparticles and their biomedical applications. Biology, 10(10), 970.
    https://doi.org/10.3390/biology10100970

  4. World Health Organization. (2022). Global guidance framework for the responsible use of the life sciences: Mitigating biorisks and governing dual-use research. WHO.
    https://iris.who.int/handle/10665/362313

  5. Church, G. M., & Baker, D. (2024). Protein design meets biosecurity. Science, 383(6679), eado1671.
    https://doi.org/10.1126/science.ado1671

week-03-hw-lab-automation

πŸ€– Opentrons Liquid-Handling Artwork

cover image cover image

🧠 Project Overview

This project transforms the Opentrons OT-2 liquid handling robot into a biological plotter.
Using coordinate-based programming, the robot deposits fluorescent bacterial droplets onto an agar plate to form a structured artistic pattern.

The objective was to:

  • Convert digital coordinates into physical bacterial deposition
  • Control droplet detachment to avoid agar smearing
  • Implement automated refill logic
  • Validate the protocol using simulation before execution

🎨 Artistic Concept – Yin Yang Design

The selected design is inspired by the Yin-Yang symbol, representing:

  • Balance between automation and biology
  • Precision vs. organic growth
  • Engineering control vs. living systems

Final Design

Ying Yang Design Ying Yang Design

πŸ§ͺ Experimental Configuration

Robot: Opentrons OT-2
Pipette: P20 Single Channel Gen2
Agar Plate: Custom HTGAA agar plate
Fluorescent Strains:

ColorFluorescent Marker
GreenmClover3
OrangeAzurite

Each coordinate corresponds to a 1.5 Β΅L droplet deposited at a specific XY location relative to the plate center.


🧾 Full Simulation Python Script

Below is the complete script used for the Opentrons simulation and execution.

from opentrons import types

import string

metadata = {
    'protocolName': 'Juan Francisco Larrea - Opentrons Art - HTGAA',
    'author': 'HTGAA',
    'source': 'HTGAA 2026',
    'apiLevel': '2.20'
}

Z_VALUE_AGAR = 2.0
POINT_SIZE = 1.5

mclover3_points = [(-11.25,31.25), (-8.75,31.25), (-6.25,31.25), (-3.75,31.25), (-1.25,31.25), (1.25,31.25), (3.75,31.25), (6.25,31.25), (8.75,31.25), (-16.25,28.75), (-13.75,28.75), (-11.25,28.75), (8.75,28.75), (11.25,28.75), (13.75,28.75), (-18.75,26.25), (-16.25,26.25), (13.75,26.25), (16.25,26.25), (18.75,26.25), (-21.25,23.75), (13.75,23.75), (16.25,23.75), (18.75,23.75), (21.25,23.75), (-23.75,21.25), (16.25,21.25), (18.75,21.25), (21.25,21.25), (23.75,21.25), (-26.25,18.75), (-1.25,18.75), (1.25,18.75), (18.75,18.75), (21.25,18.75), (23.75,18.75), (26.25,18.75), (-26.25,16.25), (-3.75,16.25), (-1.25,16.25), (1.25,16.25), (3.75,16.25), (18.75,16.25), (21.25,16.25), (23.75,16.25), (26.25,16.25), (-28.75,13.75), (-3.75,13.75), (-1.25,13.75), (1.25,13.75), (3.75,13.75), (18.75,13.75), (21.25,13.75), (23.75,13.75), (26.25,13.75), (28.75,13.75), (-28.75,11.25), (-1.25,11.25), (1.25,11.25), (16.25,11.25), (18.75,11.25), (21.25,11.25), (23.75,11.25), (26.25,11.25), (28.75,11.25), (-28.75,8.75), (13.75,8.75), (16.25,8.75), (18.75,8.75), (21.25,8.75), (23.75,8.75), (26.25,8.75), (28.75,8.75), (-31.25,6.25), (13.75,6.25), (16.25,6.25), (18.75,6.25), (21.25,6.25), (23.75,6.25), (26.25,6.25), (28.75,6.25), (31.25,6.25), (-31.25,3.75), (11.25,3.75), (13.75,3.75), (16.25,3.75), (18.75,3.75), (21.25,3.75), (23.75,3.75), (26.25,3.75), (28.75,3.75), (31.25,3.75), (-31.25,1.25), (6.25,1.25), (8.75,1.25), (11.25,1.25), (13.75,1.25), (16.25,1.25), (18.75,1.25), (21.25,1.25), (23.75,1.25), (26.25,1.25), (28.75,1.25), (31.25,1.25), (-31.25,-1.25), (-3.75,-1.25), (-1.25,-1.25), (1.25,-1.25), (3.75,-1.25), (6.25,-1.25), (8.75,-1.25), (11.25,-1.25), (13.75,-1.25), (16.25,-1.25), (18.75,-1.25), (21.25,-1.25), (23.75,-1.25), (26.25,-1.25), (28.75,-1.25), (31.25,-1.25), (-31.25,-3.75), (-8.75,-3.75), (-6.25,-3.75), (-3.75,-3.75), (-1.25,-3.75), (1.25,-3.75), (3.75,-3.75), (6.25,-3.75), (8.75,-3.75), (11.25,-3.75), (13.75,-3.75), (16.25,-3.75), (18.75,-3.75), (21.25,-3.75), (23.75,-3.75), (26.25,-3.75), (28.75,-3.75), (31.25,-3.75), (-31.25,-6.25), (-11.25,-6.25), (-8.75,-6.25), (-6.25,-6.25), (-3.75,-6.25), (-1.25,-6.25), (1.25,-6.25), (3.75,-6.25), (6.25,-6.25), (8.75,-6.25), (11.25,-6.25), (13.75,-6.25), (16.25,-6.25), (18.75,-6.25), (21.25,-6.25), (23.75,-6.25), (26.25,-6.25), (28.75,-6.25), (31.25,-6.25), (-28.75,-8.75), (-11.25,-8.75), (-8.75,-8.75), (-6.25,-8.75), (-3.75,-8.75), (-1.25,-8.75), (1.25,-8.75), (3.75,-8.75), (6.25,-8.75), (8.75,-8.75), (11.25,-8.75), (13.75,-8.75), (16.25,-8.75), (18.75,-8.75), (21.25,-8.75), (23.75,-8.75), (26.25,-8.75), (28.75,-8.75), (-28.75,-11.25), (-13.75,-11.25), (-11.25,-11.25), (-8.75,-11.25), (-6.25,-11.25), (-3.75,-11.25), (-1.25,-11.25), (1.25,-11.25), (3.75,-11.25), (6.25,-11.25), (8.75,-11.25), (11.25,-11.25), (13.75,-11.25), (16.25,-11.25), (18.75,-11.25), (21.25,-11.25), (23.75,-11.25), (26.25,-11.25), (28.75,-11.25), (-28.75,-13.75), (-13.75,-13.75), (-11.25,-13.75), (-8.75,-13.75), (-6.25,-13.75), (-3.75,-13.75), (3.75,-13.75), (6.25,-13.75), (8.75,-13.75), (11.25,-13.75), (13.75,-13.75), (16.25,-13.75), (18.75,-13.75), (21.25,-13.75), (23.75,-13.75), (26.25,-13.75), (28.75,-13.75), (-26.25,-16.25), (-13.75,-16.25), (-11.25,-16.25), (-8.75,-16.25), (-6.25,-16.25), (6.25,-16.25), (8.75,-16.25), (11.25,-16.25), (13.75,-16.25), (16.25,-16.25), (18.75,-16.25), (21.25,-16.25), (23.75,-16.25), (26.25,-16.25), (-26.25,-18.75), (-13.75,-18.75), (-11.25,-18.75), (-8.75,-18.75), (-6.25,-18.75), (6.25,-18.75), (8.75,-18.75), (11.25,-18.75), (13.75,-18.75), (16.25,-18.75), (18.75,-18.75), (21.25,-18.75), (23.75,-18.75), (26.25,-18.75), (-23.75,-21.25), (-13.75,-21.25), (-11.25,-21.25), (-8.75,-21.25), (-6.25,-21.25), (-3.75,-21.25), (3.75,-21.25), (6.25,-21.25), (8.75,-21.25), (11.25,-21.25), (13.75,-21.25), (16.25,-21.25), (18.75,-21.25), (21.25,-21.25), (23.75,-21.25), (-21.25,-23.75), (-11.25,-23.75), (-8.75,-23.75), (-6.25,-23.75), (-3.75,-23.75), (-1.25,-23.75), (1.25,-23.75), (3.75,-23.75), (6.25,-23.75), (8.75,-23.75), (11.25,-23.75), (13.75,-23.75), (16.25,-23.75), (18.75,-23.75), (21.25,-23.75), (-18.75,-26.25), (-16.25,-26.25), (-11.25,-26.25), (-8.75,-26.25), (-6.25,-26.25), (-3.75,-26.25), (-1.25,-26.25), (1.25,-26.25), (3.75,-26.25), (6.25,-26.25), (8.75,-26.25), (11.25,-26.25), (13.75,-26.25), (16.25,-26.25), (18.75,-26.25), (-13.75,-28.75), (-11.25,-28.75), (-8.75,-28.75), (-6.25,-28.75), (-3.75,-28.75), (-1.25,-28.75), (1.25,-28.75), (3.75,-28.75), (6.25,-28.75), (8.75,-28.75), (11.25,-28.75), (13.75,-28.75), (-11.25,-31.25), (-8.75,-31.25), (-6.25,-31.25), (-3.75,-31.25), (-1.25,-31.25), (1.25,-31.25), (3.75,-31.25), (6.25,-31.25), (8.75,-31.25)]
azurite_points = [(-8.75,28.75), (-6.25,28.75), (-3.75,28.75), (-1.25,28.75), (1.25,28.75), (3.75,28.75), (6.25,28.75), (-13.75,26.25), (-11.25,26.25), (-8.75,26.25), (-6.25,26.25), (-3.75,26.25), (-1.25,26.25), (1.25,26.25), (3.75,26.25), (6.25,26.25), (8.75,26.25), (11.25,26.25), (-18.75,23.75), (-16.25,23.75), (-13.75,23.75), (-11.25,23.75), (-8.75,23.75), (-6.25,23.75), (-3.75,23.75), (-1.25,23.75), (1.25,23.75), (3.75,23.75), (6.25,23.75), (8.75,23.75), (11.25,23.75), (-21.25,21.25), (-18.75,21.25), (-16.25,21.25), (-13.75,21.25), (-11.25,21.25), (-8.75,21.25), (-6.25,21.25), (-3.75,21.25), (-1.25,21.25), (1.25,21.25), (3.75,21.25), (6.25,21.25), (8.75,21.25), (11.25,21.25), (13.75,21.25), (-23.75,18.75), (-21.25,18.75), (-18.75,18.75), (-16.25,18.75), (-13.75,18.75), (-11.25,18.75), (-8.75,18.75), (-6.25,18.75), (-3.75,18.75), (3.75,18.75), (6.25,18.75), (8.75,18.75), (11.25,18.75), (13.75,18.75), (16.25,18.75), (-23.75,16.25), (-21.25,16.25), (-18.75,16.25), (-16.25,16.25), (-13.75,16.25), (-11.25,16.25), (-8.75,16.25), (-6.25,16.25), (6.25,16.25), (8.75,16.25), (11.25,16.25), (13.75,16.25), (16.25,16.25), (-26.25,13.75), (-23.75,13.75), (-21.25,13.75), (-18.75,13.75), (-16.25,13.75), (-13.75,13.75), (-11.25,13.75), (-8.75,13.75), (-6.25,13.75), (6.25,13.75), (8.75,13.75), (11.25,13.75), (13.75,13.75), (16.25,13.75), (-26.25,11.25), (-23.75,11.25), (-21.25,11.25), (-18.75,11.25), (-16.25,11.25), (-13.75,11.25), (-11.25,11.25), (-8.75,11.25), (-6.25,11.25), (-3.75,11.25), (3.75,11.25), (6.25,11.25), (8.75,11.25), (11.25,11.25), (13.75,11.25), (-26.25,8.75), (-23.75,8.75), (-21.25,8.75), (-18.75,8.75), (-16.25,8.75), (-13.75,8.75), (-11.25,8.75), (-8.75,8.75), (-6.25,8.75), (-3.75,8.75), (-1.25,8.75), (1.25,8.75), (3.75,8.75), (6.25,8.75), (8.75,8.75), (11.25,8.75), (-28.75,6.25), (-26.25,6.25), (-23.75,6.25), (-21.25,6.25), (-18.75,6.25), (-16.25,6.25), (-13.75,6.25), (-11.25,6.25), (-8.75,6.25), (-6.25,6.25), (-3.75,6.25), (-1.25,6.25), (1.25,6.25), (3.75,6.25), (6.25,6.25), (8.75,6.25), (11.25,6.25), (-28.75,3.75), (-26.25,3.75), (-23.75,3.75), (-21.25,3.75), (-18.75,3.75), (-16.25,3.75), (-13.75,3.75), (-11.25,3.75), (-8.75,3.75), (-6.25,3.75), (-3.75,3.75), (-1.25,3.75), (1.25,3.75), (3.75,3.75), (6.25,3.75), (8.75,3.75), (-28.75,1.25), (-26.25,1.25), (-23.75,1.25), (-21.25,1.25), (-18.75,1.25), (-16.25,1.25), (-13.75,1.25), (-11.25,1.25), (-8.75,1.25), (-6.25,1.25), (-3.75,1.25), (-1.25,1.25), (1.25,1.25), (3.75,1.25), (-28.75,-1.25), (-26.25,-1.25), (-23.75,-1.25), (-21.25,-1.25), (-18.75,-1.25), (-16.25,-1.25), (-13.75,-1.25), (-11.25,-1.25), (-8.75,-1.25), (-6.25,-1.25), (-28.75,-3.75), (-26.25,-3.75), (-23.75,-3.75), (-21.25,-3.75), (-18.75,-3.75), (-16.25,-3.75), (-13.75,-3.75), (-11.25,-3.75), (-28.75,-6.25), (-26.25,-6.25), (-23.75,-6.25), (-21.25,-6.25), (-18.75,-6.25), (-16.25,-6.25), (-13.75,-6.25), (-26.25,-8.75), (-23.75,-8.75), (-21.25,-8.75), (-18.75,-8.75), (-16.25,-8.75), (-13.75,-8.75), (-26.25,-11.25), (-23.75,-11.25), (-21.25,-11.25), (-18.75,-11.25), (-16.25,-11.25), (-26.25,-13.75), (-23.75,-13.75), (-21.25,-13.75), (-18.75,-13.75), (-16.25,-13.75), (-1.25,-13.75), (1.25,-13.75), (-23.75,-16.25), (-21.25,-16.25), (-18.75,-16.25), (-16.25,-16.25), (-3.75,-16.25), (-1.25,-16.25), (1.25,-16.25), (3.75,-16.25), (-23.75,-18.75), (-21.25,-18.75), (-18.75,-18.75), (-16.25,-18.75), (-3.75,-18.75), (-1.25,-18.75), (1.25,-18.75), (3.75,-18.75), (-21.25,-21.25), (-18.75,-21.25), (-16.25,-21.25), (-1.25,-21.25), (1.25,-21.25), (-18.75,-23.75), (-16.25,-23.75), (-13.75,-23.75), (-13.75,-26.25)]

point_name_pairing = [("Green", mclover3_points),("Orange", azurite_points)]

# Robot deck setup constants
TIP_RACK_DECK_SLOT = 9
COLORS_DECK_SLOT = 6
AGAR_DECK_SLOT = 5
PIPETTE_STARTING_TIP_WELL = 'A1'

# Place the PCR tubes in this order
well_colors = {
    'A1' : 'Red',
    'B1' : 'Green',
    'C1' : 'Orange'
}

# Initialize volume_used globally
volume_used = {}

def update_volume_remaining(current_color, quantity_to_aspirate):
    global well_colors
    global volume_used

    rows = string.ascii_uppercase
    cols_str = [str(i) for i in range(1, 13)] # Columns 1 to 12

    if current_color not in volume_used:
        volume_used[current_color] = 0

    # Find the current well for this color
    current_well_for_color = None
    for well, color in list(well_colors.items()):
        if color == current_color:
            current_well_for_color = well
            break

    if current_well_for_color is None:
        raise ValueError(f"Color {current_color} not found in well_colors for volume update.")

    if (volume_used[current_color] + quantity_to_aspirate) > 250:
        row_letter = current_well_for_color[0]
        col_number_str = current_well_for_color[1:]

        next_col_index = cols_str.index(col_number_str) + 1
        if next_col_index >= len(cols_str):
            raise IndexError(f"Ran out of wells for color {current_color} in row {row_letter} (max column reached)!")

        next_well = f"{row_letter}{cols_str[next_col_index]}"

        # Remove the old well from well_colors map, and add the new one.
        # This is safe because each color is assumed to have its own row.
        del well_colors[current_well_for_color]
        well_colors[next_well] = current_color
        volume_used[current_color] = quantity_to_aspirate # Reset volume for new well
    else:
        volume_used[current_color] += quantity_to_aspirate

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)


  # Helper function (color location)
  def location_of_color(color_string):
    for well,color in well_colors.items():
      if color.lower() == color_string.lower():
        return temperature_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



  # Print pattern by iterating over lists
  for idx, (current_color, point_list) in enumerate(point_name_pairing): # Renamed i to idx to avoid conflict
      # Skip the rest of the loop if the list is empty
      if not point_list:
          continue

      pipette_20ul.pick_up_tip()

      max_aspirate = int(18 // POINT_SIZE) * POINT_SIZE
      quantity_to_aspirate = min(len(point_list)*POINT_SIZE, max_aspirate)

      # Get the initial well for this color before any volume updates
      initial_aspirate_well = location_of_color(current_color)

      # Update volume (this might change `well_colors` for `current_color`)
      update_volume_remaining(current_color, quantity_to_aspirate)

      # Aspirate from the (potentially updated) location
      pipette_20ul.aspirate(quantity_to_aspirate, location_of_color(current_color))

      # Iterate over the current points list and dispense them, refilling along the way
      for j in range(len(point_list)):
          x, y = point_list[j]
          adjusted_location = center_location.move(types.Point(x, y))

          dispense_and_detach(pipette_20ul, POINT_SIZE, adjusted_location)

          if pipette_20ul.current_volume == 0 and len(point_list[j+1:]) > 0:
              # Need to refill
              refill_quantity = min(len(point_list[j+1:])*POINT_SIZE, max_aspirate)

              # Get the current source well for this color *before* updating volume, in case it changes
              previous_refill_well = location_of_color(current_color)

              # Update volume and potentially move the color to a new physical well
              update_volume_remaining(current_color, refill_quantity)

              # Get the (potentially new) source well for this color
              new_refill_well = location_of_color(current_color)

              if new_refill_well != previous_refill_well:
                  # If the source well has changed for this color, we must drop the tip and pick up a new one
                  pipette_20ul.drop_tip()
                  pipette_20ul.pick_up_tip()

              # Now aspirate from the correct (potentially new) well
              pipette_20ul.aspirate(refill_quantity, new_refill_well)

      # Drop tip between each color
      pipette_20ul.drop_tip()
      

πŸ–₯️ Simulation Output

Before running on the real robot, the protocol was validated using the Opentrons simulator.

Simulation Simulation

πŸ“Š Result

The robot successfully deposited bacteria following the coordinate map. After incubation, bacterial growth revealed the intended image on the agar plate.

This demonstrates that liquid-handling robots can perform microscale spatial biofabrication, a technique related to:

  • tissue engineering
  • biosensors
  • living materials

Post-Lab Questions

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

πŸ§ͺ HYDRA: Automated Hydrogel Fabrication for High-Throughput Drug Screening

image image Figure. Overview of the HYDRA method.
A liquid-handling robot dispenses and re-aspirates hydrogel precursor solution to leave a micrometer-thin planar hydrogel inside multi-well plates, enabling biomimetic cell culture compatible with high-throughput drug screening and imaging.

HYDRA (HYDrogels by Robotic liquid handling Automation) presents a scalable and automated method to fabricate thin, uniform hydrogel layers inside standard multi-well plates used for high-throughput screening (HTS).

Traditional cell culture relies on rigid plastic or glass substrates, which poorly mimic the mechanical environment of real human tissues. This lack of physiological relevance contributes to high drug failure rates in clinical trials.
HYDRA addresses this issue by introducing planar hydrogel coatings (10–50 Β΅m thick) that better replicate tissue stiffness while remaining fully compatible with imaging-based screening systems.

The key challenge solved by the study is meniscus formation in small wells, which normally leads to uneven gel surfaces and poor imaging quality. The authors developed a robotic workflow that deposits and re-aspirates hydrogel precursor solution to leave behind a controlled, micrometer-thin film.

The system was validated using:

  • Epithelial cell culture (HaCaT cells)
  • Dose-response experiments with anticancer drugs (nocodazole, paclitaxel)
  • Digital holography and fluorescence microscopy

Results demonstrated:

  • Reproducible gel thickness
  • High imaging compatibility
  • Scalability to 96- and 384-well formats

Conclusion: HYDRA enables more biomimetic and predictive drug testing without requiring new laboratory infrastructure.


πŸ€– How HYDRA Uses Opentrons & Automation

The innovation of the paper lies in combining biomaterials + robotics.

An Opentrons OT-2 liquid-handling robot was programmed to:

βš™οΈ Automated Workflow

  1. Mix fish gelatin and transglutaminase precursor solutions.
  2. Dispense a small volume at the center of each well.
  3. Avoid touching the sidewalls (to prevent meniscus formation).
  4. Immediately re-aspirate the same volume.
  5. Leave behind a thin liquid boundary layer.
  6. Allow enzymatic crosslinking to form a flat hydrogel film. The protocol was implemented using:
  • Opentrons Protocol Designer
  • Custom Python scripts
  • Calibrated pipette heights and flow rates
  • Precise aspiration control

πŸš€ Why Automation Matters

Using Opentrons transforms hydrogel fabrication into a standardized, scalable microfabrication process:

  • βœ… High reproducibility
  • βœ… Compatible with existing HTS pipelines
  • βœ… Rapid fabrication (~10 minutes per plate)
  • βœ… No specialized hardware required

Instead of using the robot as a simple pipetting tool, HYDRA turns it into a biomaterial fabrication platform β€” enabling physiologically relevant substrates directly inside standard drug screening plates.

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.

This project proposes to automate the screening and characterization of nanoparticle delivery systems for the delivery of the damage suppressor protein (Dsup) β€” a nucleosome-binding protein from Ramazzottius varieornatus (tardigrade). Dsup has been demonstrated to protect mammalian cells from oxidative stress and UV-induced DNA damage.

The goal is to determine which nanoparticle formulation most effectively delivers Dsup into human dermal fibroblasts, improving resistance to oxidative stress (Hβ‚‚Oβ‚‚ exposure). The long-term application is skin regeneration and anti-aging therapies.

Automation tools (Opentrons OT-2 + cloud lab integration) will be used to:

  • Prepare nanoparticle formulations

  • Perform controlled protein loading

  • Treat fibroblast cultures

  • Apply oxidative stress

  • Perform viability assays

  • Collect quantitative data

βš™οΈ Automated Workflow

flowchart TD
    START[Start Protocol]
    START --> LOAD[Load Labware & Tips]
    LOAD --> PREP_NP[Prepare Nanoparticles]
    PREP_NP --> LOAD_DSUP[Load Dsup Protein]
    LOAD_DSUP --> INCUBATE1[Incubate Protein Loading]
    INCUBATE1 --> SEED[Seed Fibroblasts]
    SEED --> ADD_TREATMENT[Add NP-Dsup Treatment]
    ADD_TREATMENT --> INCUBATE2[24h Incubation]
    INCUBATE2 --> ADD_STRESS[Add H2O2]
    ADD_STRESS --> INCUBATE3[Stress Incubation]
    INCUBATE3 --> ADD_ASSAY[Add Viability Reagent]
    ADD_ASSAY --> READ[Transfer to Reading Plate]
    READ --> END[Export Data]

☁️ Cloud laboratory for large-scale validation:

InstrumentFunction
EchoTransfers precise nanoliter volumes of Dsup protein and reagents
BravoDispenses cell-free protein expression (CFPS) reagents into plates
MultifloAdds media, buffers, and treatment solutions across wells
InhecoProvides controlled temperature incubation during reactions
PlateLocSeals microplates to prevent contamination and evaporation
PHERAstarMeasures fluorescence output for cell viability and protein activity