I’ve now tested the digital microfluidics board via microcontroller. The digital microfluidics board moves a liquid droplet via Electrowetting-on-Dielectric (EWOD). The microcontroller switches the high voltage via a switching board (pictured below, using Panasonic PhotoMOS chips), which controls the +930VDC output by the HVPS (posted earlier), and runs over USB using no cost Processing.org software. This is alpha stage testing.. cleaner version to be built. The goal of course is to scale the hardware to allow automation of microbiology protocols.
Labview is quite expensive, and industrial-grade high voltage switching boards are also quite expensive. So I built my own hardware and the Processing.org language is an easy way to test things. The Processing.org language is a free, open source graphics/media/IO layer on top of Java (as posted previously here).
What follows is the super simple test software written in Processing.org & Java.
This is pretty much a copy & paste of the previous simple Processing.org example, with some added error checks and non-optimized state machine. (This will all be re-written as Microchip assembly.)
// UBW Microcontroller 'Digital Microfluidics'; jcline 2009-06 import processing.serial.*; Serial ubw; // USB microcontroller communication int portIndex = 0; // XXX Change portIndex to match the computer hardware int loops = 0; boolean found = false; char toggle = '0'; char pinchar; PFont font; float tdelay; void setup() { String ubwVersion; size(400,400); background(0); // black frameRate(1); // sets draw rate stroke(255); // white try { println(Serial.list()); ubw = new Serial(this, Serial.list()[portIndex], 9600); // serial rate doesnt matter tdelay=millis() + 5000; // Read firmware version from connected UBW Microcontroller; jcline 2009-03 for (int i=0; millis() < tdelay ; i++) { // Get+Verify UBW version string, print to console ubw.write("v\n"); ubwVersion = ubw.readStringUntil('\n'); if (ubwVersion != null) { if (ubwVersion.startsWith("UBW", 0)) { println("Found UBW attached to USB: "); print(ubwVersion); found = true; break; } } } } catch (Exception e) { println("device access error\n"); } if (found != true) { println("UBW not found: exit\n"); return; } else { ubw.write("PD,B,7,0\n"); ubw.write("PD,B,6,0\n"); ubw.write("PD,B,5,0\n"); } hint(ENABLE_NATIVE_FONTS); font = createFont("Courier", 32); textFont(font); println("done\n"); tdelay=millis() + 7000; print("pausing.."); for (int i=0; millis() < tdelay ; i++) { ; } println("Go!"); } // Step EWOD droplet along path and back again void draw() { String cmd; if (found == false) { return; } if (loops > 39) { noLoop(); ubw.write("PO,B,7,0\n"); ubw.write("PO,B,6,0\n"); ubw.write("PO,B,5,0\n"); ubw.write("PO,B,4,0\n"); tdelay=millis() + 1000; print("pausing.."); for (int i=0; millis() < tdelay ; i++) { ; } println("done."); exit(); } background(0); if (toggle == '0') { toggle = '1'; line(0,10,width,10); } else { toggle = '0'; line(0,height-10,width,height-10); } pinchar = '7'; if (loops % 10 == 0) { pinchar = '7'; } else if (loops % 10 == 0) { pinchar = '7'; } else if (loops % 10 == 1) { pinchar = '7'; } else if (loops % 10 == 2) { pinchar = '6'; } else if (loops % 10 == 3) { pinchar = '6'; } else if (loops % 10 == 4) { pinchar = '5'; } else if (loops % 10 == 5) { pinchar = '5'; } else if (loops % 10 == 6) { pinchar = '6'; } else if (loops % 10 == 7) { pinchar = '6'; } else if (loops % 10 == 8) { pinchar = '7'; } else if (loops % 10 == 9) { pinchar = '7'; } cmd="PO,B," + pinchar + "," + toggle; ubw.write(cmd + "\n"); println(cmd); text(loops + ": " + cmd, 15, 60, -30); loops++; } // END
For the techies interested in digital microfluidics, check future posts for fabrication details. Also read the Lab on a Chip Journal — though don’t immediately believe all of the stated results!
That is simply great.
Do you have a schematic or at least a parts list for the control board that handles the HVDC?