Pierwsze odczyty z licznika – cz.3

Montaż Fotodiody.

Zamontowałem Fotodiodę na liczniku aby odczytać pierwsze impulsy przez mikrokontroler. Po dokładnym spasowaniu i ustawieniu obu diod naprzeciw siebie otrzymałem wartość 5V w trakcie migania, tyle ile chciałem. Teraz wystarczy aby mikrokontroler odczytał wartość i przesłał po RS232 dowolną komendę.

Diodę umieściłem w gumowej zatyczce, jaką miałem pod ręką, prawdopodobnie pochodziła z zaślepki na śrubę jakiegoś samochodu, który kiedyś rozkręcałem. Wybrałem ja ze względu na kołnierz, który potem łatwo przyczepić do licznika taśmą klejąca. Dzięki temu nie będzie ingerencji w sam licznik i w razie kontroli powinno być ok.

 

 

 

 

 

 

 

Fotodioda na liczniku przedstawia się następująco.

 

Kod odczytujący pin 14

Przykład kodu jest bardzo prosty, oczywiście nic innego nie robi poza miganiem diodą na pinie 13 płytki Arduino i przesyłania ilości zliczonych mignięć.
Ponieważ mignięcie diody na liczniku trwa 40us spokojnie można dać delay-a na 100ms aby zobaczyć że mikrokontroler coś odczytał. Zwykle delay-a się nie używa gdyż blokuje procesor.
Bezpieczniki są na 16A więc można się spodziewać nie więcej jak 3600 mignięć na godzinę. Wyliczyć można to bardzo łatwo:

Napięcie sieci to 230V, prąd maksymalny to 16A, zatem ze wzoru na moc W=I*U wychodzi 3680 [W] co daje tyle samo impulsów / godzinę. Zatem można spodziewać się mignięcia diody co ~0.98 sekundy. Oczywiście zanim wyskoczy bezpiecznik, może dojść do chwilowego zużycia prądu większego niż 16A, natomiast nie ma to znaczenia, układ i tak będzie zasilany z sieci i w razie braku prądu stracimy ostatnie odczyty w obu przypadkach. Stosując dla procesora zasilanie bateryjne lub podtrzymujące w razie awarii energii, możemy dodatkowo dowiedzieć się kiedy prądu nie było. Jest to jednak dodatkowy krok, który być może wprowadzę.

 

#include "Arduino.h"

const uint8_t PhotoDiode = 14; //pin na którym podłączona jest fotodioda
const uint8_t ShowImpuls = 13; //dioda na pinie 13

void setup()
{
	Serial.begin(9600);
	pinMode(PhotoDiode, INPUT);
}

void loop()
{
	auto i = 0;
	if((digitalRead(PhotoDiode)) == true){
		digitalWrite(ShowImpuls, 1); //włączenie diody na pinie 13 arduino
		Serial.println(++i); //wyrzucam na terminal ilość zliczonych odczytów
		delay(100); //przerwa aby było widać miganie diody na pinie 13
		digitalWrite(ShowImpuls, 0); //wyłączenie diody na pinie 13
	}
}



 

 

 

 

Dodaj komentarz

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.