Монітор автомобільного акумулятора Arduino. Збій травень 2022 року

Мої проекти

Двічі цього року я виходив у гараж і виявляв, що акумулятор машини розрядився. Це гібрид C-Max, і коли таке трапляється, нічого не працює. Ти не заводиш гібрид, ти його завантажуєш, комп’ютери керують усім – навіть дверними замками. Виходячи з гуглінгу, це поширена проблема з моделлю 2013 року. Мабуть, іноді радіо не вимикається, коли ви паркуєте машину, і батарея незабаром сідає. Я бачив цей режим двічі, один раз радіо не вмикалося, а другий раз не вимикалося. Виправити це досить просто, витягніть і замініть запобіжник. Цикл живлення повертає радіо до нормального стану. Можливо, це збіг, але програмне забезпечення написане компанією Microsoft.

Тож зараз зима, я відновлююся після операції, а велосипед висить до весни. Мені потрібен був проєкт на випадок карантину, над яким можна було б працювати в приміщенні. Я вирішив побудувати щось, щоб монітор стан низьковольтного акумулятора автомобіля. Гібрид має високу напругу батарея для запуску двигунів та низьковольтну батарею для роботи аксесуарів. Тут немає генератора змінного струму, як на звичайному бензиновому транспортному засобі, замість цього двигун обертає генератор (один з двох двигунів, які за допомогою магії реверсуються) для підзарядки 300-вольтової тягової батареї. Існує DC-DC перетворювач, який знижує високу напругу для зарядки звичайної 12-вольтової батареї. Для мого проекту потрібен діапазон вимірювання від 0 до 18 вольт, періодичне вимірювання та запис результатів з відміткою часу на SD-карту. Я залишу пристрій підключеним місяцями за раз. Було б краще виміряти струм холостого ходу, але я не знаю, як це зробити.

Я купив Arduino Logging Shield від Adafruit (продукт 1141). Він підключається до UNO, має гніздо для SD-карти та годинник реального часу на базі мікросхеми NXP PCF8523. Я також придбав OLED-дисплей з роздільною здатністю 128 × 64 пікселів (продукт 326). Я використовував OLED раніше в проектах Arduino і мені подобається його гнучкість. Дисплей невеликий, але дуже читабельний. UNO, яку я використовую, – це Sparkfun RedBoard. Він має ідеально рівне дно, що полегшило монтаж.

Я протестував три основні компоненти підвісного двигуна окремо, використовуючи демонстраційні програми, що входять до складу кожної бібліотеки. RTC і OLED працювали з коробки, але у мене були труднощі з SD-картою. Я пропустив пайку на шестиконтактному жіночому роз’ємі, який підключається до Arduino Виводи ICSP. Adafruit краде SPI-з’єднання з цього порту, яке потрібне для зв’язку з SD-картою. Ну що ж..

Переходимо до програмного забезпечення. Був швидко зібраний скетч, який зчитував би RTC і записував часову мітку на SD-карту. Ніяких проблем. Але коли я додав OLED до суміші, Arduino розбився. Очевидно, що бібліотека OLED і бібліотека SD-карти не помістяться разом в мізерних 2k оперативної пам’яті на процесорі ATMega328. Бібліотека SD має багато коду для роботи з файловою системою FAT. Біт OLED відображає кожен піксель в оперативній пам’яті, яка сама по собі становить 128 64 / 8 = 1024 байт пам’яті. Не дивно, що процесор знудило. Тому, знизивши свої очікування, я розширив дюймовий отвір, який я зробив у пластиковому корпусі, до 3 дюймів в ширину і встановив більш звичний рідкокристалічний дисплей 16×2.

У мене був адаптер I2C для цих РК-модулів (3 з каталогу All Electronics LCD-SI). Припаяв її до РК-дисплея і підключив до клем I2C на екрані логгера. Не спрацювало. Після цілого дня перевірки проводів і завантаження різних бібліотек LCD (очевидно, частина All Electronics має іншу розводку, ніж еквівалент Adafruit), я запустив програму I2C_scanner у прикладах бібліотеки Wire. Виявилося, що плата All Electronics має іншу адресу I2C, 0x3F замість 0x20, яка була в документації. Після встановлення правильної адреси РК-дисплей запрацював, як і було заявлено. Рюкзак All Electronics має одну перевагу над деякими іншими виробниками: він має на борту транзистор-перемикач, який може вимкнути підсвічування РК-модуля, заощаджуючи електроенергію.

