{"id":16356,"date":"2020-09-14T08:43:06","date_gmt":"2020-09-14T08:43:06","guid":{"rendered":"https:\/\/electropeak.com\/learn\/?p=16356"},"modified":"2026-07-29T08:03:08","modified_gmt":"2026-07-29T08:03:08","slug":"make-a-digital-multimeter-with-arduino","status":"publish","type":"post","link":"https:\/\/electropeak.com\/learn\/make-a-digital-multimeter-with-arduino\/","title":{"rendered":"Make a Digital Multimeter with Arduino"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"16356\" class=\"elementor elementor-16356\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-19726c55 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"19726c55\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-25015bc5\" data-id=\"25015bc5\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-13763d2 elementor-widget elementor-widget-text-editor\" data-id=\"13763d2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>A good <strong>arduino multimeter<\/strong> project teaches more than simple measurement. It makes you work through voltage dividers, ADC scaling, Hall-effect current sensing, RC timing, range selection, and UI handling on a small microcontroller.<\/p><p>This build uses an Arduino board and an OLED display to measure four DC quantities: voltage, current, resistance, and capacitance. It is simple enough to assemble on a bench, but it still has enough moving parts that calibration and safety limits matter if you want useful readings.<\/p><p><strong>Key Takeaways<\/strong><\/p><ul><li>This DIY meter measures DC voltage, DC current, resistance, and capacitance.<\/li><li>The voltage mode uses a resistor divider and the Arduino ADC.<\/li><li>The current mode uses an ACS712 5A Hall-effect sensor module.<\/li><li>The resistance mode switches between 1k, 10k, and 100k reference resistors for auto-ranging.<\/li><li>The capacitance mode measures RC charge time to the 63.2% point.<\/li><li>Calibration of ADC reference, resistor values, and ACS712 offset has a big effect on accuracy.<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-52742af elementor-widget elementor-widget-hardware_list\" data-id=\"52742af\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"hardware_list.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style id=\"hardware-list-styles\">\n.hardware-list-block{\n  \/* ---- Elementor global colors (fallbacks kept for safety) ---- *\/\n  --hw-accent:var(--e-global-color-primary,#CB2D58);  \/* links + hover        *\/\n  --hw-text:var(--porto-h2-color,var(--porto-heading-color),#212529);       \/* item name + heading  *\/\n  --hw-muted:var(--e-global-color-text,#7A7A7A);      \/* \u00d7 sign + resting arrow *\/\n  \/* also available if you want them:\n     secondary  var(--e-global-color-secondary,#19BFD3)\n     accent     var(--e-global-color-accent,#61CE70)                          *\/\n\n  \/* ---- neutral surfaces (not part of the brand palette) ---- *\/\n  --hw-bg:#ffffff;          \/* row background            *\/\n  --hw-bg-hover:#f8f9fa;    \/* row background on hover   *\/\n  --hw-border:#e8eaed;      \/* borders                   *\/\n\n  \/* ---- sizing ---- *\/\n  --hw-radius:14px;\n  --hw-qty-width:3.25rem;   \/* width of the quantity column  *\/\n  --hw-icon-width:1rem;     \/* width of the open-link column *\/\n\n  --hw-arrow:url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M7 17 17 7'\/%3E%3Cpath d='M8 7h9v9'\/%3E%3C\/svg%3E\");\n\n  width:100%;\n  margin:1.5rem 0;\n  font-family:inherit;\n}\n\n.hardware-list-title{\n  margin-block-end: 30px;\n  color:var(--hw-text);\n  line-height:1.25;\n}\n\n.hardware-list{\n  width:100%;\n  border:1px solid var(--hw-border);\n  border-radius:var(--hw-radius);\n  overflow:hidden;\n  background:var(--hw-bg);\n}\n\n.hardware-list a,\n.hardware-list .no-link{\n  display:flex;\n  align-items:center;\n  gap:.85rem;\n  padding:.85rem 1.1rem;\n  border-top:1px solid var(--hw-border);\n  color:var(--hw-text);\n  text-decoration:none;\n  transition:background .15s ease;\n}\n.hardware-list a:first-child,\n.hardware-list .no-link:first-child{border-top:0;}\n.hardware-list a:hover{background:var(--hw-bg-hover);}\n\n\/* Name takes all remaining space *\/\n.hardware-list .name{flex:1 1 auto;min-width:0;font-weight:500;line-height:1.3;}\n.hardware-list a:hover .name{color:var(--hw-accent);}\n\n\/* Quantity: fixed-width column so the pills line up *\/\n.hardware-list .qty{\n  flex:0 0 var(--hw-qty-width);\n  text-align:center;\n  font-variant-numeric:tabular-nums;\n  font-size:.82em;\n  color:var(--hw-text);\n  background:var(--hw-bg-hover);\n  border:1px solid var(--hw-border);\n  border-radius:999px;\n  padding:.15em 0;\n}\n.hardware-list .qty::before{content:\"\\00d7\";color:var(--hw-muted);margin-right:.15em;}\n\n\/* Open-link icon: fixed-width column, ALWAYS reserved (even with no link) *\/\n.hardware-list .go{\n  flex:0 0 var(--hw-icon-width);\n  height:var(--hw-icon-width);\n}\n.hardware-list a .go{\n  background:var(--hw-muted);\n  -webkit-mask:var(--hw-arrow) center\/contain no-repeat;\n  mask:var(--hw-arrow) center\/contain no-repeat;\n  transition:background .15s ease, transform .15s ease;\n}\n.hardware-list a:hover .go{background:var(--hw-accent);transform:translate(2px,-2px);}\n<\/style>\n\t\t\t<div class=\"hardware-list-block\"><h2 class=\"hardware-list-title\">Required Materials<\/h2><div class=\"hardware-list\"><a href=\"https:\/\/electropeak.com\/arduino-uno-r3-clone\" target=\"_blank\" rel=\"noopener noreferrer\"><span class=\"name\">Arduino UNO R3<\/span><span class=\"qty\">1<\/span><span class=\"go\"><\/span><\/a><a href=\"https:\/\/electropeak.com\/0-96-inch-i2c-oled-display-module-ssd1306\" target=\"_blank\" rel=\"noopener noreferrer\"><span class=\"name\">0.96&quot; I2C OLED Display Module<\/span><span class=\"qty\">1<\/span><span class=\"go\"><\/span><\/a><a href=\"https:\/\/electropeak.com\/acs712-current-sensor-module\" target=\"_blank\" rel=\"noopener noreferrer\"><span class=\"name\">AC712 5A Current Sensor<\/span><span class=\"qty\">1<\/span><span class=\"go\"><\/span><\/a><div class=\"no-link\"><span class=\"name\">Resistor 1k<\/span><span class=\"qty\">1<\/span><span class=\"go\"><\/span><\/div><div class=\"no-link\"><span class=\"name\">Resistor 10k<\/span><span class=\"qty\">2<\/span><span class=\"go\"><\/span><\/div><div class=\"no-link\"><span class=\"name\">Resistor 100k<\/span><span class=\"qty\">1<\/span><span class=\"go\"><\/span><\/div><div class=\"no-link\"><span class=\"name\">Resistor 4.7k<\/span><span class=\"qty\">1<\/span><span class=\"go\"><\/span><\/div><div class=\"no-link\"><span class=\"name\">Resistor 220<\/span><span class=\"qty\">1<\/span><span class=\"go\"><\/span><\/div><a href=\"https:\/\/electropeak.com\/male-female-jumper-wires-40-10-20-30-cm\" target=\"_blank\" rel=\"noopener noreferrer\"><span class=\"name\">Male to Female Jumper Wire<\/span><span class=\"qty\">1<\/span><span class=\"go\"><\/span><\/a><a href=\"https:\/\/electropeak.com\/micro-momentary-tactile-push-button-pack-of-20\" target=\"_blank\" rel=\"noopener noreferrer\"><span class=\"name\">Micro Momentary Tactile Push Button - 6x6 mm<\/span><span class=\"qty\">2<\/span><span class=\"go\"><\/span><\/a><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f4a1631 elementor-widget elementor-widget-text-editor\" data-id=\"f4a1631\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2>Arduino Multimeter Features, Ranges, and Limitations<\/h2><p>Before you build it, decide whether this meter fits your use case. This design is meant for low-voltage DC bench work, not as a replacement for a commercial handheld meter.<\/p><table class=\"article-table\"><thead><tr><th>Function<\/th><th>Method Used<\/th><th>Nominal Range in This Build<\/th><th>Key Limitation<\/th><\/tr><\/thead><tbody><tr><td>Voltage<\/td><td>Resistor divider + Arduino ADC<\/td><td>Up to about 15.6V in the Step 1 build<\/td><td>Higher voltage can damage the Arduino ADC path<\/td><\/tr><tr><td>Current<\/td><td>ACS712 5A Hall-effect sensor<\/td><td>5A module range<\/td><td>Needs zero-offset calibration before use<\/td><\/tr><tr><td>Resistance<\/td><td>Auto-ranging divider with 1k, 10k, 100k references<\/td><td>Depends on selected range logic<\/td><td>Accuracy drops when known and unknown resistors are far apart<\/td><\/tr><tr><td>Capacitance<\/td><td>RC charge timing to 63.2%<\/td><td>Depends on charge resistor and timing window<\/td><td>Tradeoff between accuracy and measurable range<\/td><\/tr><\/tbody><\/table><table class=\"article-table\"><thead><tr><th>Mode<\/th><th>Input Path \/ Reference Parts<\/th><th>Practical Range<\/th><th>ADC \/ Timing Basis<\/th><th>Main Accuracy Tradeoff<\/th><\/tr><\/thead><tbody><tr><td>Voltage<\/td><td>10k and 4.7k divider into ADC<\/td><td>Up to about 15.6V in this build<\/td><td>ADC reading scaled from divider ratio<\/td><td>Divider ratio, ADC reference, and resistor tolerance<\/td><\/tr><tr><td>Current<\/td><td>ACS712 5A sensor module<\/td><td>Up to the module\u2019s 5A range<\/td><td>ADC reading of sensor output, 185 mV\/A<\/td><td>Offset drift and sensor calibration<\/td><\/tr><tr><td>Resistance<\/td><td>1k, 10k, 100k switched references<\/td><td>Best when unknown value is near an active range<\/td><td>ADC reading of divider voltage<\/td><td>Range selection logic and resistor tolerance<\/td><\/tr><tr><td>Capacitance<\/td><td>10k charge resistor, 220\u03a9 discharge path<\/td><td>Set by RC time and <code>millis()<\/code> timing<\/td><td>Charge to ADC value 648, then solve from \u03c4 = R \u00d7 C<\/td><td>Timing granularity and resistor choice<\/td><\/tr><\/tbody><\/table><h2>What Is A Multimeter?<\/h2><p>A multimeter converts electrical quantities into values you can read directly. Early instruments measured only current, but modern meters combine several measurement functions in one tool.<\/p><p>Multimeters are generally analog or digital. Analog meters use a pointer. Digital meters use a display and are more common in current electronics work. If you want a quick refresher on measurement basics, start with this guide on <a href=\"https:\/\/electropeak.com\/learn\/how-to-use-a-multimeter-beginners-guide\/\">how to use a multimeter<\/a>.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5d431dd elementor-widget elementor-widget-image\" data-id=\"5d431dd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-analog.jpg\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"multimeter-analog\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MTYzNTksInVybCI6Imh0dHBzOlwvXC9lbGVjdHJvcGVhay5jb21cL2xlYXJuXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDIwXC8wOVwvbXVsdGltZXRlci1hbmFsb2cuanBnIn0%3D\">\n\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"800\" height=\"800\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-analog-800x800.jpg\" class=\"attachment-large size-large wp-image-16359\" alt=\"Analog multimeter with pointer display\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e6712f0 elementor-widget elementor-widget-image\" data-id=\"e6712f0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-digital.jpg\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"multimeter-digital\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MTYzNjAsInVybCI6Imh0dHBzOlwvXC9lbGVjdHJvcGVhay5jb21cL2xlYXJuXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDIwXC8wOVwvbXVsdGltZXRlci1kaWdpdGFsLmpwZyJ9\">\n\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"800\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-digital.jpg\" class=\"attachment-large size-large wp-image-16360\" alt=\"Digital multimeter with LCD readout\" srcset=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-digital.jpg 800w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-digital-400x400.jpg 400w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-digital-768x768.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9521b90 elementor-widget elementor-widget-text-editor\" data-id=\"9521b90\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2>What Parameters Does A Multimeter Measure?<\/h2><p>Most multimeters measure voltage, current, and resistance. Some also add capacitance, frequency, diode test, continuity, and other functions.<\/p><p>This Arduino-based build focuses on four measurements:<\/p><ul><li>Voltage<\/li><li>Current<\/li><li>Resistance<\/li><li>Capacitance<\/li><\/ul><h2>Measurement Limits, Safety, and What This Meter Cannot Do<\/h2><p>Treat this build like a low-voltage DC instrument. Its limits come from the Arduino ADC input, the resistor network used in each mode, and the ACS712 current sensor module.<\/p><p>The Step 1 voltmeter uses a 10k\/4.7k divider and is described as measuring up to about 15.6V because the Arduino ADC input must stay within 5V. The current mode uses a 5A ACS712 module. Resistance and capacitance modes assume the part under test is isolated from external power.<\/p><p>\u00a0<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-19a8616 elementor-widget elementor-widget-article_callout\" data-id=\"19a8616\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"article_callout.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style id=\"article-callouts-styles\">\n.callout{\n  --cal-radius:12px;\n  --cal-text:#334155;      \/* body text \u2014 readable neutral for every type *\/\n\n  display:flex;\n  gap:.8rem;\n  margin:1.5rem 0;\n  padding:1rem 1.15rem;\n  border:1px solid var(--cal-border);\n  border-left:4px solid var(--cal-accent);\n  border-radius:var(--cal-radius);\n  background:var(--cal-bg);\n  color:var(--cal-text);\n  font-family:inherit;\n  line-height:1.55;\n}\n\n.callout__icon{\n  flex:0 0 1.2rem;\n  width:1.2rem;height:1.2rem;\n  margin-top:.15rem;\n  background:var(--cal-accent);\n  -webkit-mask:var(--cal-icon) center\/contain no-repeat;\n  mask:var(--cal-icon) center\/contain no-repeat;\n}\n\n.callout__body{flex:1 1 auto;min-width:0;}\n\n.callout__title{\n  margin:0 0 .2rem;\n  font-size:.72rem;\n  font-weight:700;\n  letter-spacing:.06em;\n  text-transform:uppercase;\n  color:var(--cal-label,var(--cal-accent));\n}\n\n.callout__text{margin:0;}\n.callout__text > :first-child{margin-top:0;}\n.callout__text > :last-child{margin-bottom:0;}\n.callout__text a{color:var(--cal-label,var(--cal-accent));text-decoration:underline;text-underline-offset:2px;}\n\n\/* ---- Types: change a color here and it updates everywhere ---- *\/\n.callout--info{\n  --cal-accent:#2563eb; --cal-label:#1d4ed8; --cal-bg:#eaf2ff; --cal-border:#bcd4ff;\n  --cal-icon:url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'\/%3E%3Cpath d='M12 16v-4'\/%3E%3Cpath d='M12 8h.01'\/%3E%3C\/svg%3E\");\n}\n.callout--tip{\n  --cal-accent:#f59e0b; --cal-label:#b45309; --cal-bg:#fff7e0; --cal-border:#fcd34d;\n  --cal-icon:url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9 18h6'\/%3E%3Cpath d='M10 22h4'\/%3E%3Cpath d='M15.1 14c.2-1 .7-1.7 1.4-2.5A4.65 4.65 0 0 0 18 8 6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.8 1.2 1.5 1.4 2.5'\/%3E%3C\/svg%3E\");\n}\n.callout--success{\n  --cal-accent:#22c55e; --cal-label:#15803d; --cal-bg:#e9fdf0; --cal-border:#86efac;\n  --cal-icon:url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'\/%3E%3Cpath d='m8 12 3 3 5-6'\/%3E%3C\/svg%3E\");\n}\n.callout--warning{\n  --cal-accent:#ef4444; --cal-label:#b91c1c; --cal-bg:#fef1f1; --cal-border:#fca5a5;\n  --cal-icon:url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m21.7 18-8-14a2 2 0 0 0-3.5 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.7-3Z'\/%3E%3Cpath d='M12 9v4'\/%3E%3Cpath d='M12 17h.01'\/%3E%3C\/svg%3E\");\n}\n<\/style>\n\t\t\t<div class=\"callout callout--warning\"><span class=\"callout__icon\" aria-hidden=\"true\"><\/span><div class=\"callout__body\"><p class=\"callout__title\">Warning<\/p><div class=\"callout__text\">Use this meter for DC-only measurements. Do not use it for mains or AC measurement, do not measure resistance on a powered circuit, and discharge capacitors before testing them to avoid wrong readings or hardware damage.<\/div><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-84f6605 elementor-widget elementor-widget-text-editor\" data-id=\"84f6605\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>A few practical boundaries matter:<\/p><ul><li>Voltage mode: keep the measured input within the divider\u2019s intended range.<\/li><li>Current mode: place the sensor in series, not in parallel.<\/li><li>Resistance mode: isolate the resistor from the powered circuit.<\/li><li>Capacitance mode: discharge the capacitor before connecting it for a new test.<\/li><\/ul><p>This project is useful for learning and bench-level checks, but it is not a safety-rated replacement for a commercial meter.<\/p><h2><strong>Measuring the Electrical Voltage<\/strong><\/h2><p>The simplest method used here is a voltage divider. Two resistors scale the measured input down to a level the Arduino ADC can read.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c2faf30 elementor-widget elementor-widget-image\" data-id=\"c2faf30\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-divider.jpg\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"multimeter-divider\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MTYzNjEsInVybCI6Imh0dHBzOlwvXC9lbGVjdHJvcGVhay5jb21cL2xlYXJuXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDIwXC8wOVwvbXVsdGltZXRlci1kaXZpZGVyLmpwZyJ9\">\n\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"800\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-divider-800x800.jpg\" class=\"attachment-large size-large wp-image-16361\" alt=\"Arduino voltage divider circuit for voltmeter mode\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6d0927a elementor-widget elementor-widget-image\" data-id=\"6d0927a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"177\" height=\"66\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/formula.png\" class=\"attachment-large size-large wp-image-16372\" alt=\"Voltage divider formula for input voltage calculation\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1d2a453 elementor-widget elementor-widget-text-editor\" data-id=\"1d2a453\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>If you know R1, R2, and the ADC-measured output voltage, you can solve for the original input voltage. That is the core of the <strong>arduino voltmeter<\/strong> part of this build.<\/p>\n<h2>Measuring the Electrical Current<\/h2>\n<p>This build measures current with an ACS712 Hall-effect current sensor module. The sensor converts current into a proportional output voltage, which the Arduino reads through its ADC.<\/p>\n<p>The original project uses the 5A version and states a sensitivity of 185 millivolts per amp.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0df4c19 elementor-widget elementor-widget-text-editor\" data-id=\"0df4c19\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tAnother technique for measuring the current is using the hall-effect principle. The passing of the electrical current creates a magnetic field and consequently the hall voltage. By measuring the hall voltage, you can calculate the magnetic field intensity and therefore the passing electrical current.  \t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cb7b4b7 elementor-widget elementor-widget-heading\" data-id=\"cb7b4b7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Measuring the Resistance <\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-25bede8 elementor-widget elementor-widget-text-editor\" data-id=\"25bede8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tThe same voltage divider technique can be used to measure the resistance. The only difference compared to measuring the voltage is that here, we know the input voltage, the resistance of R1 and the output voltage. R2 is the unknown variable. \t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4258a35 elementor-widget elementor-widget-image\" data-id=\"4258a35\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-ohmlaw.jpg\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"multimeter-ohmlaw\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MTYzNjIsInVybCI6Imh0dHBzOlwvXC9lbGVjdHJvcGVhay5jb21cL2xlYXJuXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDIwXC8wOVwvbXVsdGltZXRlci1vaG1sYXcuanBnIn0%3D\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"800\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-ohmlaw.jpg\" class=\"attachment-large size-large wp-image-16362\" alt=\"Ohm law graphic for current measurement basics\" srcset=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-ohmlaw.jpg 800w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-ohmlaw-400x400.jpg 400w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-ohmlaw-768x768.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e10a33e elementor-widget elementor-widget-text-editor\" data-id=\"e10a33e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Another current-measurement method is a shunt resistor with Ohm\u2019s law, but that is not the method used in this build.<\/p><h2 id=\"measuring-the-resistance\">Measuring the Resistance<\/h2><p>The project uses the same divider idea for resistance, but here the unknown resistor becomes the value to solve for. The code switches between known reference resistors to improve accuracy across a wider span.<\/p><p>The code averages 20 ADC samples, converts that average to voltage, and then scales it back up through the divider ratio.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-097b87c elementor-widget elementor-widget-image\" data-id=\"097b87c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"176\" height=\"67\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/formula2.JPG.png\" class=\"attachment-large size-large wp-image-16375\" alt=\"Resistance calculation formula for divider method\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4624f16 elementor-widget elementor-widget-text-editor\" data-id=\"4624f16\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>When the known and unknown resistor values are too far apart, accuracy gets worse. That is why the design uses 1k, 10k, and 100k reference values instead of a single resistor.<\/p><h2 id=\"measuring-the-capacitance\">Measuring the Capacitance<\/h2><p>Capacitance mode uses the RC charging rule. The Arduino starts charging the capacitor, watches the ADC reading, and records the time until the capacitor reaches 63.2% of the final voltage.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-468430f elementor-widget elementor-widget-image\" data-id=\"468430f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-RC.jpg\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"multimeter-RC\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MTYzNjMsInVybCI6Imh0dHBzOlwvXC9lbGVjdHJvcGVhay5jb21cL2xlYXJuXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDIwXC8wOVwvbXVsdGltZXRlci1SQy5qcGcifQ%3D%3D\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"350\" height=\"350\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-RC.jpg\" class=\"attachment-large size-large wp-image-16363\" alt=\"RC charging circuit for Arduino capacitance meter\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8a41c52 elementor-widget elementor-widget-image\" data-id=\"8a41c52\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-cap.jpg\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"multimeter-cap\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MTYzNjQsInVybCI6Imh0dHBzOlwvXC9lbGVjdHJvcGVhay5jb21cL2xlYXJuXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDIwXC8wOVwvbXVsdGltZXRlci1jYXAuanBnIn0%3D\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"600\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-cap.jpg\" class=\"attachment-large size-large wp-image-16364\" alt=\"Capacitor charging curve showing time constant\" srcset=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-cap.jpg 750w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-cap-500x400.jpg 500w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8f92485 elementor-widget elementor-widget-text-editor\" data-id=\"8f92485\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>The time constant is:<\/p><p>\u03c4^(second)=R\u00d7C<\/p><p>So if you know the resistor value and measure the charge time to 63.2%, you can calculate capacitance.<\/p><h2 id=\"resistor-selection-criteria\">Resistor Selection Criteria<\/h2><p>Resistor choice directly affects range, loading, and accuracy.<\/p><p>For voltage mode, the 10k and 4.7k divider sets the measurement range. The original build states that this combination allows measurement up to about 15.6V while keeping the Arduino ADC input within 5V. If you change the divider ratio, you change the usable range and the scaling in code.<\/p><p>For resistance mode, the 1k, 10k, and 100k references create three effective ranges. Results are better when the unknown resistor is reasonably close to the active reference resistor.<\/p><p>Resistor tolerance matters in both cases. If the actual resistor values differ from the nominal values used in code, every reading shifts. Measuring your real resistor values first and plugging those values into the sketch is one of the easiest ways to improve accuracy.<\/p><h2 id=\"making-a-digital-multimeter-using-arduino\">Making a Digital Multimeter Using Arduino<\/h2><p>This\u00a0<strong>arduino multimeter project<\/strong>\u00a0is built in five parts:<\/p><ol><li>Voltmeter<\/li><li>Ammeter<\/li><li>Ohmmeter<\/li><li>Capacitance meter<\/li><li>OLED menu and integration<\/li><\/ol><p>Build and test each mode separately before loading the combined sketch.<\/p><h2 id=\"step-1-making-the-voltmeter\">Step 1: Making the Voltmeter<\/h2><p>This stage builds the Arduino voltmeter path using a resistor divider and the Arduino ADC.<\/p><h3 id=\"circuit\">Circuit<\/h3><p>The original circuit uses 10k and 4.7k resistors for the divider.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d9fad3f elementor-widget elementor-widget-image\" data-id=\"d9fad3f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-voltmeter-cir.jpg\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"multimeter-voltmeter-cir\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MTYzNzYsInVybCI6Imh0dHBzOlwvXC9lbGVjdHJvcGVhay5jb21cL2xlYXJuXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDIwXC8wOVwvbXVsdGltZXRlci12b2x0bWV0ZXItY2lyLmpwZyJ9\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"842\" height=\"800\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-voltmeter-cir-842x800.jpg\" class=\"attachment-large size-large wp-image-16376\" alt=\"Arduino voltmeter circuit with 10k and 4.7k divider\" srcset=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-voltmeter-cir-842x800.jpg 842w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-voltmeter-cir-421x400.jpg 421w\" sizes=\"(max-width: 842px) 100vw, 842px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-83ac37a elementor-widget elementor-widget-text-editor\" data-id=\"83ac37a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>The voltmeter must connect in parallel with the section whose voltage you want to measure.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fef77ba elementor-widget elementor-widget-text-editor\" data-id=\"fef77ba\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>The code averages 20 ADC samples, converts that average to voltage, and then scales it back up through the divider ratio.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7d9658b elementor-widget elementor-widget-article_callout\" data-id=\"7d9658b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"article_callout.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"callout callout--tip\"><span class=\"callout__icon\" aria-hidden=\"true\"><\/span><div class=\"callout__body\"><p class=\"callout__title\">Tip<\/p><div class=\"callout__text\"><p>A practical detail: the Arduino 10-bit ADC outputs codes 0 through 1023, and the AVR datasheet transfer function uses <code class=\"segment-code-inline\" data-v-8d822fd1=\"\" data-v-3b9ae98b=\"\">\/1024<\/code> because each code represents a voltage bin of width <code class=\"segment-code-inline\" data-v-8d822fd1=\"\" data-v-3b9ae98b=\"\">Vref \/ 1024<\/code>. Some guides use <code class=\"segment-code-inline\" data-v-8d822fd1=\"\" data-v-3b9ae98b=\"\">\/1023.0<\/code> to map the top code exactly to <code class=\"segment-code-inline\" data-v-8d822fd1=\"\" data-v-3b9ae98b=\"\">Vref<\/code>; that is a common approximation, but <code class=\"segment-code-inline\" data-v-8d822fd1=\"\" data-v-3b9ae98b=\"\">\/1024<\/code> matches the datasheet convention. The difference is small (about 0.1%), so either way, calibrate against a known meter rather than relying on the divisor alone.<\/p><\/div><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8c49d0c elementor-widget elementor-widget-image\" data-id=\"8c49d0c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"489\" height=\"144\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/formula2.jpg\" class=\"attachment-large size-large wp-image-16377\" alt=\"ADC proportion formula for voltage measurement\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-89ba687 elementor-widget elementor-widget-heading\" data-id=\"89ba687\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Code<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8c1f0b0 elementor-widget elementor-widget-code-highlight\" data-id=\"8c1f0b0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-twilight copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-cpp line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-cpp\">\n\t\t\t\t\t<xmp>\/*\r\n  Voltmeter with Arduino\r\n   modified on 21 Jul 2019\r\n  by Saeed Hosseini @ Electropeak\r\n  Home\r\n*\/\r\nconst int VoltMeter = A2;\r\nfloat V = 0.00;\r\nvoid calculate_voltage()\r\n{\r\n    float R1 = 10000.00;\r\n    float R2 = 4700.00;\r\n    float v_ref = 5.00;\r\n    float resistor_ratio = 0.00;\r\n    float adc_value = 0.00;\r\n    float voltage = 0.00;\r\n    resistor_ratio = (R2 \/ (R1 + R2));\r\n    for (int i = 0; i < 20; i++)\r\n    {\r\n        adc_value = adc_value + analogRead(VoltMeter);\r\n        delay(3);\r\n    }\r\n    adc_value = adc_value \/ 20;\r\n    voltage = ((adc_value * v_ref) \/ 1024);\r\n    V = voltage \/ resistor_ratio;\r\n}\r\nvoid setup()\r\n{\r\n    Serial.begin(9600);\r\n}\r\nvoid loop()\r\n{\r\n    calculate_voltage();\r\n    Serial.print(V);\r\n    Serial.println(\" v\");\r\n    delay(2000);\r\n}\r\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-f3ebacd elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"f3ebacd\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-0175bcb\" data-id=\"0175bcb\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-714de78 elementor-widget elementor-widget-text-editor\" data-id=\"714de78\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2 id=\"step-2-making-the-ammeter\">Step 2: Making the Ammeter<\/h2><p>This stage uses the ACS712 5A current sensor module to read current without putting a shunt resistor directly into the Arduino analog input path. If you need the module itself, the build uses an\u00a0<a href=\"https:\/\/electropeak.com\/acs712-current-sensor-module\">ACS712 current sensor module<\/a>.<\/p><p>The sensor uses the Hall effect and outputs a voltage proportional to current. In the original project, the 5A version is used and the sensitivity is 185 mV\/A.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1d491e2 elementor-widget elementor-widget-image\" data-id=\"1d491e2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-ac712.jpg\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"multimeter-ac712\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MTYzNjYsInVybCI6Imh0dHBzOlwvXC9lbGVjdHJvcGVhay5jb21cL2xlYXJuXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDIwXC8wOVwvbXVsdGltZXRlci1hYzcxMi5qcGcifQ%3D%3D\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"800\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-ac712.jpg\" class=\"attachment-large size-large wp-image-16366\" alt=\"ACS712 current sensor module used in Arduino ammeter\" srcset=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-ac712.jpg 800w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-ac712-400x400.jpg 400w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-ac712-768x768.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-35ae655 elementor-widget elementor-widget-image\" data-id=\"35ae655\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/pinout.jpg\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"pinout\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MTYzNjcsInVybCI6Imh0dHBzOlwvXC9lbGVjdHJvcGVhay5jb21cL2xlYXJuXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDIwXC8wOVwvcGlub3V0LmpwZyJ9\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1140\" height=\"713\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/pinout.jpg\" class=\"attachment-large size-large wp-image-16367\" alt=\"ACS712 pinout and terminal orientation for series wiring\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-12b7a54 elementor-widget elementor-widget-text-editor\" data-id=\"12b7a54\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3 id=\"circuit\">Circuit<\/h3><p>Connect the circuit as shown:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-089dacd elementor-widget elementor-widget-image\" data-id=\"089dacd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-ammeter-cir.jpg\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"multimeter-ammeter-cir\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MTYzNjgsInVybCI6Imh0dHBzOlwvXC9lbGVjdHJvcGVhay5jb21cL2xlYXJuXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDIwXC8wOVwvbXVsdGltZXRlci1hbW1ldGVyLWNpci5qcGcifQ%3D%3D\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"800\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-ammeter-cir-800x800.jpg\" class=\"attachment-large size-large wp-image-16368\" alt=\"Arduino ammeter wiring with ACS712 current sensor\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f41f792 elementor-widget elementor-widget-text-editor\" data-id=\"f41f792\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>The ammeter must be placed in series with the current path.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1432279 elementor-widget elementor-widget-article_callout\" data-id=\"1432279\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"article_callout.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"callout callout--warning\"><span class=\"callout__icon\" aria-hidden=\"true\"><\/span><div class=\"callout__body\"><p class=\"callout__title\">Warning<\/p><div class=\"callout__text\"><p>Wire the ACS712 in series with the load, verify the current path orientation before power-up, and stay within the module\u2019s 5A range. Wiring it in parallel or bypassing the intended sensor path can give false readings or damage the build.<\/p><\/div><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-15f3fa5 elementor-widget elementor-widget-heading\" data-id=\"15f3fa5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Code<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1a6dd37 elementor-widget elementor-widget-code-highlight\" data-id=\"1a6dd37\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-twilight copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-cpp line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-cpp\">\n\t\t\t\t\t<xmp>\/* \r\n  Ammeter with Arduino \r\n  modified on 21 Jul 2019 \r\n  by Saeed Hosseini @ Electropeak \r\n  Home \r\n*\/ \r\nconst int Ammeter = A2; \r\nfloat I = 0.00; \r\nvoid calculate_current() { \r\n  int sensitivity = 185; \r\n  int adc_value = 0; \r\n  float v_ref = 4.94; \r\n  float voltage = 0.00; \r\n  float pure_voltage = 0.00; \r\n  float offset_voltage = 2.47; \r\n  for (int i = 0; i < 40 ; i++) \r\n  { \r\n    adc_value = adc_value + analogRead(Ammeter); \r\n    delay(2); \r\n  } \r\n  adc_value = adc_value \/ 40; \r\n  voltage = ((adc_value * v_ref) \/ 1024); \r\n  pure_voltage = voltage - offset_voltage; \r\n \/\/ if(pure_voltage > 0.001) pure_voltage = 0.00; \r\n  pure_voltage = pure_voltage * 1000; \r\n  I = pure_voltage \/ sensitivity; \r\n  Serial.println(String(\"ADC = \") + adc_value ); \r\n  Serial.println(String(\"V = \") + voltage + \"v\"); \r\n  Serial.println(String(\"Pure = \") + pure_voltage + \"mv\"); \r\n  Serial.println(String(\"I = \") + I + \"A\"); \r\n} \r\nvoid setup() { \r\n\r\n  Serial.begin(9600); \r\n} \r\nvoid loop() { \r\n  calculate_current(); \r\n  \/\/Serial.println(String(\"I = \") + I + \" mA\");\r\n  delay(2000); \r\n}\r\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-88bab09 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"88bab09\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-dbf5c5f\" data-id=\"dbf5c5f\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-f569c6d elementor-widget elementor-widget-text-editor\" data-id=\"f569c6d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"paragraph\" dir=\"auto\">The code stores <code class=\"segment-code-inline\" data-v-8d822fd1=\"\" data-v-3b9ae98b=\"\">offset_voltage = 2.47<\/code>, but <strong>this is only the value measured from one<br \/>specific module<\/strong>. The ACS712 quiescent output is nominally Vcc\/2 (~2.5V), yet real modules vary with<br \/>supply voltage and manufacturing tolerance. Before trusting current readings, power the module with no load,<br \/>measure its output pin voltage with a known multimeter, and replace <code class=\"segment-code-inline\" data-v-8d822fd1=\"\" data-v-3b9ae98b=\"\">offset_voltage<\/code> with your measured value.<\/div><div dir=\"auto\">\u00a0<\/div><h2 id=\"step-3-creating-the-ohmmeter\">Step 3: Creating the Ohmmeter<\/h2><p>The ohmmeter uses auto-ranging by switching between 1k, 10k, and 100k reference resistors. That keeps the known resistor<br \/>closer to the unknown resistor and improves the result.<\/p><h3 id=\"circuit-1\">Circuit<\/h3>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-992e540 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"992e540\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-1f973d4\" data-id=\"1f973d4\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-774aadd elementor-widget elementor-widget-image\" data-id=\"774aadd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-ohmmeter-cir.jpg\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"multimeter-ohmmeter-cir\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MTYzNjksInVybCI6Imh0dHBzOlwvXC9lbGVjdHJvcGVhay5jb21cL2xlYXJuXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDIwXC8wOVwvbXVsdGltZXRlci1vaG1tZXRlci1jaXIuanBnIn0%3D\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"800\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-ohmmeter-cir-800x800.jpg\" class=\"attachment-large size-large wp-image-16369\" alt=\"Arduino ohmmeter circuit with 1k 10k and 100k ranges\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5cbe2d8 elementor-widget elementor-widget-image\" data-id=\"5cbe2d8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"800\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2026\/07\/Ohmmeter-range-selection-800x800.jpg\" class=\"attachment-large size-large wp-image-30140\" alt=\"Ohmmeter range-selection\" srcset=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2026\/07\/Ohmmeter-range-selection-800x800.jpg 800w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2026\/07\/Ohmmeter-range-selection-400x400.jpg 400w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2026\/07\/Ohmmeter-range-selection-768x768.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4385b26 elementor-widget elementor-widget-text-editor\" data-id=\"4385b26\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3 id=\"code-1\">Code<\/h3>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9846525 elementor-widget elementor-widget-code-highlight\" data-id=\"9846525\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-twilight copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-cpp line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-cpp\">\n\t\t\t\t\t<xmp>\/*\r\n  Ohmmeter with Arduino - Automatic range\r\n  modified on 21 Jul 2019\r\n  by Saeed Hosseini @ Electropeak\r\n  Home\r\n*\/\r\nconst int OhmMeter = A0;\r\nconst int R3 = 6;\r\nconst int R2 = 5;\r\nconst int R1 = 4;\r\nfloat R = 0.00;\r\nvoid calculate_resistor()\r\n{\r\n    float v_ref = 4.94;\r\n    float r1 = 0.00;\r\n    float r_ref1 = 1000.00;\r\n    float adc_value1 = 0.00;\r\n    float voltage1 = 0.00;\r\n    float r2 = 0.00;\r\n    float r_ref2 = 10000.00;\r\n    float adc_value2 = 0.00;\r\n    float voltage2 = 0.00;\r\n    float r3 = 0.00;\r\n    float r_ref3 = 100000.00;\r\n    float adc_value3 = 0.00;\r\n    float voltage3 = 0.00;\r\n    pinMode(R1, OUTPUT);\r\n    pinMode(R2, INPUT);\r\n    pinMode(R3, INPUT);\r\n    pinMode(OhmMeter, INPUT);\r\n    digitalWrite(R1, HIGH);\r\n    for (int i = 0; i < 20; i++)\r\n    {\r\n        adc_value1 = adc_value1 + analogRead(OhmMeter);\r\n        delay(3);\r\n    }\r\n\r\n    adc_value1 = adc_value1 \/ 20;\r\n\r\n    if (adc_value1 < 1022.90)\r\n    {\r\n        voltage1 = ((adc_value1 * v_ref) \/ 1024);\r\n        r1 = (voltage1 * r_ref1) \/ (v_ref - voltage1);\r\n    }\r\n    pinMode(R1, INPUT);\r\n    pinMode(R2, OUTPUT);\r\n    pinMode(R3, INPUT);\r\n    digitalWrite(R2, HIGH);\r\n    for (int i = 0; i < 20; i++)\r\n    {\r\n        adc_value2 = adc_value2 + analogRead(OhmMeter);\r\n        delay(3);\r\n    }\r\n    adc_value2 = adc_value2 \/ 20;\r\n    if (adc_value2 < 1022.90)\r\n    {\r\n        voltage2 = ((adc_value2 * v_ref) \/ 1024);\r\n\r\n        r2 = (voltage2 * r_ref2) \/ (v_ref - voltage2);\r\n    }\r\n    pinMode(R1, INPUT);\r\n    pinMode(R2, INPUT);\r\n    pinMode(R3, OUTPUT);\r\n    digitalWrite(R3, HIGH);\r\n    for (int i = 0; i < 20; i++)\r\n    {\r\n        adc_value3 = adc_value3 + analogRead(OhmMeter);\r\n        delay(3);\r\n    }\r\n    adc_value3 = adc_value3 \/ 20;\r\n    if (adc_value3 < 1022.90)\r\n    {\r\n        voltage3 = ((adc_value3 * v_ref) \/ 1024);\r\n        r3 = (voltage3 * r_ref3) \/ (v_ref - voltage3);\r\n    }\r\n    r1 = r1 \/ 1000;\r\n\r\n    r2 = r2 \/ 1000;\r\n\r\n    r3 = r3 \/ 1000;\r\n    if (r1 < 2 && r2 < 101 && r3 < 1001)\r\n        R = r1 * 1000;\r\n    else if (r1 > 2 && r2 < 101 && r3 < 1001)\r\n        R = r2;\r\n    else if (r1 > 2 && r2 > 101 && r3 < 2000)\r\n        R = r3;\r\n    else\r\n        R = 0.00;\r\n    Serial.print(\"R = \");\r\n\r\n    Serial.println(R, 2);\r\n}\r\nvoid setup()\r\n{\r\n\r\n    Serial.begin(9600);\r\n}\r\nvoid loop()\r\n{\r\n    calculate_resistor();\r\n    Serial.println(\"_________________________________________\");\r\n\r\n    delay(2500);\r\n}\r\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-8eea003 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"8eea003\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-36e1c23\" data-id=\"36e1c23\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-135d89a elementor-widget elementor-widget-text-editor\" data-id=\"135d89a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>The switching logic turns only one reference path on at a time. The other range pins are set as inputs so they are effectively disconnected.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-000dea9 elementor-widget elementor-widget-article_callout\" data-id=\"000dea9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"article_callout.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"callout callout--warning\"><span class=\"callout__icon\" aria-hidden=\"true\"><\/span><div class=\"callout__body\"><p class=\"callout__title\">Warning<\/p><div class=\"callout__text\"><p>The original code had an\u00a0r3\u00a0calculation bug that used\u00a0voltage2\u00a0in the denominator. It has been corrected here to use\u00a0voltage3. Verify the mode against known resistors after upload.<br \/><br \/><\/p><\/div><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8002aa9 elementor-widget elementor-widget-text-editor\" data-id=\"8002aa9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>That warning applies to both the standalone ohmmeter code and the final combined sketch, because the same code pattern appears there.<\/p><h2>Step 4: Building the Capacitance Meter<\/h2><p>This mode measures charge time through a known resistor, then discharges the capacitor so you can test the next part.<\/p><h3>Circuit<\/h3><p>The original circuit uses a 10k resistor to charge the capacitor and a 220\u03a9 resistor for discharge.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a0c86e1 elementor-widget elementor-widget-image\" data-id=\"a0c86e1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-cap-cir.jpg\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"multimeter-cap-cir\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MTYzNjUsInVybCI6Imh0dHBzOlwvXC9lbGVjdHJvcGVhay5jb21cL2xlYXJuXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDIwXC8wOVwvbXVsdGltZXRlci1jYXAtY2lyLmpwZyJ9\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"889\" height=\"800\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-cap-cir-889x800.jpg\" class=\"attachment-large size-large wp-image-16365\" alt=\"Arduino capacitance meter circuit with charge and discharge resistors\" srcset=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-cap-cir-889x800.jpg 889w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-cap-cir-444x400.jpg 444w\" sizes=\"(max-width: 889px) 100vw, 889px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d6c325f elementor-widget elementor-widget-heading\" data-id=\"d6c325f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Code<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3be2a45 elementor-widget elementor-widget-code-highlight\" data-id=\"3be2a45\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-twilight copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-cpp line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-cpp\">\n\t\t\t\t\t<xmp>\/*\r\n  Capacitance meter with Arduino\r\n  modified on 21 Jul 2019\r\n  by Saeed Hosseini @ Electropeak\r\n  base on: https:\/\/www.arduino.cc\/en\/Tutorial\/CapacitanceMeter\r\n  Home\r\n*\/\r\nconst int CapacitancMeter = A1;\r\nconst int ChargePin = 13;\r\nconst int DischargePin = 11;\r\nfloat C = 0.00;\r\nvoid calculate_capacitance()\r\n{\r\n    unsigned long start_time;\r\n    unsigned long elapsed_time;\r\n    float microFarads;\r\n    float nanoFarads;\r\n    float r_ref = 10000.00;\r\n    digitalWrite(ChargePin, HIGH);\r\n    start_time = millis();\r\n    while (analogRead(CapacitancMeter) < 648)\r\n    {\r\n    }\r\n    elapsed_time = millis() - start_time;\r\n    microFarads = ((float)elapsed_time \/ r_ref) * 1000;\r\n    if (microFarads > 1)\r\n    {\r\n        C = microFarads;\r\n    }\r\n\r\n    else\r\n    {\r\n        nanoFarads = microFarads * 1000.0;\r\n        C = nanoFarads;\r\n    }\r\n    digitalWrite(ChargePin, LOW);\r\n    pinMode(DischargePin, OUTPUT);\r\n    digitalWrite(DischargePin, LOW);\r\n    while (analogRead(CapacitancMeter) > 0)\r\n    {\r\n    }\r\n    pinMode(DischargePin, INPUT);\r\n}\r\n\r\nvoid setup()\r\n{\r\n    Serial.begin(9600);\r\n    pinMode(ChargePin, OUTPUT);\r\n\r\n    digitalWrite(ChargePin, LOW);\r\n}\r\nvoid loop()\r\n{\r\n    calculate_capacitance();\r\n    Serial.println(C);\r\n\r\n    delay(2000);\r\n}\r\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-cadd269 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"cadd269\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-5752f6a\" data-id=\"5752f6a\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-9cbed1a elementor-widget elementor-widget-text-editor\" data-id=\"9cbed1a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>The measurement flow is:<\/p><ul><li>Start charging the capacitor<\/li><li>Record the start time with\u00a0<code>millis()<\/code><\/li><li>Wait until the ADC reaches 648, which represents 63.2%<\/li><li>Calculate capacitance from time and resistance<\/li><li>Discharge the capacitor fully<\/li><\/ul><p>If you increase the charge resistor value, the timing gets longer and small capacitance measurements can improve. The tradeoff is a reduced measurable range and slower readings.<\/p><h2 id=\"step-5-wrapping-it-up-and-adding-a-display\">Step 5: Wrapping it Up And Adding a Display<\/h2><p>After each measurement block works on its own, combine them into a single\u00a0<strong>diy multimeter<\/strong>\u00a0with an OLED menu and two buttons for navigation.<\/p><h3 id=\"circuit-3\">Circuit<\/h3>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6a030da elementor-widget elementor-widget-image\" data-id=\"6a030da\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-cir.jpg\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"multimeter-cir\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MTYzNzEsInVybCI6Imh0dHBzOlwvXC9lbGVjdHJvcGVhay5jb21cL2xlYXJuXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDIwXC8wOVwvbXVsdGltZXRlci1jaXIuanBnIn0%3D\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"550\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-cir.jpg\" class=\"attachment-large size-large wp-image-16371\" alt=\"Final Arduino multimeter wiring with OLED and buttons\" srcset=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-cir.jpg 1000w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-cir-600x330.jpg 600w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0f361c5 elementor-widget elementor-widget-heading\" data-id=\"0f361c5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Code<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b15ff94 elementor-widget elementor-widget-code-highlight\" data-id=\"b15ff94\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-twilight copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-cpp line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-cpp\">\n\t\t\t\t\t<xmp>\/*\r\n  Digital Multimeter with Arduino and OLED\r\n  modified on 21 Jul 2019\r\n  by Saeed Hosseini @ Electropeak\r\n  Home\r\n*\/\r\n#include <Wire.h>\r\n#include <Adafruit_GFX.h>\r\n#include <Adafruit_SSD1306.h>\r\n#include \"logo.h\"\r\n#define SCREEN_WIDTH 128\r\n#define SCREEN_HEIGHT 32\r\n#define OLED_RESET -1\r\nAdafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);\r\nconst int select_button = 2;\r\nconst int right_button = 3;\r\nconst int OhmMeter = A0;\r\nconst int CapacitanceMeter = A1;\r\nconst int VoltMeter = A2;\r\nconst int Ammeter = A3;\r\nconst int R3 = 6;\r\nconst int R2 = 5;\r\nconst int R1 = 4;\r\nconst int ChargePin = 13;\r\nconst int DischargePin = 11;\r\nboolean is_select = false;\r\nint navigator = 0;\r\nint flag = 0;\r\nfloat R = 0.00;\r\nfloat V = 0.00;\r\nfloat I = 0.00;\r\nfloat C = 0.00;\r\nboolean nano = false;\r\nboolean kilo = false;\r\nboolean mili = false;\r\nvoid OLED_init()\r\n{\r\n    if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C))\r\n    {\r\n        Serial.println(F(\"SSD1306 allocation failed\"));\r\n        for (;;)\r\n            ;\r\n    }\r\n    display.clearDisplay();\r\n    display_logo(15, 3, Electropeak, F_LOGO_WIDTH, F_LOGO_HEIGHT);\r\n    display.display();\r\n    delay(2000);\r\n    display_clear();\r\n}\r\nvoid display_clear()\r\n{\r\n    display.clearDisplay();\r\n    display.display();\r\n}\r\nvoid display_logo(int x, int y, const uint8_t *bitmap, int w, int h)\r\n{\r\n    display.drawBitmap(x, y, bitmap, w, h, WHITE);\r\n}\r\nvoid display_text(int sz, int x, int y, String str)\r\n{\r\n    display.setTextSize(sz);\r\n    display.setTextColor(WHITE);\r\n    display.setCursor(x, y);\r\n    display.println(str);\r\n}\r\nvoid display_number(int sz, int x, int y, double num)\r\n{\r\n    display.setTextSize(sz);\r\n    display.setTextColor(WHITE);\r\n    display.setCursor(x, y);\r\n    display.println(num);\r\n}\r\nvoid calculate_resistor()\r\n{\r\n    float v_ref = 4.94;\r\n    float r1 = 0.00;\r\n    float r_ref1 = 1000.00;\r\n    float adc_value1 = 0.00;\r\n    float voltage1 = 0.00;\r\n    float r2 = 0.00;\r\n    float r_ref2 = 10000.00;\r\n    float adc_value2 = 0.00;\r\n    float voltage2 = 0.00;\r\n    float r3 = 0.00;\r\n    float r_ref3 = 100000.00;\r\n    float adc_value3 = 0.00;\r\n    float voltage3 = 0.00;\r\n    pinMode(R1, OUTPUT);\r\n    pinMode(R2, INPUT);\r\n    pinMode(R3, INPUT);\r\n    digitalWrite(R1, HIGH);\r\n    for (int i = 0; i < 20; i++)\r\n    {\r\n\r\n        adc_value1 = adc_value1 + analogRead(OhmMeter);\r\n        delay(3);\r\n    }\r\n    adc_value1 = adc_value1 \/ 20;\r\n\r\n    if (adc_value1 < 1022.90)\r\n\r\n    {\r\n\r\n        voltage1 = ((adc_value1 * v_ref) \/ 1024);\r\n\r\n        r1 = (voltage1 * r_ref1) \/ (v_ref - voltage1);\r\n    }\r\n\r\n    pinMode(R1, INPUT);\r\n\r\n    pinMode(R2, OUTPUT);\r\n\r\n    pinMode(R3, INPUT);\r\n\r\n    digitalWrite(R2, HIGH);\r\n\r\n    for (int i = 0; i < 20; i++)\r\n\r\n    {\r\n\r\n        adc_value2 = adc_value2 + analogRead(OhmMeter);\r\n\r\n        delay(3);\r\n    }\r\n\r\n    adc_value2 = adc_value2 \/ 20;\r\n\r\n    if (adc_value2 < 1022.90)\r\n\r\n    {\r\n\r\n        voltage2 = ((adc_value2 * v_ref) \/ 1024);\r\n\r\n        r2 = (voltage2 * r_ref2) \/ (v_ref - voltage2);\r\n    }\r\n\r\n    pinMode(R1, INPUT);\r\n\r\n    pinMode(R2, INPUT);\r\n\r\n    pinMode(R3, OUTPUT);\r\n\r\n    digitalWrite(R3, HIGH);\r\n\r\n    for (int i = 0; i < 20; i++)\r\n\r\n    {\r\n\r\n        adc_value3 = adc_value3 + analogRead(OhmMeter);\r\n\r\n        delay(3);\r\n    }\r\n\r\n    adc_value3 = adc_value3 \/ 20;\r\n\r\n    if (adc_value3 < 1022.90)\r\n\r\n    {\r\n\r\n        voltage3 = ((adc_value3 * v_ref) \/ 1024);\r\n\r\n        r3 = (voltage3 * r_ref3) \/ (v_ref - voltage3);\r\n    }\r\n\r\n    r1 = r1 \/ 1000;\r\n\r\n    r2 = r2 \/ 1000;\r\n\r\n    r3 = r3 \/ 1000;\r\n\r\n    if (r1 < 2 && r2 < 101 && r3 < 1001)\r\n        R = r1 * 1000;\r\n\r\n    else if (r1 > 2 && r2 < 101 && r3 < 1001)\r\n        R = r2;\r\n\r\n    else if (r1 > 2 && r2 > 101 && r3 < 2000)\r\n        R = r3;\r\n\r\n    else\r\n        R = 0.00;\r\n\r\n    if (R < 1)\r\n\r\n    {\r\n\r\n        R = R * 1000;\r\n\r\n        kilo = false;\r\n    }\r\n\r\n    else\r\n\r\n    {\r\n\r\n        kilo = true;\r\n    }\r\n}\r\n\r\nvoid calculate_capacitance()\r\n{\r\n\r\n    unsigned long start_time;\r\n\r\n    unsigned long elapsed_time;\r\n\r\n    float microFarads;\r\n\r\n    float nanoFarads;\r\n\r\n    float r_ref = 10000.00;\r\n\r\n    digitalWrite(ChargePin, HIGH);\r\n\r\n    start_time = millis();\r\n\r\n    while (analogRead(CapacitanceMeter) < 648)\r\n    {\r\n    }\r\n\r\n    elapsed_time = millis() - start_time;\r\n\r\n    microFarads = ((float)elapsed_time \/ r_ref) * 1000;\r\n\r\n    if (microFarads > 1)\r\n\r\n    {\r\n\r\n        C = microFarads;\r\n\r\n        nano = false;\r\n    }\r\n\r\n    else\r\n\r\n    {\r\n\r\n        nanoFarads = microFarads * 1000.0;\r\n\r\n        C = nanoFarads;\r\n\r\n        nano = true;\r\n    }\r\n\r\n    digitalWrite(ChargePin, LOW);\r\n\r\n    pinMode(DischargePin, OUTPUT);\r\n\r\n    digitalWrite(DischargePin, LOW);\r\n\r\n    while (analogRead(CapacitanceMeter) > 0)\r\n    {\r\n    }\r\n\r\n    pinMode(DischargePin, INPUT);\r\n}\r\n\r\nvoid calculate_voltage()\r\n{\r\n\r\n    float R1 = 10000.00;\r\n\r\n    float R2 = 4700.00;\r\n\r\n    float v_ref = 5.00;\r\n\r\n    float resistor_ratio = 0.00;\r\n\r\n    float adc_value = 0.00;\r\n\r\n    float voltage = 0.00;\r\n\r\n    resistor_ratio = (R2 \/ (R1 + R2));\r\n\r\n    for (int i = 0; i < 20; i++)\r\n\r\n    {\r\n\r\n        adc_value = adc_value + analogRead(VoltMeter);\r\n\r\n        delay(3);\r\n    }\r\n\r\n    adc_value = adc_value \/ 20;\r\n\r\n    voltage = ((adc_value * v_ref) \/ 1024);\r\n\r\n    V = voltage \/ resistor_ratio;\r\n}\r\n\r\nvoid calculate_current()\r\n{\r\n\r\n    int sensitivity = 185;\r\n\r\n    int adc_value = 0;\r\n\r\n    float v_ref = 4.94;\r\n\r\n    float voltage = 0.00;\r\n\r\n    float pure_voltage = 0.00;\r\n\r\n    float offset_voltage = 2.47;\r\n\r\n    for (int i = 0; i < 40; i++)\r\n\r\n    {\r\n\r\n        adc_value = adc_value + analogRead(Ammeter);\r\n\r\n        delay(2);\r\n    }\r\n\r\n    adc_value = adc_value \/ 40;\r\n\r\n    voltage = ((adc_value * v_ref) \/ 1024);\r\n\r\n    pure_voltage = voltage - offset_voltage;\r\n\r\n    pure_voltage = pure_voltage * 1000;\r\n\r\n    I = pure_voltage \/ sensitivity;\r\n\r\n    if (I < 1)\r\n\r\n    {\r\n\r\n        I = I * 1000;\r\n\r\n        mili = true;\r\n    }\r\n\r\n    else\r\n\r\n    {\r\n\r\n        mili = false;\r\n    }\r\n}\r\nvoid setup()\r\n{\r\n\r\n    Serial.begin(9600);\r\n\r\n    OLED_init();\r\n\r\n    pinMode(right_button, INPUT_PULLUP);\r\n\r\n    pinMode(select_button, INPUT_PULLUP);\r\n\r\n    pinMode(ChargePin, OUTPUT);\r\n\r\n    digitalWrite(ChargePin, LOW);\r\n}\r\n\r\nvoid loop()\r\n{\r\n\r\n    if (digitalRead(right_button) == 0)\r\n    {\r\n\r\n        navigator++;\r\n\r\n        while (digitalRead(right_button) == 0)\r\n            ;\r\n\r\n        delay(5);\r\n\r\n        if (navigator > 3)\r\n            navigator = 0;\r\n\r\n        Serial.println(navigator);\r\n    }\r\n\r\n    if (digitalRead(select_button) == 0)\r\n\r\n    {\r\n\r\n        is_select = true;\r\n\r\n        while (digitalRead(select_button) == 0)\r\n            ;\r\n    }\r\n\r\n    if (navigator == 0)\r\n\r\n    {\r\n\r\n        display.clearDisplay();\r\n\r\n        display_logo(0, 0, RightArrow, F_LOGO_WIDTH, F_LOGO_HEIGHT);\r\n\r\n        display_text(2, 17, 8, \"Resistor\");\r\n\r\n        display.display();\r\n\r\n        while (is_select)\r\n\r\n        {\r\n\r\n            display.clearDisplay();\r\n\r\n            display_text(1, 0, 0, \"Resistor\");\r\n\r\n            display_text(2, 12, 8, \"R=\");\r\n\r\n            display_number(2, 42, 8, R);\r\n\r\n            if (kilo)\r\n                display_text(1, 115, 15, \"k\");\r\n\r\n            display.display();\r\n\r\n            calculate_resistor();\r\n\r\n            if (digitalRead(select_button) == 0)\r\n\r\n            {\r\n\r\n                is_select = false;\r\n\r\n                while (digitalRead(select_button) == 0)\r\n                    ;\r\n            }\r\n        }\r\n    }\r\n\r\n    if (navigator == 1)\r\n\r\n    {\r\n\r\n        display.clearDisplay();\r\n\r\n        display_logo(0, 0, BothArrow, F_LOGO_WIDTH, F_LOGO_HEIGHT);\r\n\r\n        display_text(2, 17, 8, \"Voltage\");\r\n\r\n        display.display();\r\n\r\n        while (is_select)\r\n\r\n        {\r\n\r\n            display.clearDisplay();\r\n\r\n            display_text(1, 0, 0, \"Voltage\");\r\n\r\n            display_text(2, 12, 8, \"V=\");\r\n\r\n            display_number(2, 42, 8, V);\r\n\r\n            display_text(1, 115, 15, \"v\");\r\n\r\n            display.display();\r\n\r\n            calculate_voltage();\r\n\r\n            if (digitalRead(select_button) == 0)\r\n\r\n            {\r\n\r\n                is_select = false;\r\n\r\n                while (digitalRead(select_button) == 0)\r\n                    ;\r\n            }\r\n        }\r\n    }\r\n\r\n    if (navigator == 2)\r\n\r\n    {\r\n\r\n        display.clearDisplay();\r\n\r\n        display_logo(0, 0, BothArrow, F_LOGO_WIDTH, F_LOGO_HEIGHT);\r\n\r\n        display_text(2, 17, 8, \"Current\");\r\n\r\n        display.display();\r\n\r\n        while (is_select)\r\n\r\n        {\r\n\r\n            display.clearDisplay();\r\n\r\n            display_text(1, 0, 0, \"Current\");\r\n\r\n            display_text(2, 12, 8, \"I=\");\r\n\r\n            display_number(2, 42, 8, I);\r\n\r\n            if (mili)\r\n                display_text(1, 115, 15, \"mA\");\r\n\r\n            if (!mili)\r\n                display_text(1, 115, 15, \"A\");\r\n\r\n            display.display();\r\n\r\n            calculate_current();\r\n\r\n            if (digitalRead(select_button) == 0)\r\n\r\n            {\r\n\r\n                is_select = false;\r\n\r\n                while (digitalRead(select_button) == 0)\r\n                    ;\r\n            }\r\n        }\r\n    }\r\n\r\n    if (navigator == 3)\r\n\r\n    {\r\n\r\n        display.clearDisplay();\r\n\r\n        display_logo(0, 0, LeftArrow, F_LOGO_WIDTH, F_LOGO_HEIGHT);\r\n\r\n        display_text(2, 12, 8, \"Capacitor\");\r\n\r\n        display.display();\r\n\r\n        while (is_select)\r\n\r\n        {\r\n\r\n            display.clearDisplay();\r\n\r\n            display_text(1, 0, 0, \"Capacitor\");\r\n\r\n            display_text(2, 12, 8, \"C=\");\r\n\r\n            display_number(2, 42, 8, C);\r\n\r\n            if (nano)\r\n                display_text(1, 115, 22, \"nF\");\r\n\r\n            if (!nano)\r\n                display_text(1, 115, 22, \"uF\");\r\n\r\n            display.display();\r\n\r\n            calculate_capacitance();\r\n\r\n            if (digitalRead(select_button) == 0)\r\n\r\n            {\r\n\r\n                is_select = false;\r\n\r\n                while (digitalRead(select_button) == 0)\r\n                    ;\r\n            }\r\n        }\r\n    }\r\n}\r\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-3fba1d22 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"3fba1d22\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-573b5a6\" data-id=\"573b5a6\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-667e4b1 elementor-widget elementor-widget-text-editor\" data-id=\"667e4b1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Copy the\u00a0<code>logo.h<\/code>\u00a0file into the same folder as the sketch before compiling.<\/p><p><div class='w3eden wpdm_package_shortcode'><!-- WPDM Link Template: Call to Action 3 -->\n\n<div class=\"well c2a3\">\n    <div class=\"media\">\n        <div class=\"mr-3\" align=\"left\">\n            <img decoding=\"async\" class=\"wpdm_icon\" alt=\"Icon\" src=\"data:image\/svg+xml;base64,CiAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNDAgNDAiPgogICAgICAgICAgICAgICAgPGRlZnM+CiAgICAgICAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkaWVudCIgeDE9IjAiIHkxPSIwIiB4Mj0iMCIgeTI9IjEiPgogICAgICAgICAgICAgICAgICAgICAgICA8c3RvcCBzdG9wLWNvbG9yPSIjMjY5ZGVmIiBvZmZzZXQ9IjAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPHN0b3Agc3RvcC1jb2xvcj0iIzI2YmRlZiIgb2Zmc2V0PSIxIi8+CiAgICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD4KICAgICAgICAgICAgICAgIDwvZGVmcz4KICAgICAgICAgICAgICAgIDxnPgogICAgICAgICAgICAgICAgICAgIDxyZWN0IGZpbGw9InVybCgjZ3JhZGllbnQpIiB4PSIwIiB5PSIwIiB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHJ4PSIzIiByeT0iMyIvPgogICAgICAgICAgICAgICAgICAgIDx0ZXh0IHg9IjUiIHk9IjE5IiBmb250LWZhbWlseT0iQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZiIgZm9udC1zaXplPSIxM3B4IiBsZXR0ZXItc3BhY2luZz0iMSIgZmlsbD0iI0ZGRkZGRiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0c3Bhbj5IPC90c3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRzcGFuIHg9IjYiIHk9IjI4Ij5fPC90c3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L3RleHQ+CiAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgIDwvc3ZnPgoKCQkJ\" \/>\n        <\/div>\n        <div class=\"media-body\">\n            <h3 class=\"media-heading\" style=\"padding-top: 0px;border:0px;margin: 0 0 5px 0;font-size:12pt;\">\n                <a style=\"font-weight: 700\" href=\"https:\/\/electropeak.com\/learn\/download\/logo-h\/\">logo.h<\/a>\n                <span style=\"font-size:8pt;font-weight:300\" class=\"text-muted ml-4\">\n                    <i class=\"fas fa-hdd mr-1\"><\/i> 12.56 KB\n                    <i class=\"ml-3 far fa-arrow-alt-circle-down mr-1\"><\/i> 1136 downloads\n                <\/span>\n            <\/h3>\n            &#8230;\n        <\/div>\n        <div class=\"ml-3\" align=\"right\">\n            <a class='wpdm-download-link download-on-click btn btn-primary '  rel='nofollow' href='#' data-downloadurl=\"https:\/\/electropeak.com\/learn\/download\/logo-h\/?wpdmdl=16374&#038;refresh=6aaa88d25a8731789561042\">Download<\/a>\n        <\/div>\n    <\/div>\n\n<\/div>\n<style>\n    .well.c2a3 .btn {\n        padding: 11px 30px;\n        font-size: 11pt;\n    }\n\n    .well.c2a3 .media-body {\n        font-size: 11pt;\n    }\n\n    .well.c2a3 .wpdm_icon {\n        height: 42px;\n        width: auto;\n    }<\/style>\n<\/div><\/p><p>The right button on pin 3 moves through the menu. The select button on pin 2 enters the highlighted mode and exits back to the menu when pressed again.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-af378dd elementor-widget elementor-widget-article_callout\" data-id=\"af378dd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"article_callout.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"callout callout--info\"><span class=\"callout__icon\" aria-hidden=\"true\"><\/span><div class=\"callout__body\"><p class=\"callout__title\">Info<\/p><div class=\"callout__text\"><p>logo.h\u00a0and the OLED libraries must be present beside the final sketch for compilation to succeed. The OLED code also expects an SSD1306 display at I2C address\u00a00x3C.<br \/><br \/><\/p><\/div><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2348f61 elementor-widget elementor-widget-text-editor\" data-id=\"2348f61\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>If you want to simplify sourcing, this build pairs naturally with an\u00a0<a href=\"https:\/\/electropeak.com\/arduino-uno-r3-original\">Arduino Uno R3<\/a>\u00a0and a\u00a0<a href=\"https:\/\/electropeak.com\/0-96-i2c-128x64-yellow-blue-oled-display-module\">0.96 inch I2C OLED display module<\/a>.<\/p><p><strong>How the Circuit Works<\/strong><\/p><p>Once the separate modes are combined, it helps to think of the system as four measurement blocks sharing one controller and one display.<\/p><ul><li>A0: ohmmeter input<\/li><li>A1: capacitance meter input<\/li><li>A2: voltmeter input<\/li><li>A3: ACS712 current sensor input<\/li><li>D4, D5, D6: ohmmeter range switching<\/li><li>D11: capacitor discharge control<\/li><li>D13: capacitor charge control<\/li><li>D2 and D3: menu buttons<\/li><li>I2C OLED: display output<\/li><\/ul><p>The Arduino reads one measurement path at a time, converts it into engineering units, and updates the OLED menu. The two buttons handle mode selection without physically changing the underlying measurement circuits.<\/p><p><strong>Libraries and Code Assets<\/strong><\/p><p>The final sketch depends on standard Arduino libraries plus one extra local file<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t<div class=\"elementor-element elementor-element-08a7c61 e-flex e-con-boxed e-con e-parent\" data-id=\"08a7c61\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-03e5535 elementor-widget elementor-widget-text-editor\" data-id=\"03e5535\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<table class=\"article-table\">\n<thead>\n<tr>\n<th>Dependency \/ File<\/th>\n<th>Purpose<\/th>\n<th>Required For<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>Wire.h<\/code><\/td>\n<td>I2C communication<\/td>\n<td>OLED display<\/td>\n<\/tr>\n<tr>\n<td><code>Adafruit_GFX.h<\/code><\/td>\n<td>Graphics primitives and text<\/td>\n<td>OLED display<\/td>\n<\/tr>\n<tr>\n<td><code>Adafruit_SSD1306.h<\/code><\/td>\n<td>SSD1306 driver<\/td>\n<td>OLED display<\/td>\n<\/tr>\n<tr>\n<td><code>logo.h<\/code><\/td>\n<td>Bitmap\/logo assets used by the menu<\/td>\n<td>Final combined sketch<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-1ceeed8 e-flex e-con-boxed e-con e-parent\" data-id=\"1ceeed8\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8b8bf3e elementor-widget elementor-widget-text-editor\" data-id=\"8b8bf3e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Install the OLED libraries before uploading the final sketch. Keep\u00a0<code>logo.h<\/code>\u00a0in the same folder as the main\u00a0<code>.ino<\/code>\u00a0file.<\/p><h2 id=\"calibration-and-accuracy\">Calibration and Accuracy<\/h2><p>Build it first. Calibrate it second. If you skip calibration, you can still get numbers, but they may not be useful numbers.<\/p><p>Start with the values that affect every mode:<\/p><ul><li>The actual Arduino supply or ADC reference used in calculations<\/li><li>The real resistance values of the divider and range resistors<\/li><li>The ACS712 no-load offset voltage<\/li><li>Comparison against a known meter on real test points<\/li><\/ul><p>Competitor builds report that DIY Arduino meters can need calibration and may differ from a conventional multimeter by noticeable amounts. One example reported about 200 mV error before adjustment. Actual accuracy after calibration depends on component tolerance, ADC reference stability, and how carefully you calibrate each mode, so treat any published DIY accuracy figure as a rough benchmark rather than a guaranteed specification.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1397eca elementor-widget elementor-widget-article_callout\" data-id=\"1397eca\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"article_callout.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"callout callout--tip\"><span class=\"callout__icon\" aria-hidden=\"true\"><\/span><div class=\"callout__body\"><p class=\"callout__title\">Tip<\/p><div class=\"callout__text\"><p>Measure the actual 5V reference and the real resistor values before editing the code. Those two checks improve voltage, resistance, current scaling, and capacitance results faster than tweaking display formatting.<br \/><br \/><\/p><\/div><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-60554a8 elementor-widget elementor-widget-text-editor\" data-id=\"60554a8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>A good workflow is:<\/p><ol><li>Measure the Arduino 5V rail with a known multimeter.<\/li><li>Measure the actual 10k, 4.7k, 1k, 10k, and 100k resistors.<\/li><li>Replace nominal values in code with measured values where practical.<\/li><li>Calibrate the ACS712 offset with zero current.<\/li><li>Compare each mode against a known reference and adjust if needed.<\/li><\/ol>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-148ac43 e-flex e-con-boxed e-con e-parent\" data-id=\"148ac43\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-63086b3 elementor-widget elementor-widget-text-editor\" data-id=\"63086b3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<table class=\"article-table\">\n  <thead>\n    <tr>\n      <th>Item to Calibrate<\/th>\n      <th>What to Compare Against<\/th>\n      <th>What to Adjust \/ Verify<\/th>\n      <th>When to Recheck<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>ADC reference \/ supply voltage<\/td>\n      <td>Known multimeter on Arduino 5V rail<\/td>\n      <td><code>v_ref<\/code> used in code<\/td>\n      <td>After power-source changes<\/td>\n    <\/tr>\n    <tr>\n      <td>Voltage divider resistors<\/td>\n      <td>Measured resistor values<\/td>\n      <td><code>R1<\/code>, <code>R2<\/code>, divider ratio<\/td>\n      <td>After resistor changes<\/td>\n    <\/tr>\n    <tr>\n      <td>ACS712 zero offset<\/td>\n      <td>Sensor output with no load<\/td>\n      <td><code>offset_voltage<\/code><\/td>\n      <td>At first setup and if readings drift<\/td>\n    <\/tr>\n    <tr>\n      <td>Ohmmeter ranges<\/td>\n      <td>Known resistors near 1k, 10k, 100k<\/td>\n      <td>Range logic and reference values<\/td>\n      <td>After code edits<\/td>\n    <\/tr>\n    <tr>\n      <td>Capacitance timing<\/td>\n      <td>Known capacitor values<\/td>\n      <td>Charge resistor assumption and timing behavior<\/td>\n      <td>After changing resistor or timing method<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cc4c244 elementor-widget elementor-widget-text-editor\" data-id=\"cc4c244\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2 id=\"testing-and-validation\">Testing and Validation<\/h2><p>Test each mode with a known reference before you trust the integrated meter.<\/p><p>For voltage mode, use a battery or a stable DC supply. For current mode, run a known load through the ACS712 and compare the result to a reference meter. For resistance mode, test parts with known values near each auto-range boundary. For capacitance mode, test known capacitors and confirm the discharge step does not hang.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f13bdd6 elementor-widget elementor-widget-text-editor\" data-id=\"f13bdd6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<table class=\"article-table\">\n  <thead>\n    <tr>\n      <th>Mode<\/th>\n      <th>Known Test Reference<\/th>\n      <th>Expected Behavior<\/th>\n      <th>If Reading Is Off<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>Voltage<\/td>\n      <td>Known DC battery or bench supply<\/td>\n      <td>Reading tracks the reference meter closely<\/td>\n      <td>Recheck divider values and <code>v_ref<\/code><\/td>\n    <\/tr>\n    <tr>\n      <td>Current<\/td>\n      <td>Known load current through ACS712<\/td>\n      <td>Zero-current offset is near calibrated center; loaded reading scales correctly<\/td>\n      <td>Recalibrate offset and verify series wiring<\/td>\n    <\/tr>\n    <tr>\n      <td>Resistance<\/td>\n      <td>Known 1k, 10k, 100k resistors<\/td>\n      <td>Meter selects sensible range and returns close value<\/td>\n      <td>Check range logic and <code>r3<\/code> calculation path<\/td>\n    <\/tr>\n    <tr>\n      <td>Capacitance<\/td>\n      <td>Known capacitor values<\/td>\n      <td>Reading changes with part value and completes discharge cycle<\/td>\n      <td>Check discharge path and charge resistor assumptions<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d5b85a3 elementor-widget elementor-widget-text-editor\" data-id=\"d5b85a3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2 id=\"troubleshooting\">Troubleshooting<\/h2><p>Most failures in this kind of build come from three places: wiring mistakes, calibration assumptions, or code dependencies that were not installed.<\/p><p>If the display stays blank, start with I2C wiring and the OLED address. If readings jump around with nothing connected, assume the analog input is floating until proven otherwise. If the buttons act erratically, verify\u00a0<code>INPUT_PULLUP<\/code>\u00a0behavior and wiring to ground.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-35ebad9 elementor-widget elementor-widget-article_callout\" data-id=\"35ebad9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"article_callout.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"callout callout--info\"><span class=\"callout__icon\" aria-hidden=\"true\"><\/span><div class=\"callout__body\"><p class=\"callout__title\">Info<\/p><div class=\"callout__text\"><p>Floating inputs, wrong OLED I2C address, and button wiring are the first checks for unstable or nonresponsive behavior.<\/p><\/div><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-06ffc20 elementor-widget elementor-widget-text-editor\" data-id=\"06ffc20\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<table class=\"article-table\">\n  <thead>\n    <tr>\n      <th>Symptom<\/th>\n      <th>Likely Cause<\/th>\n      <th>Check \/ Fix<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>Voltage reading appears with nothing connected<\/td>\n      <td>Floating analog input<\/td>\n      <td>Confirm input wiring and ignore small no-load values; some builds clamp low readings in code<\/td>\n    <\/tr>\n    <tr>\n      <td>OLED does not display anything<\/td>\n      <td>Wrong wiring or wrong I2C address<\/td>\n      <td>Check I2C lines and verify address <code>0x3C<\/code><\/td>\n    <\/tr>\n    <tr>\n      <td>Current reads non-zero at no load<\/td>\n      <td>ACS712 offset not calibrated<\/td>\n      <td>Measure sensor output with no load and update <code>offset_voltage<\/code><\/td>\n    <\/tr>\n    <tr>\n      <td>Resistance readings are obviously wrong<\/td>\n      <td>Range logic or <code>r3<\/code> code path issue<\/td>\n      <td>Review the third-range calculation and test known resistors<\/td>\n    <\/tr>\n    <tr>\n      <td>Capacitance reading stalls during discharge<\/td>\n      <td>Capacitor not discharging cleanly<\/td>\n      <td>Check discharge resistor path and test with a discharged capacitor<\/td>\n    <\/tr>\n    <tr>\n      <td>Buttons skip or repeat modes<\/td>\n      <td>Wiring or debounce issue<\/td>\n      <td>Recheck button wiring and press handling logic<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>A good arduino multimeter project teaches more than simple measurement. It makes you work through voltage dividers, ADC scaling, Hall-effect current sensing, RC timing, range selection, and UI handling on a small microcontroller. This build uses an Arduino board and an OLED display to measure four DC quantities: voltage, current, resistance, and capacitance. It is [&hellip;]<\/p>\n","protected":false},"author":9,"featured_media":30203,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[949,932],"tags":[4466,4447,4448],"platform":[1071],"bytype":[1074],"difficulty":[1077],"related_products":[4525,4519,4517,4515,4521,2496,4518,4512,4516,4530,4514,4522,4531,3217,2494,4511,4529,2800,2460,4513,4527,2495,2498,2497,4520,4526,4523,4524,3617,3618],"class_list":["post-16356","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gadgets","category-sensors","tag-arduino","tag-current","tag-voltage","platform-arduino","bytype-diy-projects","difficulty-beginner","related_products-ard-01-016","related_products-ard-01-018","related_products-ard-01-019","related_products-ard-01-020","related_products-ard-01-023","related_products-ard-01-024","related_products-ard-01-025","related_products-ard-01-026","related_products-ard-01-027","related_products-ard-01-028","related_products-ard-01-029","related_products-ard-01-030","related_products-ard-01-031","related_products-ard-01-032","related_products-ard-01-033","related_products-ard-01-036","related_products-ard-01-037","related_products-ard-01-041","related_products-ard-01-042","related_products-ard-01-043","related_products-ard-01-044","related_products-ard-01-045","related_products-ard-01-046","related_products-ard-01-048","related_products-ard-01-049","related_products-ard-01-050","related_products-ard-01-051","related_products-ard-01-052","related_products-lcd-01-100","related_products-sen-04-036"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Arduino Multimeter | Build a Digital Multimeter with Arduino [Tested]<\/title>\n<meta name=\"description\" content=\"Learn how to build a cost-effective digital multimeter using Arduino. Measure voltage, current, resistance, and capacitance with this step-by-step guide.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/electropeak.com\/learn\/make-a-digital-multimeter-with-arduino\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Arduino Multimeter | Build a Digital Multimeter with Arduino [Tested]\" \/>\n<meta property=\"og:description\" content=\"Learn how to build a cost-effective digital multimeter using Arduino. Measure voltage, current, resistance, and capacitance with this step-by-step guide.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/electropeak.com\/learn\/make-a-digital-multimeter-with-arduino\/\" \/>\n<meta property=\"og:site_name\" content=\"Electropeak\" \/>\n<meta property=\"article:published_time\" content=\"2020-09-14T08:43:06+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-29T08:03:08+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-arduino-en.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"900\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Saeed Hosseini\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Saeed Hosseini\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"16 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/make-a-digital-multimeter-with-arduino\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/make-a-digital-multimeter-with-arduino\\\/\"},\"author\":{\"name\":\"Saeed Hosseini\",\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/#\\\/schema\\\/person\\\/c0e21c461e06ae878db38c071e3aa166\"},\"headline\":\"Make a Digital Multimeter with Arduino\",\"datePublished\":\"2020-09-14T08:43:06+00:00\",\"dateModified\":\"2026-07-29T08:03:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/make-a-digital-multimeter-with-arduino\\\/\"},\"wordCount\":2740,\"commentCount\":71,\"publisher\":{\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/make-a-digital-multimeter-with-arduino\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/multimeter-arduino-en.jpg\",\"keywords\":[\"Arduino\",\"Current\",\"Voltage\"],\"articleSection\":[\"Gadgets\",\"Sensors\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/electropeak.com\\\/learn\\\/make-a-digital-multimeter-with-arduino\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/make-a-digital-multimeter-with-arduino\\\/\",\"url\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/make-a-digital-multimeter-with-arduino\\\/\",\"name\":\"Arduino Multimeter | Build a Digital Multimeter with Arduino [Tested]\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/make-a-digital-multimeter-with-arduino\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/make-a-digital-multimeter-with-arduino\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/multimeter-arduino-en.jpg\",\"datePublished\":\"2020-09-14T08:43:06+00:00\",\"dateModified\":\"2026-07-29T08:03:08+00:00\",\"description\":\"Learn how to build a cost-effective digital multimeter using Arduino. Measure voltage, current, resistance, and capacitance with this step-by-step guide.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/make-a-digital-multimeter-with-arduino\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/electropeak.com\\\/learn\\\/make-a-digital-multimeter-with-arduino\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/make-a-digital-multimeter-with-arduino\\\/#primaryimage\",\"url\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/multimeter-arduino-en.jpg\",\"contentUrl\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/multimeter-arduino-en.jpg\",\"width\":1200,\"height\":900,\"caption\":\"Digital Multimeter with Arduino Teaser Image\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/make-a-digital-multimeter-with-arduino\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Make a Digital Multimeter with Arduino\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/#website\",\"url\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/\",\"name\":\"Electropeak\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/#organization\",\"name\":\"ElectroPeak\",\"url\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/logo-electropeak-v3-square.png\",\"contentUrl\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/logo-electropeak-v3-square.png\",\"width\":620,\"height\":620,\"caption\":\"ElectroPeak\"},\"image\":{\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/#\\\/schema\\\/person\\\/c0e21c461e06ae878db38c071e3aa166\",\"name\":\"Saeed Hosseini\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9694fd668c8edef3f0683b9fc9639e59d60c24b82a07405389cf4a2862eabc9f?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9694fd668c8edef3f0683b9fc9639e59d60c24b82a07405389cf4a2862eabc9f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9694fd668c8edef3f0683b9fc9639e59d60c24b82a07405389cf4a2862eabc9f?s=96&d=mm&r=g\",\"caption\":\"Saeed Hosseini\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Arduino Multimeter | Build a Digital Multimeter with Arduino [Tested]","description":"Learn how to build a cost-effective digital multimeter using Arduino. Measure voltage, current, resistance, and capacitance with this step-by-step guide.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/electropeak.com\/learn\/make-a-digital-multimeter-with-arduino\/","og_locale":"en_US","og_type":"article","og_title":"Arduino Multimeter | Build a Digital Multimeter with Arduino [Tested]","og_description":"Learn how to build a cost-effective digital multimeter using Arduino. Measure voltage, current, resistance, and capacitance with this step-by-step guide.","og_url":"https:\/\/electropeak.com\/learn\/make-a-digital-multimeter-with-arduino\/","og_site_name":"Electropeak","article_published_time":"2020-09-14T08:43:06+00:00","article_modified_time":"2026-07-29T08:03:08+00:00","og_image":[{"width":1200,"height":900,"url":"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-arduino-en.jpg","type":"image\/jpeg"}],"author":"Saeed Hosseini","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Saeed Hosseini","Est. reading time":"16 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/electropeak.com\/learn\/make-a-digital-multimeter-with-arduino\/#article","isPartOf":{"@id":"https:\/\/electropeak.com\/learn\/make-a-digital-multimeter-with-arduino\/"},"author":{"name":"Saeed Hosseini","@id":"https:\/\/electropeak.com\/learn\/#\/schema\/person\/c0e21c461e06ae878db38c071e3aa166"},"headline":"Make a Digital Multimeter with Arduino","datePublished":"2020-09-14T08:43:06+00:00","dateModified":"2026-07-29T08:03:08+00:00","mainEntityOfPage":{"@id":"https:\/\/electropeak.com\/learn\/make-a-digital-multimeter-with-arduino\/"},"wordCount":2740,"commentCount":71,"publisher":{"@id":"https:\/\/electropeak.com\/learn\/#organization"},"image":{"@id":"https:\/\/electropeak.com\/learn\/make-a-digital-multimeter-with-arduino\/#primaryimage"},"thumbnailUrl":"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-arduino-en.jpg","keywords":["Arduino","Current","Voltage"],"articleSection":["Gadgets","Sensors"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/electropeak.com\/learn\/make-a-digital-multimeter-with-arduino\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/electropeak.com\/learn\/make-a-digital-multimeter-with-arduino\/","url":"https:\/\/electropeak.com\/learn\/make-a-digital-multimeter-with-arduino\/","name":"Arduino Multimeter | Build a Digital Multimeter with Arduino [Tested]","isPartOf":{"@id":"https:\/\/electropeak.com\/learn\/#website"},"primaryImageOfPage":{"@id":"https:\/\/electropeak.com\/learn\/make-a-digital-multimeter-with-arduino\/#primaryimage"},"image":{"@id":"https:\/\/electropeak.com\/learn\/make-a-digital-multimeter-with-arduino\/#primaryimage"},"thumbnailUrl":"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-arduino-en.jpg","datePublished":"2020-09-14T08:43:06+00:00","dateModified":"2026-07-29T08:03:08+00:00","description":"Learn how to build a cost-effective digital multimeter using Arduino. Measure voltage, current, resistance, and capacitance with this step-by-step guide.","breadcrumb":{"@id":"https:\/\/electropeak.com\/learn\/make-a-digital-multimeter-with-arduino\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/electropeak.com\/learn\/make-a-digital-multimeter-with-arduino\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/electropeak.com\/learn\/make-a-digital-multimeter-with-arduino\/#primaryimage","url":"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-arduino-en.jpg","contentUrl":"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2020\/09\/multimeter-arduino-en.jpg","width":1200,"height":900,"caption":"Digital Multimeter with Arduino Teaser Image"},{"@type":"BreadcrumbList","@id":"https:\/\/electropeak.com\/learn\/make-a-digital-multimeter-with-arduino\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/electropeak.com\/learn\/"},{"@type":"ListItem","position":2,"name":"Make a Digital Multimeter with Arduino"}]},{"@type":"WebSite","@id":"https:\/\/electropeak.com\/learn\/#website","url":"https:\/\/electropeak.com\/learn\/","name":"Electropeak","description":"","publisher":{"@id":"https:\/\/electropeak.com\/learn\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/electropeak.com\/learn\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/electropeak.com\/learn\/#organization","name":"ElectroPeak","url":"https:\/\/electropeak.com\/learn\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/electropeak.com\/learn\/#\/schema\/logo\/image\/","url":"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2026\/07\/logo-electropeak-v3-square.png","contentUrl":"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2026\/07\/logo-electropeak-v3-square.png","width":620,"height":620,"caption":"ElectroPeak"},"image":{"@id":"https:\/\/electropeak.com\/learn\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/electropeak.com\/learn\/#\/schema\/person\/c0e21c461e06ae878db38c071e3aa166","name":"Saeed Hosseini","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/9694fd668c8edef3f0683b9fc9639e59d60c24b82a07405389cf4a2862eabc9f?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/9694fd668c8edef3f0683b9fc9639e59d60c24b82a07405389cf4a2862eabc9f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9694fd668c8edef3f0683b9fc9639e59d60c24b82a07405389cf4a2862eabc9f?s=96&d=mm&r=g","caption":"Saeed Hosseini"}}]}},"_links":{"self":[{"href":"https:\/\/electropeak.com\/learn\/wp-json\/wp\/v2\/posts\/16356","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/electropeak.com\/learn\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/electropeak.com\/learn\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/electropeak.com\/learn\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/electropeak.com\/learn\/wp-json\/wp\/v2\/comments?post=16356"}],"version-history":[{"count":66,"href":"https:\/\/electropeak.com\/learn\/wp-json\/wp\/v2\/posts\/16356\/revisions"}],"predecessor-version":[{"id":30199,"href":"https:\/\/electropeak.com\/learn\/wp-json\/wp\/v2\/posts\/16356\/revisions\/30199"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/electropeak.com\/learn\/wp-json\/wp\/v2\/media\/30203"}],"wp:attachment":[{"href":"https:\/\/electropeak.com\/learn\/wp-json\/wp\/v2\/media?parent=16356"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/electropeak.com\/learn\/wp-json\/wp\/v2\/categories?post=16356"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/electropeak.com\/learn\/wp-json\/wp\/v2\/tags?post=16356"},{"taxonomy":"platform","embeddable":true,"href":"https:\/\/electropeak.com\/learn\/wp-json\/wp\/v2\/platform?post=16356"},{"taxonomy":"bytype","embeddable":true,"href":"https:\/\/electropeak.com\/learn\/wp-json\/wp\/v2\/bytype?post=16356"},{"taxonomy":"difficulty","embeddable":true,"href":"https:\/\/electropeak.com\/learn\/wp-json\/wp\/v2\/difficulty?post=16356"},{"taxonomy":"related_products","embeddable":true,"href":"https:\/\/electropeak.com\/learn\/wp-json\/wp\/v2\/related_products?post=16356"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}