Товары из Китая

ADC ADS1115 — Контролируем аккумуляторы во время отключения электроэнергии


  • Цена: 150руб
  • Поделюсь простенькой поделкой, которая может будет полезна кому-нибудь из читателей муськи)

    Удосужился сделать контроль аккумуляторов домашнего УПС-а. Это древнючий Liebert GXT2-1500RT230, работает со свицовыми аккумуляторами, 4шт по 12В. Аккумы прицеплены уже не тяговые, а стартерные, SOLITE 65B24. Часов на 6 хватает.

    ADC ADS1115 - Контролируем аккумуляторы во время отключения электроэнергии

    Было задействовано пять копеешных платок:

    ESP8266 WEMOS D1 — уже оскомину набила всем.

    OLED 0.66" SSD1306 64×48 крохотный, для оперативного контроля самый то!

    ADC ADS1115 4-канальный измеритель напряжения аналог-цифра, что про него говорить)

    DC-DC XL7015 вообще массовка… ну не совсем)

    INA219 тоже ADC, только серьезно специализированный, для блоков питания, уже три раза обозревался.

    монтажная плата, провода, канифоль, припой, паяльник — да что-ж такое, все куплено на алишке!

    Реализовано в лучших традициях «очумелых ручек»)))

    ADC ADS1115 - Контролируем аккумуляторы во время отключения электроэнергии

    Все это запущено в надстройке ESPHome на базе Home Assistant, который живет на Raspberry Pi 4.

    ADC ADS1115 - Контролируем аккумуляторы во время отключения электроэнергии

    В целом, меня Home Assistant устраивает. Народ всякие междумордия лепят, хабы, шлюзы, сценарии и др и пр. По мне, свешивая все на центральный модуль, весьма понижаем надежность, но не об этом сегодня речь. Я только добавил информации.

    ESP8266. Почему WEMOS? Для поделок самый то. УСБ есть для побыстрому прошить, запитать. Стаб 3.3В есть. На маленькие брэд-борды встает норм. Еще этажеркой ставится экранчик. Няшка)

    ADC ADS1115 - Контролируем аккумуляторы во время отключения электроэнергии

    Отдельная история с INA219. Почему она, а не например ACS712? Да я просто все запустил на 3.3В, а ей надо 5В.

    Да и ESPHome заявляет INA219 поддержку, чего отказываться? И в целом она сильно круче — прикольно-же! Копейки стоит.

    esphome.io/components/sensor/ina219.html?highlight=ina219

    ADC ADS1115 - Контролируем аккумуляторы во время отключения электроэнергии

    Запустил и удивился! Программисты сляпали на скорую руку. Результаты операций при измерении отрицательных значений тока выдавались какие-то мильоны. Еще криво насдвигали байтики и в итоге жуткая пила на графиках.

    ADC ADS1115 - Контролируем аккумуляторы во время отключения электроэнергии

    Вот тут и захотелось переделать на ACS712. Но не сдамся без боя) Может на досуге разворошу эту тему. Да! Родной шунт до 3А — мне маловато, поэтому добавил в параллель около пол метра ,75 медного провода, смотал бифиляром. Получилось 5мОм — самое то.

    ADC ADS1115 - Контролируем аккумуляторы во время отключения электроэнергии

    DC-DC XL7015 выбрана не случайно. Питать весь этот контроль от одного из аккумуляторов нельзя — будет сильная разбалансировка. Втыкаться на выход УПС-а блоком питания — как-то не спортивно) Поэтому берем со всей батареи — а это 55В. К такому высокому входному напряжению выбор DC-DC оказался весьма скудным. Тут тоже не без приключений. Купленые готовые платки при подаче на вход более 35В сразу испустили электронный дух! Купил отдельно микрашки, заменил, работает нормально. Подстроечник заменил на постоянный, так надежней.

    ADC ADS1115 - Контролируем аккумуляторы во время отключения электроэнергии

    ADS1115 обвязан по босяцки и поэтому ловит кучу шума. Зашунтировал входа кондерчиками — амплитуда помехи снизилась с 1В до 0,1В — уже терпимо. Да, знаю, это очень много. Резисторный делитель с простенькой грубой(ну очень грубой) подстройкой дает еще ошибку порядка 0,1В. Да и ладно, все равно пока это показометр))) Куплю точные резисторы и выкину подстроечники.

    ADC ADS1115 - Контролируем аккумуляторы во время отключения электроэнергии

    Аккумуляторы несколько по разному разряжаются-заряжаются, несмотря на то, что вроде из одной партии. Раз в год полный тренировочный цикл покажет слабого. Вот графики напряжения аккумуляторов при отключении сети на 2,5часа.

    ADC ADS1115 - Контролируем аккумуляторы во время отключения электроэнергии

    OLED 0.66" SSD1306 64×48 да, крохотный, но циферки видать норм! Сделал бегущую строку непойми как. Выгорать не должно(и пофиг). В верхнем ряду по очереди напряжения батарей, в нижнем температуру и ток.

    ADC ADS1115 - Контролируем аккумуляторы во время отключения электроэнергии

    Еще прицепил DS18B20 так, формально, пусть будет — запихнул под ручку аккумулятора.

    ADC ADS1115 - Контролируем аккумуляторы во время отключения электроэнергии

    Сама ESP8266 доступна по сети и имеет свою страничку

    ADC ADS1115 - Контролируем аккумуляторы во время отключения электроэнергии

    Код в ESPHome:

    Дополнительная информация
    esphome:

    name: battery1

    esp8266:

    board: d1_mini

    logger:

    api:

    ota:

    password:

    wifi:

    networks:

    — ssid:

    password:

    ap:

    ssid:

    password:

    captive_portal:

    i2c:

    sda: D2

    scl: D1

    dallas:

    — pin: GPIO14

    ads1115:

    — address: 0x48

    sensor:

    — platform: ads1115

    multiplexer: ‘A0_GND’

    gain: 6.144

    filters:

    — lambda: return x * 20;

    name: «UPS battery 1»

    id: UPS_battery_1

    update_interval: 10s

    — platform: ads1115

    multiplexer: ‘A1_GND’

    gain: 6.144

    id: UPS_battery_2

    filters:

    — lambda: return x * 20 — id(UPS_battery_1).state;

    name: «UPS battery 2»

    update_interval: 10s

    — platform: ads1115

    multiplexer: ‘A2_GND’

    gain: 6.144

    filters:

    — lambda: return x * 20 — id(UPS_battery_1).state — id(UPS_battery_2).state;

    id: UPS_battery_3

    name: «UPS battery 3»

    update_interval: 10s

    — platform: ads1115

    multiplexer: ‘A3_GND’

    gain: 6.144

    filters:

    — lambda: return x * 20 — id(UPS_battery_1).state — id(UPS_battery_2).state — id(UPS_battery_3).state;

    id: UPS_battery_4

    name: «UPS battery 4»

    update_interval: 10s

    — platform: ads1115

    multiplexer: ‘A3_GND’

    gain: 6.144

    filters:

    — lambda: return x * 20;

    id: UPS_battery

    name: «UPS battery»

    update_interval: 10s

    — platform: dallas

    address: 0x7c031397792a3b28

    name: «Battery Temperature»

    id: Battery_Temperature

    — platform: ina219

    address: 0x40

    shunt_resistance: 0.0049 ohm

    current:

    name: «INA219 Current»

    id: INA219_Current

    filters:

    — lambda: return id(INA219_Shunt_Voltage).state / 0.0049;

    power:

    name: «INA219 Power»

    id: INA219_Power

    filters:

    — lambda: return id(UPS_battery).state * id(INA219_Current).state;

    bus_voltage:

    name: «INA219 Bus Voltage»

    id: INA219_Bus_Voltage

    shunt_voltage:

    name: «INA219 Shunt Voltage»

    id: INA219_Shunt_Voltage

    filters:

    — offset: 0.00069

    update_interval: 10s

    — platform: wifi_signal

    name: «Battery WiFi Signal Sensor»

    update_interval: 60s

    web_server:

    port: 80

    globals:

    — id: coords

    type: int

    restore_value: no

    initial_value: ‘0’

    — id: length

    type: int

    restore_value: no

    initial_value: ‘260’

    interval:

    — interval: 30ms

    then:

    lambda: |-

    if (id(coords) < -(id(length))) {

    id(coords) = 0;

    }

    else {

    id(coords) -= 2;

    }

    font:

    — file: «SFDigitalReadout.ttf»

    id: sfdigital

    size: 36

    — file: «SFDigitalReadout.ttf»

    id: sfdigital1

    size: 15

    display:

    — platform: ssd1306_i2c

    model: «SSD1306 64×48»

    address: 0x3C

    update_interval: 30ms

    # scan: true

    lambda: |-

    it.printf(id(coords), 0, id(sfdigital), " %.1f %.1f %.1f %.1f ", id(UPS_battery_1).state, id(UPS_battery_2).state, id(UPS_battery_3).state, id(UPS_battery_4).state );

    it.printf(id(coords), 24, id(sfdigital), " %.1f° %.3fA ", id(Battery_Temperature).state, id(INA219_Current).state );


СМОТРИ ТАКЖЕ

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *