Repository files navigation

readme home

Overview

Self-driving laboratories (SDLs) address a common bottleneck in experimentation: time and effort required to explore large parameter spaces. By combining automated experimentation with machine learning (ML) and Bayesian optimization (BO), an SDL can iteratively design experiments and learn from resulting data in a closed-loop, fully autonomous workflow.

This repository contains the instructions/code/files for the assembly and operations of a Pen Plotter Driven Liquid Handler and Pipette Driven Liquid Handler as well as a collection of hands-on tutorial notebooks for active learning. Both devices are designed as low-cost automation tools to produce SDLs. The pen plotter-driven liquid handler is created using rigid pre-built spatial components that are modified to fit a user-developed fluidic system. The pipette-driven liquid handler is designed using modular components to provide the most flexibility, paired with a wireless autopipette.

In addition to hardware documentation, this repository includes a representative dataset generated using the SDL pipeline implemented here. The dataset was produced fully autonomously, and is used as an example to demonstrate how the design-build-test-learn (DBTL) workflow operates in practice, from experimental design through surrogate model training. We use the optimization of a glucose oxidase (GOx) enzyme assay, which are common in wet-lab environments and are well suited as a representative example.


Repository Structure

Use this diagram to navigate the repository:

├── Hands-on Tutorial/ # AL and SDL tutorial notebooks and example data
│ ├── Notebook 1 - AL Tutorial.ipynb # Principles of Active Learning
│ ├── Notebook 2 - SDL Tutorial.ipynb # Real-world SDL application (enzyme assay)
│ ├── GOx Assay data_bank_renamed.csv # Example GOx assay data for tutorials
│ ├── Older Iterations/ # Previous notebook versions
│ ├── requirements.txt # Python dependencies for tutorials
│ └── README.md
│
├── Pen Plotter Liquid Handler/ # AxiDraw-based liquid handler (hardware + software)
│ ├── Pen Plotter SDL Software/ # GUI and automation software
│ │ ├── data/
│ │ │ └── GOx Assay data_bank.csv # Validation dataset example
│ │ ├── src/
│ │ │ ├── sdlgui.py # Main GUI layout and logic
│ │ │ ├── guifunctions.py # Experiment setup, seed library, dispensing
│ │ │ ├── liquidhandler.py # AxiDraw and syringe pump control
│ │ │ ├── dataprocessing.py # Data extraction, ML/AL integration
│ │ │ └── sdlvariables.py # Global variables and experiment state
│ │ ├── resources/ # Icons and assets
│ │ ├── main.py # Entry point (runs the GUI)
│ │ ├── requirements.txt
│ │ └── README.md
│ ├── SDL CAD Files/ # 3D printable parts (STL, STEP)
│ ├── Pen Plotter LH Build Guide.pdf # Building instructions for hardware
│ ├── SDL_SOP.pdf # Standard operating procedure
│ └── README.md
│
├── Pipette Liquid Handler/ # Wireless autopipette-based liquid handler (External Repo)
│ ├── Pipette SDL Software/ # GUI and automation software
│ │ ├── data/
│ │ │ └── GOx Assay data_bank.csv # Validation dataset example
│ │ ├── src/
│ │ │ ├── sdlgui.py # Main GUI layout and logic
│ │ │ ├── guifunctions.py # Experiment setup, seed library, dispensing
│ │ │ ├── liquidhandler.py # Pipette and pump control
│ │ │ ├── dataprocessing.py # Data extraction, ML/AL integration
│ │ │ └── sdlvariables.py # Global variables and experiment state
│ │ ├── resources/ # Icons, tip positions, RemoteControl
│ │ ├── main.py # Entry point (runs the GUI)
│ │ ├── requirements.txt
│ │ └── README.md
│ ├── Config Files/ # G-code and controller config (config.g, homeall.g, etc.)
│ ├── Pipette CAD Files/ # 3D design files (needle holder, vial rack, etc.)
│ ├── WIP Controller Program/ # Work-in-progress controller script alternatives
│ ├── Pipette Liquid Handler Building Guide.pdf
│ ├── Pipette Liquid Handler Parts List.xlsx
│ └── README.md
│
├── Images/ # Figures for README and docs
├── index.html # Project homepage
├── LICENSE
└── README.md # This file

Quick links:Tutorial Notebook 1 (AL) · Tutorial Notebook 2 (SDL) · Pen Plotter Liquid Handler · Pipette Liquid Handler


Tutorial Overview

The goal of the provided tutorial is to walk through the essentials of AL from start to finish, providing both conceptual explanations and hands-on code examples. A basic understanding of ML is assumed. If you're new to ML, we highly recommend reviewing Part 1 of our User’s Guide series. This guide is structured into three main tutorial notebooks, each building on the last for a smooth learning experience. Major points of interest from the guide provided are discussed below.

We begin with a simple, two-dimensional example of Bayesian Optimization (BO) applied to a black-box function. This notebook introduces the foundational concepts of active learning, inccluding data seeding, fitting surrogate models to data, and applying various acquisition functions to choose new sampling points.

Finally, we apply AL to a real experimental dataset involving enzymes. This notebook demonstrates how active learning can be used to efficiently select informative experiments and accelerate discovery in scientific research. This notebook explores: seed library generation (initial sampling) and closing the loop in the context of an SDL.


Abstract

Experimentation is inherently difficult because most methods require substantial refinement, calibration, and validation before high-quality, reliable data can be collected. In most cases, experimental domains have multiple variables (i.e., high dimensionality), thus requiring their simultaneous optimization for single and multi-objective targets. Traditional experimental approaches rely on trial-and-error methods guided by rational decision making, but these become increasingly inefficient and ineffective as complex interactions between inputs limit our ability to capture underlying trends using conventional statistical approaches. Active learning and machine learning (AL/ML) combined with automation represents an indispensable approach for future laboratory productivity. However, a steep initial learning curve and high costs of instrumentation pose substantial barriers to adopt this powerful approach. To democratize access, we provide a comprehensive tutorial covering both the computational skills and hardware implementation necessary for self-driven experimental workflows. The accompanying open-source, low-cost liquid handling platforms offer practical templates for researchers adopting self-driving lab (SDL) methodologies.


Authors:

Apostolos Maroulis, Dylan Waynor

Last Updated 01/29/2026 Version 1.0.0

About

No description, website, or topics provided.

