Summary: |
Adapter for Elveflow devices |
Author: |
Miles Chaillié |
License: |
BSD |
Platforms: |
Windows |
Since version: |
Nightly build 2025-01-31 |
Currently available devices: |
Ob1 MK4, Mux Wire, Mux Distribution |
Elveflow - Micro-Manager
This document describes the configuration and operation of the OB1 MK4, MUX Wire, and MUX Distribution devices for Micro-Manager.
1️⃣ General UART Configuration and Communication Workflow
All devices communicate via UART with the following settings:
Parameter | OB1 MK4 | MUX Wire | MUX Distribution |
---|---|---|---|
Baudrate | 115200 |
115200 |
9600 |
Byte Size | 8 | 8 | 8 |
Parity | N | N | N |
Stop Bits | 1 | 1 | 1 |
If you want to communicate with the device without using an already implemented method :
- Command Header
- Commands starts with this character
<
- Commands starts with this character
- Command Type
- Using the device’s UART documentation as a reference, select one of the 5 character long key words that corresponds to a specific command.
- Command Formatting
- The command type is always accompanied by a following character, either
?
(GET) or!
(SET) suffixes.
- The command type is always accompanied by a following character, either
- Parameters
- Some commands need parameters following the command formatting.
- Written as
:1:2:3:
, each number corresponds to a parameter. - Refer to UART documentation delivered with your device.
- Sending Commands
- Sent via UART with a newline (
\n
) termination.
- Sent via UART with a newline (
- Receiving Responses
- Reads serial input and updates the
Response
property. - The response should start with a
>
.
- Reads serial input and updates the
For example, you coud send the following command to an OB1 MK4 pressure controller : <PRESS!:0:100\n
. It would change the pressure of the first channel to 100 mbar.
2️⃣ OB1 MK4 Pressure Controller
📝 Overview
The OB1 MK4 Pressure Controller by Elveflow is the most advanced pressure controller for microfluidics. It provides ultra-fast, high-precision pressure control, making it ideal for droplet generation, cell biology research, and other microfluidic applications.
✨ Key Features
- Fast Response Time: Pressure is adjusted in milliseconds.
- Multi-Channel Configuration: Up to four independent pressure channels.
- Vacuum & Pressure Control: Supports positive and negative pressure.
- Customizable: Various pressure ranges and modules available.
⚙️ Technical Specifications
Specification | Details |
---|---|
Number of Pressure Channels | Up to 4 |
Pressure Stability | Depends on the pressure range of each selected channel. See table of specifications. |
Max Pressure | 8000 mbar (configurable) |
Vacuum Support | Yes |
Flow Rate Stability | Optimized for ultra-low flow rates |
The OB1 MK4 can be configured with different pressure modules, depending on your needs:
Module | Pressure Range |
---|---|
0-200 mbar | 0 to 2.9 psi |
0-2000 mbar | 0 to 29 psi |
0-8000 mbar | 0 to 116 psi |
-900 to 1000 mbar | -13 to 14.5 psi |
-900 to 6000 mbar | -13 to 87 psi |
🔄 Firmware Compatibility
Parameter | Value |
---|---|
OLDEST_COMPATIBILITY | 1.4.1 |
🔬 Applications
The OB1 MK4 is widely used in:
- Microfluidic flow control
- Droplet generation
- Lab-on-a-chip experiments
- Cell sorting and manipulation
- Biomedical research
🔗 Associated Products
- Elveflow Flow Sensors (MFS, MPS, BFS)
- Bubble Detectors
- Reservoirs and Tubing Accessories
✔️ Advantages
- Precise pressure and flow control
- Ultra-fast response, ideal for droplet generation
- Compatible with other Elveflow instruments
📌 Notes: For more details, visit 🌐Elveflow – Microfluidic Products.
🛠 Micro-Manager Properties
Property | Description |
---|---|
IsGet |
Boolean to send a command in set or get mode |
Command |
Key word defining the type of command |
Parameters |
Parameter(s) set in the command |
Response |
Stored response from the device after a command has been sent |
RegulatorValue0 |
Pressure read by regulator of 1st channel |
RegulatorValue1 |
Pressure read by regulator of 2nd channel |
RegulatorValue2 |
Pressure read by regulator of 3rd channel |
RegulatorValue3 |
Pressure read by regulator of 4th channel |
SensorValue0 |
Sensor measurement on 1st channel |
SensorValue1 |
Sensor measurement on 2nd channel |
SensorValue2 |
Sensor measurement on 3rd channel |
SensorValue3 |
Sensor measurement on 4th channel |
PressureSetpoint0 |
Target pressure of regulator of 1st channel |
PressureSetpoint1 |
Target pressure of regulator of 2nd channel |
PressureSetpoint2 |
Target pressure of regulator of 3rd channel |
PressureSetpoint3 |
Target pressure of regulator of 4th channel |
TriggerIn |
Current value of input trigger (logical state 0-1) |
TriggerOut |
Current value of output trigger (logical state 0-1) |
TimerOn |
Flag to enable or disable timer looping on every value |
🛠 Micro-Manager Available Method
Available method | Trigger | Description |
---|---|---|
OnIsGet |
IsGet (bool) | Set next command sent to set or get |
OnCommand |
Command (str) | Construct and send UART cmd |
OnPressureSetpoint0 |
PressureSetpoint0 (int) | Set target pressure of 1st channel |
OnPressureSetpoint1 |
PressureSetpoint1 (int) | Set target pressure of 2nd channel |
OnPressureSetpoint2 |
PressureSetpoint2 (int) | Set target pressure of 3rd channel |
OnPressureSetpoint3 |
PressureSetpoint3 (int) | Set target pressure of 4th channel |
OnTrigger |
TriggerOut (bool) | Set value of output trigger |
OnStart |
TimerOn (bool) | Enable timer to start |
🛠 Micro-Manager Script Example
// Get list of devices
mmcorej.StrVector devices = mmc.getLoadedDevices();
// Display list
print("");
for (int i = 0; i < devices.size(); i++) {
String device = devices.get(i);
print("Device : " + device);
}
// Setup UART command
int is_get_cmd = 1; //"To set : 0 / To get : 1"
String device_name = "OB1_MK4";
String command = "<PINGA";
String parameters = ""; // "" if no parameter needed
// Send UART command
// -- First set IsGet and Parameters
mmc.setProperty(device_name, "IsGet", is_get_cmd);
mmc.setProperty(device_name, "Parameters", parameters);
// -- Then specify the command
mmc.setProperty(device_name, "Command", command); // It will send the completed UART command right after
// Display answer
String response = mmc.getProperty(device_name, "Response");
print("Device answer : " + response);
3️⃣ MUX Wire - Microfluidic Valve Control System
📝 Overview
The Valve Controller by Elveflow is a high-speed microfluidic valve control system designed for precise and automated fluid control in microfluidic experiments. It enables fast switching between fluidic pathways, making it an essential tool for dynamic fluid regulation.
✨ Key Features
- High-Speed Valve Switching: Optimized for rapid and precise fluid control.
- Multiple Valve Control: Can operate multiple microfluidic valves simultaneously.
- Software-Controlled Operation: Integrates with Elveflow Smart Interface and third-party software.
- Compact & Modular Design: Easily integrates into microfluidic setups.
⚙️ Technical Specifications
Specification | Details |
---|---|
Number of Valves | 8 |
Valve Actuation | Electrical (solenoid-based) |
Control Options | Software-controlled |
Power Supply | External power adapter |
🔬 Applications
The Valve Controller is widely used in:
- Microfluidic routing and sample injection
- Lab-on-a-chip experiments
- Droplet microfluidics
- Automated fluidic assays
🔗 Associated Products
- OB1 MK4 - Pressure Controller
- Mux Distribution - Fluidic Multiplexer
- Elveflow Flow Sensors (MFS, MPS, BFS)
- Elveflow Smart Interface Software
- Custom Microfluidic Chips & Accessories
✔️ Advantages
- Individual or simultaneous valve control
- No cross-contamination due to low internal volume and no dead volume
- Easy control via computer for automation
- Works with advanced microfluidic setups
📌 Notes: For more details, visit 🌐Elveflow – Microfluidic Products.
🛠 Micro-Manager Properties
Property | Description |
---|---|
IsGet |
Boolean to send a command in set or get mode |
Command |
Key word defining the type of command |
Parameters |
Parameter(s) set in the command |
Response |
Stored response from the device after a command has been sent |
Type0 |
Type of valve on 1st channel |
Type1 |
Type of valve on 2nd channel |
Type2 |
Type of valve on 3rd channel |
Type3 |
Type of valve on 4th channel |
Type4 |
Type of valve on 5th channel |
Type5 |
Type of valve on 6th channel |
Type6 |
Type of valve on 7th channel |
Type7 |
Type of valve on 8th channel |
Status0 |
Status of valve on 1st channel |
Status1 |
Status of valve on 2nd channel |
Status2 |
Status of valve on 3rd channel |
Status3 |
Status of valve on 4th channel |
Status4 |
Status of valve on 5th channel |
Status5 |
Status of valve on 6th channel |
Status6 |
Status of valve on 7th channel |
Status7 |
Status of valve on 8th channel |
Master0 |
Control mode of valve on 1st channel |
Master1 |
Control mode of valve on 2nd channel |
Master2 |
Control mode of valve on 3rd channel |
Master3 |
Control mode of valve on 4th channel |
Master4 |
Control mode of valve on 5th channel |
Master5 |
Control mode of valve on 6th channel |
Master6 |
Control mode of valve on 7th channel |
Master7 |
Control mode of valve on 8th channel |
TriggerIn |
Current value of input trigger (logical state 0-1) |
TriggerOut |
Current value of output trigger (logical state 0-1) |
TimerOn |
Flag to enable or disable timer looping on every value |
📌 Notes: Master variabes provide information about the valve’s usage mode:
- Master = 0 : valve state to 0, not activated and not blocked
- Master = 1 : valve manually activated with push button
- Master = 2 : valve activated with ESI
🛠 Micro-Manager Available Method
Available method | Trigger | Description |
---|---|---|
OnIsGet |
IsGet (bool) | Set next command sent to set or get |
OnCommand |
Command (str) | Construct and send UART cmd |
OnTrigger |
TriggerOut (bool) | Set value of output trigger |
OnStart |
TimerOn (bool) | Enable timer to start |
🛠 Micro-Manager Script Example
// Get list of devices
mmcorej.StrVector devices = mmc.getLoadedDevices();
// Display list
print("");
for (int i = 0; i < devices.size(); i++) {
String device = devices.get(i);
print("Device : " + device);
}
// Setup UART command
int is_get_cmd = 1; //"To set : 0 / To get : 1"
String device_name = "MUX_WIRE";
String command = "<PING_";
String parameters = ""; // "" if no parameter needed
// Send UART command
// -- First set IsGet and Parameters
mmc.setProperty(device_name, "IsGet", is_get_cmd);
mmc.setProperty(device_name, "Parameters", parameters);
// -- Then specify the command
mmc.setProperty(device_name, "Command", command); // It will send the completed UART command right after
// Display answer
String response = mmc.getProperty(device_name, "Response");
print("Device answer : " + response);
4️⃣ MUX Distribution - Microfluidic Multiplexer
📝 Overview
The MUX Distribution by Elveflow is a microfluidic multiplexer that allows precise and automated fluid switching. It is used to distribute multiple fluids into a single outlet or direct a single fluid to multiple outlets, making it essential for automated microfluidic experiments.
✨ Key Features
- Automated Fluid Distribution: Switching between multiple fluid sources.
- High Precision & No Dead Volume: Designed for microfluidic applications.
- Remote Control via Software: Compatible with Elveflow Smart Interface and third-party software.
- Compatible with OB1 & Other Controllers: Works with the OB1 MK4 Pressure Controller and other fluidic devices.
⚙️ Technical Specifications
Specification | Details |
---|---|
Number of Channels | 13 (1 to 12) |
Actuation | Rotary Valve |
Internal Volume | 3.5 µL at minimal |
Control Options | Software-controlled |
Power Supply | External power adapter |
🔬 Applications
The MUX Distribution is widely used in:
- Automated fluid injections
- Chemical and biological assays
- Lab-on-a-chip experiments
- Cell culture and drug testing
- Sequential sample injections
🔗 Associated Products
- OB1 MK4 - Pressure Controller
- Elveflow Flow Sensors (MFS, MPS, BFS)
- Elveflow Smart Interface Software
- Custom Microfluidic Chips & Accessories
✔️ Advantages
- Can operate in both directions for maximum flexibility
- Compatible with continuous or pulsed flow rates
- Minimal internal volume and no dead volume
📌 Notes: For more details, visit 🌐Elveflow – Microfluidic Products.
🛠 Micro-Manager Properties
Property | Description |
---|---|
Pos |
Store target position |
Response |
Store response from the device after a command has been sent |
🛠 Micro-Manager Available Method
Available method | Trigger | Description |
---|---|---|
GoToPos |
Direction (str) | Construct and send UART cmd |
🛠 Micro-Manager Script Example
// Get list of devices
mmcorej.StrVector devices = mmc.getLoadedDevices();
// Display list
print("");
for (int i = 0; i < devices.size(); i++) {
String device = devices.get(i);
print("Device : " + device);
}
// Setup UART command
String device_name = "MUX_DISTRIB";
int target_pos = 10; //[1 to 12]
// Send UART command
mmc.setProperty(device_name, "Pos", target_pos); // It will trigger the function (GoToPos) to send completed UART command that move device to the target position using the shortest path
For more details, visit 🌐Elveflow – Microfluidic Products.