Створення зарядного пристрою під керуванням Arduino

  1. комплектуючі
  2. Як заряджати NiMH AA акумулятори
  3. ланцюг заряду
  4. Датчик температури
  5. код

Arduino і додана до неї схема заряду можуть бути використані для моніторингу та управління зарядкою нікель-метал-гідридних акумуляторів, наприклад, так: Arduino і додана до неї схема заряду можуть бути використані для моніторингу та управління зарядкою нікель-метал-гідридних акумуляторів, наприклад, так:   закінчений пристрій   Акумуляторні батареї є відмінним способом для харчування вашої портативної електроніки

закінчений пристрій

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

По-перше, важливо відзначити, що не існує універсального способу зарядки, який підходив би для всіх акумуляторів. Різні типи акумуляторів використовують різні хімічні процеси, які забезпечують їхню роботу. В результаті, різні типи акумуляторів необхідно заряджати по-різному. У цій статті ми не зможемо охопити всі типи акумуляторних батарей і методи зарядки. Тому для простоти ми зосередимо увагу на найбільш поширеному типі акумуляторних батарей розміру AA, на нікель-метал-гідридних акумуляторах (NiMH).

комплектуючі

Список комплектуючих зліва направо:

Як заряджати NiMH AA акумулятори

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

Існує багато способів зарядки NiMH акумуляторів. Вибір використовуваного вами методу головним чином залежить від того, як швидко ви хочете зарядити акумулятор. Швидкість заряду вимірюється по відношенню до ємності батареї. Якщо ваша батарея має ємністю 2500 мАг, і ви заряджаєте її струмом 2500 мА, то ви заряджаєте її зі швидкістю 1C. Якщо ви заряджаєте цей же акумулятор струмом 250 мА, то ви заряджаєте його зі швидкістю C / 10.

Під час швидкої зарядки акумулятора (зі швидкістю вище C / 10), вам необхідно ретельно контролювати напругу на батареї і її температуру, щоб не перезарядити її. Це може серйозно пошкодити акумулятор. Проте, коли ви заряджаєте акумулятор повільно (зі швидкістю нижче C / 10), у вас набагато менше шансів пошкодити батарею, якщо випадково перезарядіть її. Тому повільні методи зарядки, як правило, вважаються більш безпечними і допоможуть вам збільшити термін служби батареї. Тому в нашому саморобному зарядному пристрої ми будемо використовувати швидкість заряду C / 10.

ланцюг заряду

Для цього зарядного пристрою основою є схема для управління джерелом живлення за допомогою Arduino. Схема живиться від джерела напруги 5 вольт, наприклад, від адаптера змінного струму або комп'ютерного блоку живлення. Більшість USB портів не підходить для даного проекту через обмеження по струму. Джерело 5В заряджає батарею через потужний резистор 10 Ом і потужний MOSFET транзистор. MOSFET транзистор встановлює величину струму, що протікає через батарею. Резистор доданий як простий спосіб контролю струму. Контроль величини струму виконується підключенням кожного виведення резистора до аналогових вхідних висновків Arduino і вимірюванням напруги з кожного боку. MOSFET транзистор управляється вихідним ШІМ висновком Arduino. Імпульси сигналу широтно-імпульсної модуляції згладжуються до постійної напруги фільтром на резисторі 1 МОм і конденсаторі 1 мкФ. Дана схема дозволяє Arduino відстежувати і керувати струмом, що протікає через батарею.

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

Датчик температури

Датчик температури служить для запобігання перезаряду батареї і забезпечення безпеки.

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

Тримач AA батареї перед і після установки на макетну плату

код

Код для даного проекту досить простий. Змінні на початку вихідного коду дозволяють налаштувати зарядний пристрій шляхом введення значень ємності батареї і точного опору потужного резистора. Також додані і змінні безпечних порогів. Максимально допустима напруга на батареї встановлюється в значення 1,6 вольта. Максимальна температура батареї прикріплено до 35 градусів за Цельсієм. Максимальний час заряду встановлено на 13 годин. Якщо який-небудь з цих порогів безпеки буде перевищено, зарядний пристрій вимикається.

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

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

