True's beaked whale.jpg

Western spotted skunk

Hooded skunk

Yellow-throated Marten

Wolverine

True's beaked whale.jpg

Western spotted skunk

Hooded skunk

Yellow-throated Marten

Wolverine

DNA synthesis

Short term goal: inkjet printer based phosphoramidite oligo synthesis

Piezoelectric Oligonucleotide Synthesizer And Microarrayer (POSAM), paper
Pogo control software

Hardware:
Manual for National Instruments PCI-DIO-32HS IO board, $50-$100 used
Manual for National Instruments PCI-6040E, specs, $150+ used

Software:
Pogo (unavailable)
Lombardi v.0.7.3, tgz
Arrayer v.0.9.2, tgz

Arrayer software exploration
-Requires Traditional NI-DAC drivers, only runs on Win XP or earlier.

From Inkjet.cls:
Jets 1-32: Black; 33-64: Dark Cyan.
Jets 65-96: Light Cyan; 97-128: Dark Magenta.
Jets 129-160: Light Magenta; 161-192: Yellow.
mboolNozzle(192) As Boolean
NCHG As Integer = 8192

Private Const REQINTERVALFAST As Integer = 20 #Make interval 1 microseconds or 1MHz.
Private Const REQINTERVALSLOW As Integer = 2000 #Make interval 100 microseconds or 10kHz.

