Універсальний зарядний пристрій на ардуїн мега. Створення зарядного пристрою, керованого Arduino

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

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

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

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

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

Ультразвуковий датчик

Для вимірювання відстані до перешкоди було протестовано два пристрої:
  • Arduino-сумісний ультразвуковий модуль HC-SR04
  • Автомобільний парктронік HO 3800
Обидва пристрої працюють за схожим принципом. Відмінності полягають у діаграмі спрямованості датчиків, максимальної дальності визначення перешкод та конструктивному виконанні.
Порівняння параметрів датчиків:

У ході випробувань з'ясувалося, що модулі HC-SR04 мають дещо гіршу здатність виявляти перешкоди та працювати у складних кліматичних умовах (холод).

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

Плата керування

Як плата управління обрана платформа Arduino. У нашому випадку найбільш застосовні плати мініатюрних версій: Arduino Mini, Arduino Nanoабо Arduino Pro Mini. У випадку може бути використаний будь-який інший контролер, надає аналогічні можливості.

Елементи живлення

Для забезпечення пристрою живленням доцільно використовувати літій-іонні (Li-ion) або нікель-метал-гідридні (Ni-Mh) акумуляторні елементи.

При експлуатації в нормальних кліматичних умовах варто застосувати Li-ion акумулятори, що мають у порівнянні з Ni-Mh наступні переваги:

При низьких температурахкраще використовувати Ni-Mh акумулятори.

Напруги на виході одного Ni-Mh акумулятора (1,0 -1,4 В) недостатньо для роботи пристрою. Для отримання напруги 5 (необхідного для роботи як Arduino, так і паркторника) крім акумуляторів будемо використовувати підвищує DC-DC перетворювач.

Для роботи вибраних нами DC-DC перетворювачів необхідно забезпечити вхідну напругу 0,9-6,0 В. Для отримання необхідної вихідної напруги можна було б скористатися одним Ni-Mh напругою елементом 1,2 вольт. Однак зі зменшенням вхідної напруги зменшується і здатність навантаження перетворювача, тому для стабільної роботипристрої бажано подавати на вхід перетворювача не менше 2 (два Ni-Mh елемента по 1,2 В або один Li-ion елемент напругою 3,7 В). Зазначимо, що існують DC-DC перетворювачі, для роботи яких недостатньо вхідної напруги 1,2 Ст.

Заряджання акумуляторів

Для Li-ion акумуляторівІснує безліч готових недорогих модулів з індикацією закінчення заряду.

У випадку з Ni-Mh акумуляторами все складніше. Готових рішень, що вбудовуються на ринку в даний момент ми не знайшли. Для заряджання Ni-Mh акумуляторів можна використовувати спеціалізовані зовнішні зарядні пристрої або створити власну схему зарядки.

Один із способів зарядити Ni-Mh елемент – послідовне з'єднання з акумулятором двох лінійних стабілізаторів LM317 (або аналогічних): перший – у режимі обмеження струму, другий – у режимі обмеження напруги.

Вхідна напруга такої схеми становить 7,0-7,5 В. За відсутності охолодження стабілізаторів перевищувати цю напругу не рекомендується. Напруга на кожному Ni-Mh акумуляторпід час заряджання має бути близько 1, 45 В (напруга повністю зарядженого Ni-Mh елемента). Щоб уникнути перегріву та виходу з ладу мікросхем, струм зарядки акумуляторів не повинен перевищувати 100 мА та може бути збільшений до 200 мА при використанні відповідних радіаторів.

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

Сигналізатор

Залежно від вибору каналу попередження (слуховий чи тактильний) вибирається виконавчий пристрій- Зумер або вібро-мотор. Крім того, можна комбінувати обидва способи оповіщення, надавши користувачеві можливість перемикання між ними.

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

Корпус

Нам не вдалося підібрати зручний корпус для ультразвукової насадки на тростину серед корпусів, що масово випускаються. Для проведення випробувань пристрою ми використовували надрукований на 3D принтері корпус з ABS-пластику. Для друку корпусу на 3D-принтері нами було розроблено наступну 3D-модель:

Результат випробувань дослідних зразків

У процесі розробки зібрано понад 12 варіантів виробу. Кожен новий виріб усував недоліки попередніх: у процесі розробки ми зменшили габарити та вагу виробу, підібрали ультразвуковий датчик, що задовольняє нас як за ціною, так і за технічним характеристикам, відмовилися від використання аудіо каналу та оптимізували алгоритм роботи пристроїв. Спільно з незрячими (Бортніков П.В., Шалінцев В. А.) було проведено випробування всіх зібраних виробів. В результаті ми отримали кінцевий зразок.

Нижче наведено принципову електричну схему розробленого пристрою:

У розібраному вигляді ультразвуковий брелок на шию виглядають так:

Усі використані при складанні компоненти, крім роздрукованого на 3D-принтері корпусу для насадки на тростину, були куплені через AliExpress:

  1. Ультразвуковий датчик HC-SR04.
  2. Плата керування Adruino Pro Mini.
  3. Акумулятор 3.7 V 300 mAh.
  4. Перетворювач напруги 0.9V ~ 5V to 5V 600 мА.
  5. Модуль заряджання AC/DC 220V to 5V 1A.
  6. Зарядний пристрій LA-520W.
  7. Сигналізатор: вібро-моторчик для мобільного телефона 4x10mm DC 3V.
  8. Кнопка PB-22E60
  9. Корпус Gainta G1906 (для брелока).
  10. Транзистор: bss138/bcr108 або оптрон CPC1230N.
Зовнішній вигляд та ціни (з урахуванням доставки з Китаю) компонентів, що використовуються для складання ультразвукової насадки на тростину, наведено на малюнку:

З компонентів, що використовуються при складанні, найбільший внесок у вартість пристрою вносить корпус, надрукований на 3D-принтері.

Зовнішній вигляд та ціни (з урахуванням доставки з Китаю) компонентів, що використовуються для складання ультразвукового брелока, наведено на малюнку:

Надалі можна розробити кріплення до корпусу Gainta G1906 та використовувати пристрій з таким корпусом як насадку на тростину.

Одним із способів зниження собівартості пристроїв є економія на оплаті праці та вартості доставки компонентів пристроїв до Росії за рахунок розгортання виробництва безпосередньо в Китаї.

Розроблені нами пристрої мають такі характеристики:

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

Зовнішній вигляд брелока на шию:

3D-модель ультразвукової насадки на тростину та вихідний код прошивки для Adruino доступні для завантаження по

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

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

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

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

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

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

  • потужний резистор 10 Ом (мінімум 5 Вт);
  • резистор 1 МОм;
  • конденсатор 1 мкФ;
  • MOSFET транзистор IRF510;
  • датчик температури TMP36;
  • джерело живлення 5 вольт;