Робота:

Встановлено три кнопки: “Функція”, “Вгору” і “Вниз. Це дозволяє мені переміщатися в меню налаштувань. Компоненти перемикача можна побачити трохи вище РК-модуля. Моя звичайна практика полягає в тому, щоб припаяти 0.Конденсатор 1 мкФ через перемикач, заземліть одну сторону, а потім підключіть підтяжку на 10 кОм на стороні Arduino. У мене є функція, яка аналогово зчитує стан перемикача і повертає високий або низький рівень. Це дуже ефективний відбійник, який добре підходить для цих дешевих кнопкових перемикачів.

При скиданні або подачі живлення логгер завантажується, зчитуючи з енергонезалежної пам’яті останній інтервал журналу та ім’я файлу. Якщо не буде запитано меню налаштувань, він перейде в режим безперервного вимірювання за часом. Дисплей засвітиться на дві секунди, потім згасне, і процесор буде спати протягом решти поточного інтервалу журналу.

Ось як виглядають записи на SD-карті. Тут інтервал встановлений на тридцять хвилин. Формат Comma Separated Value легко імпортувати в електронну таблицю. Потрібно лише шість клацань мишкою, щоб створити придатний для використання графік вимірювань.

jbh@junkbox-2:~/Desktop cat /media/jbh/LOGGER1/G.CSV 2020/12/06 20:34:42,09.1 2020/12/06 21:04:00,09.1 2020/12/06 21:34:00,09.1 2020/12/06 22:04:00,09.1 2020/12/06 22:34:00,09.1

Виявилося, що запрограмувати зчитування та збереження показань напруги було найпростішою частиною – близько 65 рядків у скетчі. Найцікавіше було робити меню налаштувань. Я хотів:

  • щоб встановити годинник реального часу
  • встановити інтервал запису (5 сек, 10 сек, 30 сек, 1 хв, 5 хв, 10 хв, 30 хв)
  • задати ім’я файлу журналу, обмежене літерою.CSV, де букви від A до Z, щоб спростити роботу
  • щоб перерахувати каталог SD-карти і переглянути будь-який файл

Це формує решту скетчу, близько 800 рядків (поки що). Були серйозні проблеми з пам’яттю, щоб запустити все це. Насправді я замовив Adafruit Metro M0, який має набагато більше оперативної пам’яті, але з переміщенням деякого коду в функції він тепер працює нормально на RedBoard. (оновлення: Скетч потребує незначних змін для компіляції на M0).

Режим налаштування активується утриманням функціональної кнопки при скиданні налаштувань. Arduino не буде перевіряти кнопки під час сну, натискання кнопки скидання все розбудить. Загалом, коротке натискання кнопки “Функція” вибирає пункти, довге натискання призводить до виходу із завдання. Кнопки Вгору та Вниз переміщують пункти меню.

На цьому етапі, якщо відпустити функціональну кнопку, відображаються категорії меню налаштувань. Натискання кнопки Вгору або Вниз дозволяє переміщатися по списку. При натисканні на кнопку Function буде введена опція, яка в даний момент відображається на дисплеї. Є чотири варіанти:

Каталог SD:

Цей розділ дозволяє прокручувати каталог SD-карти і за бажанням переглядати збережені записи у вибраному файлі.

Кнопки Вгору/Вниз прокручують каталог файлів на SD-карті. Відображаються імена та розміри файлів:

Коротке натискання кнопки Function відкриє файл на дисплеї і почне відображати записи, найновіші з яких будуть показані першими. Цей екран відображається при вході протягом двох секунд:

За ним одразу слідує вміст останнього запису файлу. Інформація у верхньому рядку: номер запису, перша буква імені файлу та виміряна напруга. Другий рядок показує дату і час, коли було записано вимірювання. Я не зміг вкластися в рік.

Тривале натискання на функцію призводить до виходу з браузера файлів. Ще одне тривале натискання виводить з опції каталогу і повертає в головне меню. Ви можете вибрати іншу категорію меню або зробити третє тривале натискання, щоб вийти з налаштування і почати вимірювання за часом.

Збірка Arduino Акумулятор Схема тестера

Цю схему тестера батареї досить легко зібрати. Якщо ви слідкували за моїми підручниками з Arduino, то ви помітили, що ми використовуємо новий компонент, який називається стабілітрон.