Resources

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

readme home

Overview

Self-driving laboratories (SDLs) address a common bottleneck in experimentation: time and effort required to explore large parameter spaces. By combining automated experimentation with machine learning (ML) and Bayesian optimization (BO), an SDL can iteratively design experiments and learn from resulting data in a closed-loop, fully autonomous workflow.

This repository contains the instructions/code/files for the assembly and operations of a Pen Plotter Driven Liquid Handler and Pipette Driven Liquid Handler as well as a collection of hands-on tutorial notebooks for active learning. Both devices are designed as low-cost automation tools to produce SDLs. The pen plotter-driven liquid handler is created using rigid pre-built spatial components that are modified to fit a user-developed fluidic system. The pipette-driven liquid handler is designed using modular components to provide the most flexibility, paired with a wireless autopipette.

In addition to hardware documentation, this repository includes a representative dataset generated using the SDL pipeline implemented here. The dataset was produced fully autonomously, and is used as an example to demonstrate how the design-build-test-learn (DBTL) workflow operates in practice, from experimental design through surrogate model training. We use the optimization of a glucose oxidase (GOx) enzyme assay, which are common in wet-lab environments and are well suited as a representative example.


Repository Structure

Use this diagram to navigate the repository:

├── Hands-on Tutorial/ # AL and SDL tutorial notebooks and example data
│ ├── Notebook 1 - AL Tutorial.ipynb # Principles of Active Learning
│ ├── Notebook 2 - SDL Tutorial.ipynb # Real-world SDL application (enzyme assay)
│ ├── GOx Assay data_bank_renamed.csv # Example GOx assay data for tutorials
│ ├── Older Iterations/ # Previous notebook versions
│ ├── requirements.txt # Python dependencies for tutorials
│ └── README.md
│
├── Pen Plotter Liquid Handler/ # AxiDraw-based liquid handler (hardware + software)
│ ├── Pen Plotter SDL Software/ # GUI and automation software
│ │ ├── data/
│ │ │ └── GOx Assay data_bank.csv # Validation dataset example
│ │ ├── src/
│ │ │ ├── sdlgui.py # Main GUI layout and logic
│ │ │ ├── guifunctions.py # Experiment setup, seed library, dispensing
│ │ │ ├── liquidhandler.py # AxiDraw and syringe pump control
│ │ │ ├── dataprocessing.py # Data extraction, ML/AL integration
│ │ │ └── sdlvariables.py # Global variables and experiment state
│ │ ├── resources/ # Icons and assets
│ │ ├── main.py # Entry point (runs the GUI)
│ │ ├── requirements.txt
│ │ └── README.md
│ ├── SDL CAD Files/ # 3D printable parts (STL, STEP)
│ ├── Pen Plotter LH Build Guide.pdf # Building instructions for hardware
│ ├── SDL_SOP.pdf # Standard operating procedure
│ └── README.md
│
├── Pipette Liquid Handler/ # Wireless autopipette-based liquid handler (External Repo)
│ ├── Pipette SDL Software/ # GUI and automation software
│ │ ├── data/
│ │ │ └── GOx Assay data_bank.csv # Validation dataset example
│ │ ├── src/
│ │ │ ├── sdlgui.py # Main GUI layout and logic
│ │ │ ├── guifunctions.py # Experiment setup, seed library, dispensing
│ │ │ ├── liquidhandler.py # Pipette and pump control
│ │ │ ├── dataprocessing.py # Data extraction, ML/AL integration
│ │ │ └── sdlvariables.py # Global variables and experiment state
│ │ ├── resources/ # Icons, tip positions, RemoteControl
│ │ ├── main.py # Entry point (runs the GUI)
│ │ ├── requirements.txt
│ │ └── README.md
│ ├── Config Files/ # G-code and controller config (config.g, homeall.g, etc.)
│ ├── Pipette CAD Files/ # 3D design files (needle holder, vial rack, etc.)
│ ├── WIP Controller Program/ # Work-in-progress controller script alternatives
│ ├── Pipette Liquid Handler Building Guide.pdf
│ ├── Pipette Liquid Handler Parts List.xlsx
│ └── README.md
│
├── Images/ # Figures for README and docs
├── index.html # Project homepage
├── LICENSE
└── README.md # This file

Quick links:Tutorial Notebook 1 (AL) · Tutorial Notebook 2 (SDL) · Pen Plotter Liquid Handler · Pipette Liquid Handler


Tutorial Overview

The goal of the provided tutorial is to walk through the essentials of AL from start to finish, providing both conceptual explanations and hands-on code examples. A basic understanding of ML is assumed. If you're new to ML, we highly recommend reviewing Part 1 of our User’s Guide series. This guide is structured into three main tutorial notebooks, each building on the last for a smooth learning experience. Major points of interest from the guide provided are discussed below.

We begin with a simple, two-dimensional example of Bayesian Optimization (BO) applied to a black-box function. This notebook introduces the foundational concepts of active learning, inccluding data seeding, fitting surrogate models to data, and applying various acquisition functions to choose new sampling points.

Finally, we apply AL to a real experimental dataset involving enzymes. This notebook demonstrates how active learning can be used to efficiently select informative experiments and accelerate discovery in scientific research. This notebook explores: seed library generation (initial sampling) and closing the loop in the context of an SDL.


Abstract

Experimentation is inherently difficult because most methods require substantial refinement, calibration, and validation before high-quality, reliable data can be collected. In most cases, experimental domains have multiple variables (i.e., high dimensionality), thus requiring their simultaneous optimization for single and multi-objective targets. Traditional experimental approaches rely on trial-and-error methods guided by rational decision making, but these become increasingly inefficient and ineffective as complex interactions between inputs limit our ability to capture underlying trends using conventional statistical approaches. Active learning and machine learning (AL/ML) combined with automation represents an indispensable approach for future laboratory productivity. However, a steep initial learning curve and high costs of instrumentation pose substantial barriers to adopt this powerful approach. To democratize access, we provide a comprehensive tutorial covering both the computational skills and hardware implementation necessary for self-driven experimental workflows. The accompanying open-source, low-cost liquid handling platforms offer practical templates for researchers adopting self-driving lab (SDL) methodologies.


Authors:

Apostolos Maroulis, Dylan Waynor

Last Updated 01/29/2026 Version 1.0.0

About

No description, website, or topics provided.