Як заряджати 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 відстежувати та керувати струмом, що протікає через батарею.


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

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

Як додатковий запобіжний засіб до зарядного пристрою доданий датчик температури 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): "); voltageProbeOne), valueProbeTwo = analogRead(analogPinTwo); // вважати вхідне значення на другому пробнику voltageProbeTwo = (valueProbeTwo*5000)/1023; // розрахувати напругу на другому пробнику в мілівольтах Serial.print("V );// показати напругу на другому пробнику 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 > cutoffTempera / зупинити зарядку, якщо температура батареї перевищила безпечний поріг ( outputValue = 0; ) */ if(batteryVoltage > cutoffVoltage) // зупинити зарядку, якщо напруга на батареї перевищила безпечний поріг ( outputValue = 0; Serial.print("Max Voltage ); ) if(millis() > cutoffTime) // зупинити зарядку, якщо час заряду перевищив поріг ( outputValue = 0; Serial.print("Max Charge Time Exceeded"); ) delay(10000); // затримка в 10 секунд перед наступною ітерацією циклу)

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

Старий добрий "Випрямляч
В14 зарядний"!
Був завжди ти як рятівник:
Виручав нас, ненаглядний!

При жарі та зимовій холодно
Пожвавлював акумулятор;
Навіть якщо я застуджений,
Ти – як робот Термінатор!

Не ламався, не здавався
Навіть у найважчий час;
Коли треба - напружувався,
Заряджаючи все для нас.

Сорок років уже пролетіло
З добрих Брежнєвських часів,
Коли корпус твій, як тіло
На заводі був скріплений.

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

Але настав час змінюватися,
Скинути важкий вантаж часів,
Щоб зміг ти вгору піднятися,
Щоб як Хокінг став розумним.

Якщо запитає хтось фальцетом
"Як же зробити це мені?" -
Не хвилюйтесь, я про це
У цій розповім статті.

Хвилина наркоманії.

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

Отже, як уже було озвучено в "хвилинці", сьогодні я розповім вам про те, як я перетворив старовинний зарядний пристрій початку сімдесятих на новий, сучасний, з керуванням від мікроконтролера. Думка така прийшла мені через те, що мій друг покликав мене до себе на пиво в момент, коли в мене заряджався акумулятор. Я б і радий був піти, але незадача - зарядне-то потрібно було постійно контролювати! Бігати до нього раз на півгодини, а то й частіше, щоб перевірити напругу на акумуляторі, і якби вона перевищила максимум – зменшувати потужність відповідним перемикачем на передній панелі. Погодьтеся, незручно: ти постійно прикутий до акумулятора, що заряджається, і не можеш нікуди відійти, а якщо раптом проворониш потрібний момент- Акумулятор тобі спасибі не скаже. З іншого боку, він і так його не скаже: він пам'ятник говорити не вміє))))

Жарти - жартами, а мені давно хотілося зробити щось серйозне на Arduino, з яким я познайомився ще в листопаді, забравши заповітну посилку від китайців з Aliexpress з мікроконтролером, шилдом та іншими ніштяками на пошті. І ось вона, чудова можливість - бери, та роби! Так що я взяв і почав безпосередньо робити!

Схема зарядного пристрою

На початку наведу вам вельми клікабельну схему готового пристрою:

Список основних компонентів

  • 8 конденсаторів: 2 по 22 пФ, 1 на 100пФ, пару штук по 100 мФ, і для живлення - один великий на 6.3 вольта і два великі на 16, наприклад на , і 1500 мФ відповідно (можна і все на 16 вольт або більше, без різниці).
  • Програмований мікроконтролер Atmega328 з кварцом на 16 МГц і бажано шилд для нього (гортати кілька сторінок до першого шилда, це буде самий дешевий варіант), щоб було зручно прошивати.
  • З тієї ж причини – затискні сокети для вищезгаданої мікросхеми. Хоча можна, як економ-варіант обійтися і звичайними. Ну чи припаяти дроти до МК і прошивати по них іншою ардуїною чи прошивальником – як вам зручно.
  • 9 транзисторів КТ315 та 1 КТ815 (або аналоги) - випаяти з будь-якої старої радянської техніки.
  • 8 білих розсіювальних світлодіодів та 1 зелений.
  • 9 релюх з котушками на 12 вольт: одна на 220 V, чотири під 12 V 16 A і чотири менші під 12 V 12 A . Останні 8 потрібні якнайменшого розміру.
  • 40 резисторів: 15 по 560 Ом, 12 кілоомних, 8 по, 2 по 10k і по одному екземпляру 3k3, 4k7 і 30k.
  • Парочка діодів під 12 вольт: один на полампера, другий мінімум на ампер, запас не завадить. Випаюється звідки завгодно, наприклад, з дохлих БП.
  • Якась лампочка, можна світлодіод з резистором, що горять від 220 вольт. Взагалі неонка б там круто виглядала!
  • Шістнадцятисегментний екранчик із старого системника для виведення на нього поточної напруги. Ну або три семисегментні. Або взагалі забити болт на відображення поточної напруги: це все-таки, автоматичний пристрій, напруга вона контролює сама, вам її знати не обов'язково, крайньому випадкуТестером поміряєте. Замість екранчика можна просто пару світлодіодів поставити, щоб ардуїна ними переморгувала, мовляв, не зависла я, працюю, все під контролем! (Ні, я жодного разу не бачив завислої Ардуїни, але все ж таки треба бути готовим до всього.) 🙄
  • 3 зсувних регістру 74HC595
  • Та й щось нібито половинки ось такої монтажної плати (я купив на ебеї 10 штук за склянку компоту):

Хочу зауважити, що практично всі компоненти, що використовуються в даному проекті, не мають точних номіналів і можуть бути замінені на аналогічні або схожі або з мінімальною адаптацією схеми та прошивки або взагалі без будь-яких змін. Я намагався використовувати ті деталі, які буквально валялися у мене під рукою: наприклад, переважна більшість резисторів і транзисторів, які тут використовуються, я нещодавно випаяв з допотопного магнітофона Vilma, останки якого після розпаювання благополучно вирушили на звалище. Так що витрачена сума на купівлю деталей для цього пристрою не перевищує $15, і те, більшість бюджету пішла на релюхи.

Вихідна версія зарядного

На жаль, у мене не знайшлося фотографії цього зарядного в вихідний стантому все, що я можу вам запропонувати на даному етапі- Фото з вже знятою кришкою, відкрученою механічною частиною перемикача потужності (ліворуч) та ручки цього перемикача (праворуч). Електрична його частина стирчить зверху пристрою. Також зі свого рідного отвору виймуть тумблер перемикання напруг (6 або 12 вольт):

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

