fotodioda, fototranzistor a IR senzor s Arduino
obsah
popis:
fotodioda, fototranzistor a IR senzor s Arduino-fotodioda je zařízení, které, když je vzrušeno světlem, vytváří v obvodu proporcionální proudový tok (a měřitelný). Tímto způsobem mohou být vyrobeny jako světelné senzory, i když je pravda, že existují fotodiody zvláště citlivé na viditelné světlo, drtivá většina je zejména v infračerveném světle.
je třeba vzít v úvahu, že navzdory chování v podobném vzhledu jako LDR je velmi důležitým rozdílem od těchto (kromě citlivosti na jiné vlnové délky) doba odezvy na změny z temnoty na osvětlení a naopak, což je ve fotodiodách mnohem nižší.
stejně jako standardní diody mají fotodiody anodu a katodu, ale buďte opatrní, aby fungovala tak, jak si přejeme, fotodioda musí být vždy připojena k obvodu v obrácené polaritě. Samozřejmě, stejně jako u běžných diod, normálně je anoda delší než katoda (pokud mají stejnou délku, katoda by měla být nějakým způsobem označena).
jeho vnitřní činnost je následující: když je fotodioda polarizována přímo, světlo, které na ni dopadá, nemá znatelný účinek, a proto se zařízení chová jako běžná dioda. Když je polarizován v opačném směru a nedosáhne ho žádné světelné záření, chová se také jako dioda normální, protože elektrony protékající obvodem nemají dostatek energie, aby jím prošly, takže obvod zůstává otevřený. Ale v okamžiku, kdy fotodioda přijímá světelné záření v rozsahu délky vlny, elektrony dostávají dostatek energie, aby mohly” přeskočit ” reverzní fotodiodovou bariéru a pokračovat v cestě.
Příklad1: jak zkontrolovat chování fotodiody
k testování jejího chování můžeme použít níže uvedený obvod. Tento obvod je totožný s obvodem, který jsme viděli s LDR, a nahrazuje je fotodiodou(která je identifikována novým symbolem, který jsme dosud neviděli). Hodnota vašeho děliče napětí bude záviset na množství světla (infračerveného) přítomného v prostředí: vyšší odpory zlepšují citlivost, když existuje pouze jeden zdroj světla, a nižší odpory ji zlepšují, když je jich mnoho (samotné slunce nebo lampy jsou zdrojem infračerveného záření); hodnota 100 KΩ může být na začátku v pořádku. Uvědomme si také, že se jedná o katodu fotodiody (nejkratší terminál, pamatujte), která se připojuje k napájení.
provoz tohoto obvodu je následující: dokud fotodioda nerozpozná infračervené světlo, přes analogový vstup desky Arduino (v tomto případě číslo 0) se změří napětí 0V, protože obvod bude fungovat jako otevřený obvod. Jak se intenzita světla na fotodiodě zvyšuje, zvýší se počet elektronů, které jím procházejí(tj. To znamená, že jak je “pull-down” odpor pevný, Ohmovým zákonem se také zvýší napětí měřené na analogovém vstupním kolíku, a to až do okamžiku, kdy při příjmu velkého množství světla fotodioda nezpůsobí téměř žádný odpor k průchodu elektronů, a proto deska Arduino čte maximální napětí 5V.
přidali jsme LED připojenou k výstupnímu PWM pin # 5, jako jsme to udělali, když jsme viděli LDR mít viditelný způsob (zamýšlená hříčka) detekovat dopad infračerveného světla na fotodiodu. Jak můžete pozorovat v použitém kódu (zobrazeném níže), provedli jsme intenzitu jasu LED množství infračerveného světla detekovaného fotodiodou: čím více infračerveného záření bylo přijato,tím jasnější bude LED.
programování:
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);
seriál.println (photodiode_value);
bright_LED = map (photodiode_value, 0, 1023, 0, 255);
analogWrite (5, bright_LED);
zpoždění(100);
}
|
vysvětlení programování:
nejprve pro získání hodnoty fotodiody definuji proměnnou celočíselného typu
1
|
int photodiode_value;
|
pak definuji proměnnou celočíselného typu pro hodnotu led “hodnota odeslaná na LED”
1
|
int bright_LED;
|
ve funkci void loop nejprve získám hodnotu pomocí funkce analogRead a tyto hodnoty uložím do proměnné photodiode_value a poté použiji serial.println pro tisk hodnot na sériovém monitoru
1
2
3
|
photodiode_value = analogRead(0);
seriál.println (photodiode_value);
|
jas LED je úměrný množství přijatého infračerveného světla
1
2
3
|
bright_LED = mapa (photodiode_value, 0, 1023, 0, 255);
analogWrite (5, bright_LED);
|
fototranzistor:
jiný typ světelných senzorů se kromě fotodiod nazývá fototranzistory, tj. Jeho činnost je následující: když světlo dopadne na jeho základnu, generuje proud, který přivádí tranzistor do vodivého stavu. Proto se fototranzistor rovná běžnému tranzistoru s jediným rozdílem, že základní proud Ib je závislý na přijatém světle. Ve skutečnosti existují fototranzistory, které mohou pracovat oběma způsoby: buď jako fototranzistory, nebo jako běžné tranzistory s daným specifickým základním proudem Ib.
fototranzistor je mnohem citlivější než fotodioda (kvůli vlivu zisku samotného tranzistoru), protože proudy, které lze získat fotodiodou, jsou skutečně omezené. Ve skutečnosti můžete fototranzistor chápat jako kombinaci fotodiody a zesilovače, takže pokud bychom chtěli postavit domácí fototranzistor, stačilo by přidat k tranzistoru společnou fotodiodu, spojující katodu fotodiody s kolektorem tranzistoru a anodu k základně. V této konfiguraci by proud dodávaný fotodiodou (který by cirkuloval směrem k základně tranzistoru)byl zesílen β krát.
v mnoha obvodech najdeme fototranzistor v krátké vzdálenosti od infračervené emitující LED kompatibilní vlnové délky. Tato dvojice komponent je užitečná pro detekci vložení překážky mezi nimi (kvůli přerušení světelného paprsku), a proto působí jako optici přepínačů. Mohou být použity v mnoha aplikacích, například v detektorech průchodu kreditní karty (v bankomatu) nebo zavedení papíru (v tiskárně) nebo jako tachometry. Otáčkoměr je zařízení, které počítá otáčky za minutu způsobené překážkou, která se otáčí kolem nebo čepelí (obvykle v důsledku provozu motoru); to znamená, že se používá k měření rychlosti otáčení objektu.
fototranzistor se skládá ze dvou svorek odpovídajících anodě a katodě LED a dvou svorek odpovídajících kolektoru a emitoru fototranzistoru NPN. Obecně budeme chtít připojit svorky LED k uzavřenému obvodu nepřetržitě napájenému (anoda ke zdroji, katoda k zemi), kolektorový terminál přepínače fotografií ke zdroji napájení a emitorový terminál přepínače fotografií k digitálnímu vstupu naší desky Arduino, abychom tak mohli detekovat vzhled proudu při příjmu osvětlení. Na druhou stranu, jak tento vstup Arduino desky jako emitor by měl být uzemněn přes stejný pull-down odpor, získat stabilnější hodnoty (typická hodnota 10 KΩ může fungovat, ale v závislosti na obvodu může být potřeba vyšší hodnoty).
pár infračervených LED a fototranzistorů najdeme také v některých součástech nazývaných “optočleny” nebo “optoizolátor”. Schematické znázornění je obvykle takto:
obecně řečeno, optočlen působí jako uzavřený obvod, když světlo přichází z LED do základny tranzistoru a otevře se, když je LED vypnutá. Jeho hlavní funkcí je řídit a současně izolovat dvě části obvodu, které normálně pracují při různých napětích(stejně jako běžný tranzistor, ale poněkud bezpečnějším způsobem). Fyzicky jsou to obvykle čipy, které nabízejí alespoň čtyři kolíky (stejné jako přepínače fotografií): dva odpovídající svorkám LED a dva odpovídající kolektoru a emitoru fototranzistoru(i když mohou mít ještě jeden kolík odpovídající základně, pokud je to povoleno, řídí intenzitu, která jím protéká, také standardně). Příklady optočlenů jsou 4n35 nebo CNY75, vyráběné různými společnostmi.
pár LED-fototranzistorů je také užitečný pro detekci objektů umístěných v malých vzdálenostech od něj. Budeme to studovat v části odpovídající snímačům vzdálenosti.
jak provést dálkové ovládání pomocí IR senzoru:
okamžitou praktickou užitečností dvojice infračerveného emitoru-přijímače (jako je LED a fotodioda / fototranzistor) umístěná v určité vzdálenosti je odesílání “zpráv” mezi nimi. To znamená, že protože infračervené světlo není viditelné (a proto se “neobtěžuje”), mohou být emitovány impulsy určité doby trvání a / nebo frekvence, které mohou být přijímány a zpracovávány několik metrů daleko, aniž by to “být si všiml.”Zařízení, které je přijímá, musí být naprogramováno tak, aby provádělo různé akce v závislosti na typu čtení pulsu.
ve skutečnosti jakékoli zařízení, které pracuje s “dálkovým ovládáním” funguje to podobným způsobem, protože v jeho přední části musím mít senzor infračervené senzory (nazývané také” IR “senzory, z angličtiny “infračervená”), které přijímají infračervené signály vysílané dálkovým ovladačem. A to, co je uvnitř, je v podstatě LED, která vysílá impulsy infračerveného světla podle určitého vzoru, který signalizuje zařízení pořadí, které má být provedeno: k dispozici je blikající kód pro zapnutí televizoru, další pro změnu kanálů atd.
výše jsme hovořili o “ir senzorech” a ne o fotodiodách / fototranzistorech, protože první jsou poněkud sofistikovanější. Konkrétně IR senzory nedetekují žádné infračervené světlo, ale pouze to, že (díky začlenění vnitřního pásmového propustného filtru a demodulátoru) je modulováno nosnou vlnou s frekvencí 38 KHz + 3 KHz. To v podstatě znamená, že budou čteny pouze signály, jejichž informace jsou přenášeny průběhem 38 KHz. To má zabránit tomu, aby se IR senzory “zbláznily”, když přijímají infračervené světlo, které existuje ze všech stran (slunce, elektrické světlo … tímto způsobem reagují pouze na velmi konkrétní již standardizované.
dalším rozdílem s fotodiodami / fototranzistory je to, že IR senzory nabízejí binární odezvu: pokud detekují IR signál 38 kHz, hodnota, kterou z nich můžete číst, je ve většině případů nízká (0 V), a pokud nezjistí nic, vaše čtení dává vysokou hodnotu (5 V). Toto chování se obvykle nazývá “aktivní nízká nebo “nízká aktivní”.
příklady IR senzorů mohou být TSOP32838 nebo GP1UX311QS. Jako funkce nejvýznamnější z nich mají, že jejich rozsah citlivosti je mezi vlnovými délkami 800nm až 1100nm s maximální odezvou při 940nm a potřebuje kolem 5V a 3 mA k provozu.
čip TSOP32838 nabízí tři kolíky: směrem k zadní polokulovité, levý kolík je digitální výstup poskytovaný senzorem, střední kolík musí být uzemněn a pravý kolík musí být uzemněn. připojte k napájení (mezi 2,5 V a 5,5 v).
Příklad2:
jak zapnout led s dálkovým ovládáním pomocí Arduina a TSOP32838 ir senzoru:
abychom otestovali jeho provoz, mohli bychom navrhnout obvod jako následující. Dělič napětí pro LED může být mezi 200 a 1000 ohmy.
myšlenka je krátce zapnout LED, když IR senzor detekuje infračervený signál. Ale pozor, není platný jen nějaký infračervený signál, ale pouze ten modulovaný na 38 KHz. Proto k testování tohoto obvodu nemůžeme použít žádnou infračervenou LED: musíme použít dálkový ovladač ovládacího knoflíku, který máme po ruce (z televize, DVD přehrávače, počítače atd.). Po načtení na desku Arduino skica představená na další, pokud ukážeme, že dálkové ovládání na IR senzor a stiskneme některá jeho tlačítka, měli bychom vidět, jak se LED rozsvítí. Tímto způsobem budeme používat IR senzor, jako by to byl spínač, který osvětluje LED při detekci tohoto signálu a vypne jej, když již není detekován.
výstup senzoru je připojen k digitálnímu vstupnímu pinu2 desky Arduino a LED je připojena k jeho digitálnímu výstupnímu pinu12):
programování:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
int irPin=2;
int ledPin=12;
void setup () {
pinMode (irPin, INPUT);
pinMode (ledPin, OUTPUT);
}
void loop () {
if (pulseIn (irPin, LOW) > 0) {
zpoždění (100);
digitalWrite (ledPin, HIGH);
zpoždění(200);
digitalWrite (ledPin, LOW);
}
}
|
vysvětlení programování:
nejprve definuji proměnnou celočíselného typu pro IR senzor a led
1
2
3
|
int irPin=2;
int ledPin=12;
|
ve funkci setup nastavuji IR senzor jako vstup a led jako výstup
1
2
3
|
pinMode (irPin,vstup);
pinMode (ledPin, výstup);
|
protože signál vysílaný senzorem je obvykle vysoký, po stisknutí tlačítka dálkového ovladače se změní na nízký. Funkce pulseIn () je pozastavit náčrtek, dokud není detekován signál nízká, jehož trvání nás opravdu nezajímá, ale logicky bude vždy větší než nula. Pokud tedy podmínka if znamená, že bylo stisknuto tlačítko na dálkovém ovladači
1
|
if (pulseIn (irPin, LOW) > 0) {
|
po detekci prvního nízkého signálu je nutné počkat určitou dobu (která bude záviset na konkrétním modelu dálkového ovládání), protože každé stisknutí tlačítka vytváří více kmitů mezi vysokými a nízkými hodnotami. Ačkoli fyzicky nemá co vidět, můžeme pochopit toto čekání, jako by to byl způsob, jak se vyhnout “odrazu” (fenomén studovaný, když zacházíme s tlačítky). Po uplynutí této čekací doby by se signál ze senzoru měl vrátit do klidového stavu (vysoká hodnota).
1
|
zpoždění(100);
|
udržujeme LED na několik milisekund. Během této doby nebude skica schopna detekovat další stisky kláves přicházející z dálkového ovladače. Mohli jsme také poslat zprávu “sériovému monitoru” oznamující pulsaci.
1
2
3
4
5
6
7
8
9
|
digitalWrite (ledPin,HIGH);
zpoždění(200);
digitalWrite (ledPin, LOW);
}
}
|
Příklad3:
jak přijímat příkaz dálkového ovládání na sériovém monitoru pomocí IR senzoru TSOP32838 s Arduino:
nejprve si stáhněte požadovanou knihovnu pro IR senzor
Arduino IRremote library
Schéma zapojení:
programování:
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.dekódovat (& výsledky) !=0) {
pokud (výsledek.decode_type = = NEC) {
Serial.tisk (“NEC: “);
} jinak pokud (výsledek.decode_type = = SONY) {
Serial.tisk (“SONY: “);
} jinak pokud (výsledek.decode_type = = RC5) {
Serial.tisk (“RC5: “);
} jinak pokud (výsledek.decode_type = = RC6) {
Serial.tisk (“RC6: “);
} jinak pokud (výsledek.decode_type = = UNKNOWN) {
Serial.tisk (“Neznámý: “);
}
seriál.println (výsledky.hodnota, HEX);
irrecv.pokračovat();
}
}
|
vysvětlení programování:
nejprve importuji požadovanou knihovnu
1
|
#zahrnout <IRremote.h>
|
poté definuji digitální vstupní pin pro přijímač
1
|
int receiverPin = 11;
|
pak vytvořím objekt s názvem “irrecv” typu IRrecv
1
|
IRrecv irrecv (receiverPin);
|
pak deklaruji proměnnou zvláštního typu “decode_results”.
1
|
výsledky decode_results;
|
pak spustím přijímač ve funkci void step
1
|
irrecv.enableIRIn();
|
pak ve void loop se podívám, jestli byl detekován nějaký modulovaný IR vzor. Pokud ano, přečetl jsem si ji a ponechám ji zcela ve speciální proměnné “výsledky”, ve formě hexadecimálního čísla
1
|
if (irrecv.dekódovat (& výsledky) !=0) {
|
pak se podívám na to, jaký druh obchodování je, pokud je z jednoho uznaného knihovnou
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
pokud (výsledek.decode_type = = NEC) {
Serial.tisk (“NEC: “);
} else if (výsledek.decode_type = = SONY) {
Serial.tisk (“SONY: “);
} jinak pokud (výsledek.decode_type = = RC5) {
Serial.tisk (“RC5: “);
} jinak pokud (výsledek.decode_type = = RC6) {
Serial.tisk (“RC6: “);
} jinak pokud (výsledek.decode_type = = UNKNOWN) {
Serial.tisk (“Neznámý:”);
}
|
a pak zobrazím přijatý vzor (v hexadecimálním formátu) na sériovém kanálu
1
|
seriál.println (výsledky.hodnota, HEX);
|
jakmile je vzor dekódován, znovu aktivujte poslouchá detekovat další možný vzor
1
2
3
|
irrecv.pokračovat();
}
|
Příklad4:
jak provést dálkové ovládání pomocí Tsop32838 ir senzoru s Arduino:
nejprve si stáhněte požadovanou knihovnu pro IR senzor
Arduino IRremote library
použijte stejný obvod, jaký jsem použil v předchozím projektu
Schéma zapojení:
programování:
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
|
#zahrnout <IRremote.h>
int receiverPin = 11;
IRrecv irrecv (receiverPin);
výsledky decode_results;
void setup () {
Serial.begin(9600);
irrecv.enableIRIn();
}
void loop () {
int i;
if (irrecv.dekódovat (& výsledky)!=0) {
akce ();
pro (i=0; i<2; I++) {
irrecv.pokračovat();
}
}
}
void action () {
přepínač (výsledek.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