Resources

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

readme home

Overview

Self-driving laboratories (SDLs) address a common bottleneck in experimentation: time and effort required to explore large parameter spaces. By combining automated experimentation with machine learning (ML) and Bayesian optimization (BO), an SDL can iteratively design experiments and learn from resulting data in a closed-loop, fully autonomous workflow.

This repository contains the instructions/code/files for the assembly and operations of a Pen Plotter Driven Liquid Handler and Pipette Driven Liquid Handler as well as a collection of hands-on tutorial notebooks for active learning. Both devices are designed as low-cost automation tools to produce SDLs. The pen plotter-driven liquid handler is created using rigid pre-built spatial components that are modified to fit a user-developed fluidic system. The pipette-driven liquid handler is designed using modular components to provide the most flexibility, paired with a wireless autopipette.

In addition to hardware documentation, this repository includes a representative dataset generated using the SDL pipeline implemented here. The dataset was produced fully autonomously, and is used as an example to demonstrate how the design-build-test-learn (DBTL) workflow operates in practice, from experimental design through surrogate model training. We use the optimization of a glucose oxidase (GOx) enzyme assay, which are common in wet-lab environments and are well suited as a representative example.


Repository Structure

Use this diagram to navigate the repository:

├── Hands-on Tutorial/ # AL and SDL tutorial notebooks and example data
│ ├── Notebook 1 - AL Tutorial.ipynb # Principles of Active Learning
│ ├── Notebook 2 - SDL Tutorial.ipynb # Real-world SDL application (enzyme assay)
│ ├── GOx Assay data_bank_renamed.csv # Example GOx assay data for tutorials
│ ├── Older Iterations/ # Previous notebook versions
│ ├── requirements.txt # Python dependencies for tutorials
│ └── README.md
│
├── Pen Plotter Liquid Handler/ # AxiDraw-based liquid handler (hardware + software)
│ ├── Pen Plotter SDL Software/ # GUI and automation software
│ │ ├── data/
│ │ │ └── GOx Assay data_bank.csv # Validation dataset example
│ │ ├── src/
│ │ │ ├── sdlgui.py # Main GUI layout and logic
│ │ │ ├── guifunctions.py # Experiment setup, seed library, dispensing
│ │ │ ├── liquidhandler.py # AxiDraw and syringe pump control
│ │ │ ├── dataprocessing.py # Data extraction, ML/AL integration
│ │ │ └── sdlvariables.py # Global variables and experiment state
│ │ ├── resources/ # Icons and assets
│ │ ├── main.py # Entry point (runs the GUI)
│ │ ├── requirements.txt
│ │ └── README.md
│ ├── SDL CAD Files/ # 3D printable parts (STL, STEP)
│ ├── Pen Plotter LH Build Guide.pdf # Building instructions for hardware
│ ├── SDL_SOP.pdf # Standard operating procedure
│ └── README.md
│
├── Pipette Liquid Handler/ # Wireless autopipette-based liquid handler (External Repo)
│ ├── Pipette SDL Software/ # GUI and automation software
│ │ ├── data/
│ │ │ └── GOx Assay data_bank.csv # Validation dataset example
│ │ ├── src/
│ │ │ ├── sdlgui.py # Main GUI layout and logic
│ │ │ ├── guifunctions.py # Experiment setup, seed library, dispensing
│ │ │ ├── liquidhandler.py # Pipette and pump control
│ │ │ ├── dataprocessing.py # Data extraction, ML/AL integration
│ │ │ └── sdlvariables.py # Global variables and experiment state
│ │ ├── resources/ # Icons, tip positions, RemoteControl
│ │ ├── main.py # Entry point (runs the GUI)
│ │ ├── requirements.txt
│ │ └── README.md
│ ├── Config Files/ # G-code and controller config (config.g, homeall.g, etc.)
│ ├── Pipette CAD Files/ # 3D design files (needle holder, vial rack, etc.)
│ ├── WIP Controller Program/ # Work-in-progress controller script alternatives
│ ├── Pipette Liquid Handler Building Guide.pdf
│ ├── Pipette Liquid Handler Parts List.xlsx
│ └── README.md
│
├── Images/ # Figures for README and docs
├── index.html # Project homepage
├── LICENSE
└── README.md # This file

Quick links:Tutorial Notebook 1 (AL) · Tutorial Notebook 2 (SDL) · Pen Plotter Liquid Handler · Pipette Liquid Handler


Tutorial Overview

The goal of the provided tutorial is to walk through the essentials of AL from start to finish, providing both conceptual explanations and hands-on code examples. A basic understanding of ML is assumed. If you're new to ML, we highly recommend reviewing Part 1 of our User’s Guide series. This guide is structured into three main tutorial notebooks, each building on the last for a smooth learning experience. Major points of interest from the guide provided are discussed below.

We begin with a simple, two-dimensional example of Bayesian Optimization (BO) applied to a black-box function. This notebook introduces the foundational concepts of active learning, inccluding data seeding, fitting surrogate models to data, and applying various acquisition functions to choose new sampling points.

Finally, we apply AL to a real experimental dataset involving enzymes. This notebook demonstrates how active learning can be used to efficiently select informative experiments and accelerate discovery in scientific research. This notebook explores: seed library generation (initial sampling) and closing the loop in the context of an SDL.


Abstract

Experimentation is inherently difficult because most methods require substantial refinement, calibration, and validation before high-quality, reliable data can be collected. In most cases, experimental domains have multiple variables (i.e., high dimensionality), thus requiring their simultaneous optimization for single and multi-objective targets. Traditional experimental approaches rely on trial-and-error methods guided by rational decision making, but these become increasingly inefficient and ineffective as complex interactions between inputs limit our ability to capture underlying trends using conventional statistical approaches. Active learning and machine learning (AL/ML) combined with automation represents an indispensable approach for future laboratory productivity. However, a steep initial learning curve and high costs of instrumentation pose substantial barriers to adopt this powerful approach. To democratize access, we provide a comprehensive tutorial covering both the computational skills and hardware implementation necessary for self-driven experimental workflows. The accompanying open-source, low-cost liquid handling platforms offer practical templates for researchers adopting self-driving lab (SDL) methodologies.


Authors:

Apostolos Maroulis, Dylan Waynor

Last Updated 01/29/2026 Version 1.0.0

About

No description, website, or topics provided.

