• Stars
    star
    168
  • Rank 225,507 (Top 5 %)
  • Language
    Jupyter Notebook
  • License
    BSD 2-Clause "Sim...
  • Created almost 7 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

poseidon system - open source syringe pumps and microscope for laboratories

poseidon_logo

contributions welcome

poseidon: Open source bioinstrumentation

An easy-to-use, highly customizable, and open source syringe pump and microscope system.

Documentation: https://pachterlab.github.io/poseidon/

Paper: A. Sina Booeshaghi, Eduardo da Veiga Beltrame, Dylan Bannon, Jase Gehring and Lior Pachter, Principles of open source bioinstrumentation applied to the poseidon syringe pump system, Scientific Reports 9, Article number: 12385 (2019).

The tl;dr

The poseidon syringe pump and microscope system is an open source alternative to commercial systems. It costs less than $400 and can be assembled in an hour. It uses 3D printed parts and common components that can be easily purchased either from Amazon or other retailers. The microscope and pumps can be used together in microfluidics experiments, or independently for other applications. The pumps and microscope can be run from a Windows, Mac, Linux, or Raspberry Pi computer with an easy to use GUI.

ortho_edit

What is included?

  • Computer Aided Design (CAD) files of the 3D printed components.
  • Controller software (Python) and a graphical user interface (GUI) to control the pumps.
  • Arduino firmware to send commands to the motors and receive commands from the GUI.
  • Bill of materials for sourcing and purchasing materials.
  • Detailed assembly instructions of hardware components.
  • Single click executable files for Mac, Windows, Linux, and Raspberry Pi systems.

Getting Started

3D printing components and purchasing hardware

The 3D printed components can be fabricated on any desktop fused filament fabrication (FFF) 3D printer. They were designed using Autodesk Fusion 360, a proprietary CAD software that offers free academic licenses.

  • Fusion360 interactive view of poseidon microscope CAD.
  • Fusion360 interactive view of poseidon pump.
  • STL, STEP, IGES, Fusion 360 archive files, and bill of materials are available in the HARDWARE/ folder.
  • Bill of materials with prices and vendor links on a Google Spreadsheet.

Build Videos

Syringe Pump: https://www.youtube.com/watch?v=7YSiO6usR1M
Microscope : https://www.youtube.com/watch?v=Szg-vjukonA
Arduino : https://www.youtube.com/watch?v=Xl02fsRCJ7U
Raspberry Pi: https://www.youtube.com/watch?v=g3pXNY8snOg

Running poseidon: https://youtu.be/VmoB_fPc4L4

Setting up the Arduino

We use the Arduino CNC shield to allow for up to three pumps can be controlled from a computer or from the Rapsberry Pi microscope.

The software is configured to run the stepper motors with 200 steps per revolution at 1/32 microstepping, which translates to 6400 steps per rotation. To configure this, it is necessary to add 3 jumpers between the M0, M1 and M2 pins of the Arduino CNC shield. More information about microstepping can be found in the product page for the DRV8825 Stepper Motor Driver, which is used by the CNC shield. See the build videos for more detail.

The Arduino should be flashed with the arduino_serialCOM_v0.1.ino sketch, available in the SOFTWARE/ folder.

Make sure to download and install the AccelStepper library. To install, unzip the zip file to the libraries sub-folder of your sketchbook, if you get stuck here is a how-to.

The pumps are driven by an Arduino board that interprets commands sent via USB and sends the signals to control the stepper motor movement. For directions on how to flash an arduino please refer to the official guide: https://www.arduino.cc/en/Guide/HomePage

Installing software

The Python scripts are available in the SOFTWARE/ folder. The GUI was created using Qt designer, a drag and drop application for organizing buttons that allows the used to easily make modifications. This GUI is used to interface with a Python script that controls both the microscope and Arduino via USB.

The software you will need to run on your computer in order to control the Arduino is the poseidon_main.py script located in the SOFTWARE/ folder (also included is poseidon_controller_gui.py which is needed).

You have the option of either (1) running from the source code in Python or (2) choosing the appropriate binary file below for your operating system and executing it. Before you run the controller code, MAKE SURE YOU HAVE INSTALLED THE ARDUINO FIRMWARE!!

