Team:Groningen/Hardware

iGEM Groningen 2019 :: Hardware

Hardware

1. Introduction

For printing a bio-QR code we needed bio-ink and a bio-printer. While the wet lab members were taking care of the ink, we needed to build our own precision bio-printer. The existing bio-printing solutions are expensive and not modular.

To achieve these goals, we decided to modify a laser CNC and a 3D printer as follows.

2. Adapting a 2D plotter for bio printing

We adapted the Eleksmaker A5 Laser CNC (figure 1). The laser module of the CNC has an operational voltage of 12V, same as the peristaltic pump in our inventory. Also, since the CNC is controlled by an Arduino Nano, it is preprogrammed and synchronized with the axial movements. Plugging in the peristaltic pump in place of a laser module works fine.

Figure 1 - Eleksmaker A4 laser
But then we face the challenge of flow moderation since the peristaltic pump has:
  • Flow range: 0-100 mL / min
  • Speed range: 0.1-100 rpm
  • Motor rpm: 5000 rpm

To overcome the issue of flow moderation we need to control the speed of the pump which is done by introducing a Current Regulator circuit between the output of Arduino and the peristaltic pump. Current regulation can easily be achieved by using LM317 in current limiter mode.

2.1. Current regulator circuit
Integrated Circuit (IC):
The LM317 device is an adjustable three-terminal positive-voltage regulator capable of supplying more than 1.5 A over an output-voltage range of 1.25 V to 37 V (figure 2). It includes current limiting, thermal overload protection, and safe operating area protection.

The datasheet for this IC is available here: LM317 Datasheet

Figure 2 - LM317 as Current Regulator
This current regulator circuit has a constant voltage but can vary the current going to the load as follows:

Where Vref is the supplied input voltage to LM317 and R1 is the externally attached resistor.

2.2. Modifying the circuit to fit our needs:

The resistor in series with the Vout provides high current regulation which was not sufficient in reducing the pump speeds (figure 2). Since we basically have a variable current source across the load and we know that in series connections current remains constant across resistances whereas in parallel connections we can change current depending upon the shunt/parallel resistance. So, we put a 10 ohm potentiometer as a shunt across the motor to get more precise control over the flow rate (figure 3).

Figure 3 - modified current regulator
Ohm’s law:

And from the LM317 circuit we already have:

Variables we can use to control the pump speed are:

  • Voltage: which can be controlled via Laser GRBL software i.e. the intensity control for laser module.
  • Shunt: when the resistance is set less than the internal resistance of the motor it draws more current and slows the motor.

It is important for us to have precise control over the flow for a high resolution QR code. After testing we realized that the voltage control from the laser CNC firmware is insufficient in giving a precise control since DC motors needs time to slow down their RPM.

Using a DMM and an oscilloscope we observed that output of the laser CNC is highly fluctuating and even though we thought we could control the voltage using inbuilt features, the peak voltage is always 12.2V and the minimum voltage changes as per our intensity settings.

To get good control over a dc motor we thought of adding an additional brain to the computer in the form of an Arduino Uno (figure 4). The goal here was to reduce the voltage fluctuations and to get a near perfect square wave generated from the fluctuating waveform such that it could act as a trigger input for the DC motor.

This trigger input would help run the motor when the input voltage is above 11V and it would cut off the motor as soon as the voltage drops below 11V. Also, we needed to add additional control to the motor speed which we did using an analog Potentiometer.

Figure 4 - circuit diagram Arduino Uno

Since we were working with Arduino Uno, we decided to add an ultrasonic sensor to the board which would help in detecting our reservoir levels and turn off the entire system in case of low reservoir levels. However, after completing the circuit and testing it, we concluded that this setup is impractical for precision printing (figure 5). The DC motor is controlled by voltage regulation and the motor is unable to adapt in time to rapid voltage fluctuations resulting in high latency in armature turning. This translates to having overflow and leaking ink.

Figure 5 - modified laser CNC into a bioprinter

3. Adapting a 3D printer for bioprinting