int batteryCapacity = 2500; // значення ємності батареї в мАг float resistance = 10.0; // виміряний опір потужного резистора int cutoffVoltage = 1600.; // максимальна напруга на батареї (в мВ), який мав би бути перевищено float cutoffTemperatureC = 35; // максимальна температура батареї, яка не повинна бути перевищена (в градусах C) // float cutoffTemperatureF = 95; // максимальна температура батареї, яка не повинна бути перевищена (в градусах F) long cutoffTime = 46800000; // максимальний час заряду в 13 годин, який мав би бути перевищено int outputPin = 9; // провід вихідного сигналу підключений до цифрового висновку 9 int outputValue = 150; // значення вихідного ШІМ сигналу int analogPinOne = 0; // перший датчик напруги підключений до аналогового висновку 0 float valueProbeOne = 0; // змінна для зберігання значення на analogPinOne float voltageProbeOne = 0; // розраховане напруга на analogPinOne int analogPinTwo = 1; // другий датчик напруги підключений до аналогового висновку 1 float valueProbeTwo = 0; // змінна для зберігання значення на analogPinTwo float voltageProbeTwo = 0; // розраховане напруга на analogPinTwo int analogPinThree = 2; // третій датчик напруги підключений до аналогового висновку 2 float valueProbeThree = 0; // змінна для зберігання значення на analogPinThree float tmp36Voltage = 0; // розраховане напруга на analogPinThree float temperatureC = 0; // розрахована температура датчика в градусах C // float temperatureF = 0; // розрахована температура датчика в градусах F float voltageDifference = 0; // різниця між напругою на analogPinOne і analogPinTwo float batteryVoltage = 0; // розраховане напруга на батареї float current = 0; // розрахований струм, що протікає через навантаження в (мА) float targetCurrent = batteryCapacity / 10; // цільової вихідний струм (в мА) встановлюється в значення // C / 10 або 1/10 від ємності батареї float currentError = 0; // різниця між цільовим і фактичним струмами (в мА) void setup () {Serial.begin (9600); // настройка послідовного інтерфейсу pinMode (outputPin, OUTPUT); // встановити висновок, як вихід} void loop () {analogWrite (outputPin, outputValue); // записати вихідне значення в вихідний висновок Serial.print ( "Output:"); // показати вихідні значення для контролю на комп'ютері Serial.println (outputValue); valueProbeOne = analogRead (analogPinOne); // вважати вхідний значення на першому пробники voltageProbeOne = (valueProbeOne * 5000) / 1023; // розрахувати напругу на першому пробники в мілівольтах Serial.print ( "Voltage Probe One (mV):"); // показати напруга на першому пробники Serial.println (voltageProbeOne); valueProbeTwo = analogRead (analogPinTwo); // вважати вхідний значення на другому пробники voltageProbeTwo = (valueProbeTwo * 5000) / 1023; // розрахувати напругу на другому пробники в мілівольтах Serial.print ( "Voltage Probe Two (mV):"); // показати напруга на другому пробники Serial.println (voltageProbeTwo); batteryVoltage = 5000 - voltageProbeTwo; // розрахувати напругу на батареї Serial.print ( "Battery Voltage (mV):"); // показати напруга на батареї Serial.println (batteryVoltage); current = (voltageProbeTwo - voltageProbeOne) / resistance; // розрахувати струм заряду Serial.print ( "Target Current (mA):"); // показати цільової ток Serial.println (targetCurrent); Serial.print ( "Battery Current (mA):"); // показати фактичний струм Serial.println (current); currentError = targetCurrent - current; // різниця між цільовим і виміряним струмами Serial.print ( "Current Error (mA):"); // показати помилку установки струму Serial.println (currentError); valueProbeThree = analogRead (analogPinThree); // вважати вхідний значення третього пробника, tmp36Voltage = valueProbeThree * 5.0; // перетворюючи його в напругу tmp36Voltage / = 1024.0; temperatureC = (tmp36Voltage - 0.5) * 100; // перетворення, виходячи із залежності в 10 мВ на градус зі сдвіком в 500 мВ // ((напруга - 500 мВ) помножити на 100) Serial.print ( "Temperature (degrees C)"); // показати температуру в градусах Цельсія Serial.println (temperatureC); / * TemperatureF = (temperatureC * 9.0 / 5.0) + 32.0; // перетворити в градуси Фаренгейта Serial.print ( "Temperature (degrees F)"); Serial.println (temperatureF); * / Serial.println (); // додаткові порожні рядки, щоб полегшити читання даних при налагодженні Serial.println (); if (abs (currentError)> 10) // якщо помилка установки струму досить велика, то підлаштувати вихідна напруга {outputValue = outputValue + currentError / 10; if (outputValue <1) // вихідне значення ніколи не може бути нижче 0 {outputValue = 0; } If (outputValue> 254) // вихідне значення ніколи не може бути вище 255 {outputValue = 255; } AnalogWrite (outputPin, outputValue); // записати нове вихідне значення} if (temperatureC> cutoffTemperatureC) // зупинити зарядку, якщо температура батареї перевищила безпечний поріг {outputValue = 0; Serial.print ( "Max Temperature Exceeded"); } / * If (temperatureF> cutoffTemperatureF) // зупинити зарядку, якщо температура батареї перевищила безпечний поріг {outputValue = 0; } * / If (batteryVoltage> cutoffVoltage) // зупинити зарядку, якщо напруга на батареї перевищила безпечний поріг {outputValue = 0; Serial.print ( "Max Voltage Exceeded"); } If (millis ()> cutoffTime) // зупинити зарядку, якщо час заряду перевищила поріг {outputValue = 0; Serial.print ( "Max Charge Time Exceeded"); } Delay (10000); // затримка в 10 секунд перед наступною итерацией циклу}

Скачували версію вихідного коду ви можете знайти за наведеним нижче.

Тепер ви можете створити власне зарядний пристрій. Але обов'язково контролюйте швидкість заряду і дотримуйтесь техніку безпеки, так як надлишкова зарядка акумулятора може бути небезпечна.

© 2008 — 2012 offroad.net.ua . All rights reserved. by nucleart.net 2008