Стабілітрон дозволить вам тестувати акумулятори, які мають напругу більше 8 вольт. Стабілітрон працює, пропускаючи струм в одному напрямку, поки він не досягне напруги пробою (обмеження на діоді, в нашому випадку це 5.1 вольт). Як тільки він досягає цієї межі, він дозволяє напрузі йти в зворотному напрямку. Це може допомогти захистити деталі, які можуть витримати лише певну кількість напруги. У нашому випадку Arduino.

2.Резистор 2k Ом зменшує струм, що надходить від батареї, до того, що зможе прийняти Arduino. Якщо ваш струм занадто високий, то це може пошкодити Arduino.

Схема також має три різні світлодіоди, кожен з яких приблизно показує, скільки заряду залишилося в акумуляторі.

  • Червоний буде означати, що батарея розряджена/майже розряджена.
  • Жовтий колір буде представляти акумулятор будучи розрядженим приблизно наполовину.
  • Нарешті, зелений колір буде означати, що батарея заряджена.

Для кожного світлодіода ми підключаємо 100-омний резистор від контакту заземлення до контакту заземлення, щоб не перегоріли світлодіоди. Це дуже схоже на те, що ми робили в підручнику зі світлофора Arduino.

Зараз я швидко пройдуся по етапах складання цієї схеми. Під інструкцією ви знайдете електричну схему, якщо вам буде простіше просто слідувати їй.

Підключіть контакт заземлення на Arduino до шини заземлення на макетній платі.

На макетній платі розмістіть зелений, червоний та жовтий світлодіоди. Підключіть штифти заземлення до заземлювальної рейки.

Помістіть резистор 100 Ом на позитивний кінець світлодіодів, а потім підключіть провід від резистора до відповідних контактів на Arduino.

Наступні світлодіоди повинні підключатися до відповідних номерів виводів.

Тепер підключіть від аналогового виводу 0 (A0) до макетної плати. Після цього додайте 2.2k резистор і стабілітрон (з лінією на стабілітроні, спрямованою до Arduino). Нарешті, маємо вільний дріт, що виходить з іншого кінця діода.

Нарешті, підключіть вільний дріт до заземлювальної рейки.

Код

Код для цього проекту тестера ємності батареї Arduino простий, але я поясню кожен біт, щоб ви могли зрозуміти, що ми робимо. Якщо вам потрібен лише код без пояснень, ви можете завантажити його тут або на нашому GitHub.

По-перше, нам потрібно налаштувати всі наші змінні. Це включає в себе переконання, що всі змінні світлодіодів призначені відповідним номерам виводів, згаданим раніше.

arduino, батарея, монітор

Змінна analogValue – це місце, де ми будемо зберігати значення, яке надходить з аналогового входу. Потім ми виконуємо обчислення (які я поясню пізніше) і зберігаємо отримане число у змінній з назвою voltage.

Нарешті, ledDelay – це час, протягом якого ви хочете, щоб світлодіоди залишалися увімкненими перед вимкненням.

int greenLed = 2; int yellowLed = 3; int redLed = 4; int analogValue = 0; float voltage = 0; int ledDelay = 1000;

Функція setup викликається один раз і є ідеальним місцем для налаштування всіх наших виводів. У цій конкретній програмі нам потрібно лише налаштувати всі наші світлодіодні виводи як виходи.

Усередині функції циклу ми зробимо кілька речей. По-перше, ми зчитуємо аналоговий вивід, значення з цього виводу буде в діапазоні 0-1023. Нам потрібно буде зробити розрахунок, щоб перетворити його на змінну, тому ми просто помножимо analogValue на 0.0048, щоб зробити це.

В останній частині ми порівнюємо нашу розраховану напругу і порівнюємо її з нашими визначеними значеннями напруги. Кожного разу, коли напруга потрапляє між набором значень, ми просто повертаємо відповідний світлодіод. Ви можете змінювати змінні напруги, щоб змусити світлодіоди відображатися так, як вам подобається.

