RA9QAT | Дата: Воскресенье, 06.12.2015, 21:36 | Сообщение # 1 |
Генерал-полковник
Группа: Проверенные
Сообщений: 1009
Статус: Offline
| Последнее время в портативке Zastone ZT-2R стал быстро сдыхать аккумулятор. Неудобно, только начнёшь передавать дорожную обстановку, и бряк... облом. Дешёвый запасной, до этого год лежавший без дела, тоже стал вести себя не очень... Задумался над тем, как проверить ёмкость 3.7 вольтовых аккумуляторов без использования дорогого (из-за нынешнего курса рубля) зарядника iMax. Нашёл статью о тестере аккумуляторов на Arduino https://www.electronicsblog.net/very-si....monitor
Раньше, пока не купил зарядник LaCrosse RS700, пальчиковые аккумуляторы я тестировал нагружая лампочкой. Допустим, ток ее потребления 300 мА, прогорела лампочка 2 часа, значит ёмкость аккумулятора 600 мА в час. Нагрузку в виде лампочки я использовал потому, что в отличие от резистора, у неё есть некоторый эффект стабилизации тока, т.к. её сопротивление зависит от нагрева нити. При нагрузке аккумулятора резистором ток в цепи будет уменьшаться пропорционально уменьшению напряжения, таким образом, точно его ёмкость не измерить. Правильный измеритель ёмкости каждую секунду измеряет напряжение на аккумуляторе нагруженном резистором с известным сопротивлением. Зная эти параметры, вычисляем ток в цепи. Общая ёмкость аккумулятора складывается из суммы значений силы тока, измеряемых каждую секунду, разделённых на 3600.
Программа автора у меня не заработала, в ней процедура измерения каждую секунду должна была вызываться по таймеру, я сделал её вызов в цикле с задержкой в 1 секунду. Добавил звуковой сигнал при снижении напряжения ниже 3 вольт, чтобы во-время отключить аккумулятор, на случай, если у него нет защиты от разряда. Отображение времени разряда сделал не в секундах, а в формате ч:мм:сс, время считается при наличии напряжения на клеммах.
Показания считываются через терминальную программу подключенную на скорости 115200 к Arduino.
Подключение к Arduino: плюс аккумулятора ко входу Analog In A0, минус к ближайшему GND, параллельно аккумулятору резистор сопротивлением около 8 Ом составленный из двух двухваттных МЛТ-2. У меня не было двух резистров близкого номинала, поэтому, через меньший протекает больший ток и он нагревается до 90 градусов, но не чернеет, что допустимо. Сопротивление Вашего резистора нужно измерить и внести в константу resistor в третьей строке программы. При измерении сначала замкните щупы между собой, запомните сопротивление проводов мультиметра, около 0.5 Ом, потом вычтите его из значения сопротивления резистора, которое покажет прибор. Выключатель в разрыве провода особо не нужен. Пьезик подключен к выводу Digital 8 и ближайшему GND.
Что имеем в итоге: ёмкость родного аккумулятора рации оказалась 40 мА/ч запасного 500 мА/ч вместо 1000. Измерил ёмкость аккумуляторов из смартфона, самый первый, который прослужил три года с 1500 деградировал до 980, купленный недавно с ebay вместо 1650 оказался 1370. Ну, а китайский аккумулятор бренда Mi-Power, после года эксплуатации в Nokia 3310 вместо 800 показал 720, что в общем-то не плохо, т.к родные нокиевские были вроде на 650, просто, видимо отвык, что Нокия прожорливая, съедает его за два-три дня.
Мой код: #define LED 13 #define SoundPin 8 #define resistor 8 float capacity=0, value, voltage, current; boolean x=true; word time=0; byte hh, mm, ss; void measure (void) { value= analogRead(0); voltage=value/1024*5.0; current = voltage/resistor; capacity=capacity+current/3600; // Count time when connected only if (voltage > 0.5) {time++;} hh = byte(time/3600); mm = byte((time-hh*3600)/60); ss = byte(time-hh*3600-mm*60); Serial.print("Voltage = "); Serial.print(voltage); Serial.print("V Current = "); Serial.print(current); Serial.print("A Capacity = "); Serial.print(capacity); Serial.print("Ah "); Serial.print("Discharging time = "); Serial.print(hh); Serial.print(":"); if (mm < 10) {Serial.print("0");} Serial.print(mm); Serial.print(":"); if (ss < 10) {Serial.print("0");} Serial.print(ss); Serial.print("\n"); // Sound warning when you should disconnect battery if (voltage <= 3) {tone(SoundPin, 700, 50);} } void setup() { pinMode(LED, OUTPUT); Serial.begin(115200); Serial.print("Connected!"); Serial.print("\n"); }; void loop () { if (x) {digitalWrite(LED, HIGH);} else {digitalWrite(LED, LOW);} measure(); delay(1000); x=!x; };
Позывной на CB, LPD: Планер 576
|
|
| |