Принцип роботи вихідного пристрою

Сам зарядний пристрій побудований за простим принципом - на первинну обмотку трансформатора подається 220 вольт, відповідно на вторинній також з'являється змінна напруга. Потужністю можна керувати тому, що з вторинної обмотки є кілька висновків (всього 9). Це означає, що між першим і кожним з наступних восьми висновків виходить все більша кількість витків, а чим більше витків, як відомо, тим вище напруга (тобто струм або потужність - як вам буде завгодно). Ці 8 висновків приходять на той самий перемикач, за допомогою якого ви вибираєте поточну потужність заряду акумулятора.

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

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

Вибір способу комутації вторинних обмоток

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

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

Ах да! Мало не забув! Насправді з вторинної обмотки було не 9 а 10 висновків, перших два були один для шести вольт, інший для дванадцяти, обидва йшли до тумблера, а потім до діодного містка:

Але я не планував заряджати акумулятори на 6V - від цієї функції я відмовився, тому викинув тумблер (з конструкції, а не взагалі) і заізолював провід для шести вольт, а дванадцятивольтовий пустив із трансформатора безпосередньо на діодний міст.

То як же все-таки комутувати? Тут або транзисторами, або тиристорами, або з допомогою реле. І я вибрав останній варіант, адже релюхи менше від транзисторів/тиристорів і, на відміну від них, зовсім не гріються, якщо взяти їх із запасом по струму. Так я і зробив - купив 8 невеликих релюшок з котушками на 12 вольт, 4 штуки на 16 ампер і 4 на 12. За розміром вони вміщалися в вільний простірвсередині корпусу зарядного:

Алгоритм роботи пристрою

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

Для початку введемо 3 найважливіші параметри:

// Максимальна напруга * 10
byte maxVoltageX10 = 148;

// Напруга * 10, коли вже не можна збільшувати потужність
byte powerUpMaxTreshold = 142;

// Напруга * 10, у якому потужність підвищиться примусово
byte powerUpMinTreshold = 136;

Помножені на 10 вони по-перше тому, що при їх обчисленні зручніше користуватися цілими числами - ніяких округлень і т.д., по-друге тому, що на екран, фактично, і виводяться такі числа, а кома - вона віртуальна тому немає чого робити в коді нікому не потрібні обчислення, і так зрозуміло, що це 14.8, 14.2 і 13.6 вольт відповідно.

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

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

Третій параметр введений спеціально для випадків, коли заряджатися акумулятор буде підключений до машини. Наприклад, хтось увімкнув радіо -> напруга просів нижче цього значення -> піднімаємо потужність. Але що, якщо навантаження, що просаджує напругу до цього рівня, є короткочасним (включення фар або прикурювача), або періодичної, з певною частотою (наприклад від ударів сабвуфера), і виходитиме так, що як тільки мізки підвищать потужність - її потрібно буде відразу знижувати, потім одразу знову підвищувати і т.д.? Вийде замкнене коло, релюхи постійно клацатимуть, зношуючись, та й для акумулятора, можливо, це буде не дуже корисно... Спеціально для цього можна зробити нашу систему як би самонавчається, ввівши додатковий параметр:

// Якщо між підвищенням потужності по powerUpMinTreshold та її зниженням пройшло менше, ніж стільки мілісекунд, то powerUpMinTreshold знизиться на 1
unsigned int powerUpMinTresholdTimeout = 60000;

Як видно з коментаря, завдяки цьому параметру powerUpMinTreshold буде знижуватися на одну десяту вольту щоразу, як мозок знижуватиме потужність менш ніж через powerUpMinTresholdTimeout мілісекунд після її підвищення. Все, проблема вирішена: клацають релюхи один раз, клацають другий, а на третій вони вже 10 разів подумають перед тим, як клацнути. Ха-ха-ха, не з тим зв'язалися!

Ну ось, з основою алгоритму начебто більш-менш розібралися, тепер переходимо до подробиць та нюансів.

Я відразу запланував, що живлення всієї системи буде здійснюватися від самого акумулятора, а 220 вольт - підключені через реле, кероване мізками (тобто Ардуїною), завдяки чому ми матимемо можливість відключити подачу живлення на пристрій у разі аварійної ситуації або після завершення зарядки акумулятора . Більше того, від реле буде менше іскріння, ніж від засовування вилки в розетку, тому цей варіант ще й надійніший. Про її підключення буде, природно, написано нижче, адже поки що ми обговорюємо лише теоретичні питання.

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

// Затримка у мілісекундах перед включенням зарядки
unsigned int powerOnDelay = 2000;

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

if (powerLevel == 1) (
delay(powerOnDelay);

}

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

До речі, код має дуже цікавий параметр:

// Рівень потужності (початковий)
byte powerLevel = 0;

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

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

// Час, через який можна підвищувати потужність на один рівень, у мілісекундах
int powerUpTime = 5000;

Тобто між двома підвищеннями потужності повинно буде пройти як мінімум 5000 мілісекунд, за які напруга вже може піднятися вище за PowerUpMaxTreshold і тоді підвищувати потужність буде вже не потрібно.

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

// Зниження потужності
if (voltageX10 > maxVoltageX10) (

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

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

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

Також для зниження потужності є свій параметр затримки, схожий на параметр powerUpTime для підвищення:

//Пауза після зниження потужності, в мілісекундах
int powerDownPause = 500;

Щоправда, він реалізований простіше, через звичайний delay() після безпосереднього зниження. Я вважав, що півсекунди - це не настільки великий проміжок, щоб використовувати його як додаткова умовав операторі вибору, але кожному своє, так що якщо комусь із вас не буде чим зайнятися - в першу чергу можна було б доопрацювати цей шматок коду за принципом powerUpTime.

Дивно, як це я стільки вже написав і не сказав, звідки я беру, власне, саме поточне напруження. Виправляємось:

void loop() (
ct=millis();

Виходить, що на початку кожної ітерації loop"а, який, як відомо, просто нескінченно повторюється після запуску системи, ми робимо дві речі. Спочатку записуємо в змінну ct поточний часз моменту запуску мікросхеми, в мілісекундах, а далі ми обчислюємо поточну напругу за допомогою процедури analogRead(), використовуючи заданий на початку скетчу номер аналогового входу моніторингу:

// Аналоговий вхід для моніторингу напруги
byte voltageInput = 5;

А також 2 коефіцієнти, про які я докладно розповім пізніше:

// Коефіцієнт обчислення напруги (на нього поділяється)
float voltageX10Coefficient = 5.11;

// Зсув обчислення напруги (він додається)
int voltageX10Shift = 35;

Але все було б надто просто, якби все було так просто. Тому для ускладнення алгоритму в код було введено ще 2 змінні:

boolean goingUp = true, isUpAfter = false;

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

З другої ващі все складно - вона нам говорить про те, чи відбувалося підвищення потужності після того, як goingUp став дорівнює false і встановлюється наступним простим шматочком коду в кінці процедури підвищення потужності:

if (goingUp == false) (isUpAfter = true;)

Ви зараз, напевно, думаєте, а нахрен все це потрібно? Зараз поясню!

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

if ((powerLevel<8) && (ct >powerTime + powerUpTime) && ((goingUp == true && voltageX10< powerUpMaxTreshold) || (goingUp == false && voltageX10 < powerUpMinTreshold))) {

Як бачимо, у першій фазі зарядки ми підвищуємо потужність, якщо поточна напруга менша за powerUpMaxTreshold, а в другій фазі - якщо вона менша за powerUpMinTreshold: це ті самі параметри, про які я говорив на початку.

Якщо умовний оператор, написаний вище, все ж таки виконується, а цей самий goingUp дорівнює false, то в справу вступає запатентована система додаткової перевіркинапруги:

boolean stillLow = true;
if (goingUp == false) (
for (int x=0; x<= upCycles; x++){
voltageX10analogRead(voltageInput)+voltageX10Shift)/voltageX10Coefficient;
if (voltageX10 > powerUpMinTreshold) (stillLow=false; break;)
delay(1);
}
}
if (stillLow == true) (

У якій на сцену виходить нова дійова особа:

//Кількість мілісекундних ітерацій перевірки напруги перед підняттям потужності
int upCycles = 5000;

Справа в тому, що при сигналі на підвищення потужності після того, як goingUp стала false, ми швидше за все маємо справу з якимось непостійним навантаженням - той же сабвуфер, як я вже припускав, або ще якась невідома фігня. А якщо так, то чому б нам замість того, щоб тупо піднімати потужність, зайвий раз клацаючи нашими дорогоцінними релюхами і ризикуючи отримати на мить напругу на акумуляторі вище максимально заданого, не влаштувати просту перевірку: 5 тисяч разів (upCycles) з інтервалом в одну мілісекунду перевірити поточну напругу, і якщо вона хоч раз, чуєте, хоч один раз перевищить powerUpMinTreshold - все, хано, ніякого підвищення не буде, згортайте вудки! Проста, але дієва перевірка.

isUpAfter, у свою чергу, допомагає нам реалізувати функцію зменшення powerUpMinTreshold (я говорив про неї на початку), ось, як вона виглядає:

if ((isUpAfter == true) && (powerTime > ct - powerUpMinTresholdTimeout)) (powerUpMinTreshold = powerUpMinTreshold - 1;)

Тут powerTime – це час останнього підвищення потужності на даний момент.

Справа в тому, що, крім умови згаданого вище powerUpMinTresholdTimeout, зменшувати його нам потрібно лише тоді, коли ми опускаємо потужність після того, як її підняли після того, як вже почали опускати. Я ж казав, що з цим isUpAfter все складно!

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

Підготовка блоку реле

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

Для цього я використав "Момент - Кристал", що валявся неподалік. Не говоритиму, що це якийсь там супер-пупер клей, але за своїми властивостями він мене влаштовує. Краще, звичайно, використовувати Хайгіровський "Склею Насмерть", він сохне швидше і взагалі твердне в кінці, але його в тюбику в 2-3 рази менше, а коштує він в півтора рази дорожче за Момент, тому, як казав герой одного гарного радянського мультика, "І так зійде!"

По склеюванні все просто і написано на тюбику - нанести на обидві поверхні, почекати 5-10 хвилин і сильно стиснути (ага, так сильно, щоб затиснутий між релюшками куточок перетворився на алмаз 😆):

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

Точно так само я вчинив і з великими релюхами, а потім склеїв ці 2 блоки, що вийшли, разом один з одним, після чого почав припаювати до контактів проводу. Товстий жовтий провід підключений по черзі до всіх релюх - це вихідна шина, яка далі піде на діодний міст, червоні проводи - на 4 перші виводи з вторинної обмотки трансформатора, а маленький жовтий проводок, що йде по черзі через всі релюшки - це постійні +12 вольт котушок. А мінуси котушок, як ви вже здогадалися - це коричневі і біло-якісь там проводки, до них ми незабаром ще повернемося.

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

Так як струм, який жеруть котушки в таких релюхах (~100 мА), набагато перевищує максимальний струм, який можна брати з виходів Arduino (~40 mA) або зсувного регістру 74HC595 (~25 mA), для включення котушок реле потрібно використовувати транзистори. І старі добрі помаранчеві КТ315 начебто створені для цього!

Це n-p-n транзистори, тому в схемі, якщо пояснювати по-простому, струм повинен йти від плюса до котушки, потім з неї на колектор транзистора і далі з емітера транзистора мінус. Відкривається цей транзистор струмом з бази в емітер, але струм там потрібен зовсім невеликий, тому бази транзисторів ми підключаємо через резистори в 1 кОм (1000 Ом):

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

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

Транзистори приклеєні і блок майже готовий:

Тепер перед нами постає питання – до чого ж підключити транзистори? До Arduino? Ні, тоді не вистачить виходів для інших компонентів, і ось у таких ситуаціях у справу вступає рятівна мікросхема – зсувний регістр 74HC595. Про нього і так багато написано в інтернеті, тому я не розписуватиму тут 3 абзаци, скажу лише, що завдяки таким мікросхемам можна збільшити кількість виходів Arduino, пожертвувавши для цього лише трьома. Причому їх можна послідовно з'єднувати в ланцюжок. Є різні варіанти подібних мікросхем, наприклад, на 16 виходів або на 8, у різних корпусах. У цьому проекті я вирішив використати варіант на 8 виходів у маленькому корпусі SO-16. Робота хоч і ювелірна, проте все це займає мало місця, якого і так не вистачає в компактному корпусі пристрою, не розрахованого на подібні доробки:

Для індикації поточної потужності пристрою я вирішив використовувати 8 світлодіодів, по одному на кожну пару транзистор/реле, для цього я використовував восьмижильний шлейф, підпаяв кожну жилу до відповідного каналу управління, але не відразу до регістру, а до резисторів електрично різниці немає, але механічно так надійніше, я вважаю. Мікросхему я, після ретельної перевірки (про неї буде нижче), залив тим самим клеєм і ще раз пройшовся ним по всіх транзисторах - тепер ця система стала ще "цілішою" і міцнішою.

Система індикації напруги

Настав час теоретичних випробувань системи індикації. Для виведення поточної напруги акумулятора використовував екранчик від старого системника часів перших пентіумів. З ним немає жодних премудростей, кожен сегмент – це простий зелений світлодіод, що працює від 2-2,1 вольт. Виняток становить лише одиниця - в ній 2 сегменти запаралелені та виведені на одну ніжку. Усього у екранчика 16 ніг: 1 плюс і 15 мінусів. Тобто на плюс завжди подається харчування, а подача землі на певну ніжку запалює потрібний сегмент - все гранично просто, але як це реалізувати? Для цього знову ж таки використовуємо зсувні регістри, цього разу 2 штуки. Для прототипування на макетної платия використовував такі ж 74HC595, але вже у корпусі DIP-16, адже з ними працювати набагато зручніше. На наступному малюнку, як ви бачите, система вже зібрана та працює:

Але дана система дуже відрізняється від того, що увійшло в кінцевий пристрій. Почнемо з того, що спочатку для живлення екрана я вирішив використовувати стабілізатор, хоча в результаті я від нього відмовився і кожну ногу екрана підключив через резистор в 560 Ом, по-друге на цій схемі живлення світлодіодів йде через ще один стабілізатор, більше того, він живить і сам зсувний регістр. Але в результаті стабілізатор в моєму зарядному залишився тільки один - зроблений ще в СРСР КРЕН5В, як ви вже здогадалися, на 5 вольт.

Проте, цьому етапі спосіб запитування заліза був настільки важливий - головне було навчитися виводити на екран осмислену інформацію, навіщо потрібно було з'ясувати, якому сегменту відповідає кожен із висновків регістрів і далі вже у прошивці створити два масиву - десятків і одиниць, в які за допомогою одиниць та нулів забити потрібну маску для кожного відображуваного числа, тобто 0-19 для перших двох знаків екрану та 0-9 для третього знака:

// Шаблони для екрану
char* dozens = ("10000001", "10111011", "01100001", "00101001", "00011011", "00001101", "00000101", "0000010", "000001010") 000"," 10111010","01100000","00101000","00011010","00001100","00000100","10101010","00000000","0000100
char* ones=("10000010","10111110","10001001","10011000","10110100","11010000","11000000","00"0"0"0"0

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

Коли система запрацювала – до неї замість третього зсувного регістру я підключив готовий блок реле. А щоб релюхи ще й клацали – мені знадобився дванадцятивольтовий блок живлення (не від китайського світчу, а стабілізований, з плавним вибором напруги). Якщо хочете використовувати нестабілізований – використовуйте дев'ятивольтовий, або навіть 7,5 – на них якраз без навантаження вольт 12 буде. Головне - не поплутайте постійку зі зміною! На наступній фотці видно, як 12 вольт підведено на соплях двома штекерами з проводами у правому верхньому кутку 🙄

Ось уже й екранчик працює! Написав скетч, який на екран по черзі виводить числа від нуля до 199, а на світлодіоди справа – їх двійкове уявлення. Ну, весело ж!

Робота зі зсувними регістрами, як я вже казав, здійснюється за трьома проводами. Номери їх контактів задаються на початку мого скетчу:

// Контакт, який підключений до входу ST_CP 74HC595
int latchPin = 8, voltageX10,voltageGuard,ons,dz,
// Контакт, який підключений до входу SH_CP 74HC595
clockPin = 12,
// Контакт, який підключений до входу DS 74HC595
dataPin = 11;

При запуску системи режим роботи цих контактів, як і інших використовуваних нами, встановлюється як OUTPUT:

void setup() (
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(relay220Pin, OUTPUT);
pinMode(fanPin, OUTPUT);

Ну а сам виведення інформації на регістри виглядає так:

digitalWrite(latchPin, LOW);



Причому спочатку shiftOut() приймає на вхід змінну типу byte, а так як нам набагато наочніше записувати в регістри безпосередньо одиниці та нулі - в коді використовується спеціальна функція bitseq(), яка перетворює вищенаведені шаблони саме в те, що від нас хоче shiftOut():

byte bitseq (char s) (
byte ab = 0;
for (byte ba=0; ba<8; ba++){
if (s == "0") (bitWrite(ab,ba,0);) else (bitWrite(ab,ba,1);)
}
return ab;
}

На той час мій робочий стіл виглядав приблизно так, як на наступній фотографії. Не ламайте голову, питаючи, що на монторі - це Швидка Допомога. Класний серіал, вдруге вже переглядаю. 🙄 До речі, для з'єднання не силових ланцюгів у своєму пристрої я використовував кручену пару, ту саму, яка категорії 5е, у мене її просто безліч - старі кабелі з даху я не викидаю, а розпускаю. Але для таких речей гарні не будь-які проводки. Ті, що я використовував – усередині не цілісні, а багатожильні, завдяки чому вони дуже еластичні та не ламкі, також у них якісна ізоляція. А ось звичайну кручену пару з цільними жилами я б не використовував - вона дуже туго гнеться (ну, відносно), і припаювати її до маленьких мікросхем в корпусі SO-16 було б взагалі нерозумно. Що, скажете, мовляв, треба було ДІПівські мікрохи використовувати? Ха, ви ще не бачили, який мазохізм почнеться прямо зараз, так що не тягтимемо кота за роги (ага) – поїхали!

Насправді це не така вже й погана ідея – розмістити маленькі мікросхемки усередині індикатора. Адже місця в старому корпусі й так ні, передню панель довелося ставити на невеликі проставки, а якби я використовував регістри в ДІПівських корпусах – уууууу, я не знаю, як би все туди залізло!

Як я вже казав, у фінальному варіанті сегменти підключені через резистори, а не безпосередньо, проте перший варіант я вирішив також показати: може бути, комусь так більше сподобається. Так як сам цей екранчик зі зворотного боку чимось залитий (яка гидота ці ваші заливні екранчики), а поверхня цієї заливки ще й увігнута всередину, я вирізав з пластикової картки оплати вгадайте якого білоруського монополіста в області електрозв'язку маленьку плоску пластинку, яку приклеїв прямо до екранчика і вже на неї потім приклеїв самі регістри, попередньо помітивши на звороті кожного з них першу ніжку (бо "Дивись не переплутай, Кутузау!").

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

Ось я вже навіть поєднав ці два блоки разом (щоправда, тимчасово) щоб ще раз насолодитися миготливими циферками і релюшками, що клацають:

На жаль, при об'єднанні екранчика з регістрами в одне ціле мені довелося трохи змінити порядок підключення його ніг, тому після запуску всієї системи я замість арабських цифр побачив якісь інопланетні:

Хоча, по суті, в одиниці та дев'ятці мало інопланетного, лише посередині була якась фігня, але це все дрібниці. Наступним кроком було прикручування вольтметра, тобто створення датчика напруги, адже саме від поточної напруги повинен залежати алгоритм роботи мого зарядного пристрою.

Вимірювання напруги за допомогою Arduino

Ардуїно – річ хороша, у ній спочатку є аналогові входи, на яких можна в реальному часі моніторити напругу. Загвоздка полягає лише в тому, що діапазон вимірювання цих входів тягнеться від нуля лише до п'яти вольт, а у нас напруги будуть майже до 15, тож цю проблему треба якось вирішувати. І тут нам на допомогу приходить найпростіший дільник напруги на двох резисторах. Наприклад, за абсолютний максимум ми візьмемо 20 вольт (ну, про всяк випадок, щоб нічого, якщо що, не згоріло), а стеля у нас - 5, тобто четверта частина від максимуму, значить ділити напругу нам треба саме на 4. цього візьмемо 2 резистори таких номіналів, щоб номінал першого становив 1/4, а номінал другого - 3/4 від суми їх номіналів. Наприклад, 10 і 30 ком. Або 5 і 15 ком, або 2,5 і 7,5, ну ви зрозуміли. Менше брати не варто, бо струм там невеликий. Ну і підключаєте за схемою: 10 між аналоговим входом та землею, а 30 між аналоговим входом та виходом зарядки на акумулятор.

Але не все так просто - процедура analogRead() видасть вам значення від 0 до 1024 де нуль це нуль, а 1024 - це 5 вольт для неї або 20 вольт для нас. Тому для перерахунку цього значення нам потрібно ввести певний коефіцієнт, який ми задаватимемо як константу в шапці прошивки (float voltageX10Coefficient = 5.11;). Забігаючи трохи вперед скажу, що напруга, яку бачить Arduino, при великому струмі починало стрибати з розкидом до напіввольта, тому довелося наш імпровізований датчик підключити через діод, після якого я поставив конденсатор 16V 1000 мФ, і туди ж я підключив реле на 2 В, але про це наприкінці. Чому я говорю про це зараз? Тому що діод, як відомо, трохи знижує напругу, тому я ввів і другий коефіцієнт, що компенсує наявність цього діода (int voltageX10Shift = 35;), тобто спочатку до вихідного значення додається другий коефіцієнт, а потім те, що вийшло, ділиться на перший .

У результаті моніторинг напруги видався на славу - порівняйте свідчення з тестером (це не акумулятор підключений до пристрою, а сам саморобний стабілізований блок живлення):

Передня панель зарядного пристрою

Далі настав час зайнятися мордою нашого пристрою. Спочатку у мене були думки взагалі зробити і приліпити туди нову панель, але, подумавши, я придумав, як використовувати старі написи, так що все вийшло досить осмислено. На місці регулятора струму свердляться отвори під світлодіоди, а стрілка зверху показує, в якому напрямку струм буде більше, ну класно!

Ось уже і світлодіоди поставлені на свої місця, і екранчик вставлений на нове місце, і навіть решті отворів знайшлося застосування: в дірці від регулятора струму буде лампочка, підключена до первинної обмотки трансформатора - вона горітиме, коли йде зарядка, тобто коли на трансформатор подається 220 вольт. А якщо зарядка наче й заряджає, а лампочка не горить - значить перевіряйте, чи не забули вставити вилку в розетку! В остверсті ж від перемикача 6-12 вольт вставлена ​​пластмасова окантовка для світлодіода, який через резистор без стабілізатора буде безпосередньо підключений до акумулятора і по яскравості його світіння буде видно, наскільки заряджений акумулятор. Це корисно, якщо акум буде взагалі дохлий і навіть п'яти вольт на ньому не буде для живлення мозку - тоді діод буде тьмяно світитися і не виникне питань, мовляв, може пристрій зламався. Хоча, звичайно, я виправдовуюсь: не було б дірки - я б і не думав про те, щоб туди щось вставити. У мужиків так завжди і буває, якщо ви розумієте про що я

До речі, ось ви скажете, мовляв, де ти, Андрійко, бачив розряджені до 5-ти вольт автомобільні акумулятори? Ну, на той момент я їх ніде не бачив, а після закінчення робіт над цією зарядкою мені один такий принесли. 3 вольти. І я навіть зарядив його, і він навіть живий, хоч, як я вважаю, і засульфатований на смерть. Був і другий у схожому стані, але його вже нічого не врятувало 😆

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

А на наступній фотці я потихеньку обдираю клей і замінюю проводки на резистори. Стабілізатор у лівому нижньому кутку фотки я, звичайно ж, теж ампутував через непотрібність. І. до речі, резистори припаювати набагато простіше, ніж проводки - якби я зараз робив все це заново - робив би відразу так, з резисторами та цими маленькими мікросхемами.

Також на цій фотці у лівому верхньому кутку ви можете побачити, як я підключив світлодіоди. Мінус у них загальний, йде внутрішнім радіусом і підключений до загальному мінусупристрої через резистор в 3.3 ком - це я такий підібрав, щоб і яскраво було, і не зліпили вони. Начебто якраз вийшло. Чому резистор один? Тому що будь-якої миті часу, за винятком моменту перемикання навантаження між релюхами, на табло горітиме лише один світлодіод.

Чому крім моменту перемикання? Тому що якщо одна релюха буде вимикатися, а друга потім включатиметься - у момент вимкнення першої і в момент включення другої на їх контактах з'являтиметься іскра, від цих іскор утворюватиметься нагар на контактах, через який вони вийдуть з ладу з часом - він збільшить їхній опір, вони почнуть грітися, і все, мементо море! Так що правильно спочатку включати другу релюху, і як тільки вона включиться - вимикати першу, тоді ми позбавляємося іскор та релюхи житимуть довго і щасливо! До речі, на рідному перемикачі все саме так і зроблено, так що ні, це не я придумав, аплодисменти та квіти в машину прямують у даному випадкуконструкторам оригінального пристрою, а не вашому покірному слугу. Ну що ж, не все коту масляна. 🙄

До речі, затримка перемикання між релюхами задається цим параметром:

// Тривалість переходу між релюхами в мілісекундах
byte relayTransition = 80;

Але що буде, якщо якимось чарівним чином дві або більше релюх виявляться одночасно включеними на час, більший, ніж відведений на перемикання, внаслідок якогось глюку? А буде дуже погано: ви, вважайте, закоротите ділянку вторинної обмотки. Провід почнуть плавитися, з трансформатора піде дим і взагалі станеться армагедон. Той самий, що Майкл Бей знімав.

Так ось, дорогі панове, пані та ван-дамми, спеціально для цього я вигадав систему захисту від подібного армагедія. До плюс кожного світлодіода підключений резистор на 220 Ом. Чому саме 220? По-перше тому що в той день Місяць був у Сатурні, а по-друге тому що перед Новим Роком мені довелося розпаяти пару вітчизняних магнітофонів, а також не менш вітчизняне електронне піаніно (або фортепіано, я хз, але не рояль коротший), так ось звідти я випаяв цілу коробку цих резисторів на 220 Ом, треба ж їх кудись сунути - так ось, чудове застосування!

З іншого боку всі ці резистори з'єднані і притягнуті до землі через 4к7 резистор (це означає 4,7 ком, пора вже називати речі своїми іменами!), яких у мене теж дохрена і більше. Так ось ми міряємо в цій точці G, куди сходяться всі ці 9 резисторів, напруга, тобто підключаємо цю точку до чергового аналогового входу Ардуїни, який задається наступним параметром:

// Аналоговий вхід для моніторингу кількості включених релюх
byte guardInput = 4;

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

Цей поріг задається тут:

// Максимально допустиме значення guardInput
byte guardTreshold = 160;

А сама процедура вищеописаної перевірки виконується кожен цикл loop і виглядає наступним чином:

// Перевірка на кількість включених релюх та автоматичне відключення – відновлення – включення
if (voltageGuard > guardTreshold) (
digitalWrite(relay220Pin, LOW);
while (voltageGuard > guardTreshold) (
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, bitseq(ones));
shiftOut(dataPin, clockPin, MSBFIRST, bitseq(dozens));
shiftOut(dataPin, clockPin, MSBFIRST, bitseq(relays));
digitalWrite(latchPin, HIGH);
voltageGuard = analogRead (guardInput);
}
digitalWrite(relay220Pin, HIGH);
}

А тепер я таки покажу обіцяну 9 абзаців тому фотку, хоча б просто для пристойності:

А знята кришка показує нам напругу. Мілота!

Реле підключення до мережі змінного струму

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

Релюха це звичайна, яка нічим не відрізняється від інших. Тягне 220 вольт при, на зразок 10 амперах. Але нам такого не треба, у нас і запобіжник на 1 ампер стоїть. Але запас у таких речах – це добре, це надійність. Котушка у цієї релюхи працює від 12 вольт, але є такі ж і на 5. Я купив відразу 25 штук таких на Алі, дешево. Чому я взяв на 12, а не на 5? Ось дивіться, куди б я її не включав - все одно потрібен був би транзистор, правильно? Навіть якби вона на 5 вольт була. Тільки от якщо вона на 5 - її треба через стаб підключати, через який і так всі мізки запитуються, він би від цього ще більше грівся - нахрен це треба? Можна прямо тиркнути о 12, та хоч 15 там буде – їй пофігу, вона працює. Причому, починаючи вольт із восьми. Світлодіод я до неї підключив просто для індикації на час тестування, нібито якщо світлодіод спалахнув - значить вона працює і віртуально на трансформатор пішло 220 вольт. Підключена вона безпосередньо до виходу ардуїни, через той же КТ315, так само, як і інші релюхи в тому самому блоці. І так, резюк теж на 1ком, хоча там, напевно, і 2 прокотить, можете ставити ті, яких більше, але врахуйте, що чим менше номінал резюка - тим більший струм йтиме вникуди через транзистор. Для загальної енергоефективності ці +- пару міліампер пофігу, а ось для слаботочних виходів ардуїни та регістрів – не зовсім, так що ось.

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

digitalWrite(relay220Pin, HIGH);

А відключення за допомогою

digitalWrite(relay220Pin, LOW);

Підключення кулера для охолодження зарядного

Але кулер жере ніби як 140 міліампер, судячи з наклейки на ньому, так що КТ315 тут вже не прокотять, вони за специфікацією тільки до сотні, тому я взяв КТ815А. Вони йдуть до півтори тисячі міліампер і його вистачить з головою. Є й інші варіанти, я просто завжди намагаюся використовувати те, чого у мене багато, може у вас, наприклад, буде для кулера якийсь інший транзистор, якщо він потягне до 20 вольт і до 150 міліампер - ставте, якщо n-p-n, то просто по ногах дивіться розпинування, а якщо p-n-p - то треба трохи змінити схему, але в даному випадку це все несуттєво. Тільки тут є ще один нюанс...

Ви коли-небудь чули, як пищить кулер? Ні не від обертання, просто пищить? Я теж не чув, але тут пощастило. А все тому, що Arduino проміжні значення вихідної напруги (більше за нуль, але менше п'яти) формує за допомогою ШІМ, тобто це швидкі-швидкі коливання напруги, сам широтно-імпульсний модулятор працює на певній частоті, а транзистори, як відомо, теж вміють працювати на опереленних частотах, тому ці імпульси через транзистор передаються на кулер і він, через свою архітектуру, починає їсти. Не вдаватимуся до подробиць, оскільки сам їх не знаю, але лікується все це втиканням кондера на 100 мФ плюсом на базу та мінусів на емітер цього транзистора. Напруги там до 5 вольт, відповідно кондер можна хоч на 6.3 вольта ставити. Все, писк пропаде і взагалі буде лепота!

Номер ШИМ-контакту, за яким відбувається керування кулером, задається наступним параметром:

// Вихід управління вентилятором
byte fanPin = 6;

Його швидкості від нуля (0V) до 255 (5V) з прив'язкою до рівнів потужності задаються наступним масивом:

// Налаштування швидкості обертання вентилятора
byte fanSpeeds=(0,0,80,90,100,110,120,180,255);

А завдання цих швидкостей прописано в процедурах підвищення і зниження потужності:

analogWrite(fanPin,fanSpeeds);

Ось, до речі, релюха з кулером ближче:

Подальша робота над лицьовою панеллю

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

Зрештою, настав час збирати і ставити на місце лицьову панель! Як бачите, всі дроти вже припаяні, навіть п'ятивольтова КРЕНКА стирчить унизу кадру, в корпус вкручені проставки, щоб трохи відсунути панель (я вже говорив про це), адже раніше вона кріпилася впритул до корпусу. Як бачите, дроти у багатьох місцях я просунув у кембрики, щоб ніде нічого не перетерлося і не коротнуло. 12 вольт на КРЕНКУ приходять безпосередньо з діодного мосту, проводом класом вище, ніж проста кручена пара. Мінус підключений до загального мінуса безпосередньо, а ось плюс - через діод, а то Вася Пупкін переплутає полярність при підключенні акумулятора і все, фініта ля комедія, перепаюйте половину компонентів, що згоріли! А так можна бути спокійним.

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

Монтаж контролера Atmega328P з обв'язкою та іншими елементами

До цього часу на половинці однієї з тих самих монтажних хустку я вже змонтував левову частку компонентів, що залишилися - сокету для мікросхеми, кварц, кондери, транзистор для кулера і т.д. і т.п.:

Саму плату довелося з одного боку обрізати - вона була надто велика і не влазила. Нижню частину, а потім і всю повністю я замотав паперовим скотчем, щоб вона в процесі роботи ні на що не закоротила.

На той час передня панель вже остаточно була встановлена ​​на своє почесне місце, а п'ятивольтова КРЕНКА - прикручена до корпусу за панеллю через теплопровідну ізоляційну прокладку та пластикову вставку для гвинта - завдяки цьому мікросхема надійно охолоджуватиметься через масивний металевий корпуспри цьому не з'єднуючись з ним електрично.

Фінальна настройка параметрів пристрою

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

Після включення було виявлено, що при великому струмі, коли амперметр зашкалює - зарядний пристрій бачить напругу на 0.5-0.8 вольта більше, ніж реально на акумуляторі є в даний момент. Перевірка показала, що цілих піввольта губиться на дротах, тому я їх замінив на більш якісні, з великим перетином і припаяв до кльової вилки, що дуже підходить до загального дизайну пристрою. Це вирішило проблему, але не 100 відсотків - за великих струмів деяка різниця все одно залишилася. Але я вважав, що це не бага, а фіча, адже нема чого такими великими струмами заряджати акумулятор - нехай це працює як певний фактор, що обмежує!

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

Зарядний пристрій готовий!

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

Вид з лівого борту. Ну чи з правого – це дивлячись, як дивитися, вибачте за каламбур.

Ну, а це зверху. Тут видно, що я приклеїв панель до виступаючої частини амперметра - вийшла велика третя точка опори, бо панель сиділа якось невпевнено. А так все зашибісь, надійно та красиво! Ось, до речі, уявіть, якби замість Кристала я використав звичайний Момент, і через щілину було б видно все це світло-жовту хрень. Фууууууу! 😳

Ну і, звичайно ж, вигляд позаду. На вентилятор я начепив гарні грати, що захищають пальці та інші кінцівки людей та тварин від травм. А ще тут видно новий провід живлення, який після зарядки зручно накручується на кулер і не заважає нікому!

До речі, після складання та тестування пристрою мені довелося його знову розбирати, щоб змастити цей довбаний кулер, чому тільки я його відразу не змастив, була ж така думка?

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

Не лише цікавий, а й корисний у побуті проект для Arduino представила у своєму блозі команда Electro-Labs. У цьому проекті розроблено програмований шилд для Arduino, який виконує функцію зарядного пристрою для літієвих акумуляторних батарей. Шилд включає в себе LCD дисплейі кнопковий інтерфейс, що дозволяє користувачеві регулювати напругу від 2В до 10В та струм від 50мА до 1,1А. Також пристрій забезпечує можливість контролювати процес заряджання.

Шилд заснований на мікросхемі LT1510 та керується Arduino Uno. Як дисплей використовується простий і доступний Nokia 5110 LCD. Він підключається за інтерфейсом SPI і живиться від напруги 3,3В. Так як I/O піни arduino працюють на 5В, підключати LCD модуль рекомендується через резистори, включені послідовно в сигнальні лінії. Для підключення Li-Ion батарей доступні два роз'єми. Чотири кнопки керування підключені до пін A2-A5 Arduino. Напруга на акумуляторі та струм зарядки контролюються через аналогові піни A0 та A1. Деталі аналого-цифрового перетворенняпояснені в вихідний кодпроекту. Два SMD світлодіоди використовуються для індикації роботи пристрою.

Принципова схема проекту була розроблена в SoloCapture із пакету SoloPCBtools. Шилд може працювати, без керування мікроконтролером. Коли Arduino не прошита програма, зарядний пристрій, за замовчуванням, має напругу відсічки 4,2В і максимальний струм зарядки 1,1А. Друкована плата спроектована у SoloPSB. Проект друкованої платиі саму програму SoloPSB можна завантажити з сайту electro-labs.com. Розміри шилду підібрані для розташування на Arduino Uno. Світлодіоди, кнопковий інтерфейс, LCD-дисплей та роз'єми для акумуляторів для зручності розташовані зверху. Всі інші елементи розташовані на звороті шилду.

LCD-дисплей запрограмований на показ чотирьох сторінок, які дозволяють користувачеві ввести параметри заряджання та контролювати її процес. На першій сторінці користувач може встановити напругу відсікання та максимальний струм заряду, перейти до сторінки стану акумулятора та почати заряджання. Кнопки вгору та вниз використовуються для переходу між опціями, а вправо та вліво – для зміни параметрів та вибору опцій. Друга сторінка показує стан акумулятора. У ній можна переглянути поточну напругу на акумуляторі. Третя сторінка показує напругу та струм зарядки. Лівою або правою кнопкоюу цій сторінці можна зупинити процес заряджання та повернутися на сторінку завдання параметрів. Коли напруга акумулятора досягає заданого значення, зарядний пристрій зупиняється і показує повідомлення Charge Complete. Щоб вийти, натисніть клавішу ліворуч.



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


Не менше важливими елементамибудуть котушки індуктивності, які можна зробити своїми руками. Ці прості котушки намотуються з мідних дротів і називаються котушками з повітряним сердечником. Створення такої обмотки для нашої мети є дуже простою справою. Знайдіть круглий циліндр діаметром приблизно 5 сантиметрів і намотайте провід на нього так, щоб кожен виток не накладався на інший виток, але в той же час був якомога ближче до іншого витка. Круглим циліндром може бути, наприклад, трубка з ПВХ. Можливо, вам знадобиться використовувати клейку стрічку або скотч у 2-3 місцях, щоб зберегти стабільність конструкції.


Крім Arduino і котушок індуктивності нам знадобляться: один NPN-транзистор типу 2N3055, один діодний міст 1А (діодне складання, у них чотири виводи), один світлодіод, один 100-омний резистор, два конденсатори ємністю 47 нФ, батарейка 9 а також бажано дві плати для прототипування. Схема підключення компонентів для створення бездротового пристрою даних показана на малюнку нижче.



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


void setup() ( pinMode(13,OUTPUT); ) void loop() ( digitalWrite(13,HIGH); delay(0.5); digitalWrite(13,LOW); delay(0.5); )

Тим не менш, простий пристрій бездротової передачі енергії можна зробити без Arduino. В принципі, ми можемо використовувати лише один транзистор 2N2222. Підключіть його виведення бази до першого кінця котушки, а колектор до іншого кінця котушки. Виведення емітера підключається до батареї. У результаті така проста конструкція може виглядати так:




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