Мультиметр — обязательный инструмент в арсенале любого радиоинженера, и всегда, когда речь идет о создании или разработке электрических схем, обойтись без него практически невозможно. В данной статье мы рассмотрим создание недорогого мультиметра на основе платы Arduino, с помощью которого можно будет измерять напряжение до 24 В, а также диоды, сопротивление и падение напряжения на светодиоде. Он также включает функцию наличия соединения (обрыва) в сети с зуммером, поэтому вы можете использовать его для выявления коротких замыканий в схеме.
Ранее на нашем сайты мы также рассматривали проекты других измерительных устройств на основе плат Arduino:
- тестер транзисторов на Arduino Uno;
- измеритель емкости и индуктивности на Arduino;
- ваттметр на Arduino;
- измеритель частоты (частотомер) на Arduino Uno;
- омметр (измеритель сопротивления) на Arduino Uno.
Необходимые компоненты
- Плата Arduino Pro Micro (купить на AliExpress).
- Кнопка.
- Резисторы 1 кОм, 4,7 кОм (2 шт.), 10 кОм (купить на AliExpress).
- Зуммер (купить на AliExpress).
- OLED дисплей 128×32 с диагональю 0.91”.
- Переключатель.
- Штекер типа банан (Banana Socket ).
- Литиевая батарея 3.7V, 300mA — 2 шт.
- Регулятор напряжения 5V AMS1117 (купить на AliExpress — можно купить не в виде модуля, а в виде отдельной микросхемы (от 5 до 7 рублей за штуку), но на момент публикации данной статьи не нашел на алиэкспрессе магазина с дешевой доставкой данной микросхемы).
- Перфорированная плата.
- Соединительные провода.
Реклама: ООО «АЛИБАБА.КОМ (РУ)» ИНН: 7703380158
Схема проекта
Схема цифрового мультиметра на основе платы Arduino представлена на следующем рисунке.
Работа схемы достаточно проста: у нас есть плата Arduino, работающая как «мозг» нашего проекта. В схеме мы использовали две пары штекерных разъемов типа «банан» для подключения внешнего входа. Как вы можете видеть на приведенной схеме, у нас также есть резистор 10K и два резистора 4,7K, соединенные параллельно, чтобы сформировать делитель напряжения. С этой конфигурацией делителя напряжения и Arduino мы можем измерять входное напряжение максимум до 24 В. Обратите внимание на то, что входное напряжение более 24 В может повредить наше устройство. Затем у нас есть еще одна пара разъемов типа «банан», которые предназначены для проверки диодов и светодиодов. Эти тесты выполняются путем измерения определенного падения напряжения на тестовом устройстве. Мы также подключили 0,91-дюймовый OLED-дисплей для отображения всех данных, обрабатываемых Arduino, и у нас есть кнопочный переключатель для переключения между всеми функциями нашего мультиметра. Наконец, у нас есть две литиевых батареи 3.7V соединенных последовательно и регулятор напряжения AMS1117 на 5V для питания всей схемы нашего проекта.
Объяснение программы для Arduino
Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.
Первым делом в программе подключим все необходимые библиотеки — SPI.h, Wire.h, Adafruit_GFX.h, Adafruit_SSD1306.h.
1 2 3 4 |
#include <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> |
Далее зададим высоту и ширину дисплея и его адрес
1 2 3 4 |
#define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 32 // OLED display height, in pixels #define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin) #define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32 |
Затем создадим объект для работы с OLED дисплеем.
1 |
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); |
После этого инициализируем все необходимые переменные.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
int analogInput = 0; float vout = 0.0; float vin = 0.0; float R1 = 10000.0; // resistance of R1 (100K) -see text! float R2 = 2200.0; // resistance of R2 (2.2K) - see text! int value = 0; int mode = 0; int interval = 300; unsigned long previousMillis = 0; int raw = 0; int Vin = 5; float Vout = 0; float R11 = 1000; float R22 = 0; float buffer = 0; |
Затем, в функции setup, инициализируем последовательную связь и зададим режимы работы используемых контактов.
1 2 3 4 5 6 7 8 |
Serial.begin(9600); pinMode(analogInput, INPUT); pinMode(9, OUTPUT); pinMode(7, INPUT_PULLUP); digitalWrite(9, HIGH); delay(40); digitalWrite(9, LOW); pinMode(13, OUTPUT); |
Далее инициализируем OLED дисплей с помощью метода begin().
1 2 3 4 5 |
if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { Serial.println(F("SSD1306 allocation failed")); for (;;); // Don't proceed, loop forever } } |
Затем, в функции void loop() мы запрограммируем 4 режима работы нашего устройства, они будут переключаться с помощью переключателя. mode0 — для измерения напряжения, mode1 — для измерения диодов, mode2 — для режима OHM и, наконец, режим для измерения обрыва в цепи.
В режиме mode0 мы будем считывать значение с аналогового контакта A0 и сохранять его в переменной. Затем мы будем рассчитывать измеренное значение напряжение (поскольку у нас делитель напряжения) и сохранять его в переменной vin. И потом мы будем отображать это значение на экране OLED дисплея.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
if (mode == 0) { // Measure Voltage value = analogRead(A0); vout = (value * 5.0) / 1024.0; vin = vout / (R2 / (R1 + R2)); if (vin < 0.09) { vin = 0.0; //statement to quash undesired reading ! } display.clearDisplay(); display.setTextSize(1); display.setTextColor(SSD1306_WHITE); display.setCursor(0, 0); display.println("Voltmeter Mode"); display.setTextSize(2); display.setCursor(10, 12); display.print((vin)); display.print("V"); display.display(); } |
В режиме mode1 мы будем считывать значение с контакта A2 и рассчитывать падение напряжения на резисторе и диоде.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
if (mode == 1) { // Diode Test value = analogRead(A2); vout = (value * 5.0) / 1024.0; // see text vout = 5 - vout; display.clearDisplay(); display.setTextSize(1); display.setTextColor(SSD1306_WHITE); display.setCursor(0, 0); display.println("Diode/LED Test"); display.setTextSize(2); display.setCursor(10, 12); display.print((vout)); display.print(" V"); display.display(); } |
Статья в разработке