Каталог товаров
Клиенту
Тема сайта:
+38 (066) 305-77-25
Наш адрес
Харьков, времено - только доставка Новой Почтой, УкрПочтой, МистЕкспрес, ROZETKA Delivery
Телефоны:
Время работы
  • Пн-Пт: с 9 до 18
  • Сб.: с 10 до 17
  • Вс: с 11 до 16
E-mail
Мы в соцсетях
Перейти в контакты
0 0
Каталог
Главная
Закладки
0
Сравнить
0
Контакты

Мой АмперМетр

Чи була корисною ця стаття?
Мой АмперМетр

Мой Амперметр

Амперметр готовое устройство
Готовый амперметр в корпусе

Введение

Очень давно хотел создать свой амперметр. Современные мультиметры могут измерять постоянный ток до 10А, кроме токовых клещей. Клещи способны измерять большой ток как постоянный, так и переменный. Я чаще всего работаю с постоянным, поэтому при измерении иногда приходится измерять ток больше 10А (например, максимальную токоотдачу аккумуляторной сборки).

У меня прецизионный мультиметр, который измеряет 6000 раз в секунду, и через такой прибор совсем не хочется пропускать ток даже больше 3А, да и родные провода на щупах тоже не очень готовы к этому. А ещё вариант, когда измеряешь ток и параллельно следишь за напряжением на аккумуляторе, уже одним мультиметром не справиться. Поэтому решил создать свой амперметр на базе Arduino с использованием датчика ACS758 50A.

Он может измерять ток до 50А, и силовая часть никак не связана с аналоговым выходом, который идёт к Arduino. Выход датчика — аналоговый, при отсутствии тока значение напряжения на выходе равно 2.5В (при питании 5В). При протекании тока напряжение на выходе увеличивается или уменьшается (в зависимости от направления) на 40 мВ на 1А тока. Поэтому мы легко сможем считывать это напряжение и выводить на дисплей.

Необходимые компоненты

  1. Arduino Nano — 1252 (код товара)
  2. OLED-дисплей 0.96 (жёлто-голубые символы, I2C) — 1103 (код товара)
  3. Датчик тока ACS758 50A — искать в интернете
  4. Кнопка, любая, например — 1450 (код товара)
  5. CKCS BS01 Мини повышающий модуль DC-DC — 1208 (код товара)
  6. Аккумулятор 18650 — 1451 (код товара)
  7. TP4056 — 1599 (код товара)
  8. Конденсатор 0.1 мкФ

Схема подключения

Схема подключения
Схема подключения компонентов амперметра

Кнопка на пине 2 служит для обнуления значения. Так как модуль немного нагревается, то 0А в зависимости от выходного напряжения в теории 2.5В, но на практике это не так. Конденсатор между A1 и GND нужен для того, чтобы значения с аналогового входа не скакали.

Скетч

Перед загрузкой кода нужно сделать пару измерений с помощью мультиметра. Чем точнее будет измерение, тем точнее будет наш амперметр.

Измерять нужно при питании от аккумулятора, а не от USB!

Итак, первое, что нужно измерить — опорное напряжение. Щупы мультиметра ставим на пин GND и пин REF Arduino. Там будет что-то около 5В +/-. Это значение нужно вписать в строку 13 кода. Теперь нужно измерить наш 0А. Для этого один щуп мультиметра на A1, другой на GND, должны увидеть что-то около 2.5В +/-. Вписываем это значение в строку 11 кода.

Фрагмент кода
Фрагмент кода с настройками опорного напряжения

Теперь, убедившись, что все библиотеки для дисплея установлены, отключаем напряжение от аккумулятора и подключаем Arduino к компьютеру.
Загружаем скетч.

Программный код

Вот полный код скетча для Arduino:


#include 
#include 
#include 

#define SCREEN_WIDTH 128 
#define SCREEN_HEIGHT 64 
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

const int currentSensorPin = A1;   // Пин датчика тока (ACS758)
const int buttonPin = 2;           // Пин кнопки калибровки
float zeroCurrentVoltage = 2.559;  // Напряжение при 0A (по умолчанию)
const float sensitivity = 0.040;   
float OpornV = 5.159;
#define SCALE_Y 15          
#define SCALE_HEIGHT 9     
#define SCALE_START 10      
#define SCALE_WIDTH 108     
#define MAX_CURRENT 5.0      
#define BATTERY_PIN A0       

unsigned long lastBatteryMeasureTime = 0;
const unsigned long batteryMeasureInterval = 30000; 
float batteryVoltage = 0.0;

void setup() {
  Serial.begin(9600);
  
  pinMode(buttonPin, INPUT_PULLUP); 
  digitalWrite(buttonPin, HIGH); 

  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("Ошибка дисплея"));
    for(;;);
  }

  display.clearDisplay();
  display.setTextSize(3);
  display.setTextColor(WHITE);
  display.setCursor(5, 5);
  display.println("Amper");
  display.setCursor(23, 30);
  display.println("Metr");

  display.display();
  digitalWrite(buttonPin, LOW); 
  delay(2000);
  digitalWrite(buttonPin, HIGH); 

  batteryVoltage = analogRead(BATTERY_PIN) * (OpornV / 1023.0);
  lastBatteryMeasureTime = millis();
}