Resources

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

readme home

Overview

Self-driving laboratories (SDLs) address a common bottleneck in experimentation: time and effort required to explore large parameter spaces. By combining automated experimentation with machine learning (ML) and Bayesian optimization (BO), an SDL can iteratively design experiments and learn from resulting data in a closed-loop, fully autonomous workflow.

This repository contains the instructions/code/files for the assembly and operations of a Pen Plotter Driven Liquid Handler and Pipette Driven Liquid Handler as well as a collection of hands-on tutorial notebooks for active learning. Both devices are designed as low-cost automation tools to produce SDLs. The pen plotter-driven liquid handler is created using rigid pre-built spatial components that are modified to fit a user-developed fluidic system. The pipette-driven liquid handler is designed using modular components to provide the most flexibility, paired with a wireless autopipette.

In addition to hardware documentation, this repository includes a representative dataset generated using the SDL pipeline implemented here. The dataset was produced fully autonomously, and is used as an example to demonstrate how the design-build-test-learn (DBTL) workflow operates in practice, from experimental design through surrogate model training. We use the optimization of a glucose oxidase (GOx) enzyme assay, which are common in wet-lab environments and are well suited as a representative example.


Repository Structure

Use this diagram to navigate the repository:

├── Hands-on Tutorial/ # AL and SDL tutorial notebooks and example data
│ ├── Notebook 1 - AL Tutorial.ipynb # Principles of Active Learning
│ ├── Notebook 2 - SDL Tutorial.ipynb # Real-world SDL application (enzyme assay)
│ ├── GOx Assay data_bank_renamed.csv # Example GOx assay data for tutorials
│ ├── Older Iterations/ # Previous notebook versions
│ ├── requirements.txt # Python dependencies for tutorials
│ └── README.md
│
├── Pen Plotter Liquid Handler/ # AxiDraw-based liquid handler (hardware + software)
│ ├── Pen Plotter SDL Software/ # GUI and automation software
│ │ ├── data/
│ │ │ └── GOx Assay data_bank.csv # Validation dataset example
│ │ ├── src/
│ │ │ ├── sdlgui.py # Main GUI layout and logic
│ │ │ ├── guifunctions.py # Experiment setup, seed library, dispensing
│ │ │ ├── liquidhandler.py # AxiDraw and syringe pump control
│ │ │ ├── dataprocessing.py # Data extraction, ML/AL integration
│ │ │ └── sdlvariables.py # Global variables and experiment state
│ │ ├── resources/ # Icons and assets
│ │ ├── main.py # Entry point (runs the GUI)
│ │ ├── requirements.txt
│ │ └── README.md
│ ├── SDL CAD Files/ # 3D printable parts (STL, STEP)
│ ├── Pen Plotter LH Build Guide.pdf # Building instructions for hardware
│ ├── SDL_SOP.pdf # Standard operating procedure
│ └── README.md
│
├── Pipette Liquid Handler/ # Wireless autopipette-based liquid handler (External Repo)
│ ├── Pipette SDL Software/ # GUI and automation software
│ │ ├── data/
│ │ │ └── GOx Assay data_bank.csv # Validation dataset example
│ │ ├── src/
│ │ │ ├── sdlgui.py # Main GUI layout and logic
│ │ │ ├── guifunctions.py # Experiment setup, seed library, dispensing
│ │ │ ├── liquidhandler.py # Pipette and pump control
│ │ │ ├── dataprocessing.py # Data extraction, ML/AL integration
│ │ │ └── sdlvariables.py # Global variables and experiment state
│ │ ├── resources/ # Icons, tip positions, RemoteControl
│ │ ├── main.py # Entry point (runs the GUI)
│ │ ├── requirements.txt
│ │ └── README.md
│ ├── Config Files/ # G-code and controller config (config.g, homeall.g, etc.)
│ ├── Pipette CAD Files/ # 3D design files (needle holder, vial rack, etc.)
│ ├── WIP Controller Program/ # Work-in-progress controller script alternatives
│ ├── Pipette Liquid Handler Building Guide.pdf
│ ├── Pipette Liquid Handler Parts List.xlsx
│ └── README.md
│
├── Images/ # Figures for README and docs
├── index.html # Project homepage
├── LICENSE
└── README.md # This file

Quick links:Tutorial Notebook 1 (AL) · Tutorial Notebook 2 (SDL) · Pen Plotter Liquid Handler · Pipette Liquid Handler


Tutorial Overview

The goal of the provided tutorial is to walk through the essentials of AL from start to finish, providing both conceptual explanations and hands-on code examples. A basic understanding of ML is assumed. If you're new to ML, we highly recommend reviewing Part 1 of our User’s Guide series. This guide is structured into three main tutorial notebooks, each building on the last for a smooth learning experience. Major points of interest from the guide provided are discussed below.

We begin with a simple, two-dimensional example of Bayesian Optimization (BO) applied to a black-box function. This notebook introduces the foundational concepts of active learning, inccluding data seeding, fitting surrogate models to data, and applying various acquisition functions to choose new sampling points.

Finally, we apply AL to a real experimental dataset involving enzymes. This notebook demonstrates how active learning can be used to efficiently select informative experiments and accelerate discovery in scientific research. This notebook explores: seed library generation (initial sampling) and closing the loop in the context of an SDL.


Abstract

Experimentation is inherently difficult because most methods require substantial refinement, calibration, and validation before high-quality, reliable data can be collected. In most cases, experimental domains have multiple variables (i.e., high dimensionality), thus requiring their simultaneous optimization for single and multi-objective targets. Traditional experimental approaches rely on trial-and-error methods guided by rational decision making, but these become increasingly inefficient and ineffective as complex interactions between inputs limit our ability to capture underlying trends using conventional statistical approaches. Active learning and machine learning (AL/ML) combined with automation represents an indispensable approach for future laboratory productivity. However, a steep initial learning curve and high costs of instrumentation pose substantial barriers to adopt this powerful approach. To democratize access, we provide a comprehensive tutorial covering both the computational skills and hardware implementation necessary for self-driven experimental workflows. The accompanying open-source, low-cost liquid handling platforms offer practical templates for researchers adopting self-driving lab (SDL) methodologies.


Authors:

Apostolos Maroulis, Dylan Waynor

Last Updated 01/29/2026 Version 1.0.0

About

No description, website, or topics provided.

