Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
В этом руководстве я построил вольтметр для измерения высокого напряжения постоянного тока (0-100 В) с относительной точностью и точностью, используя Arduino Nano и ADS 1115 ADC.
Это вторая версия вольтметра, использованная в моих предыдущих инструкциях здесь:
Проведенные мной тестовые измерения были точными, в основном в пределах 0,1 В от фактического напряжения, измеренного стандартным вольтметром (я использовал Astro AI DM6000AR).
На мой взгляд, это намного лучше и проще, чем использование внешнего источника опорного напряжения на Arduino.
Запасы
1 x Arduino Nano - ссылка
1 x Oled Display (SSD 1306) - Ссылка
1 x ADS 1115 - 16-битный АЦП - Ссылка
1 x 1/4 Вт (я предлагаю использовать резисторы 1 Вт) 1% резисторы - 220 кОм - Ссылка
1 x 1/4 Вт (я предлагаю использовать резисторы 1 Вт) 1% резисторы - 10 кОм - ссылка
Макетная плата и провода - Ссылка
Astro AI DM6000AR - Ссылка
USB Power Bank - Ссылка
Батареи 9 В - Ссылка
CanadianWinters является участником программы Amazon Services LLC Associates, партнерской рекламной программы, предназначенной для предоставления сайтам средств для получения комиссионных путем ссылки на Amazon.com и аффилированные сайты. Используя эти ссылки, я как партнер Amazon зарабатываю на соответствующих покупках, даже если вы покупаете что-то другое - и это вам ничего не будет стоить.
Шаг 1: Шаг 1: схемы
Я соединил все части согласно схемам выше.
Я привязал контакт ADDR ADC1115 к земле. Это устанавливает адрес АЦП на 0x48.
Шаг 2: Шаг 2: расчет кода и резистора
Как и в предыдущем руководстве, идея схемы состоит в том, что измеряемое постоянное напряжение проходит через резистор напряжения. Масштабированное напряжение затем поступает на аналоговый вывод преобразователя АЦП для считывания, затем передается в Arduino через I2C, а затем масштабируется и отображается на OLED-дисплее.
Я не использовал усреднение или сглаживание в коде в этом случае, так как показания кажутся довольно точными. Чтобы уменьшить шум, вы можете добавить небольшой конденсатор между A0 (на АЦП) и землей. Однако для моего теста это не потребовалось.
Одна вещь, которую я заметил, был небольшой шум, когда батарея не была подключена (0 вольт). Я использовал последовательный монитор Arduino для отображения значения АЦП и корректировки / настройки его с помощью кода.
Как и в предыдущем руководстве, я сделал электронную таблицу, которая автоматизирует вычисления на случай, если вы хотите использовать разные значения резисторов в делителе напряжения: Ссылка на Google Sheet
Вот код, который я использовал для этого проекта:
#включают
#include #include #include Adafruit_ADS1115 ads (0x48); // Адрес АЦП U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2 (U8G2_R0); // (вращение, [сброс]) int calib = 7; // Значение калибровки ADS1115 для уменьшения ошибки float Voltage = 0; // используется для хранения значения напряжения float Radjust = 0.043421905; // Коэффициент делителя напряжения (R2 / R1 + R2) float vbat = 0; // конечное напряжение после вычислений - напряжение батареи // переменные для обновления экрана без использования задержки unsigned long previousMillis = 0; // сохранит время последнего обновления экрана // константы не изменятся: const long interval = 250; // интервал обновления экрана (миллисекунды) void setup (void) {Serial.begin (9600); u8g2.begin (); ads.begin (); } недействительный цикл (недействительный) {int16_t adc0; // 16-битное чтение АЦП ввода A0 adc0 = ads.readADC_SingleEnded (0); напряжение = ((adc0 + calib) * 0,1875) / 1000; беззнаковый длинный currentMillis = millis (); vbat = напряжение / Radjust; // Запретить отображение отрицательного напряжения при отключении батареи if (vbat = interval) {previousMillis = currentMillis; u8g2.clearBuffer (); // очистить внутреннюю менорию // Отображение напряжения упаковки - шрифты на этой странице: https://github.com/olikraus/u8g2/wiki/fntlistall //u8g2.setFont(u8g2_font_fub20_tr); // шрифт 20px u8g2.setFont (u8g2_font_fub35_tr); // шрифт 35px u8g2.setCursor (1, 42); u8g2.print (vbat, 2); u8g2.setFont (u8g2_font_8x13B_mr); // шрифт 10 пикселей u8g2.setCursor (1, 60); u8g2.print («Вольт»); } u8g2.sendBuffer (); // переносим внутреннюю память на дисплей delay (1); }
Шаг 3: Шаг 3: Давайте проверим
Для проверки этого вольтметра я использовал 10 батарей по 9 В, которые я купил в местном магазине. На этот раз я смог измерить до 97 вольт! Я планирую использовать этот вольтметр для измерения напряжения на аккумуляторных батареях моих электрических велосипедов (они имеют напряжение в диапазоне от 24 до 60 В, иногда с 72 В).
Как только электроника будет упакована в печатную плату и небольшую коробку, получится красивый и портативный измеритель батарейного блока. Графика и шрифты на OLED-экране могут быть настроены в соответствии с вашими потребностями (например, более крупный шрифт для удобства чтения). Моей целью было получить показания напряжения на измерителе Oled / Arduino недалеко от моего цифрового мультиметра. Я стремился к дельте +/- 0,3В макс.
Как видно из видео в начале Инструкции, мне удалось заархивировать это! Большинство показаний были точными!
Надеюсь, вам понравилось это руководство, и поделитесь со мной своими мыслями!