#Load buffer with pzt waveform. This is used for startnstop printing.
trpz = Array(0, 5, 10, 15, 20, 23, 24, 25, 25, 25, 25, 27, 27, 27, 27, 27, _
26, 25, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2, 1, 0.5, 0, 0, 0, 0, _
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
For j = 1 To 50000 Step 100
For i = 1 To 49
wBuffer(j + i) = Int(trpz(i) * 255 / 30) #8 bits, 30 volts fs.
Next i
Next j
## wBuffer = 2..50 102..150 202..250 (500 total copies) 49902..49950 values scaled to 255=30V

sub SelectPztJets:
Private Const LAT As Integer = 256
Private Const CLK As Integer = 512
Private Const SG1 As Integer = 1024
Private Const SG2 As Integer = 2048
Private Const SG3 As Integer = 4096
Private Const NCHG As Integer = 8192
Private Const WBIGSIZE As Long = 1510002
Private Const WBUFFERTEMPSIZE As Long = 415

#Load a buffer with the digital output that selects nozzles.
cnt = 1
buffer(cnt) = NCHG: cnt = cnt + 1
stat = DIG_Out_Grp(DEV, GROUP, 0)
For i = 1 To 64
pulse = (mboolNozzle(i) * SG1 * -1) + _
(mboolNozzle(i + 64) * SG2 * -1) + (mboolNozzle(i + 128) * SG3 * -1)
buffer(cnt) = pulse: cnt = cnt + 1
buffer(cnt) = pulse + CLK: cnt = cnt + 1
buffer(cnt) = 0: cnt = cnt + 1
Next i


30 bits each
buffer(1) = 8192
pulse= -1024(i1) – 2048(i65) – 4096(i129)
buffer(2) = pulse
buffer(3) = pulse + 512
buffer(4) = 0
pulse= -1024(i2) – 2048(i66) – 4096(i130)
buffer(5) = pulse
buffer(6) = pulse + 512
buffer(7) = 0

buffer(193) = 0

buffer(194) = 256
buffer(195) = 0
sent to printhead to select nozzles for print or not at 100us speed.

buffer(cnt) = LAT: cnt = cnt + 1
buffer(cnt) = 0

sub Spew
SelectPztJets
If drops < 1 Then Exit Sub If drops > 500 Then drops = 500
count = 100 * drops

#Output piezo drive waveform.

#Enable pattern generation.
stat = DIG_Block_PG_Config(DEV, GROUP, ENABLEPG, REQSOURCEINTCLK, TIMEBASE, _
REQINTERVALFAST, EXTERNALGATE)
If (stat <> 0) Then ErrorMessage.Display (“DIG_Block_PG_Config error:” & stat), 15


stat = DIG_Block_Out(DEV, GROUP, wBuffer(1), count)

MainFrm.frm:
'Which banks are used?
For x = 1 To 6: usedBanks(x) = False: Next x
For x = 1 To COLZ
For y = 1 To ROWZ
i = theArray(x, y)
If (i > 0) Then usedBanks(i) = True
Next y
Next x


'Actually print.
Screen.MousePointer = vbHourglass
For b = 1 To 6 'For each bank of nozzles.
If (usedBanks(b)) Then
servo.MoveX (BankXOffset(b) - 1500)
For x = 1 To COLZ
Rem For x = 1 To 49 Step 2
'Turn on desired nozzles.
ink.NozzlesAllOff
For y = 1 To ROWZ
If (theArray(x, y) = b) Then ink.Nozzle((b - 1) * 32 + y) = True
Next y
'Spew drops and move 280 microns.
ink.Spew (d)
servo.MoveX (222)
Rem servo.MoveX (444)
Next x
servo.MoveX (-222 * COLZ - BankXOffset(b) + 1500)
End If
Next b

Printhead waveform:
R code:
trap<-c(0, 5, 10, 15, 20, 23, 24, 25, 25, 25, 25, 27, 27, 27, 27, 27, 26, 25, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2, 1, 0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
par(las=2)
barplot(trap,names.arg=c(1:55),cex.names=.85,main="Epson printhead trapezoidal waveform",xlab="microseconds",ylab="Voltage")

Chemicals:
0.02M Iodine in Tetrahydrofuran/ Pyridine/ Water, 40-4330-57 450mL $72.00, Glen Research
dA-CE Phosphoramidite, 10-1000-10M 1.0g $50.00, Glen Research (each)
dA-CE Phosphoramidite, 10-1000-02M 0.25g $12.50, Glen Research (each)
5-ethylthio-1H-tetrazole, 30-3140-52 200mL $100.00, Glen Research
3-Methoxypropionitrile, 500mL $55.00
Glutaronitril, 25g $34.00
Acetonitrile, 500mL $22.00
Dichloromethane, 500mL $23.00
Dichloroacetic acid, 500g $70.00
Grove O² Gas Sensor, $55
Ammonia Solution (28% in Water), 500mL $16.00
Methylamine (ca. 40% in Water, ca. 12mol/L), 500mL $19.00

Oligo/gene synthesis approaches under investigation
Step-by-step synthesis of DNA by Andy Extance

POSAM

A system is offered by Azco Biotech called the OligoArray for making oligos on a chip using electronic deprotection.

Info about DNA synthesis chemistry
DNA synthesis project, only prelim notes

Kwan inkjet printer project
Design of Electronics for a High-Resolution, Multi-Material, and Modular 3D Printer, pdf
Part of the MultiFab project, pdf, supplement

Epson Workforce 30 (ebay $60-$300): F3-3 Mach Turbo II printhead, 600 DPI resolution and 540 nozzles that can eject droplets ranging from 6 pL to 26 pL. 5 channels, 2 rows with 180 nozzles, 3 channels with 60 nozzles each.

Control:

Eight digital signals control printing:
S12, S13, and CK. NCHG determines whether the trapezoidal waveform is applied to the ink chambers; CHA, CHB, and LAT indicate the beginning of a sub-waveform; SI1, S12, and S13 determine drop size; and CK is the clock signal.

DAC is AD5424, $5. Two stage amp LT1632, $9 and Class AB amplifier (5 transistor) as the output stage.

Epson Artisan 50 (ebay $105-400): six rows, 90 nozzles per row. Twice as fast as Workforce 30.

General piezo driver info
Driving piezoelectric actuators in industrial inkjet printers
Design around MP111FD, $140.

Low-Cost Inkjet Process for 3-D Printing by Christopher T. Schmitt, pdf

Other DNA Synthesis methods
Novel Method Could Accelerate DNA Synthesis: The new technique uses an enzyme found in vertebrate immune systems to attach nucleotides to a growing strand. Nat Biotech paper

Piezoelectric Oligonucleotide Synthesizer And Microarrayer (POSAM), 2nd link
Ebay: Print Head F057020
Inkjet heads, forum
Direct InkJet PCB Resist Printing
ASCO Solenoid Valve – 2 Way: 2/2 – Isolation Valve
“PTFE solenoid valve” 190224S30
MG04 gas regulator
Check valves, 0.1psi cracking pressure

Other DNA Synthesis approaches
Cheap DNA Sequencing Is Here. Writing DNA Is Next
Twist: 100 or so holes per nanowell -> combine into genes, $0.10 / base
Gen9: inkjet based -> combine into genes, $0.20 / base
Synthesis of high-quality libraries of long (150mer) oligonucleotides by a novel depurination controlled process
“Moreover, for synthesis of long oligonucleotides, it is important to minimize the most prevalent side reaction—depurination. … Identifying the likely source of depurination as the resident film of detritylation solution adhering to the surface… We found that the detritylation reaction could be effectively and reproducibly terminated by using oxidizer solution to displace the detritylation solution from the flowcell.”

Links
Qiagen PyroMark Q48
RAINDANCE TECHNOLOGIES RDT 1000

Monitoring synthesis by detecting the di-phosphate or mono phosphate:
A new class of cleavable fluorescent nucleotides: synthesis and optimization as reversible terminators for DNA sequencing by synthesis
NIST chemical spectra
UV/Vis+ Photochemistry Database, ATP link
Method for detecting pyrophosphate by means of bioluminescence detection
“Pyrosequencing Sheds Light on DNA Sequencing” (2017), pdf
“PYROSEQUENCING- PRINCIPLES AND APPLICATIONS”, pdf
Pyrosequencing