In order to print a biological QR code, we set out to modify a commercially available 3D printer (Vertex K8400), into a bioprinter (figure 6 and 7). First the filament extruder head, the part that pushes the filament to nozzle, is replaced with a peristaltic pump head (figure 7). A pipette tip (10 µL tip) connected to silicon tubing (inner diameter of 1.6 mm) was mounted on top of the print head (figure 7). For more than one type of bio-ink, we can potentially use the second extruder of the printer and modify it similarly. The silicon tubing is plugged in the reservoir via the peristaltic pump head, setting the printer up for handling liquid biological ink (bio-ink). This bio-ink solidifies within seconds upon contact with the printing surface. The code (G-code) responsible for instructing the printer to create a QR code can be created using our custom software. We can control the stepper motor driving the peristaltic pump head to control and adjust the flow rate of bio-ink during printing jobs. The temperature requirements for printing are removed from the G-code to allow the printer to print without heating the nozzle. These adaptations effectively set up our printer for printing multiple engineered bacteria using bio-ink.

Figure 6 - Velleman Vertex K8400 3D printer

Figure 7 - (left) filament extruder head to be replaced,(mid)Peristaltic pump head for stepper motor (right) pipette tip used as nozzle for printing bio-ink

The peristaltic pump head is not easily available so we decided to print the pump head parts from open source STL files we found on the internet along with ordering one from Aliexpress. In our final design we used the one from Alieexpress. You can check out the design files on Thingiverse.

3.1. Modifying the g-code for printing with bio-ink

To control the flow rate we make use of G-code parameters for extrusion and movement speed (E and F respectively) in the code itself. We use the Marlin flavor G-code for 3D printing.

The Marlin-style gcode commands can be found here: http://marlinfw.org/meta/gcode/

First we set up the printer for working with bio-ink as described earlier. Additionally, the printing bed was lowered to allow the printing tip to cross over the walls of the plates. Once the bed is lowered the axial movements are triggered to reach the desired coordinates and the bed is raised enough to provide smooth printing maneuvers. the speed of movements is adjusted using the F command and the amount of bio-ink extruded is set by E command.

G-code for setting up the printer:
M82 ; Absolute extrusion mode
G28 ; Home extruder
M107 ; Turn off fan
G90 ; ABSOLUTE positioning
M83 ; Extruder in relative mode
M302 E0 ; Take away temperature requirements or extrusion
G1 Z30 F3000; Raise
M400
G1 X175 Y175 E+0.5 F5000
G1 X165 Y165 ; liquid at tip
M400

After setting up the printer we move to printing. The following is an example code for printing a square. G1 command is used to initiate movements for stepper motors (figure 8). The relative positioning helps in keeping track of the print rather than mapping every coordinate individually. After every extrusion the liquid pressure builds up and may cause a drip, hence, to prevent it we use a negative extrusion value to retract the bio-ink.

Printing a square inside a square:
; ######### Small Square 1 ########
G90 ; ABSOLUTE positioning
G1 E+0.2
G4  S0.1
G1 Z0.65 F3000
G91 ; RELATIVE positioning
M400
G1 X+8.571428571428571 E+0.6 F300
M400
G1 Y+8.571428571428571 E+0.6
M400
G1 X-8.571428571428571 E+0.6
M400
G1 Y-8.571428571428571 E+0.6
M400
G90 ; ABSOLUTE positioning
G1 Z5.2 F3000
G91 ; RELATIVE positioning
G1 E-0.7

Using above code we were able to print a square with line with variable line thickness:

3.2. Printing QR codes

By modifying the G-code, we were able to print a QR code shape (figure 8). the printed QR is not scannable since the actual linewidth of the squares in the code is greater than the width/diameter of dots or line within the code.

Figure 8 - Example of QR code shape printed with dyed bio-ink

To conclude, we were able to build a bioprinter based on a commercial 3D printer. Reproducibility and precision are assessed in the results section. After optimizing our G-code we were able to print lines as thin as 0.5 mm. Furthermore we demonstrate the ability to print dots, a feat that, to the best of our knowledge, has not ever been achieved before by modifying a commercial 3D printer into a bioprinter. In addition to hardware, we developed accompanying software to create and read QR codes. Our modular approach allows the velleman K8400 to be used as both a bioprinter and 3D-printer. Using the described procedures, it is possible to convert any 3D printer into a bioprinter.