Для защиты от перегрузок установите стабилитрон на 5,1 В параллельно аналоговому входу. Избегайте измерений переменного тока без дополнительного выпрямителя. Готовый прибор потребляет 20 мА в режиме ожидания и работает от источника 7-12 В.
Измерение напряжения и тока с помощью микроконтроллера
Для точного замера параметров цепи потребуется плата на базе ATmega328P, резисторный делитель и шунт. Подключите аналоговые входы A0 и A1 к схеме, соблюдая полярность.
Схема подключения
Используйте прецизионный резистор 0.1 Ом для шунта. Напряжение измеряйте через делитель 100 кОм/10 кОм – это снизит нагрузку на контроллер при замере до 50 В. Подавайте сигнал через операционный усилитель с коэффициентом усиления 10 для повышения точности.
Калибровка
Перед началом работы задайте опорное напряжение 1.1 В через analogReference(INTERNAL)
. Для калибровки:
- Подайте известное напряжение 5 В на вход и скорректируйте коэффициент в коде
- Пропустите ток 1 А через шунт, запишите показания АЦП
В скетче используйте формулу: realVoltage = (adcValue * 0.00488) * calibrationFactor
. Для тока: current = (adcShuntVoltage / 0.1) * 1000
, где 0.1 – сопротивление шунта в Омах.
Важно: При замерах свыше 30 В устанавливайте предохранитель и изолируйте контакты. Для высокоточных измерений применяйте 16-битный АЦП ADS1115 вместо встроенного.
Сборка схемы для измерения напряжения и тока
Подключение шунта для измерения тока
Калибровка и проверка
Подайте эталонное напряжение 5 В на вход A0 и скорректируйте показания в коде, умножив значение на 6. Для тока подключите нагрузку 1 А и введите поправочный коэффициент, равный отношению реального тока к показаниям с шунта.
Проверьте схему мультиметром: расхождение не должно превышать 3%. При больших отклонениях замените резисторы на прецизионные с допуском 1%.
Подключите дисплей по интерфейсу I2C, используя контакты A4 (SDA) и A5 (SCL). Для работы с экраном установите библиотеку LiquidCrystal_I2C
через менеджер библиотек в среде разработки.
Инициализируйте дисплей в коде, указав адрес и размер:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // Адрес 0x27, 16 символов, 2 строки
В функции setup()
включите подсветку и очистите экран:
void setup() {
lcd.init();
lcd.backlight();
lcd.clear();
}
float voltage = 5.12;
lcd.setCursor(0, 0); // Курсор в начало первой строки
lcd.print("U = ");
lcd.print(voltage);
lcd.print(" V");
void loop() {
lcd.clear();
// ... расчет значений ...
lcd.print("I = ");
lcd.print(current);
delay(300);
}
Оптимизируйте код, избегая частого вызова clear()
– перезаписывайте только изменяемые символы.