Arduino Data Glasses for My Multimeter




About: Build useless things since 1980

Video of the working device

Trying to build a cheap Arduino Data Glasses for everybody. Why? I just wanted one.

It's working, and now it can even help to avoid accidents. From the first idea to the working prototype, it took 4 Month

The challenge was, that It should be constructed out of common materials that can be found easily. The project is more about how to build the optical system for this HMD. One thing is clear, you can not just place a screen in front of your eyes, because it will not be possible for them to focus it.

In the logs you can see from the first tests to what I have now.

The optical design was the most difficult part, but I think I found a solution for this. The costs of the prototype amounted to +-70Euros.

And now I have a Head-Up Display For Hight Voltage

Step 1: What's Inside and How Does It Work?

The received Bluetooth data is displayed, on the OLED display. It's then reflected over the mirror, goes through the lens and you can see the picture in the little transparent acrylic glass.

That is the simple explication. The details are coming now :)

Step 2: The Lens. the Most Tricky Part

I made the data glasses work, but it was more a trial an error challenge.

So I took a google crash course in optics.

First of all I had to understand the difference between a real and a virtual image with lenses. Then a very important thing is, that a human eye can only focus an object at a distance of min 25cm. And all what I needed was this formula (1/f) = (1/o) + (1/i) where f is focal length of the lens o is object distance to the lens and i is the distance of the virtual image.

Here are the values I used:

with f=10cm and o=7.3cm

you will get an i=-27.03cm (virtual images have always a negative value) and a magnification M=3.7

Lens Calculation Website

Step 3: Alternative Lens

I know that the lens is hard to find. I uses one of a cheap cardboard wich has lenses with a Focal length of 100mm and not like the google cardboard 45mm


I think I found a good solution for the lens. I just checked the physical data (FL = +- 110mm). and they should be perfect. I have no time right now, to test them, but if somebody could do it and give me a feedback, this would be great. A small Fresnel lens should do the job. and they are cheap and easy to find on the internet. And you can cut them with a cutter.

Like this one

An otherf alternative is a the lens of a head mounted magnifier. Normally they deliver 3 to 5 lenses and one of these should have a FL between 110mm and 120mm which works fine. It's just a little bit heavier and not so easy to cut

Step 4: Electronics

Here are all the electronic parts for the data glasses

I just used a smaller battery in the final version.

To use the 280mA battery, I had to change the 3k resistor against a 5.6k resistor on the original board. The charging current is now reduced to +- 200mA.

Step 5: the Enclosure

For the first tests, I used an enclosure made out of cardboard. This was a cheap solution and worked very well

For the final version, I used my 3D printer. The style file has been created in 123design. I need to make a few modifications to the design, but it's not bad for the first try.

Step 6: Connecting the Owon B35T Multimeter With the Data Glasses

This multimeter has an intern bluetooth 4.0 communication, so you can connect it to your phone or tablet

I had to reverse engineer the serial protocol.

Config of the BT module. I used a simple Arduino program to send and receive Data to and from the module. First you have to set the module to Central.

AT+ROLE1 moule = central

AT+RESET reset AT+SHOW1 show Bluetooth name in response

AT+IMME0 connect automatically

AT+FILT0 scan for devices

AT+DISC? Show devices

To connect to the Owon B35T type AT+CONE0(Mac adress of the Multimeter)

These softwares can be found on github

Videolink to the bluetooth test

Step 7: The Final Arduino Data Glasses

Here you can see, how all the parts fit in the enclosure. I tried different holders for the acrylic reflector

Here is also a part list:

Link to the software on github

Link to all the videos on youtube

Step 8: Pictures and Videos of the First Steps

Test setup with different lenses

First bluetooth test video

One of the prototypes video

Things to do:

  • Finishing the Software, to auto connect to a Owon Multimeter
  • Adding a battery indicator in the display. (The BLE module has this feature)
  • Building different reflectors with tint and mirror foils, to make the glasses work in a bright area,
  • Reducing the weight and redesigning the enclosure.
  • Testing with a smaller 0.49 inch display.
Epilog Contest 8

Grand Prize in the
Epilog Contest 8

Arduino Contest 2016

