Амперметр-вольтметр с записью на SD-карту
Часть 3 - программное обеспечение и настройка
Программное обеспечение
Исходный текст (или, как говорят поклонники Ардуино - скетч) текущей версии (верс.1.6, ноябрь 2025 г.) прошивки микроконтроллера можно скачать по ссылке в конце этой страницы.
В программе используются следующие библиотеки, необходимые для взаимодействия микроконтроллера с периферийными модулями:
- Wire – работа с интерфейсом I2C для обмена данными между микроконтроллером и периферийными модулями.
- SPI – работа с интерфейсом SPI для взаимодействия с адаптером карты памяти microSD.
- EEPROM – работа с энергонезависимой памятью микроконтроллера.
- Adafruit_ADS1015 (v.1.1) – работа с АЦП на базе ADS1015/ADS1115. Эта библиотека включает также библиотеку Adafruit_BusIO.
- LiquidCrystal_I2C – работа с LCD дисплеем.
- RTClib – работа с модулем часов реального времени на базе DS1307.
- SD – работа с файловой системой FAT16/FAT32 для записи лог-файла на карту памяти.
Поскольку библиотеки для Arduino время от времени обновляются, причем подчас новые версии библиотек оказываются несовместимыми со старыми, случается так, что ранее написанные программы из-за этих обновлений перестают компилироваться. Во избежание подобных проблем автор собрал именно те версии библиотек, которые он использовал при разработке текущей версии прошивки микроконтроллера, в один zip-архив. Скачать этот архив можно (и нужно!) по ссылке в конце этой страницы. Автор настоятельно рекомендует использовать для компиляции скетча именно эти библиотеки.
Arduino IDE при компиляции ищет библиотеки в разных папках на вашем жестком диске. Как минимум, это:
- папки установки IDE - что-то вроде C:\Program Files (x86)\Arduino\libraries,
- папки, где IDE хранит свои данные - C:\Users\<ваше имя>\AppData\Local\Arduino15\libraries,
- папки, относящиеся к конкретным аппаратным платформам, например, c:\Users\<ваше имя>\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\libraries,
- папка, где находятся проекты пользователя (под папкой, которая в настройках IDE указана вами в качестве "Sketchbook location" (или, если в IDE включен русский язык - "Путь к альбому со скетчами"), чаще всего это Мои Документы\Arduino\libraries или C:\Users\<ваше имя>\Documents\Arduino\libraries.
Предполагается, что последняя из перечисленных выше папок имеет приоритет над всеми остальными, то есть в случае, если библиотеки с одинаковыми именами лежат сразу в нескольких местах, компилятор будет использовать библиотеку из Sketchbook location. Поэтому тот архив с библиотеками, который вы скачаете по ссылке в конце этой страницы, вам надо будет распаковать именно в папку с пользовательскими проектами. При этом предварительно надо будет удалить там папки с уже имеющимися версиями тех же библиотек.
Теперь, когда мы разобрались с библиотеками, посмотрим на исходный текст прошивки. Непосредственно измерением и записью результатов в лог-файл занимаются всего две функции – measureSingleEnded и measure. Весь остальной объем текста программы составляют процедуры взаимодействия с пользователем – отображение на дисплее результатов измерений (в режимах MEASUREMENT и RECORDING) и различных сообщений (в режиме SETUP), обработка нажатий на кнопки управления.
Исходный текст скетча подробно прокомментирован и в основном не требует дополнительных пояснений.
Настройка прибора
После загрузки кода программы в микроконтроллер и включения прибора достаточно убедиться, что показания на дисплее и функционирование кнопок соответствуют таблице в разделе Режимы работы. Возможно, потребуется установить контрастность изображения на дисплее при помощи переменного резистора, находящегося на плате конвертера интерфейса I2C. Кроме того, для запуска часов реального времени и установки текущих значений даты и времени надо войти в режим SETUP и выполнить там первые два шага в соответствии с диаграммой в разделе Порядок работы в режиме SETUP.
Если при исправных компонентах и правильно выполненном монтаже прибор все-таки не работает, то вероятной причиной этого может являться то, что ваши периферийные модули имеют адреса на шине I2C, отличающиеся от тех, что указаны на принципиальной схеме прибора и использованы автором в скетче. Дело в том, что разные производители клонов модулей для Arduino по каким-то причинам нередко используют не те адреса портов, которые были использованы в оригинале, а какие-то другие, что, разумеется, приводит к неработоспособности всей конструкции. Вы можете выяснить экспериментально, какие именно адреса портов задействованы в ваших модулях, загрузив в микроконтроллер программу i2c_scanner, которую можно легко отыскать на официальном сайте Arduino. Программа просканирует все существующие на шине I2C адреса портов и отметит те из них, на которых "откликаются" ваши периферийные модули. Если адреса портов ваших модулей отличаются от указанных на схеме, вам следует исправить соответствующие константы в скетче.
При первом включении весьма вероятно, что прибор будет показывать ненулевые значения напряжения и тока, несмотря на то, что его входы не подключены к измеряемой цепи.
Причина появления таких ненулевых показаний различна для каналов напряжения и тока. В канале измерения напряжения смещение нуля возникает от протекания входного тока АЦП ADS1115 через резисторы входного делителя напряжения. В результате на входе АЦП возникает некоторое небольшое (в пределах 10-15mV) начальное смещение. В канале измерения тока начальное смещение нуля возникает из-за разброса параметров микросхем датчиков тока. Хотя в документации микросхем ACS712 указано, что их выходное напряжение при отсутствии измеряемого тока равно половине напряжения питания, на практике микросхемы имеют определенный разброс параметров. В результате этого при вычитании их выходных напряжений в программе не всегда получается нулевое значение.
Для установки нулевых показаний в режиме SETUP (НАСТРОЙКА) предусмотрен шаг 4, при выполнении которого прибор измеряет величины напряжений смещения в каналах напряжения и тока при отсутствии входных сигналов, запоминает их в EEPROM микроконтроллера, а затем использует для коррекции показаний прибора при измерениях.
ВАЖНО! Перед тем как выполнить установку нуля необходимо:
1. Замкнуть перемычкой входные гнезда VOLTAGE INPUT.
2. Дать прибору прогреться во включенном состоянии несколько минут для того, чтобы в его корпусе установился тепловой режим.
Этот шаг полезно выполнять каждый раз при изменении условий эксплуатации прибора, например, при значительном изменении температуры окружающей среды или при замене внешнего источника питания, а также в любых других ситуациях, когда вы заметите, что показания прибора отличаются от нулевых при отключенных клеммах CURRENT INPUT и замкнутых накоротко клеммах VOLTAGE INPUT.
К сожалению, даже после выполнения описанной процедуры установки нулей добиться стабильных нулевых значений в канале измерения тока скорее всего не удастся – показания на дисплее при неизменной температуре воздуха будут плавать в пределах 2-3 мА вверх и вниз от нуля, однако, следует иметь в виду, что эти колебания составляют всего лишь десятые доли процента от верхнего предела измерений прибора. Вряд ли стоит ожидать от несложной конструкции, собранной из весьма дешевых комплектующих, точности измерений, сопоставимой с профессиональным лабораторным оборудованием, поэтому в большинстве случаев можно считать такие незначительные отклонения допустимыми.
Тем не менее, если даже небольшие колебания нулевой точки нежелательны, то в программе предусмотрена возможность избавиться от них, включив шумоподавление. Для этого в исходном тексте программы микроконтроллера нужно убрать символы комментария в начале следующей строки:
//#define NOISE_SUPPRESSOR 1
Если константа NOISE_SUPPRESSOR определена, то все результаты измерений менее 3 мВ в канале измерения напряжения и менее 3 мА в канале измерения тока будут показываться на дисплее как 0. При этом независимо от того, определена эта константа или нет, в лог-файл всегда будут записываться измеренные значения без шумоподавления.
После успешной установки нулей в каналах напряжения и тока можно приступать к калибровке чувствительности прибора, которая выполняется путем подбора двух констант в коде программы.
Для этого понадобится следующее оборудование:
- Регулируемый источник питания, способный вырабатывать постоянное напряжение до 20 В при токе до 5 А
- Мощный резистор сопротивлением несколько ом, используемый в качестве нагрузки
- Лабораторный цифровой амперметр с пределом измерений до 5 А максимально возможного класса точности
- Лабораторный цифровой вольтметр с пределом измерений до 20 В максимально возможного класса точности
От качества эталонных лабораторных приборов, применяемых для калибровки чувствительности, зависит точность, которую удастся достигнуть. Не следует в качестве эталонных приборов использовать недорогие мультиметры, приобретенные в соседнем хозяйственном магазине, их точность совершенно недостаточна для успешной калибровки.
Процесс калибровки состоит в подборе значений константы voltageSensitivity для канала измерения напряжения и константы currentSensitivity для канала измерения тока. Для этого нужно собрать цепь из регулируемого источника питания и резистора нагрузки, подключить последовательно с нагрузкой вход CURRENT INPUT прибора и эталонный амперметр, а параллельно нагрузке – вход VOLTAGE INPUT прибора и эталонный вольтметр. Далее показания эталонных приборов нужно сравнить с результатами на дисплее и подобрать значения констант так, чтобы результаты измерений совпали.
Файлы для загрузки
- Исходный текст программы: Logger.ino

- Архив со всеми используемыми в проекте библиотеками: Logger_libraries.zip

Ссылки на сторонние интернет-ресурсы
На момент написания этой публикации все перечисленные ниже ссылки на сторонние ресурсы работают, однако интернет живет своей жизнью и автор не может гарантировать, что через какое-то время отдельные ссылки не перестанут работать или не будут указывать на страницы, содержащие совсем не ту информацию, которая там имеется сегодня. Если вы обнаружите какие-либо проблемы с внешними ссылками - пишите нам, мы постараемся их исправить.
Электронные компоненты, используемые в проекте:
- Микроконтроллер Arduino Nano
(англ.) - Плата Data Logging Board фирмы Deek-Robot
(нем.)
На сайте производителя платы - компании Deek-Robot - на дату написания этой публикации отсутствует какая-либо информация об этой плате, судя по всему, компания сняла ее с производства. Именно поэтому выше приведена ссылка на ресурс, не имеющий отношения к производителю платы, да еще и на немецком языке (google-переводчик вам в помощь), но, к сожалению, это вся информация, которую автору удалось разыскать на просторах интернета. Тем не менее, множество безымянных фирм в Китае продолжает производить клоны этих плат, так что их по-прежнему легко найти и приобрести на сайтах всем известных интернет-магазинов. - Модуль АЦП ADS1115
(англ.).
- Документация микросхемы ADS1115
(англ.).
- Документация микросхемы ADS1115
- Модуль датчика тока на базе микросхемы ACS712
(англ.).
- Описание принципа работы микросхемы ACS712
(англ.). - Документация микросхемы ACS712
(англ.).
- Описание принципа работы микросхемы ACS712
- LCD дисплей 1602
(англ.).
Теперь, когда прибор изготовлен и настроен, познакомимся с тем, как его можно применить на практике.