Resources

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

readme home

Overview

Self-driving laboratories (SDLs) address a common bottleneck in experimentation: time and effort required to explore large parameter spaces. By combining automated experimentation with machine learning (ML) and Bayesian optimization (BO), an SDL can iteratively design experiments and learn from resulting data in a closed-loop, fully autonomous workflow.

This repository contains the instructions/code/files for the assembly and operations of a Pen Plotter Driven Liquid Handler and Pipette Driven Liquid Handler as well as a collection of hands-on tutorial notebooks for active learning. Both devices are designed as low-cost automation tools to produce SDLs. The pen plotter-driven liquid handler is created using rigid pre-built spatial components that are modified to fit a user-developed fluidic system. The pipette-driven liquid handler is designed using modular components to provide the most flexibility, paired with a wireless autopipette.

In addition to hardware documentation, this repository includes a representative dataset generated using the SDL pipeline implemented here. The dataset was produced fully autonomously, and is used as an example to demonstrate how the design-build-test-learn (DBTL) workflow operates in practice, from experimental design through surrogate model training. We use the optimization of a glucose oxidase (GOx) enzyme assay, which are common in wet-lab environments and are well suited as a representative example.


Repository Structure

Use this diagram to navigate the repository:

├── Hands-on Tutorial/ # AL and SDL tutorial notebooks and example data
│ ├── Notebook 1 - AL Tutorial.ipynb # Principles of Active Learning
│ ├── Notebook 2 - SDL Tutorial.ipynb # Real-world SDL application (enzyme assay)
│ ├── GOx Assay data_bank_renamed.csv # Example GOx assay data for tutorials
│ ├── Older Iterations/ # Previous notebook versions
│ ├── requirements.txt # Python dependencies for tutorials
│ └── README.md
│
├── Pen Plotter Liquid Handler/ # AxiDraw-based liquid handler (hardware + software)
│ ├── Pen Plotter SDL Software/ # GUI and automation software
│ │ ├── data/
│ │ │ └── GOx Assay data_bank.csv # Validation dataset example
│ │ ├── src/
│ │ │ ├── sdlgui.py # Main GUI layout and logic
│ │ │ ├── guifunctions.py # Experiment setup, seed library, dispensing
│ │ │ ├── liquidhandler.py # AxiDraw and syringe pump control
│ │ │ ├── dataprocessing.py # Data extraction, ML/AL integration
│ │ │ └── sdlvariables.py # Global variables and experiment state
│ │ ├── resources/ # Icons and assets
│ │ ├── main.py # Entry point (runs the GUI)
│ │ ├── requirements.txt
│ │ └── README.md
│ ├── SDL CAD Files/ # 3D printable parts (STL, STEP)
│ ├── Pen Plotter LH Build Guide.pdf # Building instructions for hardware
│ ├── SDL_SOP.pdf # Standard operating procedure
│ └── README.md
│
├── Pipette Liquid Handler/ # Wireless autopipette-based liquid handler (External Repo)
│ ├── Pipette SDL Software/ # GUI and automation software
│ │ ├── data/
│ │ │ └── GOx Assay data_bank.csv # Validation dataset example
│ │ ├── src/
│ │ │ ├── sdlgui.py # Main GUI layout and logic
│ │ │ ├── guifunctions.py # Experiment setup, seed library, dispensing
│ │ │ ├── liquidhandler.py # Pipette and pump control
│ │ │ ├── dataprocessing.py # Data extraction, ML/AL integration
│ │ │ └── sdlvariables.py # Global variables and experiment state
│ │ ├── resources/ # Icons, tip positions, RemoteControl
│ │ ├── main.py # Entry point (runs the GUI)
│ │ ├── requirements.txt
│ │ └── README.md
│ ├── Config Files/ # G-code and controller config (config.g, homeall.g, etc.)
│ ├── Pipette CAD Files/ # 3D design files (needle holder, vial rack, etc.)
│ ├── WIP Controller Program/ # Work-in-progress controller script alternatives
│ ├── Pipette Liquid Handler Building Guide.pdf
│ ├── Pipette Liquid Handler Parts List.xlsx
│ └── README.md
│
├── Images/ # Figures for README and docs
├── index.html # Project homepage
├── LICENSE
└── README.md # This file

Quick links:Tutorial Notebook 1 (AL) · Tutorial Notebook 2 (SDL) · Pen Plotter Liquid Handler · Pipette Liquid Handler


Tutorial Overview

The goal of the provided tutorial is to walk through the essentials of AL from start to finish, providing both conceptual explanations and hands-on code examples. A basic understanding of ML is assumed. If you're new to ML, we highly recommend reviewing Part 1 of our User’s Guide series. This guide is structured into three main tutorial notebooks, each building on the last for a smooth learning experience. Major points of interest from the guide provided are discussed below.

We begin with a simple, two-dimensional example of Bayesian Optimization (BO) applied to a black-box function. This notebook introduces the foundational concepts of active learning, inccluding data seeding, fitting surrogate models to data, and applying various acquisition functions to choose new sampling points.

Finally, we apply AL to a real experimental dataset involving enzymes. This notebook demonstrates how active learning can be used to efficiently select informative experiments and accelerate discovery in scientific research. This notebook explores: seed library generation (initial sampling) and closing the loop in the context of an SDL.


Abstract

Experimentation is inherently difficult because most methods require substantial refinement, calibration, and validation before high-quality, reliable data can be collected. In most cases, experimental domains have multiple variables (i.e., high dimensionality), thus requiring their simultaneous optimization for single and multi-objective targets. Traditional experimental approaches rely on trial-and-error methods guided by rational decision making, but these become increasingly inefficient and ineffective as complex interactions between inputs limit our ability to capture underlying trends using conventional statistical approaches. Active learning and machine learning (AL/ML) combined with automation represents an indispensable approach for future laboratory productivity. However, a steep initial learning curve and high costs of instrumentation pose substantial barriers to adopt this powerful approach. To democratize access, we provide a comprehensive tutorial covering both the computational skills and hardware implementation necessary for self-driven experimental workflows. The accompanying open-source, low-cost liquid handling platforms offer practical templates for researchers adopting self-driving lab (SDL) methodologies.


Authors:

Apostolos Maroulis, Dylan Waynor

Last Updated 01/29/2026 Version 1.0.0

About

No description, website, or topics provided.

Resources

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

