Work In Progress!

A Versatile Labtool


A cost effective, multi-pronged data acquisition tool to turn your computer into a workbench for science and electronics experiments . Equipped with a Python Library and several Apps.



This USB powered Unit plugs into your computer and lets you study a wide range of phenomena.

The built in measurement capabilities include an oscilloscope, a frequency counter, and a  logic analyzer among other things.

It also includes precise sine/triangle/square waveform generators, as well as several programmable voltage and current sources.

Add-on boards, both wired as well as wireless, enable measurement of physical parameters ranging from acceleration and angular velocity, to luminous intensity and Passive Infrared.

PC based software aggregates all the above and hosts innovative experiments.

Watch a 2-minute intro video :)


  • Wireless Nodes demo video. This device has an NRF24L01+ radio on board, and wireless modules have been prepared for data acquisition from multiple points for which wires may not work. For example, the motion of mechanical setups such as torsion pendulums can be monitored with a compass module(HMC5883L) plugged into a wireless node placed on it.

    The output of a magnetometer and an accelerometer is shown in the video.
    You might want to slow down the video, or try to keep up. I messed up the settings of RecordMyDesktop.

  • Quick demo video of the oscilloscope and waveform generator functionality of the vLabtool being compared with professional equipment

  • Demo Video of the phase correlated PWM generators and Logic Analyzer.

    Square waves generated at SQR1-4 are monitored using ID1-4 . The shape of the waveforms are first shown in the analog section.

    The Logic Analyzer functionality is primarily aimed at science experiments where fast events may need to be recorded. Such as the speed of a projectile fired through a light barrier, or a ball bouncing on a contact switch pad.


  • Accuracy comparison of the frequency counter with inputs up to 10MHz.

    Highlights: Using the Fox924b TCXO as the digital reference for the vLabtool really paid off. The maximum error is 2.5ppm as opposed to the 30ppm crystal that was previously being used.

    The GUI shown in the video is vLabtool-stream, and can be run from a terminal. It accepts any input function defined in the python module of the vLabtool as long as the return value is a number


  • Voltmeter accuracy test video

    Various voltages were generated using the PVS outputs, and monitored with professional equipment as well as the various analog inputs of the vLabtool. Detailed project logs HERE and here


Breaking down the problem.

Shortage of funds restrict teaching labs, and stifle creativity.

Learning through experimentation offers a much clearer view of phenomena than merely trusting theory.

But, Setting up a well equipped teaching lab for science and electronics can turn out to be a very expensive affair.

Each student will require a minimum set of instruments comprising of multimeters, scopes, various sensors, and so on, in addition to the experiment specific hardware.


These instruments must also be reasonably accurate for the results to tally with theoretical predictions such as the time constant of an oscillator, or the value of acceleration due to gravity.


A common, program based interface to access all the instruments associated with a particular experiment allows much greater flexibility and control. A primary requirement for this is that the instruments must all use well documented control inputs interface-able with a computer. Unfortunately, documented control interfaces are rare in the low-end market.

Elaborating the solution.

Bridge Software with Hardware , and take amateur science experiments to the next level.

A collection of PC connected test, measurement, and control equipment with an open-sourced Python library and associated experiment specific Apps that facilitate data interpretation with interactive visuals. BOM is currently less than $50.
Calibrate against professional equipment to obtain good accuracy.

  • Introduction
  • Gameplan
  • Design Choices
  • Graphical Apps
  • iPython Console

This project can be called a base board with an essential set of carefully calibrated instruments with design focused on being able to support a variety of limited audience, niche instruments ( Think high resolution ADCs, DACs, Signal modulators , and wireless modules ) . Significant room for improvement has been left in the form of an expansion slot.

Mouse over for details

A processor with a fairly powerful set of peripherals is complemented with a variety of analog and digital tools. The setup connects to a computer via USB, and acts as a slave device that measures or controls as per instructions sent by the user via Python programs or graphical apps.

Screenshot from 2013-12-02 16:13:54

Python was chosen as the main interface language owing to the vast computational and visualization resources it has. These are essential for analysing acquired data and extracting physical parameters. It’s also quite easy to learn, and since quite a few schools already teach it, we are but one step away from bridging the gap between software based learning, and experiment oriented methods.

*Additional interfaces: Standalone modes based on a plug-and-play display, as well as WiFi are part of the plan.

A 5ppm stability voltage reference has been used to ensure analog readings do not stray due to temperature variations.

A +/-2.5 ppm temperature compensated crystal oscillator from Fox is used to maintain the accuracy of digital instruments ( frequency counter, waveform generators, logic analyzer,etc )

These two together ensure that readings stay consistent over a reasonable temperature range

Prototypes are being calibrated against a 6 1/2 digit DMM from Keithley instruments. A separate 24-bit ADC board with its own stable reference has been developed and calibrated for future use.

Several graphical interfaces with control and display widgets have already been designed.

Screenshot from 2013-12-02 16:13:54Check out the videos in the next section.

If you’re open to trying a few simple lines of code, the console app features an embedded iPython console that autocompletes as well as displays documentation. It also has a ready to use graph that’s accessible with a single function call.

Screenshot from 2013-12-02 16:13:54