Startup Checklist

Before starting the Python controller, make sure

  1. The Arduino has the firmware uploaded to it
  2. The Arduino is connected via USB to the computer or Rapsberry Pi microscope
  3. You have appropriately placed jumpers on the CNC Sheild to allow for microstepping and hardware enabling (discussed in build video).
  4. The CNC shield is powered, and that all motors are plugged in to the CNC sheild

Running the software and Testing the pumps

There are two ways to run the controller. The easiest way is to just double click the executable available below. Simply download the executable, double click it, and begin using it. Navigate to the Releases tab at the top to find the following executables.

  • Windows
  • Mac OS
  • Ubuntu (coming soon)
  • Raspbian

Tips/Hints

Things that we have learned along the way that may help with your build.

  • Basic tests indicate that pressures up to 4 MPa can be acheived with 1 microstep and a 1 mL syringe.

  • Set the current limit on your motor controller to vary the stall torque. Increasing the current to the motor increases the stall torque and increases the max pressure that your syringe pump can run at. How to set the current limit.

  • We recommend changing the password on the Raspberry Pi for added security.

  • The speeds and flow rates of the system are limited by the microstepping and the syringe size used.

flow_rates


If you want to run the system from the source code then follow the instructions below.

Windows, Mac, Linux

First make sure you have Python 3 installed on your machine. Then install PyQt5. To install PyQt5 use brew install pyqt5 or conda install pyqt if you are using anaconda. If you are on Linux you can do sudo apt-get install python3-pyqt5. Now we need to add a few packages:

pip3 install --upgrade -pip
pip3 install pyserial
pip3 install opencv-python

On Linux opencv requires extra binaries

sudo apt-get install libatlas-base-dev
sudo apt-get install libjasper-dev
sudo apt-get install libqtgui4
sudo apt-get install libqt4-qt3support
sudo apt-get install libqt4-test

Now you can run

# now the script can be called
python3.5 poseidon_main.py

Raspberry Pi

To run poseidon_main.py on a Raspberry Pi with a fresh install of Raspbian, Python 3 with pyqt5 need to be installed, together with a few packages.

sudo apt-get install python3-pyqt5

# now need to use python3.5 gui.py to invoke the python3 that has pyqt5!
pip3 install --upgrade -pip
pip3 install pyserial
pip3 install opencv-python

# opencv requires a some extra binaries 
sudo apt-get install libatlas-base-dev
sudo apt-get install libjasper-dev
sudo apt-get install libqtgui4
sudo apt-get install libqt4-qt3support
sudo apt-get install libqt4-test

# now the script can be called
python3.5 poseidon_main.py

Now that you have everything installed, go ahead and test it out!

(1) Select the port that your Arduino is plugged into. If you don't see the right port, press update port. (2) Set your microstepping (3) Input appropriate settings (4) Select connect to controller (5) Select Send all settings to controller (6) Go to the controller tab, select all three checkboxes and press Jog +

If the sleds are not moving in the right direction simply rotate the relevant stepper motor plug (that connects to the CNC shield) 180 degrees and plug it back in.

How does it work, and how to modify it. (Very easy!)

The poseidon system was designed to be customizable. It uses the Raspberry Pi and Arduino electronics boards, which are supported by a strong ecosystem of open source hardware and software, facilitating the implementation of new functionalities.

The pump driver uses an Arduino with a CNC shield to run up to three pumps. Each pump has a stepper motor that drives lead screw which in turn moves a sled that is mounted on linear bearings. The displacement of the sled moves the syringe forward or backward allowing the user to dispel or intake liquid.

The controller station uses a Raspberry Pi with a touchscreen to connect to the Arduino and microscope via USB. Because the microscope and Arduino use USB connections, they can alternatively be connected to a computer instead of a Raspberry Pi.

To modify the 3D models, users can either use Fusion 360 or any other CAD software. Simply open up the components, located in the HARDWARE folder, and get editing! Once you're done, go ahead and print out the parts and assemble them.

