Відповісти

Введіть повідомлення і натисніть Надіслати
Параметри

Назад

Огляд теми (нові повідомленні вгорі)

NoName
2016-11-23 10:09:20
 analogValue = analogRead(0);

см. код qwone

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

important - A0

ACA5
2016-11-23 02:38:34

Спасибо!

qwone
2016-11-23 00:23:52

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

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

ACA5
2016-11-22 22:55:51

Ваш код для моей цепи написан был? Просто он ещё хуже работает, светодиоды тоже рандомно моргают, но тестер уже не работает. Если не так, то подскажите что исправить нужно в цепи?
С другом посидели над кодом методом проб вот что самое лучшее получилось родить. Вместо батареек использовал сетевой адаптер , чтоб удобнее было, поменял диапозоны напряжений . Светодиоды опять же ведут себя надекватно, горит то один, то два, то три, но они мерцают, дребезжат. На адаптере напряжение при установленном 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);
  }

}
qwone
2016-11-22 20:07:49

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

/*Тестер для одноэлементных батареек
тестируемая батарейка -> 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);
}
ACA5
2016-11-22 19:04:48

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

Тупо все по книжке сделал, только цепь по схеме,картинок не было , но как оказалось и тут может быть какой-то косяк. Светодиоды горят поочередно, как-то рандомно. При тесте батареек вроде реагируют, и то не в 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, но потом удалил т.к. ничего не дало?
Что не так?

Підвал форуму