As far as developing experiment specific apps is concerned, a few are ready, and a common framework has been developed in order to facilitate contributions by reducing code sizes.


Detailed Summary- A low cost swiss army knife of measurement and control instruments for learning through experiments

Analog Measurements

  • 10 and 12 bit measurement modes
  • Up to 32x Programmable gain on most channels. Manual gain control on CH3
  • 2-channel oscilloscope capable of monitoring all analog inputs at 1MSPS. Interrupt driven implementation frees up CPU to run other commands received during acquisition.
  • Voltages ranges from +/-16V to +/-100mV
  • High impedance inputs, and power supply monitoring channels.
  • Current to voltage convertor(+/-3.3mA) with up to 32x gain, and independent offset control.

Digital Measurements

  • Frequency counter tested up to 32 MHz. MCU supports up to 64MHz, but needs verification.
  • 4-channel Logic analyzer
  • 15nS resolution, and DMA based approach that does not block user access to other functions while it acquires data.
  • Independent function calls available to measure time differences between specified level changes on different digital inputs.

Waveform Generators

  • 28-bit , 0 – 2MHz Sine, triangular waveform DDS [AD9833] . Maximum amplitude +/-4V , attenuable to a few ten millivolts via manual control knob present on the hardware.
  • up to four phase correlated PWM outputs with maximum frequency 32MHz, 15nano second duty cycle, and phase difference control.
  • 15KHz standalone sine wave

Programmable Voltage and Current Sources

  • 12-bit Constant Current source. Maximum current 3.3mA [subject to load resistance]. voltage monitoring must be carried out externally to check for saturation.
  • 5V,3.3V,+/-8V power supply outputs.


Data buses and Expansion Slots

  • SPI,I2C,UART outputs that can be configured and controlled entirely through Python functions.

Wireless subunits: Various data buses and outputs for aggregating data from multiple points.

  • Onboard NRF24L01+ transceiver for wireless data acquisition.
  • Wireless nodes capable of I2C/SPI/UART as well as basic digital IO

Graphical Interfaces

  • Graphical Interfaces for Oscilloscope, Logic Analyzer, streaming data, wireless acquisition, and several experiments developed that use a common framework which drastically reduces code required to incorporate control and plotting widgets

Standalone Mode

  • Standalone Mode uses a 128×64 OLED to display a few basic measurements.
  • Firmware detects a plugged in display automatically, and continues showing readings until a PC takes over.
  • Entire Unit can be battery powered and used as a portable test equipment.
  • For Advanced portability, use the android application.


An ESP-12 wifi module can also be used in place of a USB connection, but a separate 5V power supply will be required. This will either simply provide a TCP socket, or host standalone web pages with control widgets (Work in progress ).

Space for a CH240G USB-Ser has been left as an option in place of the more expensive MCP2200, but has not been tested so far.


Damage Proofing

Users will often make wrong connections, and the design must withstand reasonable assaults.

A few measures have been taken in this regard.

– A 500mA poly-fuse is part of the main USB input. This fuse auto-repairs when the offending load is removed.

– The DAC channels are specified as short-circuit proof, and the outputs will simply load the bipolar power supplies, causing their voltages to drop .

– Analog inputs are all high impedance, but exceeding voltage limits in either direction on multiplexed channels(CH1,CH3-7,I2V ) will distort the rest of the multiplexed channels. This will not damage the unit within generous limits.

So what can you kill ?

If you’re not excessively harsh, only the outputs broken out into the expansion slot are sensitive. Most of these come directly from the main processor, and you should be as careful with these as you are with your Arduino’s outputs.

The CAP input is directly connected to the Charge Time Measurement Unit of the processor, so please discharge any high voltages that may be present on capacitors before plugging them in.


Software Licenses

All client software is Python based, and no proprietary modules have been used. These include Python,Scipy,Numpy, Python-Qt4 , and PyQtGraph . All these work on multiple platforms, and are chosen to facilitate ports in the near future.

– Python – GNU GPL compatible

– Python-qt4 – GPL. Also requires that apps using PyQt4 be similarly open-sourced.

– PyQtGraph – MIT licence

– iPython – BSD License

– All Python Modules and Apps developed specifically for the vLabtool are hosted on github, and licensed with GPL-V3

Software Packaging and Distribution

– The package is also hosted on PyPI, and is registered as vLabtool.

– The Programmer’s manual is auto-generated with Sphinx, and is live here

– The firmware is not being released for now. This also includes the wireless nodes since adding support for sensors is done on the Python side of things.

Installing the software

What Platforms are recommended?

The toolchain has been developed and tested on Ubuntu versions>=12.04 . It has also been tested on Raspbian Wheezy.

Installing the toolchain ( Please Check the Build instructions section on

dependencies (Might be incomplete. Full testing pending):

sudo apt-get install python-qt4 python-opengl python-qt4-gl python-scipy python-numpy ipython-qtconsole

A) From PyPI

sudo apt-get install python-setuptools

sudo easy_install vLabtool

B) From Github

git clone

cd vLabtool

sudo python install

——– The above steps install the Python module as well as several Apps that can be accessed directly from a shell.

Current list: vLabtool-scope, vLabtool-stream, and several others, all prepended with ‘vLabtool’ .