readme home

Overview

Self-driving laboratories (SDLs) address a common bottleneck in experimentation: time and effort required to explore large parameter spaces. By combining automated experimentation with machine learning (ML) and Bayesian optimization (BO), an SDL can iteratively design experiments and learn from resulting data in a closed-loop, fully autonomous workflow.

This repository contains the instructions/code/files for the assembly and operations of a Pen Plotter Driven Liquid Handler and Pipette Driven Liquid Handler as well as a collection of hands-on tutorial notebooks for active learning. Both devices are designed as low-cost automation tools to produce SDLs. The pen plotter-driven liquid handler is created using rigid pre-built spatial components that are modified to fit a user-developed fluidic system. The pipette-driven liquid handler is designed using modular components to provide the most flexibility, paired with a wireless autopipette.

In addition to hardware documentation, this repository includes a representative dataset generated using the SDL pipeline implemented here. The dataset was produced fully autonomously, and is used as an example to demonstrate how the design-build-test-learn (DBTL) workflow operates in practice, from experimental design through surrogate model training. We use the optimization of a glucose oxidase (GOx) enzyme assay, which are common in wet-lab environments and are well suited as a representative example.


Repository Structure

Use this diagram to navigate the repository:

├── Hands-on Tutorial/ # AL and SDL tutorial notebooks and example data
│ ├── Notebook 1 - AL Tutorial.ipynb # Principles of Active Learning
│ ├── Notebook 2 - SDL Tutorial.ipynb # Real-world SDL application (enzyme assay)
│ ├── GOx Assay data_bank_renamed.csv # Example GOx assay data for tutorials
│ ├── Older Iterations/ # Previous notebook versions
│ ├── requirements.txt # Python dependencies for tutorials
│ └── README.md
│
├── Pen Plotter Liquid Handler/ # AxiDraw-based liquid handler (hardware + software)
│ ├── Pen Plotter SDL Software/ # GUI and automation software
│ │ ├── data/
│ │ │ └── GOx Assay data_bank.csv # Validation dataset example
│ │ ├── src/
│ │ │ ├── sdlgui.py # Main GUI layout and logic
│ │ │ ├── guifunctions.py # Experiment setup, seed library, dispensing
│ │ │ ├── liquidhandler.py # AxiDraw and syringe pump control
│ │ │ ├── dataprocessing.py # Data extraction, ML/AL integration
│ │ │ └── sdlvariables.py # Global variables and experiment state
│ │ ├── resources/ # Icons and assets
│ │ ├── main.py # Entry point (runs the GUI)
│ │ ├── requirements.txt
│ │ └── README.md
│ ├── SDL CAD Files/ # 3D printable parts (STL, STEP)
│ ├── Pen Plotter LH Build Guide.pdf # Building instructions for hardware
│ ├── SDL_SOP.pdf # Standard operating procedure
│ └── README.md
│
├── Pipette Liquid Handler/ # Wireless autopipette-based liquid handler (External Repo)
│ ├── Pipette SDL Software/ # GUI and automation software
│ │ ├── data/
│ │ │ └── GOx Assay data_bank.csv # Validation dataset example
│ │ ├── src/
│ │ │ ├── sdlgui.py # Main GUI layout and logic
│ │ │ ├── guifunctions.py # Experiment setup, seed library, dispensing
│ │ │ ├── liquidhandler.py # Pipette and pump control
│ │ │ ├── dataprocessing.py # Data extraction, ML/AL integration
│ │ │ └── sdlvariables.py # Global variables and experiment state
│ │ ├── resources/ # Icons, tip positions, RemoteControl
│ │ ├── main.py # Entry point (runs the GUI)
│ │ ├── requirements.txt
│ │ └── README.md
│ ├── Config Files/ # G-code and controller config (config.g, homeall.g, etc.)
│ ├── Pipette CAD Files/ # 3D design files (needle holder, vial rack, etc.)
│ ├── WIP Controller Program/ # Work-in-progress controller script alternatives
│ ├── Pipette Liquid Handler Building Guide.pdf
│ ├── Pipette Liquid Handler Parts List.xlsx
│ └── README.md
│
├── Images/ # Figures for README and docs
├── index.html # Project homepage
├── LICENSE
└── README.md # This file

Quick links:Tutorial Notebook 1 (AL) · Tutorial Notebook 2 (SDL) · Pen Plotter Liquid Handler · Pipette Liquid Handler


Tutorial Overview

The goal of the provided tutorial is to walk through the essentials of AL from start to finish, providing both conceptual explanations and hands-on code examples. A basic understanding of ML is assumed. If you're new to ML, we highly recommend reviewing Part 1 of our User’s Guide series. This guide is structured into three main tutorial notebooks, each building on the last for a smooth learning experience. Major points of interest from the guide provided are discussed below.

We begin with a simple, two-dimensional example of Bayesian Optimization (BO) applied to a black-box function. This notebook introduces the foundational concepts of active learning, inccluding data seeding, fitting surrogate models to data, and applying various acquisition functions to choose new sampling points.

Finally, we apply AL to a real experimental dataset involving enzymes. This notebook demonstrates how active learning can be used to efficiently select informative experiments and accelerate discovery in scientific research. This notebook explores: seed library generation (initial sampling) and closing the loop in the context of an SDL.


Abstract

Experimentation is inherently difficult because most methods require substantial refinement, calibration, and validation before high-quality, reliable data can be collected. In most cases, experimental domains have multiple variables (i.e., high dimensionality), thus requiring their simultaneous optimization for single and multi-objective targets. Traditional experimental approaches rely on trial-and-error methods guided by rational decision making, but these become increasingly inefficient and ineffective as complex interactions between inputs limit our ability to capture underlying trends using conventional statistical approaches. Active learning and machine learning (AL/ML) combined with automation represents an indispensable approach for future laboratory productivity. However, a steep initial learning curve and high costs of instrumentation pose substantial barriers to adopt this powerful approach. To democratize access, we provide a comprehensive tutorial covering both the computational skills and hardware implementation necessary for self-driven experimental workflows. The accompanying open-source, low-cost liquid handling platforms offer practical templates for researchers adopting self-driving lab (SDL) methodologies.


Authors:

Apostolos Maroulis, Dylan Waynor

Last Updated 01/29/2026 Version 1.0.0

About

No description, website, or topics provided.

Resources

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

