This instructable describes a shield, which converts "Arduino" board in a digital multimeter (DMM).

The shield can be inserted on "Arduino" UNO und Duemilanove boards. It can work in three modes:

  • standalone - the measurement data can be seen at the character or graphical LCM
  • connected - the measurement data can be read on the PC screen using the "Arduino" IDE "Serial monitor"
  • combined - the data can be observed on both devices

The second mode does not require the presence of LCM, what makes the shield very cheap.

The "Arduino" based DMM has the following functions:

  • voltmeter with 3 ranges : 0-10V; 0-30V; 0-100V
  • amperemeter - it has a range 0-500mA
  • ohmmeter with 2 ranhes : 0-1KOhm, 0-250KOhm
  • diode, LED, connectivity checker
  • LED functionality tester
  • NPN BJT Beta meter

Step 1: DMM "Arduino" V/s Standard Digital Multimeter

The following movie shows how the "Arduino" based DMM works in comparison with non-professional standard DMM

<p>Sorry,</p><p>I did a mistake.</p><p>None of the listed chips will work as input voltage protection for the DMM if connected as shown in their datasheets.</p><p>Problems:</p><p>1) They must be supplied by the common DMM supply - not by the input voltage, because it could drop even to 0V and the current is limired.</p><p>2) If only NMOS or PMOS switch used - it will cut some part of the input voltages</p><p>when PMOS used - it will pass only the voltage (rough said) &gt;2.5V, if NMOS only used it will pass voltages &lt;2.5V.</p><p>So called transmission gate must be used ( parallel connection of NMOS and PMOS) switches controlled by the signals with opposite polarity.</p><p>That means - at the output of (let's say) NCP346 additional inverter must be connected and it has to control an NMOS switch connected in parallel with the PMOS switch controlled directly by the &quot;OUT&quot; terminal of the chip.</p><p>So.... the circuit becomes more and more complicated :-)</p>
<p>ah i see, thanks for prevention and explanation, can i use a varistor instead to avoid this complicated circuit and im afraid i can't find this ics either ?</p>
The varistors are for high voltages. <br>In all cases the simplest solution is to use some 5.6V zenner diode.
<p>that's right i ll keep searching, there must be the right diode out here.</p><p>sorry i took to much of your time and really appreciate your help thanks! </p><p>Regards </p><p>Arezki </p>
<p>Hi,</p><p>I took a look on the datasheets.</p><p>The serial diode is optional.</p><p>You can use NCP346 without it and without problems.</p>
<p>Hi ArezkiL</p><p>As I remember I bought 50 pcs 5.6V zenner diodes and I have chosen one of them having the smallest reverse current at 5V.</p><p>There are also another possibilities to protect the input against HV.</p><p>There exist special overvoltage protection circuits containing MOS switch with very low Ron, which observe the input voltage and if it becomes higher then desired interrupt the connection. All depends on that how much you want to complicate the device :-)</p><p>Examples of such circuits: </p><p>NCP346, STBP112,NUS3046MN...and a lot of others.</p><p>You can use 5% resistors, The introduced error you have to correct further by the software trimming.</p><p>Regards</p><p>Milen</p>
<p>i ve read about NCP346 it says that it requires external schottky diode to prevent reverse current, Is it necessary?</p><p>are all commercial multimeters operating this way or there are other circuit diagrams ?</p>
May be NCP346 is not the most suitable circuit for a voltmeter.<br>It has to have only low Ron switch. Check the others.<br>The serial diode would effect the correctness of the measurement because of the voltage drop on it.<br><br>Normally each multimeter should have some protection on the input.<br>The protection which I use is the simplest and may be most used.<br>As common the DMM devices use dedicated chips (ASIC) and I suppose the protection is embedded directly inside them - in all cases it has to based on some voltage clamping circuit, or circuit similar to mentioned before chips.
<p>i will check the others.</p><p> thanks a lot!</p>
<p>thank you so much! yes i want to complicate it but im not an expert therfore i can't change it or add other compononents on my own so i have to follow a schema and your advices thanks for help again ^ ^</p>
<p>Hi Milen,</p><p>thanks for this great project! </p><p>sorry for the late comment i would ask you if i can remplace zener diode of the voltmeter with other protection components because i couldn't find a low current leakage one ? and about resistors can i use 5% tolerance resistors ?</p>
<p>Dear Milen,</p><p>Can you suggest any alternative for 74LVC1G14DBV and SN74LVC2G66? I would prefer it to be thru-hole instead of SMD.</p>
Hi CharleneD16 ,<br><br>You can replace the chip with a pair of PMOS transistprs (like BSS84 :<br>http://www.nxp.com/documents/data_sheet/BSS84.pdf) Exactly this is SND, but you can find similar in through-hole package. There should not be any difference in the performance.<br>The transistors should be connected in the following way:<br>sources - supply<br>gates - first to the input of the inverter, second at the its output<br>drains - to the trimmer potentiometers<br><br>Regards<br>Milen
<p>Thanks a lot! This project is really awesome. Thank you for sharing.</p>
<p>What is the maximum current and the maximum frequency that can be feed to the analog pin of an Arduino Nano? Can I substitute the resettable PTC fuse to a glass fuse instead?</p>
<p>Hi,</p><p>you can not feed current inside the analog pin. You can apply only voltage - not more than the supply voltage+0.5V.</p><p>The maximum frequency is determined by the max sample rate:</p><p>76.9kSPS of the ATMEGA328 ADC and the Nyquist requirement ----&gt; around 38,5 kHz.</p><p>You can put a fuse from the type that you like, but its max current must be proper chosen</p>
Hi Milen,<br>Thank you for your reply. I just want to ask about the maximum current rating that the fuse for ammeter can be?
<p>Hi,</p><p>as designed it measures 500 mA max current - that should be the fuse rating. If you want to measure higher current &acute;then you have to change also the resistor. You could add also input for higher currents with different resistor and can use also different arduino analog input.</p>
<p>Dear Milen<br><br>You did a great job ! I have a project that need to use arduino as multimeter. Could you help me something? If i just want to use Arduino for measuring Current, Voltage, and Temperature and send the data to PLC, I don't need to show in LCD, but send to PLC.<br>What is the code should i use in Arduino program ? If Arduino's TX pin connect to TTL to RS232 converter.</p>
Thanks,<br>I think - you have to decide which type of communication you want to use : SPI or I2C and depending on this to define the used pins and libraries. From the code you can remove then the LCD and serial monitor part.
<p>Dear Milen,<br> Thank you for your replied and sorry for my late respond. I read about SPI and I2C as you recommended, So i chose I2C be my answer because I have to measure in real-time and yes I2C has more speed than SPI. I have a design for my Arduino measuring Voltage and Temperature as this in attached picture. Will it work ? I will use TX port for sending data to &quot;TTL to RS232&quot; and then to PLC.</p>
<p>Hi,</p><p>Check the connections of the voltage sensor - seems that the sig and supply pins are swapped. Is it not possible to supply this sensor with 5V arduino supply?</p><p>Do not forget pull-up resistors needed for the I2C communication. I suppose that also the rx TTL pin shall be connected - some return data is send also during the communication.</p><p>regards</p><p>Milen</p>
<p>Dear Milen,<br>Thank you very much ! But i'm not sure about the code. If i connected IR Temp and Voltage Sensor(swapped it already) with Arduino, Should i write the code like &quot;DigitalRead(A1, Voltage) and DigitalRead(SDA or SCL, Temp)&quot; like this ?<br>I know about doing code to show in LCD, But I don't know about sending/receiving data from TX/RX pin. Could you give me some hint ?<br>Sorry for bothering you a lot.</p>
<p>Hi .</p><p>Please write the type of both sensors. For the temperature sensor I suppose you have to serch the proper arduino library. The voltage sensor seems to me to have an analog output (check if true). In this case you have simply to use AnalogRead(A0). Check what should be the output voltage if you supply the sensor with 9V battery (as on the picture). If it is higher than 5V - an error will occur - you have to insert proper resistor voltage divider at the output of the voltage sensor and the analog arduino pin.</p>
<p>Great project! What are the dimensions of the PCB? I am going to order one but need the size and I can't read the Eagle files.</p><p>Thanks,</p><p>Will</p>
Hi Will,<br><br>The PCB size is 92.1 x 53.6 mm. Good luck.<br><br>Regards<br>milen
Thanks for the fast reply. My idea is to piggyback your electronics with a Pi Zero and have the Pi deliver a GUI front end. Ideally I want to get the Eagle board into Fritzing and hope I can find a conversion tool as I don't want to learn Eagle!<br><br>Will
<p>Hello Milen,Ray,</p><p>I am interested to make PCB for this design. If its possible may any of you share the Gerber files? I am going with PCBway.</p><p>Thanks</p>
<p>Hi Nituj,</p><p>I have attached the gerber files at step 3 of the instructable for download.</p><p>If any problem - please, contact me.</p><p>Regards</p><p>Milen</p>
<p>Hi Milen,</p><p>Thanks for the quick response and files. I will update BOM with part numbers &amp; I am going to build 5 numbers.</p><p>Thanks for the excellent project &amp; of course sharing your design.</p><p>Regards</p>
<p>Hi Milen,</p><p>I am only now ordering parts for this project because I had health problems. Old age is not good, but the alternative is worse! :-) I can't find the package &quot;085CS_1AR&quot; for C21 in Google, so can you give me some idea of the specification for this item? What voltage and accuracy are needed?</p><p>Best regards,</p><p>Ray</p>
Hi Ray,<br>This was a device from Eagle library. It is SMD tantalum capacitor.<br>I think you can solder there any capacitor size C or D1:<br>http://servenger.com/Resource/Tantalum_Chip_Caps_Case_Codes.pdf<br>Get well soon!<br>Milen<br><br>
<p>Great! Thanks Milen! I don't wish to offend, but I think C21 is electrolytic? It shows polarised on your schematic, and I think this is correct?</p><p>My bones ache, but my brain still works!</p><p>Ray</p>
<p>Hi Ray,</p><p>You are absolutely right : </p><p><a href="https://en.wikipedia.org/wiki/Tantalum_capacitor">https://en.wikipedia.org/wiki/Tantalum_capacitor</a></p><p>but if do not find such, you can solder a standard electrolytic one - simply bend it leads and solder them on the solder pads.</p><p>Regards</p><p>Milen</p>
<p>HI Milen,</p><p>I ordered the PCB's from PCBWay, and 3.5 days later they arrive at my home in Australia. $AUD55 for five boards. Unbelievable service. You just can't get that in this country. Thank you so much for your help. I can hardly wait to put the first one together.</p><p>Best</p><p>Ray</p>
<p>Hi Ray,</p><p>I am glad that I could help you.</p><p>Regards</p><p>Milen</p>
Thank you Milen. I have ordered my first PC's from PCBWay already using your Gerber files. And the link to ITEAD Studio is excellent. I can follow this procedure in future very easily. You have been very helpful and thanks again!<br>Best regards,<br>Ray
<p>Hi Milen, this is a wonderful instructable, and your instructions are very precise. I would love to make this, but the cost of the PCB in Australia is like $150.00. Have you any ideas on getting them made elsewhere? Is it only back and front or are there many layers? Like, could I perhaps make the PCB myself?</p><p>Thank you,</p><p>Ray</p>
Hi Ray,<br><br>Here : http://www.pcbway.com/setinvite.aspx?inviteid=9970<br>you can make your boards (10 pieces) for ~ 10 times less money.<br>You can pay with paypal and they will arrive for 8-14 days.<br>Simply make an account at their site, send them the gerber and drill files, and pay the PCB's. You can track the production process and after that also the delivery. Also the PCB color can be chosen without price increase. The PCB's fpr this project are contaion only two metal layers - top and bottom.This makes the PCB.s cheaper and is fully enough.<br>Regards and good luck with the designing.<br>Milen<br>P.S. You can order also less than 10 PCB;s, but I am not sure is this would affect the price when 10 ordered.
Hi Milen,<br><br>Thank you so much for this. They are quoting only $13 for 5 pieces which is amazing!!!! Now I need an intractable on how to create the gerber files. There are so many variables in Eagle I am so confused. Like, what is &quot;wheel&quot;? but I will study this and try to create the right files.<br><br>Thanks again, fantastic 'able.<br><br>Ray
<p>Hi Ray,</p><p>I think that this will work for you:</p><p><a href="http://blog.iteadstudio.com/how-to-export-gerber-files-from-eagle/">http://blog.iteadstudio.com/how-to-export-gerber-f...</a></p><p>It is different PCB company, but the rules are acceptable by PCBway and</p><p>no problem shall appear.</p><p>Regards</p><p>Milen</p>
<p>Hi Milen,</p><p>Thank you for this good job!</p><p>Would you please help me to change the circuit like MeR5's request? Voltage range is 0~5V only, and current range is 0~100mA. For 100mA current measurement, I change R9 from 1 Ohm to 5.1 Ohm, and if I change R11 to larger one then I can reduce the measure range more because I want to get more precise measurement. Is it OK?</p><p>And I want two inputs for voltage, and two for current.</p><p>Thanks you!</p><p>Daniel</p>
Hi,<br>You can simplify the circuit a lot...<br>If you want to measure voltage between 0 and 5 volt, you do not need any voltage divider and switching circuitry at the inputs.<br>Simply apply the voltage to the input of the arduino ADC.<br>I<br>In all cases I would advice you to put some protection on these inputs - for example a resistor 10K and a zenner diode 5.1..5.6V.<br>If the measured voltage comes from the device, which is supplied by<br>the same power supply, used for the arduino - this is not needed.<br>You can use directly two ADC arduino inputs.<br>For the current measurements - different approaches can be used -<br>the simplest - you put resistor 50 Ohm and pass the current through - measure the voltage drop directly over it - without the use of any opamp. - disadvantage - the power dissipated by the resistor at max current (100mA) will be 0.5W. If you use small size resistor, it can overheat and to burn or at least to change it value (because of its TC), which could affect the accuracy of the measurement.<br>-the second method which can be used, is the actual.<br>Using 5.1 Ohm resistor will cause that the voltage drop over it with 100mA current is 510mV. The arduino supply is 5v. That means : you should amplify this voltage max 5/0.51 times. In other case the ADC will go in saturation. This gain defines the values of the resistors, you should use. The opamp is in noninverting configuration - the gain is 1+(R11+R12)/R9.<br>You will have the highest accuracy if at the maximum allowed current the input voltage at the ADC inputs is identical to the ADC reference (in this case the supply voltage).<br>Disadvantage of these current measurements, that the current is collected in the arduino ground. To measure some passing current, which flows further in other device - you should not merge both ground nets. The arduino must be floating. Solution for this problem can be found here:<br>https://www.maximintegrated.com/en/app-notes/index.mvp/id/746<br>You can use such chip with all needed supporting circuitry.<br><br>
Hi Milen,<br><br>Thanks for your quick reply.<br>It's a little hard to figure out your comment for me right now. I need time to digest.<br>My goal is to use Arduino to monitor voltage &amp; current of a driving board. This current output from board to operate a small device, its power consumption is about 30mA. I need to monitor the current drop during the device operation for a long time (500hrs Reliability Assurence). At the same time I need to monitor other constant voltage (among 4~5V) that will keep the previous output in the same level.<br>Do you have any specific suggest for my situation? <br>Can I measure voltage only between 4~5V? If it can be, I can get 5X precision of voltage measurement.<br>Thanks again!<br>Daniel
<p>Hi Daniel,</p><p>You can measure the voltage between 4-5 V using opamp in non-inverting configuration with reference 5V and gain of 5.In this way when you have 4V at the input - the output will be at 0V. With 10 bit resolution you will be able to measure the voltage with ~ 1mV precision, For the current measurements I would suggest that you use some if the chips, mentioned here - <a href="https://www.maximintegrated.com/en/app-notes/index.mvp/id/746">https://www.maximintegrated.com/en/app-notes/index...</a></p><p>Shall this be high or low side current measurement chip - depends in that is the current sourced from or sunk in the load</p>
Hi Milen,<br>Would you please give me further hint on &quot;opamp in non-inverting configuration&quot;, I hope I can carry it out. Thanks.<br>Daniel<br>
<p>Hi Daniel,</p><p>You can read this: <a href="http://www.analog.com/library/analogDialogue/archives/39-05/Web_Ch1_final_R.pdf">http://www.analog.com/library/analogDialogue/archi...</a></p><p>Page 8. Fig1-3. Only the bottom terminal of Rg connected to the 5V supply.</p><p>When Rf/Rg=4, the gain is 5 and 4V input voltage will bring your output to 0V.</p><p>The opamp used should have common mode input voltage covering the positive supply rail, and rail to rail output. The input offset should by small.</p><p>One solution could be: <a href="http://www.linear.com/product/LT6004">http://www.linear.com/product/LT6004</a>.</p>
<p>Thanks a lot! I will try.</p>
<p>please can you help me to change a little bit this circuit to become a circuit that measured only voltage and current permenantly and without buttons and choice of the measurment</p><div><br><div><div><div>about the component sn74lvc2g66 , i didn't found it , can i replace it with other component</div></div></div></div>
Hi,<br><br>If you want to simplify the circuit - only for V and I - you do not need <br>sn74lvc2g66. Please, be more specific - what is the input voltage range, how big is the current you want to measure? How many inputs you will have? Two for voltage, and two for current, or they have to be combined - you want to measure the voltage over the load through you also measure the current?

About This Instructable



Bio: Thank you all for following me.
More by Milen:Party stroboscope done by recycled parts Arduino controlled power supply source Arduino Nano to Arduino Uno adapter 
Add instructable to: