#1 2016-11-22 19:04:48

ACA5
Участник
Зарегистрирован: 2016-11-19
Сообщений: 9

Не получается тестер батареек

Правильно ли я собрал схему?

Тупо все по книжке сделал, только цепь по схеме,картинок не было , но как оказалось и тут может быть какой-то косяк. Светодиоды горят поочередно, как-то рандомно. При тесте батареек вроде реагируют, и то не в 100% случаях и всегда с какой-то небольшой задержкей.

Что делаю не так?
613f9908d26d.jpg
077e1f81ff54.jpg
94eb6803d544.jpg


// Проект 6 - Тестер для одноэлементных батареек
#define newLED 2 //зеленый светодиод "новая"
#define okLED 4  //желтый cветодиод "норма"
#define oldLED 6 //красный светодиод "старая"

int analogValue = 0;
float voltage = 0;
int ledDelay = 2000;

void setup() 
{
   pinMode(newLED, OUTPUT); 
   pinMode(okLED, OUTPUT);
   pinMode(oldLED, OUTPUT);  
}

void loop() 
{
   analogValue = analogRead(0);
   voltage = 0.0048*analogValue;
   if (voltage >= 1.6)
   {
    digitalWrite(newLED, HIGH);
    delay(ledDelay);
    digitalWrite(newLED, LOW);
   } 
   else if (voltage < 1.6 && voltage > 1.4)
   {
    digitalWrite(okLED, HIGH);
    delay(ledDelay);
    digitalWrite(okLED, LOW);
   }
   else if (voltage <= 1.4)
   {
    digitalWrite(oldLED, HIGH);
    delay(ledDelay);
    digitalWrite(oldLED, LOW);
   }
}


Попробовал от себя добавить значение low всем LEDам в setup, но потом удалил т.к. ничего не дало?
Что не так?

#2 2016-11-22 20:07:49

qwone
Участник
Зарегистрирован: 2016-07-25
Сообщений: 143

Re: Не получается тестер батареек

Ну-ну. Учебники они такие. Они до добра не доведут.

/*Тестер для одноэлементных батареек
тестируемая батарейка -> AO;
                   GND->GND
светодиод зеленый ->2 (led_green_pin)   1 горит 0 нет
                   GND->GND
светодиод желтый ->4  (led_yellow_pin)  1 горит 0 нет
                   GND->GND
светодиод красный ->6  (led_red_pin)    1 горит 0 нет
*/
const int battery_pin   = A0 ; //нога измеритель батареек
float voltage = 0;
const int led_green_pin  = 2 ; //зеленый светодиод "новая"
const int led_yellow_pin = 4 ; //желтый cветодиод "норма"
const int led_red_pin    = 6 ; //красный светодиод "старая"

void setup()  {
  pinMode(led_green_pin, OUTPUT);
  pinMode(led_yellow_pin, OUTPUT);
  pinMode(led_red_pin, OUTPUT);
}
void loop()  {
  digitalWrite(led_green_pin, 0);
  digitalWrite(led_yellow_pin, 0);
  digitalWrite(led_red_pin, 0);
  delay(1000);
  voltage = analogRead(battery_pin) * 5 / 1023;
  if (voltage >= 1.6) digitalWrite(led_green_pin, 1);
  if (voltage < 1.6 && voltage > 1.4) digitalWrite(led_yellow_pin, 1);
  if (voltage <= 1.4) digitalWrite(led_red_pin, 1);
  delay(1000);
}

#3 2016-11-22 22:55:51

ACA5
Участник
Зарегистрирован: 2016-11-19
Сообщений: 9

Re: Не получается тестер батареек

Ваш код для моей цепи написан был? Просто он ещё хуже работает, светодиоды тоже рандомно моргают, но тестер уже не работает. Если не так, то подскажите что исправить нужно в цепи?
С другом посидели над кодом методом проб вот что самое лучшее получилось родить. Вместо батареек использовал сетевой адаптер , чтоб удобнее было, поменял диапозоны напряжений . Светодиоды опять же ведут себя надекватно, горит то один, то два, то три, но они мерцают, дребезжат. На адаптере напряжение при установленном 4.5 В выдает, 4.61 вольт, но сам тестер врубает как видите желтый до 4.92, т.е. в самой цепи гуляет какое-то напряжение где-то в 305 вольт.
Начинаю подозревать, что это косяк моей ардуины.. Ещё раз прошу посмотреть, правильно ли я собрал цепь, а то может я упускаю нечто простейшее фундаментальное , т.к. это первая схема которую я собрал не по картинке.

// Проект 6 - Тестер для одноэлементных батареек
#define newLED 2 //зеленый светодиод "новая"
#define okLED 4  //желтый cветодиод "норма"
#define oldLED 6 //красный светодиод "старая"

int analogValue = 0;
float voltage = 0;
int ledDelay = 2000;

void setup() 
{
   pinMode(newLED, OUTPUT); 
   pinMode(okLED, OUTPUT);
   pinMode(oldLED, OUTPUT);  
}

void loop() 
{
   analogValue = analogRead(0);
   voltage = 0.0048*analogValue;
   
   if (voltage >=1 && voltage <= 4)  //напряжение от 1 до 4 - горит красный
   {
    digitalWrite(newLED, HIGH);  
    digitalWrite(okLED, LOW);
    digitalWrite(oldLED, LOW);    
   } 
   else if (voltage > 4 && voltage <= 4.92)  //напряжение от 4 до 4.92 - горит красный
   {    
    digitalWrite(newLED, LOW);
    digitalWrite(okLED, HIGH);
    digitalWrite(oldLED, LOW);
    //delay(ledDelay);
    //digitalWrite(okLED, LOW);
   }
     else if (voltage > 4.92)
   {    
    digitalWrite(okLED, LOW);
    digitalWrite(newLED, LOW);
    digitalWrite(oldLED, HIGH);    
  }
  else
  {
    digitalWrite(oldLED, LOW);  //если напряжение меньше 1 вольта - ничего не горит
    digitalWrite(okLED, LOW);   // но по факту они по прежнему горят
    digitalWrite(newLED, LOW);
  }

}

#4 2016-11-23 00:23:52

qwone
Участник
Зарегистрирован: 2016-07-25
Сообщений: 143

Re: Не получается тестер батареек

Нет . У вас проблемы в схемотехнике. 1 - на батарейку надо дать нагрузку. Хотя бы 1 кОм паралельно батарейке. 2 - бреадбоард тоже не лучший вариант. Там тоже контакты гуляют.

ПС: Из фундаментального. На батарейке не стабильное напряжение. Внутреняя ЭДС, внутренее сопротивление. Нужна какая-то наргузка. А аналоговый вход Ардуины такой нагрузки не дает. Тем более там АЦП одно и оно переключается по аналоговым выходам.

Редактировался qwone (2016-11-23 01:30:47)

#5 2016-11-23 02:38:34

ACA5
Участник
Зарегистрирован: 2016-11-19
Сообщений: 9

Re: Не получается тестер батареек

Спасибо!

#6 2016-11-23 10:09:20

NoName
Customer
Из Київ
Зарегистрирован: 2014-07-08
Сообщений: 1,446

Re: Не получается тестер батареек

 analogValue = analogRead(0);

см. код qwone

const int battery_pin   = A0 ; //нога измеритель батареек
voltage = analogRead(battery_pin) * 5 / 1023;

important - A0

Быстрое сообщение

Введите сообщение и нажмите Отправить

Подвал раздела