if( voltage = 1.6 ) digitalWrite(greenLed, HIGH); else if (voltage 1.2 напруга

Після того, як ви закінчите зі схемою, просто підключіть Arduino до комп’ютера і завантажте код. Як тільки це буде зроблено, ми можемо продовжувати тестування та перевіряти, чи працює він правильно.

Тестуємо все це

Коли ви вперше увімкнете і розгорнете новий код на Arduino, ви помітите, що він продовжує стрибати між світлодіодами. Це пов’язано з тим, що дріт аналогового входу плаває і вловлює шум, що змушує нашу програму виявляти хибнопозитивні спрацьовування.

Щоб зупинити стрибки, ви можете просто заземлити аналоговий дріт на шину заземлення, коли він не використовується. Ви також можете спробувати заземлити інші аналогові виводи, щоб зменшити кількість шуму, який він вловлює.

Щоб перевірити це, все, що вам потрібно зробити, це підключити батарею до двох проводів. Підключіть дріт заземлення до негативного кінця акумулятора, а позитивний дріт – до позитивного кінця акумулятора.

Arduino повинен підняти напругу і сказати відповідному світлодіоду, щоб він засвітився. Якщо цього не відбувається, спробуйте додати кілька налагоджувальних рядків для входу акумулятора. Це повинно підказати вам, чи є щось не так із зчитуванням входу, чи просто помилка у відображенні світлодіодів.

Як працює тестер ємності акумулятора?

Тестер ємності акумулятора працює, вимірюючи електричну ємність акумулятора протягом певного періоду. Отже, кількість енергії, яку пристрій витягує з акумулятора батареї дорівнює номінальній ємності акумулятора в ампер-годинах.

Різні акумулятори мають різні межі розрядки. Наприклад, для свинцево-кислотних акумуляторів 1.67 В на елемент. Але, свинцево-кислотні акумулятори мають обмеження в 1.0В на комірку. Отже, якщо ви використовуєте ці батареї, ви повинні мати мінімальний розряд 20В і номінальну напругу 24В.

Пристрій може не показувати точну ємність вашого акумулятора. Замість цього він буде генерувати вихід, що дорівнює його номінальній потужності в ампер-годинах. Отже, ваш акумулятор корисний, якщо його ємність становить понад 80% за годину розрядки.

Ідеальний тестер ємності акумулятора гарантує, що він підтримує постійний струм номінальної ємності акумулятора в амперах протягом повного періоду розряду. І постійний струм залишиться навіть при зміні клеми акумулятора.

Крім того, динамічний тестер ємності допомагає підтримувати постійний струм розряду, змінюючи батареяОпір навантаження на основі напруги. Отже, коли почнеться розряд, опір навантаження буде динамічно змінюватися, щоб підтримувати необхідний струм. Також пристрій запропонує значення опору при напрузі на клемах.

DIY тестер ємності акумулятора Arduino

У цьому розділі ми зосередимося на створенні саморобного тестера ємності акумулятора на базі Arduino. Ви можете запустити цей проект з дому, якщо старанно виконаєте наведені нижче кроки.

Інструменти

  • Зачистка дроту
  • Паяльник
  • Різак для дроту
  • Вимірювач затискачів
  • Нагнітач гарячого повітря
  • Мультиметр

Компоненти

  • Радіатор
  • Кнопка натискання
  • Керамічний омний резистор
  • ДРУКОВАНА ПЛАТА
  • Операційний підсилювач LM358
  • Конденсатор 220 мкФ
  • Гвинтовий термінал
  • Кришка з кнопками
  • Друкована плата Stand-off
  • Arduino Nano
  • Конденсатор 100nF
  • OLED-дисплей (0.96 дюймів)
  • Дошка для прототипів
  • Силові резистори (1M і 4.7K)
  • Термоусадочна трубка
  • LM385BZ_1.2 радіочастотні опорні напруги

Намалюйте схему тестера ємності акумулятора і розділіть її на п’ять частин

  • Схема зумера: Ви можете використовувати цю схему зумера для сповіщення про початок і кінець цього проекту. Плюс до цього Arduino цифровий штифт зливається з 5-ти вольтовим зумером.
  • Схема напруги акумулятора: Аналоговий вивід Arduino вимірює напругу акумулятора. За допомогою конденсаторів C3 і C4 ви можете легко відфільтрувати шуми від ланцюга навантаження постійного струму, і це може зменшити продуктивність перетворення АЦП.
  • Схема живлення: Складається з гнізда постійного струму на 9 вольт і поставляється з двома конденсаторами; C1 і C2. The Arduino вивід (Vin) з’єднується з виводом живлення (Vout), а стабілізатор напруги Arduino зменшує струм до 5 вольт.
  • Навантажувальний ланцюг постійного струму: Операційний підсилювач LM358 з двома операційними підсилювачами є ключовим елементом цієї схеми. R2 і C6 представляють силові резистори з механізмом фільтрації низьких частот, який видаляє сигнал ШІМ, який створює Arduino штифт D10.
  • Схема інтерфейсу: В першу чергу, ця схема має 0.96-дюймовий дисплей і дві кнопки (вниз і вгору для зниження і підвищення ширини імпульсу ШІМ). C7 і C8 ідеально підходять для демпфування кнопок, в той час як R4 і R3 представляють підтягуючі резистори, які підходять для натискання і відпускання кнопок.

Як це працює

Входи OpAmp Pin 2 і Pin 3 є одним уніфікованим підсилювачем для цього проекту. Щоб відкрити затвор MOSFET, вам потрібно встановити неінвертуючу вхідну напругу, точно налаштувавши ШІМ-сигнал.

Отже, струм надходить на R1, коли MOSFET вмикається, створюючи при цьому падіння напруги, що дає OpAmp негативний зворотний зв’язок. Ця система дозволяє неінвертуючі та вхідні напруги бути подібними до управління MOSFET. Крім того, струм резистора навантаження прямо пропорційний неінвертуючій вхідній напрузі операційного підсилювача.

Розрахунок ємності батареї

Формула, необхідна для розрахунку ємності батареї, виглядає наступним чином:

Струм розряду залишається стабільним протягом усього випробування завдяки навантажувальному ланцюгу з постійним струмом.

Створення схеми для тестера акумуляторів Arduino

Перш за все, підключіть схему до макетної плати, щоб перевірити, чи працює вона. Якщо це так, виконайте пайку компонентів на прототипі друкованої плати.

Ось кроки, які ви можете виконати для досягнення відмінних результатів:

  • Встановіть Nano, розділивши штифт жіночого заголовка діагональними кусачками, даючи 15 контактів для кожної частини. Потім переконайтеся, що обидві частини належним чином вставляються в Arduino nano.
  • Розріжте 4-контактний гніздовий штекер і використовуйте його для припаювання OLED-дисплея до плати
  • Після цього приєднайте решту компонентів та клем до плати за допомогою пайки. Крім того, переконайтеся, що ви використовуєте кольорові дроти, щоб допомогти розрізнити їх на схемі.

Відображення OLED-екрану

Використовуйте OLED з роздільною здатністю 128 на 64 монітор з 0.96 дюймів для відображення ємності, напруги акумулятора та напруги розряду. SDA та SCL – це два контакти, необхідні для зв’язку в Arduino Uno.

Для відображення параметрів використовуйте бібліотеку Adafruit_SSD1306, яку можна отримати на GitHub. Після його встановлення виконайте наступні підключення в такому порядку:

arduino, батарея, монітор

Часті запитання

Як перевірити ємність акумулятора?

Підключіть батарея тестер конденсатора до негативного та позитивного контакту акумулятора; він буде працювати, додаючи навантаження. Потім він буде спостерігати за струмом і напругою акумулятора. Зазвичай тестери акумуляторів дають точні показники залежно від типу акумулятора, який вони зчитують.

Як ви монітор акумулятор на Arduino?

Підключіть свій батарея до Arduino Vin, і ви побачите напругу вашого акумулятора на дисплеї.

Як вимірюється ємність літієвої батареї?

Виміряти цю ємність можна в Ач (ампер-годинах). Отже, якщо у вас є 1 ампер-годину, то за годину ви можете взяти з елемента 1 ампер.

Заключні слова

Тестер ємності акумулятора Arduino – чудовий інструмент для підтримки ваших батарей в належному стані. Отже, ви можете вибрати, щоб побудувати або купити.

Перед покупкою переконайтеся, що пристрій сумісний з вашими акумуляторами. А функції відповідають вашим потребам.

Отже, що ви думаєте про пристрій? Будь ласка, не соромтеся звертатися до нас з питаннями та пропозиціями.

Привіт, я Хоммер Чжао, засновник WellPCB. На сьогоднішній день у нас більше 4,000 клієнтів по всьому світу. Якщо у вас виникли запитання, ви можете сміливо звертатися до мене! Ваше щастя як клієнта – мій пріоритет!

Arduino LiPo акумулятор Монітор

Це Arduino LiPo монітор заряду батареї та зарядний пристрій має проривну плату TP4056. Напруга батареї відображається на РК-дисплеї Nokia 3310/5110 з Arduino Nano в якості мікроконтролера.

Матеріали

Вхідні порти проривної плати TP4056 – це microUSB та колодки. Вихідними портами є і OUT, OUT-, B, B- колодки.

Звичайно, вхідна напруга повинна бути 5В постійного струму як на USB-порті, так і на клемах. Акумулятор підключається до клем B і B-. Поточна напруга батареї зчитується через виводи OUT і OUT-.

Після підключення вхідної напруги та батареї загоряється один з вбудованих світлодіодів. Червоний світлодіод вмикається, коли акумулятор все ще заряджається. Зелений світлодіод вмикається, коли зарядка досягає напруги повного заряду 4.2 V. Тут лежить обмеження світлодіодної індикації, оскільки деякі LiPo батареї розраховані на 3.7 V. Очевидно, що для цих батарей світлодіод не загориться зеленим, тому що не досягне 4.2 V.

Тож у мене виникла ідея створити батарею монітор для мого 3.7 V LiPo батарея. Напруга батареї буде подаватися на будь-який з аналогових виводів arduino а потім відображається на РК-дисплеї.

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

Схема отримує живлення від самого акумулятора. Щоб уникнути помилок зчитування АЦП через можливий дрейф напруги батареї, я використовував внутрішню опорну напругу arduino nano/atmega328p. Це 1.Опорна напруга 1В не дрейфує з напругою живлення, тому це добре. Однак, це також означає, що максимальна напруга, яку можна подати на A0, дорівнює 1.1V. Отже, мені довелося включити схему дільника напруги, щоб зменшити вхідну напругу на A0. Очікувана максимальна вхідна напруга дорівнює напрузі повного заряду акумулятора, 3.7 V. Я вирішив використати наступні номінали резисторів:

Максимальна вхідна напруга зараз буде

Зараз це значення знаходиться в межах 1.1 В максимальна межа!

Ескіз Arduino

Необхідна бібліотека для скетчу – бібліотеки GFX та PCD8544 від Adafruit. Дивіться мій підручник з Arduino Nokia 3310 LCD для отримання додаткової інформації.

/ Arduino LiPo Battery Монітор Автор: Roland з: https://www.teachmemicro.com/arduino-lipo-battery-монітор / #include #include #include Adafruit_PCD8544 display = Adafruit_PCD8544(5, 4, 3); float ARef = 1.1; void setup // помістіть сюди код налаштування, щоб запустити один раз: analogReference(INTERNAL); display.begin; display.setContrast(40); вивести.setTextSize(2); display.setTextColor(BLACK); void loop // сюди поміщаємо основний код, щоб запускати багаторазово: float raw = analogRead(A0); float x = raw/1023; float voltage = xARef4; display.clearDisplay; display.print( ); вивести.print(voltage); display.println( V); if(voltage 0 voltage 1) //виведення одного стовпчика.fillRect(15,30,10,15,BLACK); else if(voltage 1 voltage 2.775) //двосмугове відображення.fillRect(15,30,10,15,BLACK); display.fillRect(25,30,5,15,WHITE); display.fillRect(30,30,10,15,BLACK); else if(voltage 2.775 напруга 3.7) //відображення трьох смуг.fillRect(15,30,10,15,BLACK); display.fillRect(25,30,5,15,WHITE); display.fillRect(30,30,10,15,BLACK); display.fillRect(40,30,5,15,WHITE); display.fillRect(45,30,10,15,BLACK); else display.fillRect(15,30,10,15,BLACK); display.fillRect(25,30,5,15,WHITE); display.fillRect(30,30,10,15,BLACK); display.fillRect(40,30,5,15,WHITE); display.fillRect(45,30,10,15,BLACK); display.fillRect(55,30,5,15,WHITE); display.fillRect(60,30,10,15,BLACK); display.display; delay(1000);

Це опорна напруга, про яку я говорив. Вона використовується при обчисленні реального значення напруги пізніше.

Для використання внутрішнього опорного значення цей рядок є обов’язковим:

У циклі мені просто потрібно було зчитати напругу на виводі A0:

Потім я перетворив це значення в напругу за допомогою пари рядків:

float x = raw/1023; float voltage = xARef5;

У моїй статті про взаємодію з датчиками ардуїно було показано, як обчислити напругу за сирим значенням. В принципі, мінімальна напруга, яку може зчитати ардуїно, дорівнює Aref/1023 = 1.075 мВ. Отже, припустимо, що вхідна напруга з батареї дорівнює 1.7 В, що зводиться до 0.34 В за допомогою дільника напруги буде значення АЦП:

Щоб перетворити це значення у фактичну напругу, я просто обертаю формулу вище: ділю на 1023, а потім множу на опорну напругу (1.1 В) і коефіцієнт дільника напруги (1/0.2 = 5):

фактична напруга = ADC / 1023 1.1 5 = 1.7 V

Я також додав кілька смуг під значенням напруги, як ви бачите:

Тут використовується функція fillRectangle з графічної бібліотеки. Я малюю один прямокутник для кожної ¼ значення напруги повного заряду.

if(voltage 0 voltage 1) //відображення одного стовпчика.fillRect(15,30,10,15,BLACK); else if(voltage 1 voltage 2.775) //відображення двох смуг.fillRect(15,30,10,15,BLACK); display.fillRect(25,30,5,15,WHITE); display.fillRect(30,30,10,15,BLACK); else if(voltage 2.775 напруга 3.7) //виводимо три смужки.fillRect(15,30,10,15,BLACK); display.fillRect(25,30,5,15,WHITE); display.fillRect(30,30,10,15,BLACK); вивести.fillRect(40,30,5,15,WHITE); display.fillRect(45,30,10,15,BLACK); else

Виглядає погано, але я обіцяю створити кращу графіку у наступних оновленнях

Чи був вам корисний цей проект? Будь ласка, залиште коментар нижче!

Wolf

Оновлення: Система завершена. 1 ESP8266 з BME280 для отримання інформації про атмосферу. 1 ESP32 з 16-бітним АЦП 1ADS1115 для вимірювання напруги та 1 ESP32 з 16-бітним АЦП 2ADS1115 для вимірювання сили струму. Вони працюють ідеально, і це дає мені повне уявлення про завод зараз. Оскільки всі вони є мікросхемами i2c, я буду працювати над тим, щоб об’єднати все це в 1 пакет. Чудова річ ці плати для розробників ESP32. Ніколи не отримував стільки розчарування та задоволення за один раз. Мені все ще потрібно додати силу струму, що надходить з масивів, але важливі дані тепер візуально доступні

Для інформації Google Drive Не ваш середній показник. Вовк

Мікро-блискавка

Ого, чувак, вражаюча робота! Просто цікаво, якщо ви використовуєте зовнішній АЦП, навіщо використовувати 3 мікроконтролери замість одного ESP8266? Якщо ви відчуваєте себе дуже добре, було б добре, якби ви поділилися своїм кодом на github або ще десь і розмістили його тут для спільноти, щоб.

Мій початковий проект BMS збирався йти по шляху, який ви описали, але я в кінцевому підсумку пішов з чіпом Texas Instruments BQ, тому що ці чіпи поставляються попередньо відкаліброваними з заводу, з вбудованою нелінійністю і температурною компенсацією. Плюс в кінцевому підсумку вони коштували стільки ж, скільки і окрема мікросхема АЦП. Я закінчив більшу частину апаратного аспекту, але я повільно пробираюся до програмного забезпечення. Оскільки ми використовуємо мікросхеми на базі Arduino, ми, ймовірно, можемо поділитися один з одним нашим кодом (мій код знаходиться на github. шукайте mikethezipper)

Ви використовуєте чіп ESP або raspi для сервера grafana? Врешті-решт я використовував NodeREd проти influxgrafana, тому що він фактично не зберігає дані, а просто зберігає їх в оперативній пам’яті. тому він не використовує багато читання/запису на флеш-пам’ять тільки для потокової передачі даних.

arduino, батарея, монітор

Вовк

Ого, чувак, вражаюча робота! Просто цікаво, якщо ви використовуєте зовнішній АЦП, навіщо використовувати 3 мікроконтролери замість одного ESP8266? У випадку, якщо ви відчуваєте себе дуже добре, було б добре, якби ви поділилися своїм кодом на github або ще десь і розмістили посилання на нього тут для спільноти, щоб.

Мій початковий проект BMS збирався йти по шляху, який ви описали, але я в кінцевому підсумку пішов з чіпом BQ від Texas Instruments, тому що ці чіпи поставляються попередньо відкаліброваними з заводу, з вбудованою нелінійністю і температурною компенсацією. Плюс в кінцевому підсумку вони були подібні за вартістю, як виділений мікросхема АЦП поодинці. Я закінчив більшу частину апаратного аспекту, але я повільно прокладаю собі шлях через програмне забезпечення. Оскільки ми використовуємо мікросхеми на базі Arduino, ми, ймовірно, можемо поділитися один з одним нашим кодом (мій код знаходиться на github. шукайте mikethezipper)

Ви використовуєте чіп ESP або raspi для сервера grafana? Врешті-решт я використовував NodeREd проти influxgrafana, тому що він фактично не зберігає дані, а просто зберігає їх в оперативній пам’яті. тому він не використовує багато читання/запису на флеш-пам’ять тільки для потокової передачі даних.

Influx та grafana розміщені на ubuntu, що працює на старому куленепробивному ноутбуці IBM, який незабаром буде оснащено 960-гігабайтним SSD-накопичувачем. Все почалося з того, що IotaWatt опублікував дані про приплив і візуалізував їх за допомогою графани. У мене є майже рік даних IotaWatt, і вони становлять менше 80 мегабайт, тому я не турбуюся про ресурси на даний момент.

Спочатку я використовував лише 1 esp8266, але оскільки він має лише 1 АЦП, я обмежився ним, а також роздільною здатністю 10 біт. Я залишив BME 280 на ньому, оскільки він працював просто чудово. Я не думав про i2c в цей час. Ви повинні пам’ятати, що я навіть не знав, що таке Arduino це було 8 місяців тому. Якби ви запитали мене, я б здогадався, що це, можливо, вишуканий італійський виробник автомобілів. Разом з цим з’явився ESP32 з 6 корисними каналами АЦП і роздільною здатністю 12 біт. Спробував це, і, на жаль, показання були десь по всій карті. Я використовував виту пару і все, що потрібно, але не отримував хороших результатів. Початковий дільник напруги був 47K і 1K, щоб взяти максимум 160V до 3.3В, що штовхало потужність резисторів до межі, як виявили мої пальці, тому я перевів все на 1М і 22К, і це спрацювало. На жаль, ESP32 все ще був занадто нервовим з результатами. Я спробував усереднити, і це, здавалося, трохи заспокоїло ситуацію, але в довгостроковій перспективі показання все ще не були задовільними. Я шукав рішення. Входить програмований АЦП ADS1115 з 16-бітним коефіцієнтом посилення. i2c життя зв’язку добре.Ідеально. чудова роздільна здатність для 3.3 В, а також для 75 мВ для шунтів. Отримав 2 з них, розпізнаних на 1 ESP32, тепер просто підключіть дроти і йдіть. Напруги були хорошими та стабільними, я був щасливий. Добре, підключіть шунти до загальної землі на низькій стороні 75 мВ на високій стороні шунта, що може піти не так?Ха, я витягнув великий нуб, показання підсилювача були скрізь, поки я не відключив усі, крім 1, і це теж було не так добре. Я подумав про це і незабаром зрозумів, що за наявності спільного заземлення вся проводка і кожен шунт стануть шунтами, тому я, по суті, шунтував шунти. Тоді я згадав, що читав про те, що ADS1115 може робити диференційний вхід між 2 каналами. Ага відповідь не потрібно використовувати спільну основу. Тож я переробив Voltage ESP32, щоб робити тільки напругу, і оскільки у мене є 6 або 7 ESP32, я просто кинув ще один разом з 2 ADS1115 для вимірювання ампера з шунтів. Це все працювало ідеально.Ось так я придумав 3 мікроконтролери. О, і до речі, ADS1115 також робить негативний потік, щоб я міг бачити, чи розряджається акумулятор, що є плюсом.Але як я вже казав у своєму дописі, я перероблю все це і поставлю 4 ASD1115 на 1 мікросхему ESP32 (порівняно з ESP8266 ESP32 принаймні в 10 разів швидша) і додам BME280, об’єднаю весь код і спробую його. Але не зараз.

Я дивився на червоний вузол та mqtt тощо. і т.д. поки моя голова не почала йти обертом, це був виклик, щоб змусити influx та grafana працювати, не кажучи вже про цю річ про брокерів mosquitto та mqtt. Ще пару місяців тому найбільше, що я кодував – це деякі пакетні файли на сервері. Тож, можливо, ви в якийсь момент зможете просвітити мене на цих проспектах.

Загалом, як для новачка, за 4 місяці просунутися так далеко – непогано.

До речі, я зробив пошук на github для mikethezipper і тепер я його послідовник.

Для інформації Google Drive Не ваш середній показник. Вовк

Leave a Reply