Standby killer

  1. Tryb czuwania StandBy

Internet jest pełen wyliczeń i opracowań, różnią się metodologią i wynikami ale sprowadzają się do jednego wniosku

Stan czuwania na przestrzeni roku potrafi wydać niemałą kwotę z naszego budżetu.

Artykuł opisuje proste i niedrogie urządzenie rozłączające obwód 230V.

W moim przypadku jest to obwód zasilający listwę AC. Do listwy wpięty jest

  • TV,
  • amplituner,
  • zasilacz do routera,
  • zasilacz do (z reguły wyłączonego) NAS,
  • Android TV.

Ważna uwaga

Urządzenie posiada obwód 230V, które nie jest napięciem bezpiecznym. Jego podłączenie i uruchomienie powinno być wykonane wyłącznie przez osobę z odpowiednimi kwalifikacjami. Przekaźnik i połączenia elektryczne powinny być umieszczone w obudowie samogasnącej.  

Logika urządzenia

Arduino wykorzystuje przerwanie na pinie D2, do którego podpięty jest czujnik podczerwieni. Czujnik ten umieściłem w pobliżu telewizora, w efekcie czego, użycie dowolnego pilota w salonie, powoduje wykonanie kodu w mikrokontrolerze.

Kod włącza (zamyka) przekaźnik który podaje napięcie na listwę AC. Od tego momentu zaczyna się także odliczanie do wyłączenia (otwarcia) przekaźnika. Żeby nie zaskoczyć użytkownika nagłym odłączeniem zasilania (np. w trakcie seansu filmowego) na zdefiniowany czas przed odłączeniem, zaczyna mrugać dioda, umieszczona w okolicy czujnika IR.

Kod programu

#define ON 1
#define OFF 0
#define RELAY_1 7
#define LED 4
unsigned long currentMillis;
unsigned long irMillis;
const long minute = 60000; //minuta=60000milisekund
long intervalShutDown = 180 * minute;
long intervalWarn = intervalShutDown - 10 * minute;
void setup()
{
Serial.begin(9600);
Serial.println("Start setup!");
attachInterrupt(0, ir_det, CHANGE);//interrupt cero (0) is on pin two(2).
delay(1000);
pinMode(LED, OUTPUT);
digitalWrite(LED, LOW);
pinMode(RELAY_1, OUTPUT);
setRelay(ON);
}

void loop() {
delay(100);
currentMillis = millis();
//ostrzezenie
if ((currentMillis - irMillis >= intervalWarn) && (currentMillis - irMillis < intervalShutDown)) {
// Serial.print("Will shutdown after ");
// Serial.println((intervalShutDown-(currentMillis-irMillis))/1000);
//blinkaj LEDEM
led(500);
}

if (currentMillis - irMillis >= intervalShutDown) {
//Serial.println("Switched off!");
digitalWrite(LED, HIGH);
setRelay(OFF);
} else
{
//Serial.print("Waiting ");
// digitalWrite(LED, HIGH);
// Serial.println((intervalShutDown-(currentMillis-irMillis))/1000);
}
}

void ir_det() {
//Serial.println("INTERRUPT CHANGED");
irMillis = millis();
led(100);
setRelay(ON);
}

void led(int d) {
digitalWrite(LED, HIGH);
delay(d);
digitalWrite(LED, LOW);
delay(d / 2);
}
void setRelay(int s){ digitalWrite(RELAY_1, s);}

Dwie rzeczy które być może zechcesz zmienić:

long intervalShutDown = 180 * minute;

180 to ilość minut, po której otwarty zostanie przekaźnik, czyli odłączone zasilanie

long intervalWarn = intervalShutDown – 10 * minute;

10 to ilość minut przed odłączeniem zasilania, przez które będzie migać ostrzegawczo LED

Po kilku miesiącach używania tego rozwiązania, rozważyłbym umieszczenie dodatkowego przycisku rozłączającego natychmiast przekaźnik. Innym rozwiązaniem może być ustalenie odpowiedniej sekwencji na pilocie.

 

Please follow and like us:

Dodaj komentarz

avatar
  Subscribe  
Powiadom o