readme home

Overview

Self-driving laboratories (SDLs) address a common bottleneck in experimentation: time and effort required to explore large parameter spaces. By combining automated experimentation with machine learning (ML) and Bayesian optimization (BO), an SDL can iteratively design experiments and learn from resulting data in a closed-loop, fully autonomous workflow.

This repository contains the instructions/code/files for the assembly and operations of a Pen Plotter Driven Liquid Handler and Pipette Driven Liquid Handler as well as a collection of hands-on tutorial notebooks for active learning. Both devices are designed as low-cost automation tools to produce SDLs. The pen plotter-driven liquid handler is created using rigid pre-built spatial components that are modified to fit a user-developed fluidic system. The pipette-driven liquid handler is designed using modular components to provide the most flexibility, paired with a wireless autopipette.

In addition to hardware documentation, this repository includes a representative dataset generated using the SDL pipeline implemented here. The dataset was produced fully autonomously, and is used as an example to demonstrate how the design-build-test-learn (DBTL) workflow operates in practice, from experimental design through surrogate model training. We use the optimization of a glucose oxidase (GOx) enzyme assay, which are common in wet-lab environments and are well suited as a representative example.


Repository Structure

Use this diagram to navigate the repository:

├── Hands-on Tutorial/ # AL and SDL tutorial notebooks and example data
│ ├── Notebook 1 - AL Tutorial.ipynb # Principles of Active Learning
│ ├── Notebook 2 - SDL Tutorial.ipynb # Real-world SDL application (enzyme assay)
│ ├── GOx Assay data_bank_renamed.csv # Example GOx assay data for tutorials
│ ├── Older Iterations/ # Previous notebook versions
│ ├── requirements.txt # Python dependencies for tutorials
│ └── README.md
│
├── Pen Plotter Liquid Handler/ # AxiDraw-based liquid handler (hardware + software)
│ ├── Pen Plotter SDL Software/ # GUI and automation software
│ │ ├── data/
│ │ │ └── GOx Assay data_bank.csv # Validation dataset example
│ │ ├── src/
│ │ │ ├── sdlgui.py # Main GUI layout and logic
│ │ │ ├── guifunctions.py # Experiment setup, seed library, dispensing
│ │ │ ├── liquidhandler.py # AxiDraw and syringe pump control
│ │ │ ├── dataprocessing.py # Data extraction, ML/AL integration
│ │ │ └── sdlvariables.py # Global variables and experiment state
│ │ ├── resources/ # Icons and assets
│ │ ├── main.py # Entry point (runs the GUI)
│ │ ├── requirements.txt
│ │ └── README.md
│ ├── SDL CAD Files/ # 3D printable parts (STL, STEP)
│ ├── Pen Plotter LH Build Guide.pdf # Building instructions for hardware
│ ├── SDL_SOP.pdf # Standard operating procedure
│ └── README.md
│
├── Pipette Liquid Handler/ # Wireless autopipette-based liquid handler (External Repo)
│ ├── Pipette SDL Software/ # GUI and automation software
│ │ ├── data/
│ │ │ └── GOx Assay data_bank.csv # Validation dataset example
│ │ ├── src/
│ │ │ ├── sdlgui.py # Main GUI layout and logic
│ │ │ ├── guifunctions.py # Experiment setup, seed library, dispensing
│ │ │ ├── liquidhandler.py # Pipette and pump control
│ │ │ ├── dataprocessing.py # Data extraction, ML/AL integration
│ │ │ └── sdlvariables.py # Global variables and experiment state
│ │ ├── resources/ # Icons, tip positions, RemoteControl
│ │ ├── main.py # Entry point (runs the GUI)
│ │ ├── requirements.txt
│ │ └── README.md
│ ├── Config Files/ # G-code and controller config (config.g, homeall.g, etc.)
│ ├── Pipette CAD Files/ # 3D design files (needle holder, vial rack, etc.)
│ ├── WIP Controller Program/ # Work-in-progress controller script alternatives
│ ├── Pipette Liquid Handler Building Guide.pdf
│ ├── Pipette Liquid Handler Parts List.xlsx
│ └── README.md
│
├── Images/ # Figures for README and docs
├── index.html # Project homepage
├── LICENSE
└── README.md # This file

Quick links:Tutorial Notebook 1 (AL) · Tutorial Notebook 2 (SDL) · Pen Plotter Liquid Handler · Pipette Liquid Handler


Tutorial Overview

The goal of the provided tutorial is to walk through the essentials of AL from start to finish, providing both conceptual explanations and hands-on code examples. A basic understanding of ML is assumed. If you're new to ML, we highly recommend reviewing Part 1 of our User’s Guide series. This guide is structured into three main tutorial notebooks, each building on the last for a smooth learning experience. Major points of interest from the guide provided are discussed below.

We begin with a simple, two-dimensional example of Bayesian Optimization (BO) applied to a black-box function. This notebook introduces the foundational concepts of active learning, inccluding data seeding, fitting surrogate models to data, and applying various acquisition functions to choose new sampling points.

Finally, we apply AL to a real experimental dataset involving enzymes. This notebook demonstrates how active learning can be used to efficiently select informative experiments and accelerate discovery in scientific research. This notebook explores: seed library generation (initial sampling) and closing the loop in the context of an SDL.


Abstract

Experimentation is inherently difficult because most methods require substantial refinement, calibration, and validation before high-quality, reliable data can be collected. In most cases, experimental domains have multiple variables (i.e., high dimensionality), thus requiring their simultaneous optimization for single and multi-objective targets. Traditional experimental approaches rely on trial-and-error methods guided by rational decision making, but these become increasingly inefficient and ineffective as complex interactions between inputs limit our ability to capture underlying trends using conventional statistical approaches. Active learning and machine learning (AL/ML) combined with automation represents an indispensable approach for future laboratory productivity. However, a steep initial learning curve and high costs of instrumentation pose substantial barriers to adopt this powerful approach. To democratize access, we provide a comprehensive tutorial covering both the computational skills and hardware implementation necessary for self-driven experimental workflows. The accompanying open-source, low-cost liquid handling platforms offer practical templates for researchers adopting self-driving lab (SDL) methodologies.


Authors:

Apostolos Maroulis, Dylan Waynor

Last Updated 01/29/2026 Version 1.0.0

About

No description, website, or topics provided.

Resources

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