Second Prize in the
Arduino Contest 2016



    • Paper Contest

      Paper Contest
    • Organization Contest

      Organization Contest
    • Pie Contest

      Pie Contest

    178 Discussions


    15 days ago

    i Want a full code of this project kindly do share plz


    18 days ago

    Can I get 3d file that use in fabrication so that I can print


    Question 5 months ago

    I am new to Arduino and would like to try out this project! is it possible for anyone to give me a list of all the codes needed for this project and where do I get the bluetooth test app from which is shown in the Bluetooth 4.0 test video?

    1 answer

    Question 5 months ago on Step 4

    I can't find the exact battery type he used in this project. Can I use a 3.7v 500mAh Lipo battery?

    1 answer

    Question 7 weeks ago

    can i know step one by one about data glasses arduino and the componen in the projek?

    1 answer

    8 months ago

    I complete this project almost 99% the one problem is still not resolved is, an image is opposite means 001 is displayed like 100. I don't know what to do????? can any buddy help me....

    1 reply

    Reply 6 months ago

    image that through mirror will be opposite, and if you see the opposite image through glass it will be normal back.


    Answer 6 months ago

    The code the he give is completed sir..i think you may have problem on bluetooth connection. firstly you should use serial test coding that he give to connect to hm-11. In this part, im not using the step:

    AT+ROLE1 moule = central

    AT+RESET reset AT+SHOW1 show Bluetooth name in response

    AT+IMME0 connect automatically

    AT+FILT0 scan for devices

    AT+DISC? Show devices

    i do not know why my aduino does not respond the at+disc?

    im using this command

    im not remember how cuz im try and error. Try enter AT+ROLE1 , then AT+CONN @ AT+CONNA @ AT+CONNE @ AT+CONNF. It will connect to the owon multimeter automatically. you should see respond on the serial monitor. And it is actually data from the multimeter. After that, you can use the oledtest coding that he give or this coding (without microOled + it will print data of multimeter on the serial monitor):

    #include <Wire.h> // Include Wire if you're using I2C

    #include <SPI.h> // Include SPI if you're using SPI

    #include <SFE_MicroOLED.h> // Include the SFE_MicroOLED library


    // MicroOLED Definition //


    #define PIN_RESET 9 // Connect RST to pin 9 (req. for SPI and I2C)

    #define PIN_DC 8 // Connect DC to pin 8 (required for SPI)

    #define PIN_CS 10 // Connect CS to pin 10 (required for SPI)

    #define DC_JUMPER 0

    // Also connect pin 13 to SCK and pin 11 to MOSI


    // MicroOLED Object Declaration //


    // Declare a MicroOLED object. The parameters include:

    // 1 - Reset pin: Any digital pin

    // 2 - D/C pin: Any digital pin (SPI mode only)

    // 3 - CS pin: Any digital pin (SPI mode only, 10 recommended)

    MicroOLED oled(PIN_RESET, PIN_DC, PIN_CS);

    //MicroOLED oled(PIN_RESET, DC_JUMPER); // Example I2C declaration

    // I2C is great, but will result in a much slower update rate. The

    // slower framerate may be a worthwhile tradeoff, if you need more

    // pins, though.

    String bluedata;

    String command;

    byte value;

    byte valueall[15];

    char valuechar[15];

    void setup()



    Serial.begin(9600); // Initialize the OLED


    // Delay 1000 ms

    Serial.print("ArduinoGlasses V1.0");




    // oled.clear(ALL);


    void loop()




    while(Serial1.available()) {

    value = (;

    if (value == 43 || value == 45){

    for (int i=0; i < 15; i++){

    valueall[i] = value;

    value = (;


    int a=0;

    String value = ((char*)valueall);

    //oled.println(test.substring(0, 6));

    for (a=0; a <15; a++){







    //command = valuechar[1];command += valuechar[2];command += valuechar[3];command += valuechar[4]; // build number

    if (valuechar[0] == 43 && valueall[7] == 49) Serial.print("+");

    if (valuechar[0] == 45 && valueall[7] == 49) Serial.print("-");

    if (valuechar[0] == 43 && valueall[7] == 41) Serial.print("~");

    if (valuechar[0] == 45 && valueall[7] == 41) Serial.print("~");

    if (valuechar[0] == 43 && valueall[7] == 17) Serial.print("+");

    if (valuechar[0] == 45 && valueall[7] == 17) Serial.print("-");

    if (valuechar[0] == 43 && valueall[7] == 9) Serial.print("~");

    if (valuechar[0] == 45 && valueall[7] == 9) Serial.print("~");


    if (valueall[6] == 49) Serial.print(".");


    if (valueall[6] == 50) Serial.print(".");


    if (valueall[6] == 52) Serial.print(".");


    if (valueall[9] == 64 && valueall[10] == 128) Serial.print("mV");

    if (valueall[9] == 0 && valueall[10] == 128) Serial.print("V");

    if (valueall[9] == 0 && valueall[10] == 32) Serial.print("R");

    if (valueall[9] == 32 && valueall[10] == 32) Serial.print("K");

    if (valueall[9] == 16 && valueall[10] == 32) Serial.print("M");

    if (valueall[9] == 0 && valueall[10] == 64) Serial.print("A");

    if (valueall[9] == 64 && valueall[10] == 64) Serial.print("mA");

    if (valueall[9] == 128 && valueall[10] == 64) Serial.print("uA");

    if (valueall[9] == 0 && valueall[10] == 2) Serial.print("Grad C");

    if (valueall[9] == 0 && valueall[10] == 1) Serial.print("Grad F");

    if (valueall[9] == 0 && valueall[10] == 8) Serial.print("Hz");





    lastly, if still got problem .Try checking the wiring bluetooth module:

    hm-11 to arduino pro micro

    9 - vcc arduino

    12 - ground arduino

    11- reset arduino

    2(Tx) - Rx arduino

    4(Rx) -Tx arduino


    7 months ago

    Great idea.



    1 year ago

    Very cool! The number of times I've needed a third hand to hold my meter!

    Sadly my old meter (Fluke 79) was made before Bluetooth was even a twinkle!