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

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

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

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

Ампер Метр готовий пристрій
Готовий амперметр у корпусі

Вступ

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

В мене прецезійний мультиметр який вимірюе 6000раз в секунду, і через такий пристрій зовсім не хочеться пропускати струм навіть більше 3А, та і рідні провода на щупах теж не дуже готові до цього. А ще варіант коли вимірюешь струм та паралельно з цим слідкуешь за напругою на акумяторі, вже одним мультиметром не справитись. Тому вирішив створити свій Амперметр на базі ардуіно за допомогою датчика ACS758 50A.

Він може вимірювати струм до 50А і зовсім ні як силова частина не зв'язана з аналоговом вихідом який йде до ардуіни. Вихід датчика - аналоговий, за відсутності струму значення напруги на виході дорівнює 2.5В (при живленні 5В). При перебігу струму напруга на виході збільшиться або зменшиться (залежно від напруги) на 40 мВ на 1А струму. Тому злегкістю зможемо считувати цю напругу та виводити на дісплей.

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

  1. Ардуіна нано -- 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в але на практиці це не так. Конденсатор між а1 та Gnd служить для того щоб значення з аналогово входу не стрибали.

Скетч

Перед завантаженням коду треба зробити пару вимірювань за допомогою мультиметра. Чим точніше замір буде тим точніше буде наш Амперметр.

Вимірювати треба при живленні від акумулятора а не від юсб!

Отже перше що потрібно виміряти опорне живлення. Щупи мультиметра поставити на пін GND та пін REF Arduino. Там буде щось типу 5в +-. І це значення в 13 строкі коду треба вписати. Тепер треба виміряти наш 0А. Для цього один щуп мультиметра до А1 інший до GND, повинні побачити щось типу 2,5в +-. Вписуймо це значення в 11строку коду.

Фрагмент коду
Фрагмент коду з налаштуваннями опорної напруги

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

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

Ось повний код скетчу для Arduino:


#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#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.uа

Автор Ardu_miha

© 2025 Мій Проект. Автор: Ardu_miha. Використання матеріалів дозволено лише з посиланням на джерело.

Рекомендовані товари
Схожі статті
Розумний годинник без жодної кнопки
Розумний годинник без жодної кнопки
Блог, Інструкції Підключення та Огляди
17 вересня 2024
Лічильник риби для риболовлі
Лічильник риби для риболовлі
Блог, Інструкції Підключення та Огляди
29 вересня 2024
DIY POWER BANK 2025
DIY POWER BANK 2025
Блог, Цікаве та Корисне
10 cічня
Моніторинг мережі AC220v
Моніторинг мережі AC220v
Блог, Інструкції Підключення та Огляди
12 березня
Живий чат
Живий чат