readme home

Overview

Self-driving laboratories (SDLs) address a common bottleneck in experimentation: time and effort required to explore large parameter spaces. By combining automated experimentation with machine learning (ML) and Bayesian optimization (BO), an SDL can iteratively design experiments and learn from resulting data in a closed-loop, fully autonomous workflow.

This repository contains the instructions/code/files for the assembly and operations of a Pen Plotter Driven Liquid Handler and Pipette Driven Liquid Handler as well as a collection of hands-on tutorial notebooks for active learning. Both devices are designed as low-cost automation tools to produce SDLs. The pen plotter-driven liquid handler is created using rigid pre-built spatial components that are modified to fit a user-developed fluidic system. The pipette-driven liquid handler is designed using modular components to provide the most flexibility, paired with a wireless autopipette.

In addition to hardware documentation, this repository includes a representative dataset generated using the SDL pipeline implemented here. The dataset was produced fully autonomously, and is used as an example to demonstrate how the design-build-test-learn (DBTL) workflow operates in practice, from experimental design through surrogate model training. We use the optimization of a glucose oxidase (GOx) enzyme assay, which are common in wet-lab environments and are well suited as a representative example.


Repository Structure

Use this diagram to navigate the repository:

├── Hands-on Tutorial/ # AL and SDL tutorial notebooks and example data
│ ├── Notebook 1 - AL Tutorial.ipynb # Principles of Active Learning
│ ├── Notebook 2 - SDL Tutorial.ipynb # Real-world SDL application (enzyme assay)
│ ├── GOx Assay data_bank_renamed.csv # Example GOx assay data for tutorials
│ ├── Older Iterations/ # Previous notebook versions
│ ├── requirements.txt # Python dependencies for tutorials
│ └── README.md
│
├── Pen Plotter Liquid Handler/ # AxiDraw-based liquid handler (hardware + software)
│ ├── Pen Plotter SDL Software/ # GUI and automation software
│ │ ├── data/
│ │ │ └── GOx Assay data_bank.csv # Validation dataset example
│ │ ├── src/
│ │ │ ├── sdlgui.py # Main GUI layout and logic
│ │ │ ├── guifunctions.py # Experiment setup, seed library, dispensing
│ │ │ ├── liquidhandler.py # AxiDraw and syringe pump control
│ │ │ ├── dataprocessing.py # Data extraction, ML/AL integration
│ │ │ └── sdlvariables.py # Global variables and experiment state
│ │ ├── resources/ # Icons and assets
│ │ ├── main.py # Entry point (runs the GUI)
│ │ ├── requirements.txt
│ │ └── README.md
│ ├── SDL CAD Files/ # 3D printable parts (STL, STEP)
│ ├── Pen Plotter LH Build Guide.pdf # Building instructions for hardware
│ ├── SDL_SOP.pdf # Standard operating procedure
│ └── README.md
│
├── Pipette Liquid Handler/ # Wireless autopipette-based liquid handler (External Repo)
│ ├── Pipette SDL Software/ # GUI and automation software
│ │ ├── data/
│ │ │ └── GOx Assay data_bank.csv # Validation dataset example
│ │ ├── src/
│ │ │ ├── sdlgui.py # Main GUI layout and logic
│ │ │ ├── guifunctions.py # Experiment setup, seed library, dispensing
│ │ │ ├── liquidhandler.py # Pipette and pump control
│ │ │ ├── dataprocessing.py # Data extraction, ML/AL integration
│ │ │ └── sdlvariables.py # Global variables and experiment state
│ │ ├── resources/ # Icons, tip positions, RemoteControl
│ │ ├── main.py # Entry point (runs the GUI)
│ │ ├── requirements.txt
│ │ └── README.md
│ ├── Config Files/ # G-code and controller config (config.g, homeall.g, etc.)
│ ├── Pipette CAD Files/ # 3D design files (needle holder, vial rack, etc.)
│ ├── WIP Controller Program/ # Work-in-progress controller script alternatives
│ ├── Pipette Liquid Handler Building Guide.pdf
│ ├── Pipette Liquid Handler Parts List.xlsx
│ └── README.md
│
├── Images/ # Figures for README and docs
├── index.html # Project homepage
├── LICENSE
└── README.md # This file

Quick links:Tutorial Notebook 1 (AL) · Tutorial Notebook 2 (SDL) · Pen Plotter Liquid Handler · Pipette Liquid Handler


Tutorial Overview

The goal of the provided tutorial is to walk through the essentials of AL from start to finish, providing both conceptual explanations and hands-on code examples. A basic understanding of ML is assumed. If you're new to ML, we highly recommend reviewing Part 1 of our User’s Guide series. This guide is structured into three main tutorial notebooks, each building on the last for a smooth learning experience. Major points of interest from the guide provided are discussed below.

We begin with a simple, two-dimensional example of Bayesian Optimization (BO) applied to a black-box function. This notebook introduces the foundational concepts of active learning, inccluding data seeding, fitting surrogate models to data, and applying various acquisition functions to choose new sampling points.

Finally, we apply AL to a real experimental dataset involving enzymes. This notebook demonstrates how active learning can be used to efficiently select informative experiments and accelerate discovery in scientific research. This notebook explores: seed library generation (initial sampling) and closing the loop in the context of an SDL.


Abstract

Experimentation is inherently difficult because most methods require substantial refinement, calibration, and validation before high-quality, reliable data can be collected. In most cases, experimental domains have multiple variables (i.e., high dimensionality), thus requiring their simultaneous optimization for single and multi-objective targets. Traditional experimental approaches rely on trial-and-error methods guided by rational decision making, but these become increasingly inefficient and ineffective as complex interactions between inputs limit our ability to capture underlying trends using conventional statistical approaches. Active learning and machine learning (AL/ML) combined with automation represents an indispensable approach for future laboratory productivity. However, a steep initial learning curve and high costs of instrumentation pose substantial barriers to adopt this powerful approach. To democratize access, we provide a comprehensive tutorial covering both the computational skills and hardware implementation necessary for self-driven experimental workflows. The accompanying open-source, low-cost liquid handling platforms offer practical templates for researchers adopting self-driving lab (SDL) methodologies.


Authors:

Apostolos Maroulis, Dylan Waynor

Last Updated 01/29/2026 Version 1.0.0

About

No description, website, or topics provided.

Resources

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages