LabBot3D - Toolchain

LabBot3D is a 3D printer configured to do liquid handling and imaging techniques that are commonly run by conventional laboratory automation. The laboratory automation industry in many ways is dominated by a handful of large corporations that typically have a monopoly on the market. This is because a typical product lifecyle is around 8 to 10 years and product support is needed during its lifecycle which makes it very difficult for startups to get in this market. The industry is risk adverse when it comes to scientific equipment which stifles innovation. Also equipment not supported becomes abandoned and eventually gets thrown out as waste.

The scientific community encourages sharing observations collaboratively in order to solve difficult challenges as efficiently as possible. In spite of this, the laboratory automation market normally does not always follow this concept since the components (ie., software, mechanical and/or electronic) are typically proprietary so much where if the machine breaks the customer is dependent on the manufacturer to get it fixed. To encourage investment in innovation it is understandable that this is the situation but sometimes its a big problem that holds up progress.

LabBot3D was designed to provide some transparency for understanding how the equipment works and how it can be calibrated or modified to support innovative science.

The tools used for assemblying methods are open source and here described is a brief explanation what they are and how they are used.
OpenSCAD - Code driven CAD design software

The mechanical components were designed in OpenSCAD which is a code driven CAD design tool. This makes it parametric which is convenient to modify, especially since this CAD design program can be run on MacOS, Windows and Linux computers. Another nice thing is that many parts designed in OpenSCAD are shared in Thingiverse. A part of support to Labbot3D customers is to work with them in providing modules that they need to modify and refine the instrument (or even perhaps to facilitate more transparent experimental data archiving). Since most of the parts designed using this tool are 3D printed, the parts are easy to replicate at low cost. Another nice feature with OpenSCAD is that it has its own javascript library, OpenJSCAD, and its possible to display shapes through browsers.

Fritzing PCB design and Arduino - Electronics
Arduinos and similar open source microcontrollers are great for controlling perpheral devices like pumps, temperature sensors and even generating amplified waveforms for actuating piezoelectric nozzles. Arduino has an interactive developmental environment (IDE) that like OpenSCAD runs on all types of computers and a well established collaborative ecosystem for documenting how to create source code.

Fritzing is an excellent programming environment for developing custom PCBs. It also runs on all types of computers too. There is a large repository of commercially available electronics (Arduinos, Raspberry Pis, sensors, thermistors, resistors, diodes, amplifiers, transistors, etc), to interface with. It is also possible to order custom PCBs through Fritzing or the designs can be exported in industry standard gerber format (RS-274X) to get them made at a PCB fab shop. The LabBot3D development process uses this tool and it is possible to collaborate on electronic designs with the customer base. This shop makes its own PCB prototypes and can ramp up board production quickly.
Raspberry Pi - ARM Computer, Ubuntu OS, Python and PHP programming
LabBot3D runs Raspberry Pis because they are small inexpensive computers that make it very easy to create and support robotics. It is a low power, WIFI embeded, small form factor device that even has a GPIO interface. It runs off a removeable SD card and has a port for a small inexpensive camera. There is a rich community based ecosystem with lots of documentation on how to use and a wide variety of complimentary products and services.

The open source Ubuntu Linux operating system is actually more stable than Windows. It has an Advanced Package Tool (APT) that makes it easy to install and maintain programs. LabBot3D has HDMI and USB ports for setting up the computer and getting on the network. After that its easy to run it remotely using SSH for remote access or you can set up custom GUI interfaces using a webserver like Apache HTTP Server, Node.js, or among others.

PHP is a commonly used scripting language for web programming that is well supported in working with the Apache HTTP server and on Ubuntu. LabBot3D base code interface for controlling the system uses PHP. The source code is open and sufficiently well documented to enable further modification and refinement. Since there are many PHP developers (given it being a common web page programming language) there are many options for further support.

Like PHP, Python is also a widely used scripting language with a very large user base that continually contribute libraries to the community. From machine learning and artificial intelligence tools to web servers and serial interface connections, its an ideal programming environment for controlling robotics. The LabBot3D system includes a Python based scheduler for Smoothieware (a modular G-code intepreter/CNC control system) that is interfaced with PHP using Mosquitto/MQTT TCP sockets, real time data is tracked using Node.js SocketIO.

In addition to scheduling, Python is also used for image processing and data collection. For image processing, pixels are enumerated and statistically analyzed (using tools like Numpy). For data display and image annotation, ProcessingJS is used which is a powerful javascript graphics tool based on Processing.