fotodioda, Fototranzystor i Czujnik IR z Arduino
spis treści
opis:
fotodioda, fototranzystor i czujnik podczerwieni z fotodiodą Arduino– a to urządzenie, które, gdy jest wzbudzone przez światło, wytwarza w obwodzie proporcjonalny przepływ prądu (i mierzalny). W ten sposób mogą służyć jako czujniki światła, chociaż prawdą jest, że istnieją fotodiody szczególnie wrażliwe na światło widzialne, zdecydowana większość jest szczególnie w świetle podczerwonym.
należy wziąć pod uwagę, że pomimo zachowania podobnego do LDRs, bardzo ważną różnicą od nich (oprócz wrażliwości na inne długości fal) jest czas reakcji na zmiany z ciemności na oświetlenie i odwrotnie, który w fotodiodach jest znacznie niższy.
podobnie jak standardowe Diody, fotodiody mają anodę i katodę, ale uważaj, aby działała tak, jak chcemy, fotodioda musi być zawsze podłączona do obwodu z odwrotną polaryzacją. Oczywiście, podobnie jak w przypadku zwykłych diod, Zwykle anoda jest dłuższa od katody (jeśli są jednakowej długości, katoda powinna być w jakiś sposób oznaczona).
jego wewnętrzne działanie jest następujące: gdy fotodioda jest spolaryzowana bezpośrednio, światło, które na nią pada, nie ma znaczącego efektu i dlatego oba urządzenia zachowują się jak wspólna dioda. Gdy spolaryzowany w odwrotnej kolejności i nie dociera do niego żadne promieniowanie świetlne, zachowuje się również jak normalna dioda, ponieważ elektrony przepływające przez obwód nie mają wystarczającej ilości energii, aby przez niego przejść, więc obwód pozostaje otwarty. Ale w momencie, gdy fotodioda otrzymuje promieniowanie świetlne w zakresie długości fali, elektrony otrzymują wystarczającą energię, aby móc “przeskoczyć” barierę odwrotnej fotodiody i kontynuować swoją drogę.
Przykład1: jak sprawdzić zachowanie fotodiody
aby sprawdzić jej zachowanie, możemy użyć poniższego obwodu. Układ ten jest identyczny z tym, który widzieliśmy z LDRs, zastępując je fotodiodą (którą identyfikuje Nowy symbol, którego do tej pory nie widzieliśmy). Wartość dzielnika napięcia będzie zależeć od ilości światła (podczerwieni) obecnego w środowisku: wyższe rezystancje poprawiają czułość, gdy jest tylko jedno źródło światła, a niższe rezystancje poprawiają ją, gdy jest ich wiele (samo słońce lub lampy są źródłami podczerwieni); wartość 100 KΩ może być dobra na początek. Zauważmy również, że jest to katoda fotodiody (najkrótszy terminal, pamiętajmy), która łączy się z zasilaczem.
działanie tego obwodu wygląda następująco: tak długo, jak fotodioda nie wykrywa światła podczerwonego, przez analogowe wejście płyty Arduino (w tym przypadku numer 0) mierzy się napięcie 0V, ponieważ obwód będzie działał jako obwód otwarty. Wraz ze wzrostem natężenia światła na fotodiodzie zwiększy się liczba przechodzących przez nią elektronów (czyli natężenie prądu). Oznacza to, że gdy opór “pull-down” jest stały, zgodnie z prawem Ohma napięcie mierzone na analogowym pinie wejściowym również wzrośnie, aż do momentu, w którym przy odbiorze dużej ilości światła fotodioda nie powoduje prawie żadnej odporności na przejście elektronów, a zatem płytka Arduino odczytuje maksymalne napięcie 5V.
dodaliśmy diodę LED podłączoną do Pina wyjściowego PWM # 5, tak jak zrobiliśmy to, gdy zobaczyliśmy, że LDR mają widoczny sposób (zamierzony kalambur) wykrywania padania światła podczerwonego na fotodiodę. Jak widać w użytym kodzie (pokazanym poniżej), zrobiliśmy intensywność jasności LED ilości światła podczerwonego wykrytego przez fotodiodę: im więcej otrzymanego promieniowania podczerwonego, tym jaśniejsza będzie DIODA LED.
Programowanie:
1
2
3
4
5
6
7
8
9
10
11
12
|
int photodiode_value;
int bright_LED;
void setup(void) {
Serial.begin(9600);
}
void loop (void) {
photodiode_value = analogRead(0);
seryjny.println (photodiode_value);
bright_LED = map (photodiode_value, 0, 1023, 0, 255);
analogWrite (5, bright_LED);
opóźnienie(100);
}
|
Wyjaśnienie programowania:
przede wszystkim dla otrzymania wartości fotodiody definiuję zmienną typu integer
1
|
int photodiode_value;
|
następnie definiuję zmienną typu integer dla wartości led “wartość wysłana do DIODY LED”
1
|
int bright_LED;
|
w funkcji pętli void najpierw otrzymuję wartość za pomocą funkcji analogRead i zapisuję tę wartość w zmiennej photodiode_value, a następnie używam szeregowego.println do drukowania wartości na monitorze szeregowym
1
2
3
|
photodiode_value = analogRead(0);
seryjny.println (photodiode_value);
|
jasność diody LED jest proporcjonalna do ilości odbieranego światła podczerwonego
1
2
3
|
bright_LED = map (photodiode_value, 0, 1023, 0, 255);
analogWrite (5, bright_LED);
|
fototranzystor:
inny typ czujników światła oprócz fotodiod nazywa się fototranzystorami, czyli tranzystorami światłoczułymi (Zwykle także podczerwienią). Jego działanie jest następujące: kiedy światło pada na jego podstawę, generuje prąd, który doprowadza tranzystor do stanu przewodzenia. Dlatego fototranzystor jest równy zwykłemu tranzystorowi z tą tylko różnicą, że prąd bazowy Ib jest zależny od odbieranego światła. W rzeczywistości istnieją fototranzystory, które mogą działać w obu kierunkach: albo jako fototranzystory, albo jako wspólne tranzystory o określonym prądzie bazowym Ib.
fototranzystor jest znacznie bardziej czuły niż fotodioda (ze względu na efekt wzmocnienia samego tranzystora), ponieważ prądy, które można uzyskać za pomocą fotodiody, są naprawdę ograniczone. W rzeczywistości można zrozumieć fototranzystor jako połączenie fotodiody i wzmacniacza, więc właściwie, jeśli chcielibyśmy zbudować domowy fototranzystor, wystarczy dodać do wspólnego tranzystora fotodiodę, łącząc katodę fotodiody z kolektorem tranzystora i anodą z podstawą. W takiej konfiguracji prąd dostarczany przez fotodiodę (który krąży w kierunku podstawy tranzystora) byłby wzmacniany β razy.
w wielu obwodach możemy znaleźć fototranzystor w niewielkiej odległości od diody emitującej podczerwień o zgodnej długości fali. Ta para elementów jest przydatna do wykrywania interpozycji przeszkody między nimi (z powodu przerwania wiązki światła) i dlatego działa jako przełączniki optyków. Mogą być stosowane w wielu zastosowaniach, takich jak m.in. w detektorach przejścia karty kredytowej (w bankomacie) lub wprowadzenia papieru (w drukarce) lub jako tachometry. Obrotomierz to urządzenie, które liczy obroty na minutę wykonane przez przeszkodę podlegającą obracającemu się kołu lub łopatce (zwykle z powodu działania silnika); to znaczy służy do pomiaru prędkości obrotu obiektu.
fototranzystor składa się z dwóch zacisków odpowiadających anodzie i katodzie diody LED oraz dwóch zacisków odpowiadających kolektorowi i emiterowi fototranzystora NPN. Ogólnie rzecz biorąc, będziemy chcieli podłączyć zaciski LED do obwodu zamkniętego zasilanego w sposób ciągły (Anoda do źródła, katoda do masy), zacisk kolektora przełącznika fotograficznego do źródła zasilania i zacisk emitera przełącznika fotograficznego do cyfrowego wejścia naszej płyty Arduino, aby móc wykryć w ten sposób pojawienie się Prądu po odebraniu oświetlenia. Z drugiej strony, oba te wejścia Arduino jako emiter powinny być uziemione za pomocą tego samego rezystora pull-down, aby uzyskać bardziej stabilne odczyty (typowa wartość 10 KΩ może działać, ale w zależności od obwodu może być potrzebna wyższa wartość).
możemy również znaleźć parę fototranzystorów podczerwieni LED plus w niektórych komponentach zwanych “optoizolatorami” lub “optoizolatorem”. Schematyczna reprezentacja jest zwykle taka:
Ogólnie Rzecz Biorąc, optoppler działa jak obwód zamknięty, gdy światło pochodzi z diody LED do podstawy tranzystora i otwiera się, gdy DIODA LED jest wyłączona. Jego główną funkcją jest sterowanie i jednocześnie izolowanie dwóch części układu, które normalnie pracują przy różnych napięciach (tak jak zwykły tranzystor, ale w nieco bezpieczniejszy sposób). Fizycznie są to zazwyczaj żetony, które oferują co najmniej cztery piny (takie same jak przełączniki fotograficzne): dwa odpowiadające zaciskom diody LED i dwa odpowiadające kolektorowi i emiterowi fototranzystora (chociaż mogą mieć jeszcze jeden pin odpowiadający podstawie, jeśli jest to dozwolone, kontrolują natężenie, które przepływa przez nią również standardowo). Przykładami optoplerów są 4N35 lub CNY75, produkowane przez różne firmy.
para fototranzystorów LED jest również przydatna do wykrywania obiektów znajdujących się w niewielkiej odległości od niej. Zbadamy to w sekcji odpowiadającej czujnikom odległości.
jak wykonać Zdalne sterowanie za pomocą czujnika Podczerwieni:
natychmiastowe praktyczne zastosowanie pary emiter-odbiornik PODCZERWIENI (takiej jak dioda LED i fotodioda / fototranzystor) znajdującej się w pewnej odległości jest wysyłanie “wiadomości” między nimi. Oznacza to, że ponieważ światło podczerwone nie jest widoczne (a zatem nie “drażni”), impulsy o określonym czasie trwania mogą być emitowane i / lub częstotliwości, które można odbierać i przetwarzać kilka metrów bez “zauważenia”.”Urządzenie, które je odbiera, musi być następnie zaprogramowane do wykonywania różnych czynności w zależności od rodzaju odczytywanego impulsu.
W rzeczywistości każde urządzenie, które współpracuje z “pilotem”, działa w podobny sposób, ponieważ w jego przedniej części muszę mieć czujnik czujników podczerwieni (zwanych również czujnikami “IR”, od angielskiego “infra-red”), które odbierają sygnały podczerwieni emitowane przez pilota. A to, co jest w środku, to w zasadzie DIODA LED, która emituje impulsy światła podczerwonego zgodnie z określonym wzorem, który sygnalizuje urządzeniu kolejność wykonania: jest kod mrugnięcia, aby włączyć telewizor, inny, aby zmienić kanały, itp.
powyżej mówiliśmy o “czujnikach IR”, a nie o fotodiodach / fototranzystorach, ponieważ te pierwsze są nieco bardziej wyrafinowane. W szczególności czujniki podczerwieni nie wykrywają żadnego światła podczerwonego, a jedynie to, że (dzięki wbudowaniu wewnętrznego filtra pasmowo-pasmowego i demodulatora) jest modulowane przez falę nośną o częstotliwości 38 KHz + 3 KHz. Zasadniczo oznacza to, że odczytywane będą tylko sygnały, których informacje są przenoszone przez kształt fali 38 KHz. Ma to na celu zapobieganie czujnikom podczerwieni “zwariować”, gdy otrzymują światło podczerwone, które istnieje ze wszystkich stron (słońce, światło elektryczne … w ten sposób reagują tylko na bardzo konkretne już znormalizowane.
inną różnicą w przypadku fotodiod / fototranzystorów jest to, że czujniki IR oferują odpowiedź binarną: jeśli wykryją sygnał IR 38 KHz, wartość, którą można odczytać z nich w większości przypadków jest niska (0 V), a jeśli nic nie wykryją, twój odczyt daje wysoką wartość (5 V). To zachowanie jest zwykle nazywane “aktywnym niskim lub “niskim aktywnym”.
przykładami czujników podczerwieni mogą być TSOP32838 lub GP1UX311QS. Jako cechy najbardziej znane mają, że ich zakres czułości wynosi od długości fal 800nm do 1100nm z maksymalną reakcją na 940nm i wymaga około 5V i 3 mA do działania.
chip TSOP32838 oferuje trzy piny: zwrócony ku tyłowi półkulisty, lewy pin jest wyjściem cyfrowym dostarczanym przez czujnik, środkowy pin musi być uziemiony, a prawy pin musi być uziemiony. podłącz do zasilania (od 2,5 V do 5,5 V).
Przykład2:
jak włączyć diodę led za pomocą pilota za pomocą Arduino i czujnika Podczerwieni TSOP32838:
aby przetestować jej działanie, możemy zaprojektować Obwód podobny do następującego. Dzielnik napięcia dla diody LED może wynosić od 200 do 1000 omów.
chodzi o to, aby na krótko włączyć diodę LED, gdy czujnik podczerwieni wykryje sygnał podczerwieni. Ale uważaj, nie tylko KAŻDY sygnał podczerwieni jest ważny, ale tylko ten modulowany przy 38 KHz. Dlatego, aby przetestować ten obwód, nie możemy użyć żadnej Diody podczerwieni: musimy użyć pilota zdalnego sterowania, który mamy pod ręką (z telewizora, odtwarzacza DVD, komputera itp.). Po załadowaniu na płytę Arduino szkic przedstawiony do następnego, jeśli skierujemy pilota na czujnik podczerwieni i naciśniemy niektóre jego przyciski, powinniśmy zobaczyć diodę LED. W ten sposób będziemy używać czujnika podczerwieni tak, jakby był to przełącznik, który podświetla diodę LED podczas wykrywania tego sygnału i wyłącza go, gdy nie jest już wykryty.
wyjście czujnika jest podłączone do pinu wejścia cyfrowego 2 płyty Arduino, a dioda LED jest podłączona do pinu wyjścia cyfrowego 12):
Programowanie:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
int irPin=2;
int ledPin=12;
void setup() {
pinMode(irPin,wejście);
pinMode (ledPin, wyjście);
}
void loop() {
if(pulseIn (irPin, LOW) > 0) {
opóźnienie (100);
digitalWrite (ledPin, HIGH);
opóźnienie(200);
digitalWrite (ledPin, LOW);
}
}
|
Wyjaśnienie programowania:
najpierw definiuję zmienną typu integer dla czujnika podczerwieni i diody led
1
2
3
|
int irPin=2;
int ledPin=12;
|
w funkcji setup ustawiam Czujnik Podczerwieni jako wejście i diodę led jako wyjście
1
2
3
|
pinMode (irPin, wejście);
pinMode (ledPin, wyjście);
|
ponieważ sygnał emitowany przez czujnik jest zwykle wysoki, po naciśnięciu przycisku pilota zdalnego sterowania zmienia się na niski. Funkcja pulseIn() polega na wstrzymaniu szkicu do momentu wykrycia sygnału niskiego, którego czas trwania tak naprawdę nas nie interesuje, ale logicznie zawsze będzie większy od zera. Dlatego, jeśli warunek if oznacza, że Przycisk na pilocie został naciśnięty
1
|
if (pulseIn (irPin, LOW) > 0) {
|
konieczne jest odczekanie pewnego czasu (zależnego od konkretnego modelu pilota) po wykryciu pierwszego niskiego sygnału, ponieważ każde naciśnięcie przycisku powoduje wiele oscylacji między wysokimi i niskimi wartościami. Chociaż fizycznie nie ma nic do zobaczenia, możemy zrozumieć to czekanie tak, jakby było sposobem na uniknięcie “odbicia” (zjawisko badane podczas leczenia przycisków). Po upływie tego czasu oczekiwania sygnał z czujnika powinien powrócić do stanu spoczynku (wysoka wartość).
1
|
opóźnienie(100);
|
DIODA LED jest włączona przez kilka milisekund. W tym czasie szkic nie będzie w stanie wykryć innych naciśnięć klawiszy pochodzących z pilota. Mogliśmy też wysłać wiadomość do “monitora szeregowego”informującą o pulsacji.
1
2
3
4
5
6
7
8
9
|
digitalWrite (ledPin, HIGH);
opóźnienie(200);
digitalWrite (ledPin, LOW);
}
}
|
Przykład3:
jak odebrać polecenie zdalnego sterowania na monitorze szeregowym za pomocą czujnika Podczerwieni TSOP32838 z Arduino:
przede wszystkim pobierz wymaganą bibliotekę dla czujnika Podczerwieni
biblioteka Arduino IRremote
schemat obwodu:
Programowanie:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
#include <IRremote.h>
int receiverPin = 11;
IRrecv irrecv(receiverPin);
decode_results results;
void setup(){
Serial.begin(9600);
irrecv.enableIRIn();
}
void loop () {
if (irrecv.dekoduj (& wyniki) !=0) {
if (results.decode_type = = NEC) {
Serial.print (“NEC: “);
} else if (results.decode_type = = SONY) {
Serial.print (“SONY: “);
} else if (results.decode_type = = RC5) {
Serial.print (“RC5: “);
} else if (results.decode_type = = RC6) {
Serial.print (“RC6: “);
} else if (results.decode_type = = UNKNOWN) {
Serial.print (“nieznany: “);
}
seryjny.println(results.value, HEX);
.CV();
}
}
|
Wyjaśnienie programowania:
najpierw importuję wymaganą bibliotekę
1
|
#include <h>
|
następnie definiuję pin wejścia cyfrowego dla odbiornika
1
|
int receiverPin = 11;
|
następnie tworzę obiekt o nazwie “irrecv” typu IRrecv
1
|
IRrecv irrecv (receiverPin);
|
następnie deklaruję zmienną specjalnego typu, “decode_results”.
1
|
decode_wyniki wyniki;
|
następnie uruchamiam odbiornik w funkcji void step
1
|
irrecv.enableIRIn();
|
następnie w pętli void patrzę, aby sprawdzić, czy wykryto jakiś modulowany wzór IR. Jeśli tak, to czytam go i trzymam w całości w zmiennej specjalnej “results”, w postaci liczb szesnastkowych
1
|
if (irrecv.dekoduj (& wyniki) !=0) {
|
następnie patrzę na to, jaki to jest wzór handlu, jeśli pochodzi z jednego uznanego przez Bibliotekę
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
if (results.decode_type = = NEC) {
Serial.print (“NEC:”);
} else if (results.decode_type = = SONY) {
Serial.print (“SONY: “);
} else if (results.decode_type = = RC5) {
Serial.print (“RC5: “);
} else if (results.decode_type = = RC6) {
Serial.print (“RC6: “);
} else if (results.decode_type = = UNKNOWN) {
Serial.print (“Unknown:”);
}
|
a następnie pokazuję odebrany wzorzec (w formacie szesnastkowym) na kanale szeregowym
1
|
seryjny.println(results.wartość, HEX);
|
po zdekodowaniu wzorca ponownie aktywuj nasłuchy, aby wykryć następny możliwy wzorzec
1
2
3
|
irrecv.CV();
}
|
Przykład4:
jak wykonać Zdalne sterowanie za pomocą czujnika Podczerwieni TSOP32838 z Arduino:
przede wszystkim pobierz wymaganą bibliotekę dla czujnika Podczerwieni
biblioteka Arduino IRremote
Użyj tego samego obwodu, którego użyłem w poprzednim projekcie
schemat obwodu:
Programowanie:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
#include <h>
int receiverPin = 11;
IRrecv irrecv(receiverPin);
decode_results results;
void setup(){
Serial.begin(9600);
irrecv.enableIRIn();
}
void loop () {
int i;
if (irrecv.dekoduj (& wyniki)!=0) {
action();
for (i=0; i<2; i++) {
CV();
}
}
}
void action () {
switch (results.value) {
case 0x37EE: Serial.println(“Favorites”); break;
case 0xA90: Serial.println(“On/off”); break;
case 0x290: Serial.println(“Mute”); break;
case 0x10: Serial.println(“1”); break;
case 0x810: Serial.println(“2”); break;
case 0x410: Serial.println(“3”); break;
case 0xC10: Serial.println(“4”); break;
case 0x210: Serial.println(“5”); break;
case 0xA10: Serial.println(“6”); break;
case 0x610: Serial.println(“7”); break;
case 0xE10: Serial.println(“8”); break;
case 0x110: Serial.println(“9”); break;
case 0x910: Serial.println(“0”); break;
case 0x490: Serial.println(“Increase volume”); break;
case 0xC90: Serial.println(“Decrease volume”); break;
case 0x90: Serial.println(“Increase channel”); break;
case 0x890: Serial.println(“Decrease channel”); break;
default: Serial.println(“Other button”);
}
delay(500);
}
|
Leave a Reply