Arduino Data Glasses for My Multimeter

166,597

1,683

166

About: Build useless things since 1980

Intro: Arduino Data Glasses for My Multimeter

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
http://hyperphysics.phy-astr.gsu.edu/hbase/geoopt/image4.html

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

UPDATE

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 https://www.amazon.com/Small-Fresnel-Lens-Magnifier-Pack/dp/B00CF5ZXKK

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 https://github.com/awall9999/Arduino-Glass

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

Share

    Recommendations

    • Optics Contest

      Optics Contest
    • Audio Contest 2018

      Audio Contest 2018
    • Plastics Contest

      Plastics Contest

    166 Discussions

    0
    None
    MasrurB

    Question 13 hours 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
    None
    aarafmj718

    3 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
    0
    None
    azmii2aarafmj718

    Reply 6 weeks ago

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

    0
    None

    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. https://github.com/awall9999/Arduino-Glass/blob/ma... 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 https://www.elecrow.com/download/Basic%20AT%20Comm...

    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 https://github.com/awall9999/Arduino-Glass/blob/ma... 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()

    {

    Serial1.begin(9600);

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

    delay(1000);

    // Delay 1000 ms

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

    delay(2000);

    Serial.print("Glasses");

    Serial.print("Ready");

    // oled.clear(ALL);

    }

    void loop()

    {

    if(Serial1.available()){

    delay(100);

    while(Serial1.available()) {

    value = (Serial1.read());

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

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

    valueall[i] = value;

    value = (Serial1.read());

    }

    int a=0;

    String value = ((char*)valueall);

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

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

    //oled.print(valueall[a]);

    valuechar[a]=valueall[a];

    //oled.print("-");

    }

    //oled.clear(ALL);

    //oled.clear(PAGE);

    //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("~");

    Serial.print(valuechar[1]);

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

    Serial.print(valuechar[2]);

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

    Serial.print(valuechar[3]);

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

    Serial.print(valuechar[4]);

    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

    0
    None
    sacp

    2 months ago

    Great idea.

    Congrats.

    0
    None
    simonrafferty

    9 months 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!

    0
    None
    TimothyJ999

    10 months ago

    Great project!

    I just wanted to pass on a good source of inexpensive lenses of all types, as well as beam splitter mirrors that transmit 50/50 (for a brighter image than plain acrylic). Go to surplusshed. com, they have hundreds of lens types you can browse, or use the lens finder if you know what you're looking for. A lens similar to the one in this project (double convex, 19mm diameter, 10.8cm focal length) is item L14219 for $4.50.

    They have various types of plate beam splitters for next to nothing.

    Also it's just a good place for optics, electronics, robotics parts--all kinds of miscellaneous surplus stuff for cheap. No connection with them, just a satisfied customer.

    0
    None
    CalebGreer

    10 months ago

    Noice. Looks like a fun project.

    0
    None
    danielrp

    10 months ago

    Amazing project! Congratulations.

    0
    None
    BiBi_MCU

    10 months ago

    Congradulation! So cool and usefull

    Thanks for sharing

    0
    None
    cocosoft

    10 months ago

    Thumbs up on this one mate such intuitive use of OTS components. RESPECT!

    0
    None
    andrew.spencer.2

    10 months ago

    How clever! I’ve often contemplated doing this with my welder. I’d like it to read out the amperage of the weld to a heads up display in my welding helmet in real time so I know exactly how much current I’m giving it with the foot pedal.

    0
    None
    etmilosk

    10 months ago

    Amazing achievement! Thank you.

    0
    None
    YuMERA

    10 months ago

    Bravo!

    0
    None
    NeilRG

    10 months ago

    This is a wonderful project as far as the wearable display is concerned. For remote multimeter i have several mooshimeters, which have the ability to link to an android or IOS device. The newest software allows the meter to talk to you.

    I mention this as an off the shelf albeit pricier way to remotely measure dangerous voltages from a safe a vantage point, and not in any way to diminish what you have achieved.

    First rate project! Thank you.

    0
    None
    StevenN63

    1 year ago

    I'm trying to reproduce your glasses with a FLUKE Digital multimeter and I'm a little bit stuck at the part where I need to connect the HM-11 to the FLUKE.

    I know on which characteristic the FLUKE is sending the values, so I need the HM-11 to get notifications on that certain custom characteristic, but I cannot seemto figure out how to do this. I've read the datasheet of the HM-11 but stil....

    I hope you can or someone1 else can help me out...

    1 reply
    0
    None
    edokanStevenN63

    Reply 11 months ago

    Hi,

    Recently I had to reverse engineer a device communicating an android phone via bluetooth. I've enabled Developer Mode on my android device and enabled Bluetooth HCI logging. It creates a file which you can use Wireshark to read.

    Create a simple step by step procedure for a single measurement, and repeat it a few times. You will discover a pattern in communication and little variances in data will tell you how to parse it.

    0
    None
    mark_racal

    1 year ago

    Wow you are a Genius.