Cihaz kısaca;
Pillerden gelen 16v girişi 9v'a stepdown converter ile çeviriyor ve voltaj seviyelerini arduino yardımı ile sürekli ölçüyor. İstenirse tüm sistem durumunu sürekli olarak bir bilgisayara aktarabiliyor. Seviyeye göre durum ışıklarını yakıyor ve ses çıkarıyor. 4 tane 16850 li-ion pil ile bir modemi yaklaşık 10 saat civarında (veya daha uzun) besleyebiliyor. Gerekli ayarlamalardan sonra UPS mantığı ile elektrik gittiğinde devreye girebiliyor.
Aslında voltajı sürekli pillerden sağladığı için pek çok son model UPS'ten daha iyi diyebilirim. Online UPS mantığı ile çalışıyor desek de olur... Kablolama hariç. İleride istediğim parçayı geri çıkarabilmek için modüler yapmayı tercih ettim ki bu da biraz fazla kablo kullanımı gerektirdi...
Sonuçta: Mükemmel oldu :)
Modified: 15/07/2016/*
Arduino Battery Tester
Created: 20/01/2016
By Gus
http://arduinomylifeup.com/arduino-battery-tester
Based on Arduino Battery Tester, Modified alot! Became 9v UPS for generic use.By, Osmn TSNhttp://x86macerasi.blogspot.com/
Arduino battery tester & relayed charge/discharge solution with relay and 1v to 25v voltage measurement. Version 0.1
*/
// the setup routine runs once when you press reset:
int gl2 = 9; //gl means GreatLight :)
int gl3 = 8;
int gl4 = 7;
int gl5 = 6;
int gl6 = 5;
int gl7 = 4;
int gl8 = 3;
int gl9 = 2;
int role1 = 11; //role means relay
int role2 = 12;
int analogValue = 0;
float voltage = 0;
int ledDelay = 1000;
void setup()
{
Serial.begin(9600);
Serial.println("Baglanti baslatildi");
pinMode(gl2, OUTPUT);
pinMode(gl3,OUTPUT);
pinMode(gl4,OUTPUT);
pinMode(gl5,OUTPUT);
pinMode(gl6,OUTPUT);
pinMode(gl7,OUTPUT);
pinMode(gl8,OUTPUT);
pinMode(gl9,OUTPUT);
pinMode(role1,OUTPUT);
pinMode(role2,OUTPUT);
pinMode(10, OUTPUT); // for beep and melody
// Startup melody begins below
beep(50);
delay(100);
tone( 10, 1000, 100);
delay(100);
tone( 10, 1100, 100);
delay(100);
tone( 10, 1200, 100);
delay(100);
tone( 10, 1300, 100);
delay(100);
tone( 10, 1400, 100);
delay(100);
tone( 10, 1500, 100);
delay(500);
beep(50);
delay(1000);
// Startup boot indicator, start all leds like powerbanks
delay(300);
digitalWrite(gl2, HIGH);
delay(300);
digitalWrite(gl3, HIGH);
delay(300);
digitalWrite(gl4, HIGH);
delay(300);
digitalWrite(gl5, HIGH);
delay(300);
digitalWrite(gl6, HIGH);
delay(300);
digitalWrite(gl7, HIGH);
delay(300);
digitalWrite(gl8, HIGH);
delay(300);
digitalWrite(gl9, HIGH);
delay(300);
// röleleri aç LOW röle açar çünkü bu röleler ters mantıkta çalışıyor
// open relays, LOW opens & HIGH closes relay because these Chinese relays works indirect
digitalWrite(role1, HIGH); // Relay closed. No current passes over relay.
delay(300);
Serial.println("Role 1 KAPALI");
delay(300);
digitalWrite(role2, HIGH); // Relay closed.
delay(300);
Serial.println("Role 2 KAPALI");
tone( 10, 2000, 200); // Sistemin hazır olduğunu belirmek için bir kere uzun ses çıkar. -System is ready- tone.
}
void loop()
{
analogValue = analogRead(A0);
voltage = 0.024*analogValue; // yeni değer 16.20v girdi için. 5v girdi için eski değer ise voltage = 0.0048*analogValue; for 5v input
Serial.println(voltage);
// delay(1);
if (voltage > 16.25)
digitalWrite(gl9, HIGH);
else if (voltage > 15.80 && voltage < 16.26)
{
digitalWrite(gl8, HIGH);
digitalWrite(gl7, HIGH);
digitalWrite(gl6, HIGH);
digitalWrite(gl5, HIGH);
digitalWrite(gl4, HIGH);
digitalWrite(gl3, HIGH);
}
else if (voltage > 15.40 && voltage < 15.81)
{
digitalWrite(gl7, HIGH);
digitalWrite(gl6, HIGH);
digitalWrite(gl5, HIGH);
digitalWrite(gl4, HIGH);
digitalWrite(gl3, HIGH);
}
else if (voltage > 15.00 && voltage < 15.40)
{
digitalWrite(gl6, HIGH);
digitalWrite(gl5, HIGH);
digitalWrite(gl4, HIGH);
digitalWrite(gl3, HIGH);
}
else if (voltage > 14.60 && voltage < 15.01)
{
digitalWrite(gl5, HIGH);
digitalWrite(gl4, HIGH);
digitalWrite(gl3, HIGH);
}
else if (voltage > 14.20 && voltage < 14.61)
{
digitalWrite(gl4, HIGH);
digitalWrite(gl3, HIGH);
}
else if (voltage > 13.80 && voltage < 14.21)
digitalWrite(gl3, HIGH);
else if (voltage > 13.00 && voltage < 13.81)
{
digitalWrite(gl2, HIGH);
delay(100);
digitalWrite(gl2, LOW);
}
if (voltage > 13.00 && voltage < 13.31)
beep(100);
else if (voltage > 12.50 && voltage < 13.00)
{
tone( 10, 2000, 500);
delay(500);
tone(10, 3000, 500);
digitalWrite(gl2, HIGH);
delay(100);
digitalWrite(gl2, LOW);
digitalWrite(gl3, HIGH);
delay(100);
digitalWrite(gl3, LOW);
}
if (voltage > 11.00 && voltage < 12.50)
{
tone( 10, 2000, 1000);
delay(1500);
digitalWrite(role1, HIGH);
}
else if (voltage > 14.10)
digitalWrite(role1, LOW);
if (voltage > 16.15)
{
digitalWrite(role2, HIGH);
}
else if (voltage < 16.15)
digitalWrite(role2, LOW);
if (voltage < 10)
{
digitalWrite(role1, HIGH);
digitalWrite(role2, HIGH);
tone( 10, 90, 200);
delay(300);
digitalWrite(gl2, HIGH);
delay(100);
digitalWrite(gl2, LOW);
delay(100);
digitalWrite(gl3, HIGH);
delay(100);
digitalWrite(gl3, LOW);
delay(100);
digitalWrite(gl4, HIGH);
delay(100);
digitalWrite(gl4, LOW);
delay(100);
digitalWrite(gl5, HIGH);
delay(100);
digitalWrite(gl5, LOW);
delay(100);
digitalWrite(gl6, HIGH);
delay(100);
digitalWrite(gl6, LOW);
delay(100);
digitalWrite(gl7, HIGH);
delay(100);
digitalWrite(gl7, LOW);
delay(100);
digitalWrite(gl8, HIGH);
delay(100);
digitalWrite(gl8, LOW);
delay(100);
digitalWrite(gl9, HIGH);
delay(100);
digitalWrite(gl9, LOW);
Serial.println("Pil bulunamadı");
}
delay(ledDelay);
digitalWrite(gl9, LOW);
digitalWrite(gl8, LOW);
digitalWrite(gl7, LOW);
digitalWrite(gl6, LOW);
digitalWrite(gl5, LOW);
digitalWrite(gl4, LOW);
digitalWrite(gl3, LOW);
digitalWrite(gl2, LOW);
//digitalWrite(role1, LOW);
}
void beep(unsigned char delayms){
analogWrite(10, 20); // Almost any value can be used except 0 and 255
// experiment to get the best tone
delay(delayms); // wait for a delayms ms
analogWrite(10, 0); // 0 turns it off
delay(delayms); // wait for a delayms ms
}
1 yorum:
What a useless machine. I like it very much :)
Yorum Gönder