void loop() {
  unsigned long currentTime = millis();

  if(digitalRead(buttonPin) == LOW) {
    delay(50);
    if(digitalRead(buttonPin) == LOW) {
      zeroCurrentVoltage = analogRead(currentSensorPin) * (OpornV / 1023.0);
      while(digitalRead(buttonPin) == LOW) delay(10);
      delay(200);
    }
  }

  float current = (analogRead(currentSensorPin) * (OpornV / 1023.0) - zeroCurrentVoltage) / sensitivity;

  if(currentTime - lastBatteryMeasureTime >= batteryMeasureInterval) {
    batteryVoltage = analogRead(BATTERY_PIN) * (OpornV / 1023.0);
    lastBatteryMeasureTime = currentTime;
  }

  display.clearDisplay();
  drawCurrentScale(current);
  
  display.setTextSize(3);
  display.setCursor(0, 30);
  if(current >= 0) {
    display.print(" "); 
  }
  display.print(current, 3);
  display.setTextSize(1);
  display.setCursor(122, 44);
  display.println("A");
  
  display.setTextSize(1);
  display.setCursor(80, 56);
  display.println("max 50A");
  
  display.setCursor(10, 56);
  display.print(batteryVoltage, 1);
  display.print("V");
  
  display.display();
  delay(250);
}

void drawCurrentScale(float current) {
  
  int centerX = SCALE_START + SCALE_WIDTH/2;
  
  display.drawLine(SCALE_START, SCALE_Y, SCALE_START + SCALE_WIDTH, SCALE_Y, WHITE);
 
  if(current > 0) {
    int pos = map(current * 100, 0, MAX_CURRENT * 100, centerX, SCALE_START + SCALE_WIDTH);
    display.fillRect(centerX + 1, SCALE_Y + 1, pos - centerX - 1, SCALE_HEIGHT - 2, WHITE);
  } else if(current < 0) {
    int pos = map(current * 100, 0, -MAX_CURRENT * 100, centerX, SCALE_START);
    display.fillRect(pos + 1, SCALE_Y + 1, centerX - pos - 1, SCALE_HEIGHT - 2, WHITE);
  }
  
  for(int i = -4; i <= 4; i += 2) {
    int x = map(i, -MAX_CURRENT, MAX_CURRENT, SCALE_START, SCALE_START + SCALE_WIDTH);
    display.drawLine(x, SCALE_Y, x, SCALE_Y + 5, WHITE);

    display.setTextSize(1);
    display.setCursor(x - (abs(i) < 10 ? 3 : 6), SCALE_Y - 10);
    display.print(i);
  }
  
  int pointerPos = map(constrain(current * 100, -MAX_CURRENT * 100, MAX_CURRENT * 100), 
                      -MAX_CURRENT * 100, MAX_CURRENT * 100, 
                      SCALE_START, SCALE_START + SCALE_WIDTH);

  display.fillRect(pointerPos - 1, SCALE_Y - 2, 3, SCALE_HEIGHT + 2, WHITE);
  display.fillTriangle(
    pointerPos, SCALE_Y - 2,
    pointerPos - 2, SCALE_Y - 1,
    pointerPos + 2, SCALE_Y - 1,
    WHITE);
}
    

После загрузки скетча на дисплее должны увидеть короткую надпись и следующее:

Дисплей
Изображение дисплея с рабочими показателями

Внизу слева напряжение аккумулятора, справа внизу напоминание о максимальном токе. Ну и сверху большими символами наш ток, а над этим значением горизонтальная шкала. В зависимости от значения тока будет двигаться наша шкала, как при положительном измерении, так и при отрицательном. Отключаем от компьютера и переходим на питание от аккумулятора. Перед началом измерения следует подержать кнопку обнуления пару секунд и дождаться значения 0.000. Всё, можно измерять, на конце с датчика я припаял провода AWG12, они могут пропускать через себя ток до 60А. С небольшим запасом взял.

Сборка и тестирование

Сборка устройства
Процесс сборки и подключения компонентов
Готовое устройство
Вид готового устройства с другого ракурса
Амперметр готовое устройство
Финальный вид амперметра, готового к работе

Напечатал корпус на скорую руку и сделал настольным с возможностью регулировки угла наклона дисплея. А чтобы он меньше скользил по столу и от упругости проводов, залил свинец и цемент в нижнюю часть. Получилось очень красиво и уже на практике проверил. И был очень впечатлён точностью измерения и быстротой отклика.
Желаю и вам сделать такой красивый амперметр вместе с myproject.com.ua

Автор Ardu_miha

© 2025 Мій Проект. Автор: Ardu_miha. Использование материалов разрешено только с ссылкой на источник.

Рекомендуемые товары
Похожие статьи
Умные часы без единой кнопки
Умные часы без единой кнопки
Блог, Инструкции Подключения и Обзоры
17 сентября 2024
Счетчик рыбы для рыбалки
Счетчик рыбы для рыбалки
Блог, Инструкции Подключения и Обзоры
29 сентября 2024
DIY POWER BANK 2025
DIY POWER BANK 2025
Блог, Интересное и Полезное
10 января
Мониторинг сети AC220v
Мониторинг сети AC220v
Блог, Инструкции Подключения и Обзоры
12 марта