Оглавление:

Вольтметр Arduino (0-100 В постоянного тока) - Версия 2 (лучше): 3 шага
Вольтметр Arduino (0-100 В постоянного тока) - Версия 2 (лучше): 3 шага

Видео: Вольтметр Arduino (0-100 В постоянного тока) - Версия 2 (лучше): 3 шага

Видео: Вольтметр Arduino (0-100 В постоянного тока) - Версия 2 (лучше): 3 шага
Видео: Проблема - Цифровой Вольтметр Амперметр для лабораторного блока питания. 2024, Июнь
Anonim
Image
Image
Шаг 1: схемы
Шаг 1: схемы

В этом руководстве я построил вольтметр для измерения высокого напряжения постоянного тока (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: схемы

Шаг 1: схемы
Шаг 1: схемы

Я соединил все части согласно схемам выше.

Я привязал контакт ADDR ADC1115 к земле. Это устанавливает адрес АЦП на 0x48.

Шаг 2: Шаг 2: расчет кода и резистора

Шаг 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: Давайте проверим

Шаг 3: Давайте проверим!
Шаг 3: Давайте проверим!

Для проверки этого вольтметра я использовал 10 батарей по 9 В, которые я купил в местном магазине. На этот раз я смог измерить до 97 вольт! Я планирую использовать этот вольтметр для измерения напряжения на аккумуляторных батареях моих электрических велосипедов (они имеют напряжение в диапазоне от 24 до 60 В, иногда с 72 В).

Как только электроника будет упакована в печатную плату и небольшую коробку, получится красивый и портативный измеритель батарейного блока. Графика и шрифты на OLED-экране могут быть настроены в соответствии с вашими потребностями (например, более крупный шрифт для удобства чтения). Моей целью было получить показания напряжения на измерителе Oled / Arduino недалеко от моего цифрового мультиметра. Я стремился к дельте +/- 0,3В макс.

Как видно из видео в начале Инструкции, мне удалось заархивировать это! Большинство показаний были точными!

Надеюсь, вам понравилось это руководство, и поделитесь со мной своими мыслями!

Рекомендуемые: