После сборки и недолгой эксплуатации системы видеонаблюдения, я столкнулся с одной неприятностью. Камера, расположенная на определённом удалении от сервера, отключалась при отключении электроэнергии. Камера подключалась к местной розетке.
Поэтому пришлось установить в буфер по питанию камеры аккумулятор (благо питание камеры составляет 10 - 12В). Но в этом случае аккумулятор находился бы в постоянной подпитке от блока питания камеры, что отнюдь не очень полезно для самого аккумулятора. Поэтому было принято решение создать бесперебойник с функцией отключения зарядки в случае заряда аккумулятора до определённого напряжения. Сначала была идея сделать устройство с применением компаратора, даже схему собрал, но у схемы были недостатки которые приводили к дребезгу на уровне переключения компаратора, решить эту проблему можно было с помощью второго компаратора и триггера. Но так усложнять схему не было никакого желания. Да и компараторы, которые прислали мне китаисы, оказались бракованными (из 5 штук 1 рабочий). В общем решил я использовать в бесперебойном устройстве ардуино нано и для упрощения схемы поставил пару реле вместо ранее планируемых силовых транзисторов. В итоге получилось нижеследующее.
Код для ардуино, блока управления зарядкой аккумулятора.
#define analoginput 0 // аналоговый вход А0 (к аккумулятору) #define digitalinput 7 // цифровой вход D7 (вход зар.) #define outblock 3 // цифровой выход D3 (к транзистору реле блокировки) #define outrele 4 // цифровой выход D4 (к транзистору реле зарядка) #define lum_u 5 // цифровой выход D5 (к светодиоду Uвх) #define lum_zar 6 // цифровой выход D6 (к светодиоду зарядка) float vizm = 5.03 ; // значение опорного напряжения // (измеренное 5В вых. power arduino) boolean vinzar; // переменная напряжения Вход зар. // LOW - на входе зар. нет напряжения // HIGH - на входе зар. есть напряжение float vak; // переменная - уровень заряда аккумулятора float v1; // переменная - напряж. аккум. на входе А0 int a; // индикатор наличия сети, если а = 0 напряжения на входе // зарядного нет, а = 1 напряжение есть. int sum; // Счетчик void setup() { // направление портов вход или выход pinMode (digitalinput,INPUT); pinMode (outblock,OUTPUT); pinMode (outrele,OUTPUT); pinMode (lum_zar,OUTPUT); pinMode (lum_u,OUTPUT); Serial.begin(9600); digitalWrite(outblock, LOW); // включить реле блокировки (Uвых есть) } void loop() { v1 = analogRead(analoginput); // чтение значения на входе А0 vak = v1*vizm/1024.00/0.174; // вычесление уровня заряда аккум. vinzar = digitalRead(digitalinput); //чтение значения на входе D7 if (vinzar == HIGH && a == 0 & vak < 14) // При появлении напряжения на входе зарядного и {digitalWrite(lum_zar, LOW); // идикатор наличия сети а = 0, то включаем реле digitalWrite(outrele, LOW); // зарядка и светодиод зарядка. delay(1000);} // включаем задержку 1 сек для корректного работы реле if (vinzar == HIGH){ // Если на входе зарядного есть напряжение, digitalWrite(lum_u, LOW); a = 1;} // то включить светодиод Uвх, else {digitalWrite(lum_u, HIGH); // иначе выключить светодиод Uвх digitalWrite(lum_zar, HIGH); a = 0;} // выключить светодиод зарядка if (vinzar == HIGH && vak <= 11.00){ // Если на входе зарядного есть напряжение digitalWrite(lum_zar, LOW); // и напряж. аккумуляттора ниже 11.0 В, то digitalWrite(outrele, LOW);} // включить светодиод зарядка и включить реле if (vinzar == HIGH && vak >= 13.00){ // Если на входе зарядного есть напряжение sum = sum + 1; delay(1000); // и напряж. аккумуляттора выше 13.00 В, то if (vak >= 14 || sum >= 60){ // отсчитать 60 секунд или напряжение на аккумуляторе sum = 0; // станет 14В, затем digitalWrite(lum_zar, HIGH); // выключить светодиод зарядка и выключить реле зар. digitalWrite(outrele, HIGH);}} if (vinzar == LOW && vak < 10.00) // Если на входе зарядного нет напряжения // и напряж. аккумуляттора ниже 10 В, то {digitalWrite(outblock, HIGH);} // выключить реле блокировки else if (vinzar == HIGH) // иначе включить реле блокировки (Uвых есть) {digitalWrite(outblock, LOW);} // при появлении входного напряжения Serial.print("Заряд аккумулятора "); Serial.print(vak); Serial.println(" В"); Serial.print("Напряжение на входе зарядного (есть или нет): "); Serial.println(vinzar); if (digitalRead(outrele) == LOW){Serial.println("Аккумулятор заряжаеться.");} else {Serial.println("Аккумулятор не заряжаеться.");} }
Файлы - со скетчем для ардуино, файлы PDF и САПР платы и STL файлы корпуса выложены на яндекс ресурсе.
Напишите отзыв.
Блок-схема состоит из бока питания, блока понижающего преобразователя DC-DC, блока управления зарядкой (ардуино и реле) и аккумулятора.
Блок понижающего преобразователя DC-DC устанавливается если камера критична к напряжению выше 12,5В. Блок подключается в разрыв последовательно с диодом D2 (выход блока +12,5В к аноду диода, вход блока 14-15В к гнезду подключения анода диода в плате, земля - блока к земле – блока управления). В качестве блока понижающего преобразователя DC-DC использовал модуль питания LM2596.
Блок-схема устройства бесперебойного питания.
Блок питания может быть любого исполнения - параметры Uвх=14-15В, Uвых=11-12.5В, I=3А.
Блок управления зарядкой.
Схема блока управления в качестве основного элемента управления содержит плату ардуино нано. Светодиоды отображают наличие напряжения на входе устройства (с блока питания) и отображение включения зарядки. Реле предназначены для включения подачи напряжения на аккумулятор (зарядка) и реле блокировки (отключает нагрузку при сильном разряде аккумулятора). Резистор R9 мощный (чем мощней тем лучше J) Ватт 10 пойдёт. Данный резистор предназначен для ограничения тока заряда аккумулятора. Аккумулятор - 12В, 7А*Ч.
Диод D1_1 добавлен для увеличения разности потенциалов на аккумуляторе и выходом блока (за счёт напряжениия открытого перехода диода, я применял диоды HER308 и напряжение составило чуть более 1 В).
Алгоритм работы устройства.
Алгоритм работы устройства:
Формула расчёта вольтметра Uизм*Uоп/1024/0.174. Uизм - измеренное значение на входе АЦП, Uоп - опорное напряжение (в данном случае напряжение питания контроллера ардуино), 1024 максимальное значение разяда 10 разрядного АЦП.
Коэффициент 0,174 в формуле вольтметра (разница между измеренным напряжением навходе АЦП и действительным на аккумуляторе) вычисляется по формуле: R5/(R4+R5). Нужно измерить точное значение резисторов R4 и R5 тестером. Также нужно измерить тестером опорное напряжение (Uоп) (питание контроллера – выход стабилизатора на плате ардуино).
Платка получилась вот такая.
Корпус устройства простенький распечатал на 3Д принтере.