Most of the modifications to the code will be done in poseidon_main.py and to the GUI. If you want to edit the GUI, first make sure you have installed PyQt Designer (which should have been installed when you downloaded and installed PyQt5, so you can search for it on your computer Designer.exe (Windows) or Designer in your applications folder (Mac). Open up the poseidon_controller_gui.ui in Designer and make whatever modifications you'd like. Then when you are done, you need to convert the modified .ui file to a .py file. Go to the terminal, navigate to the folder where you have poseidon_controller_gui.ui and run the command pyuic5 poseidon_controller_gui.ui > poseidon_controller_gui.py.

When you are done editing the poseidon_main.py you can recreate the single click executable files by following the instructions below.

Installing pyinstaller on Windows 7 and making a single executable for the Python controller

Using Python 3.7 (installing pyqt5 form pip) or 3.4 (installing pyqt5 from executable) on Windows 10 did not work. Python 3.7 yields terrible dependency errors from pyinstaller and with Python 3.4 after making the executable pyqt complains apparently because of windows 10. The solution was to use a machine with Windows 7.

After installing Python 3.5.4 (https://www.python.org/downloads/release/python-354/), using the Windows x86-64 executable installer, these dependencies should install without problems:

python -m pip install pyqt5
python -m pip install pyserial
python -m pip install opencv-python

To compile a binary you should write PyInstaller, instead of pyinstaller...

python -m PyInstaller --version
python -m PyInstaller poseidon_main.py

Just doing python -m PyInstaller gui.py with Python 3.5 on windows 7 threw up some errors, the following line solved the issue. Described here: https://stackoverflow.com/questions/51324754/python-3-6-x-pyinstaller-gives-error-no-module-named-pyqt5-sip

python -m PyInstaller -F poseidon_main.py --hidden-import PyQt5.sip

Safety Considerations

Please review the license before using/developing/distribution poseidon.

The poseidon syringe pump system uses 3D printed PLA plastic and standard off the shelf components which do not pose a health hazard if handled correctly. Improper handling of plastics however can create hazards when working with organic solvents. Initial tests of the poseidon syringe pump showed excessive bending of the syringe pump body. We mitigated this by reinforcing the body with set screws and a thicker base. To mitigate the possibility of catastrophic failure due to clogging we set the reference voltage on the motor controller such that the motor stalls when the pressure in a 1 mL syringe reaches 4 MPa.

Before using the poseidon system in a wetlab environment, please ensure that you have thoroughly tested its functionality for your use case in a dry lab. Once the poseidon system has been moved into a wetlab, it should not be moved back to a drylab or dry workbench.

If you plan to build on the poseidon system, ensure that you communicate any safety concerns that you may have with your design to potential users and collaborators.

Authors

The poseidon system was developed by the Pachter Lab at Caltech by:

Prior work and references

The poseidon project is based on a number of other open source projects and papers.

The pump design was based on the open source syringe pumps published by the Pearce Research Group:

Open-Source Syringe Pump Library
Bas Wijnen, Emily J. Hunt, Gerald C. Anzalone, Joshua M. Pearce
PLOS One, 2014. https://doi.org/10.1371/journal.pone.0107216

With subsequent refinements published on http://www.appropedia.org/Open-source_syringe_pump

The microscope was based on a design published by the Satija Lab:

Single-Cell Single-cell RNA-seq of rheumatoid arthritis synovial tissue using low-cost microfluidic instrumentation
William Stephenson, Laura T. Donlin, Andrew Butler, Cristina Rozo, Ali Rashidfarrokhi, Susan M. Goodman, Lionel B. Ivashkiv, Vivian P. Bykerk, Dana E. Orange, Robert B. Darnell, Harold P. Swerdlow, Rahul Satija
Nature Communicationsvolume 9, Article number: 791 (2018)

All necessary files are available on Metafluidics

More Repositories

1

gget

๐Ÿงฌ gget enables efficient querying of genomic reference databases
Python
936
star
2

kallisto

Near-optimal RNA-Seq quantification
C
654
star
3

ffq

A tool to find sequencing data and metadata from public databases.
Python
538
star
4

BI-BE-CS-183-2023

Introduction to Computational Biology and Bioinformatics Course at Caltech, 2023
Jupyter Notebook
389
star
5

sleuth

Differential analysis of RNA-Seq
R
305
star
6

kb_python

A wrapper for the kallisto | bustools workflow for single-cell RNA-seq pre-processing
Python
147
star
7

kallistobustools

kallisto | bustools workflow for pre-processing single-cell RNA-seq data
115
star
8

seqspec

machine-readable file format for genomic library sequence and structure
Python
110
star
9

voyager

From geospatial to spatial -omics
R
72
star
10

picasso

Picasso: a methods for embedding points in 2D in a way that respects distances while fitting a user-specified shape.
Jupyter Notebook
69
star
11

scRNA-Seq-TCC-prep

Preprocessing of single-cell RNA-Seq (deprecated)
Jupyter Notebook
62
star
12

metakallisto

Using kallisto for metagenomic analysis
Python
50
star
13

LP_2021

TeX
45
star
14

kallisto-transcriptome-indices

Reference transcriptome indices build from kallisto for popular organisms
41
star
15

sircel

Identify cell barcodes from single-cell genomics sequencing experiments
Jupyter Notebook
41
star
16

SpatialFeatureExperiment

Extension of SpatialExperiment with sf
R
36
star
17

MCML

Python
33
star
18

kallisto_paper_analysis

Analysis from kallisto paper
HTML
32
star
19

NYMP_2018

Jupyter Notebook
29
star
20

kma

Keep Me Around: Intron Retention Detection
Python
28
star
21

monod

The Monod package fits CME models to sequencing data.
Python
27
star
22

gget_examples

Examples for gget (https://github.com/pachterlab/gget).
Jupyter Notebook
26
star
23

colosseum

colosseum system - open source fraction collector for laboratories
Jupyter Notebook
24
star
24

GFCP_2022

RNA velocity validation
Jupyter Notebook
23
star
25

MBGBLHGP_2019

Code for reproducing results from the paper "Modular and efficient pre-processing of single-cell RNA-seq data"
Jupyter Notebook
23
star
26

BBB

Bioinformatics for Benched Biologists
Jupyter Notebook
22
star
27

BHGP_2022

Jupyter Notebook
21
star
28

kite

kallisto index tag extractor
Python
20
star
29

aggregationDE

Scripts and software supplement for "Gene-level differential analysis at transcript-level resolution" by Yi, Pimentel, Bray and Pachter
R
20
star
30

qcbc

Jupyter Notebook
19
star
31

splitcode

Flexible and efficient parsing, interpreting and editing of sequencing reads
C
18
star
32

PCCA

Code for performing PCA followed by CCA
Python
18
star
33

sleuth_paper_analysis

Code to reproduce analyses from the sleuth paper
R
17
star
34

concordex

Identification of spatial homogeneous regions
Python
17
star
35

RMEJLBASBMP_2024

Repository for the paper "The impact of package selection and versioning on single-cell RNA-seq analysis"
Jupyter Notebook
17
star
36

CGCCP_2023

scVI extension for unspliced RNA
Jupyter Notebook
16
star
37

CBP_2021

Jupyter Notebook
16
star
38

BYVSTZP_2020

This repository contains the code for reproducing all the results and figures from the preprint "Isoform specificity in the mouse primary motor cortex".
Jupyter Notebook
15
star
39

SBP_2019

Code for producing the analysis in the "Quantifying the tradeoff between sequencing depth and cell number in single-cell RNA-seq" manuscript
Jupyter Notebook
15
star
40

voyagerpy

Python
12
star
41

bears_analyses

Examples of kallisto + sleuth
Python
11
star
42

GSP_2019

Code for reproducing results from the paper "RNA velocity and protein acceleration from single-cell multiomics experiments."
Jupyter Notebook
11
star
43

kallisto-sleuth-workshop-2016

materials and website for the 2016 kallisto sleuth workshop
CSS
11
star
44

lair

home of the bear's lair
CSS
10
star
45

sleuth_walkthroughs

Some sleuth walkthroughs to help you get started
HTML
10
star
46

scATAK

Jupyter Notebook
10
star
47

concordexR

Compute the neighborhood consolidation matrix and identify SHRs
R
10
star
48

MBLGLMBHGP_2021

Jupyter Notebook
8
star
49

Bi-BE-CS-183-2022

Website for the 2021-2022 Caltech class Bi/BE/CS 183: Introduction to Computational Biology and Bioinformatics
Jupyter Notebook
8
star
50

bcl2fastq

source code for bcl2fastq2, files from illumina
C++
8
star
51

CP_2023

Jupyter Notebook
7
star
52

bam2tcc

C++
7
star
53

voyager-testing

Python
7
star
54

GVP_2023

scRNA-seq, regulation, and sysbio
Jupyter Notebook
6
star
55

monod_examples

Tutorials for the Monod package, which fits CME models to sequencing data.
Jupyter Notebook
6
star
56

BGP_2023

Jupyter Notebook
6
star
57

biophysics

Repository for Pachter Lab Biophysics
Python
6
star
58

museumst

Museum of Spatial Transcriptomics
R
6
star
59

GCCP_2022

Roff
5
star
60

SGYP_2019

Jupyter Notebook
5
star
61

BLCSBGLKP_2020

Code for analysis of SARS-CoV-2 sequencing based diagnostic testing data
Jupyter Notebook
5
star
62

kallisto-D

C
5
star
63

zika

sleuth workflow for processing zika RNA-seq dataset
R
5
star
64

SHSOHMP_2024

Code for reproducing the results in the second version of the preprint "Accurate quantification of single-nucleus and single-cell RNA-seq transcripts"
C++
5
star
65

LP_2024

Jupyter Notebook
5
star
66

GBP_2024

Jupyter Notebook
5
star
67

pegasus

modular stepper motor control with Arduino, CNC motor sheild, and Pololu stepper driver. also the workhorse of poseidon and colosseum
Python
4
star
68

SP_2019

Jupyter Notebook
4
star
69

GVFP_2021

SDE comparison preprint
Jupyter Notebook
4
star
70

COVID19-County

COVID-19 data from LA County
Jupyter Notebook
4
star
71

BGP_2024

Jupyter Notebook
4
star
72

FGP_2024

Jupyter Notebook
4
star
73

HSHMP_2022

Python
3
star
74

bibecs183

Bi/BE/CS 183 Winter 2019 - Introduction to Computational Biology and Bioinformatics
Jupyter Notebook
3
star
75

AAQuant

Annotation-Agnostic RNA-seq Quantification
C++
3
star
76

BSP_2023

Jupyter Notebook
3
star
77

BP_2020_2

log(x+1) and log(1+x)
Jupyter Notebook
2
star
78

CP_2021

Code for reproducing the results in "The Split Senate" paper
Python
2
star
79

GRNP_2020

Repository for reproducing the results and figures in Gustafsson et al. 2020
Jupyter Notebook
2
star
80

BKMGP_2021

Jupyter Notebook
2
star
81

isolate_transcripts

Python
2
star
82

CWGFLHGCCHAP_2021

Jupyter Notebook
2
star
83

DBALLSMRDMCMGWSTPMBDKPFP_2023

Jupyter Notebook
2
star
84

GP_2020

Code to reproduce results in the paper "Special Function Methods for Bursty Models of Transcription"
MATLAB
2
star
85

SFEData

Example SpatialFeatureExperiment datasets
R
2
star
86

PROBer

PROBer: A general toolkit for analyzing sequencing-based โ€˜toeprintingโ€™ assays
C++
2
star
87

BTRBP_2020

Jupyter Notebook
2
star
88

BP_2020

Decrease in ACE2 mRNA expression in aged mouse lung, bioRxiv, 2020.
Jupyter Notebook
2
star
89

GP_2021_4

HTML
2
star
90

CGP_2024_2

Jupyter Notebook
2
star
91

HPM_2022

Simulations of the robustness of AAQuant to noise
R
1
star
92

YLMP_2018

Scripts to reproduce analysis in YLMP, 2018
Shell
1
star
93

bcltools

(still in development only a few things work) tools for converting bcls to fastqs and fastqs to bcls
Python
1
star
94

eXpress

Streaming fragment assignment for real-time analysis of sequencing experiments
1
star
95

make

Open source bioinstrumentation projects
1
star
96

GPCTP_2019-2

1
star
97

GP_2020_2

Intrinsic/extrinsic noise mini-project
Jupyter Notebook
1
star
98

GP_2021_3

Jupyter Notebook
1
star
99

kallisto_tests

A set of (regression) tests for kallisto
1
star
100

KBP_2023

1
star