fotodióda, fototranzisztor és IR érzékelő Arduino
Tartalomjegyzék
leírás:
fotodióda, fototranzisztor és IR érzékelő Arduino– val-a fotodióda olyan eszköz, amely fény hatására arányos (és mérhető) áramáramot hoz létre az áramkörben. Ily módon elkészíthetők fényérzékelőként szolgálnak, bár bár igaz, hogy vannak olyan fotodiódák, amelyek különösen érzékenyek a látható fényre, a túlnyomó többség különösen infravörös fényben van.
figyelembe kell venni, hogy annak ellenére, hogy az LDR-hez hasonló megjelenésű viselkedés van, nagyon fontos különbség ezektől (a többi hullámhosszra való érzékenység mellett) a sötétségtől a megvilágításig történő változásokra adott válaszidő, és fordítva, amely a fotodiódákban sokkal alacsonyabb.
mint a standard diódák, fotodiódák van egy anód és egy katód, de légy óvatos, annak érdekében, hogy működjön, ahogy szeretnénk, egy fotodióda mindig kell csatlakoztatni az áramkör fordított polaritású. Természetesen ugyanaz, mint a közös diódáknál, általában az anód hosszabb, mint a katód (ha azonos hosszúságúak, a katódot valamilyen módon meg kell jelölni).
belső működése a következő: amikor a fotodióda közvetlenül polarizálódik, a rá eső fénynek nincs észrevehető hatása, ezért mind a készülék úgy viselkedik, mint egy közös dióda. Ha fordított irányban polarizálódik, és nem éri el a fénysugárzás, akkor is úgy viselkedik, mint egy dióda normális, mivel az áramkörön átáramló elektronok nem rendelkeznek elegendő energiával ahhoz, hogy áthaladjanak rajta, így az áramkör nyitva marad. De abban a pillanatban, amikor a fotodióda fénysugárzást kap a hullámforma hossztartományában, az elektronok elegendő energiát kapnak ahhoz, hogy képesek legyenek “átugrani” a fordított fotodióda gátat és folytatni az utat.
Example1: hogyan lehet ellenőrizni a fotodióda viselkedését
viselkedésének teszteléséhez használhatjuk az alábbi áramkört. Ez az áramkör megegyezik azzal, amelyet az LDR-ekkel láttunk, helyettesítve ezeket egy fotodiódával (amelyet egy új szimbólum azonosít, amelyet eddig nem láttunk). A feszültségelosztó értéke a környezetben lévő fény (infravörös) mennyiségétől függ: a nagyobb ellenállások javítják az érzékenységet, ha csak egy fényforrás van, az alacsonyabb ellenállások pedig javítják, ha sok van (maga a nap vagy a lámpák infravörös források); a 100 K-os érték kezdetnek jó lehet. Azt is megjegyezzük, hogy ez a fotodióda katódja (a legrövidebb terminál, ne feledje), amely csatlakozik a tápegységhez.
ennek az áramkörnek a működése a következő: mindaddig, amíg a fotodióda nem érzékeli az infravörös fényt, az Arduino kártya analóg bemenetén keresztül (ebben az esetben a 0-as szám) 0V feszültséget mérünk, mert az áramkör nyitott áramkörként fog működni. Ahogy a fotodióda fényintenzitása növekszik, növekszik az áthaladó elektronok száma (vagyis az áram intenzitása). Ez azt jelenti, hogy mivel a “lehúzási” ellenállás rögzítve van, Ohm törvénye szerint az analóg bemeneti csapnál mért feszültség is növekedni fog, egészen addig a pillanatig, amikor sok fény fogadásakor a fotodióda alig okoz ellenállást az elektronok áthaladásával szemben, ezért az Arduino tábla maximális feszültsége 5 V.
hozzáadtunk egy LED-et, amely az 5. számú PWM kimeneti csaphoz csatlakozik, mint például akkor, amikor láttuk, hogy az LDR-ek látható módon (szójáték) érzékelik az infravörös fény előfordulását a fotodiódán. Amint az a használt kódban megfigyelhető (az alábbiakban látható), a fotodióda által észlelt infravörös fény mennyiségének LED-fényerősségét állítottuk elő: minél több infravörös sugárzás érkezik, annál világosabb lesz a LED.
programozás:
1
2
3
4
5
6
7
8
9
10
11
12
|
int photodiode_value;
int bright_LED;
void beállítás(void) {
Soros.kezdés(9600);
}
void loop (void) {
photodiode_value = analogRead(0);
sorozat.println (photodiode_value);
bright_LED = map(photodiode_value), 0, 1023, 0, 255);
analogWrite (5, bright_LED);
késleltetés(100);
}
|
programozási magyarázat:
először is a fotodióda értékének fogadásához egész típusú változót definiálok
1
|
int photodiode_érték;
|
ezután meghatározom az egész típusú változót a led értékhez “a LED-nek küldött érték”
1
|
int bright_LED;
|
a void loop függvényben először az analogRead függvény segítségével kapom meg az értéket, majd ezeket az értékeket a photodiode_value változóban tárolom, majd soros.println értékek nyomtatása soros monitoron
1
2
3
|
photodiode_value = analogRead(0);
sorozat.println (photodiode_value);
|
a LED fényereje arányos a kapott infravörös fény mennyiségével
1
2
3
|
bright_LED = térkép (photodiode_value, 0, 1023, 0, 255);
analogWrite (5, bright_LED);
|
fototranzisztor:
a fotodiódák mellett egy másik típusú fényérzékelőt fototranzisztoroknak, azaz fényérzékeny tranzisztoroknak (általában infravörös) is neveznek. Működése a következő: amikor a fény az alapjára esik, az olyan áramot generál, amely a tranzisztort vezető állapotba hozza. Ezért a fototranzisztor megegyezik egy közös tranzisztorral, azzal az egyetlen különbséggel, hogy az IB alapáram a vett fénytől függ. Valójában vannak olyan fototranzisztorok, amelyek mindkét módon működhetnek: akár fototranzisztorokként, akár közös tranzisztorokként egy adott ib alapárammal.
a fototranzisztor sokkal érzékenyebb, mint a fotodióda (maga a tranzisztor nyereségének hatása miatt), mivel a fotodiódával elérhető áramok valóban korlátozottak. Valójában megértheti a fototranzisztort a fotodióda és az erősítő kombinációjaként, tehát valójában, ha házi fototranzisztort szeretnénk építeni, elegendő lenne egy közös tranzisztorhoz hozzáadni egy fotodiódát, amely összeköti a fotodióda katódját a tranzisztor kollektorával és az anódot az alaphoz. Ebben a konfigurációban a fotodióda által leadott áram (amely a tranzisztor alapja felé keringene) felerősödne.
sok áramkörben találunk egy fototranzisztort rövid távolságra egy kompatibilis hullámhosszú infravörös kibocsátó LED-től. Ez a pár komponens hasznos a köztük lévő akadály interpozíciójának észlelésére (a fénysugár megszakadása miatt), ezért kapcsolóként működik optikusok. Számos alkalmazásban használhatók, például a hitelkártya átadásának detektoraiban (ATM-en) vagy a papír bevezetésében (nyomtatóban) vagy tachométerként, többek között. A fordulatszámmérő olyan eszköz, amely számolja az akadály által a kerék vagy a penge alá eső percenkénti fordulatokat, amelyek forognak (általában egy motor működése miatt); vagyis egy tárgy forgási sebességének mérésére szolgál.
a fototranzisztor két kivezetésből áll, amelyek megfelelnek a LED anódjának és katódjának, valamint két kivezetésből, amelyek megfelelnek az NPN fototranzisztor kollektorának és emitterének. Általánosságban elmondható, hogy a LED kivezetéseit folyamatosan táplált zárt áramkörhöz (anód a forráshoz, katód a földhöz), a fotókapcsoló kollektor kivezetéséhez áramforráshoz, a fotókapcsoló emitter kivezetéséhez pedig Arduino kártyánk digitális bemenetéhez szeretnénk csatlakoztatni, hogy így észlelhessük az áram megjelenését, amikor világítás érkezik. Másrészt, mind ez Arduino tábla bemenet, mint az emitter kell földelni, hogy ugyanazon a lehúzó ellenállás, így stabilabb leolvasott (egy tipikus értéke 10 K 6 működhet, de attól függően, hogy az áramkör lehet szükség magasabb értékek).
az infravörös LED plusz fototranzisztor pár megtalálható néhány “optocsatoló” vagy “optoizolátor”nevű komponensben is. A sematikus ábrázolás általában ilyen:
Általánosságban elmondható, hogy az optocsatoló zárt áramkörként működik, amikor a fény a LED-ből a tranzisztor alapjához érkezik, és nyitva van, amikor a LED ki van kapcsolva. Fő feladata az áramkör két részének vezérlése és ugyanakkor elkülönítése, amelyek általában különböző feszültségeken működnek (csakúgy, mint egy közös tranzisztor, de valamivel biztonságosabb módon). Fizikailag általában olyan chipek, amelyek legalább négy csapot kínálnak (ugyanaz, mint a fotókapcsolók): kettő a LED kivezetéseinek felel meg, kettő pedig a fototranzisztor kollektorának és emitterének felel meg (bár lehet, hogy van még egy, az alapnak megfelelő csap, ha megengedett, szabályozza az azon átáramló intenzitást is). Az optocsatolókra példa a 4N35 vagy a CNY75, amelyeket különböző vállalatok gyártanak.
a LED-fototranzisztor pár hasznos a kis távolságra lévő tárgyak észlelésére is. Ezt a távolságérzékelőknek megfelelő szakaszban fogjuk tanulmányozni.
Hogyan készítsünk távirányítót infravörös érzékelővel:
egy bizonyos távolságban elhelyezkedő infravörös emitter-vevő pár (például LED és fotodióda / fototranzisztor) azonnali gyakorlati haszna az “üzenetek” küldése közöttük. Ez azt jelenti, hogy mivel az infravörös fény nem látható (és ezért nem “bosszantja”), bizonyos időtartamú impulzusok bocsáthatók ki és / vagy olyan frekvenciák, amelyek több méterre is fogadhatók és feldolgozhatók anélkül, hogy “észrevennék”.”Az őket fogadó eszközt ezután be kell programozni, hogy az impulzus típusától függően különböző műveleteket hajtson végre.
valójában minden olyan eszköz, amely a ” távirányító “hasonló módon működik, mert az elülső részében érzékelővel kell rendelkeznem infravörös érzékelők (más néven” IR “érzékelők, az angol” infravörös”), amelyek fogadják a távirányító által kibocsátott infravörös jeleket. És ami ebben van, az alapvetően egy LED, amely infravörös fényimpulzusokat bocsát ki egy bizonyos mintát követve, amely jelzi a készüléknek a végrehajtandó parancsot: van egy villogó kód a TV bekapcsolásához, egy másik a csatornák megváltoztatásához stb.
fent az “IR érzékelőkről” beszéltünk, nem pedig a fotodiódákról / fototranzisztorokról, mert az előbbiek valamivel kifinomultabbak. Pontosabban, az infravörös érzékelők nem érzékelnek infravörös fényt, csak azt, hogy (egy belső sáváteresztő szűrő és egy demodulátor beépítésének köszönhetően) egy 38 KHz + 3 KHz frekvenciájú vivőhullám modulálja. Ez alapvetően azt jelenti, hogy csak azok a jelek kerülnek olvasásra, amelyek információit egy 38 KHz-es hullámforma hordozza. Ennek célja annak megakadályozása, hogy az infravörös érzékelők “megőrüljenek”, amikor minden oldalról érkező infravörös fényt kapnak (nap, elektromos fény … ily módon csak a már szabványosított nagyon konkrétokra reagálnak.
egy másik különbség a fotodiódákkal / fototranzisztorokkal szemben az, hogy az IR érzékelők bináris választ adnak: ha 38 KHz-es IR jelet észlelnek, akkor a legtöbb esetben alacsony az érték (0 V), és ha semmit sem észlelnek, akkor az olvasás magas értéket (5 V) ad. Ezt a viselkedést általában “aktív alacsonynak” vagy “alacsony aktívnak” nevezik.
az infravörös érzékelők példái lehetnek a TSOP32838 vagy a GP1UX311QS. Az As jellemzői a legszembetűnőbbek, hogy érzékenységi tartományuk 800 nm és 1100 nm közötti hullámhossz között van, maximális válasz 940 nm-en, és körülbelül 5V és 3 mA szükséges a működéshez.
a TSOP32838 chip három csapot kínál: a hátsó félgömb alakú, a bal szélső csap az érzékelő által biztosított digitális kimenet, a középső csapot földelni kell, a jobb szélső csapot pedig földelni kell. csatlakoztassa a tápegységhez (2,5 V és 5,5 V között).
Példa2:
hogyan lehet bekapcsolni a LED-et távirányítóval az Arduino és a TSOP32838 IR érzékelő segítségével:
működésének teszteléséhez tervezhetünk egy olyan áramkört, mint a következő. A LED feszültségelosztója 200-1000 Ohm lehet.
az ötlet az, hogy röviden bekapcsolja a LED-et, amikor az IR érzékelő infravörös jelet észlel. De légy óvatos, nem csak az infravörös jel érvényes, hanem csak a 38 KHz-en modulált jel. Ezért, hogy teszteljék ezt az áramkört, nem tudjuk használni bármilyen infravörös LED: használnunk kell egy vezérlőgomb távirányítót, amely kéznél van (televízióból, DVD-lejátszóból, számítógépről stb.). Miután betöltötte az Arduino táblára a következő vázlatot, ha a távirányítót az infravörös érzékelőre mutatjuk, és megnyomjuk annak néhány gombját, látnunk kell, hogy a LED világít. Ily módon az infravörös érzékelőt úgy fogjuk használni, mintha egy kapcsoló lenne, amely megvilágítja a LED-et, miközben észleli a jelet, és kikapcsolja, amikor már nem érzékeli.
az érzékelő kimenete az Arduino kártya digitális bemeneti pin2-jéhez, a LED pedig a digitális kimeneti PIN-jéhez van csatlakoztatva12):
programozás:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
int irPin=2;
int ledPin=12;
érvénytelen beállítás () {
pinMode (irPin, bemenet);
pinMode (ledPin,kimenet);
}
void hurok () {
if (pulseIn(irPin, alacsony) > 0) {
késés(100);
digitalWrite (ledPin,magas);
késleltetés(200);
digitalWrite (ledPin,alacsony);
}
}
|
programozási magyarázat:
először meghatározom az egész típusú változót az IR érzékelőhöz és a led-hez
1
2
3
|
int irPin=2;
int ledPin=12;
|
a beállítási funkcióban az IR érzékelőt bemenetként, a led-et pedig kimenetként állítom be
1
2
3
|
pinMode (irPin, bemenet);
pinMode (ledPin, kimenet);
|
mivel az érzékelő által kibocsátott jel általában magas, a távirányító gombjának megnyomásakor alacsonyra vált. Mi a pulseIn () függvény a vázlat szüneteltetése, amíg alacsony jelet nem észlelünk, amelynek időtartama nem igazán érdekel minket, de logikusan mindig nagyobb lesz, mint nulla. Ezért, ha az if állapota azt jelenti, hogy megnyomtak egy gombot a távirányítón
1
|
if (pulseIn (irPin, alacsony) > 0) {
|
az első alacsony jel észlelése után meg kell várni egy bizonyos időt (amely az adott távirányító modelljétől függ), mivel minden gombnyomás többszörös oszcillációt eredményez a magas és az alacsony értékek között. Bár fizikailag nincs mit látnia, megérthetjük ezt a várakozást, mintha ez lenne a “visszapattanás” elkerülésének módja (a nyomógombok kezelésekor vizsgált jelenség). Miután ez a várakozási idő letelt, az érzékelő jelének vissza kellett volna térnie nyugalmi állapotába (nagy érték).
1
|
késés(100);
|
néhány milliszekundumig bekapcsolva tartjuk a LED-et. Ez idő alatt a vázlat nem fogja észlelni a távirányítóból érkező egyéb billentyűleütéseket. Küldhettünk volna egy üzenetet a” Soros monitornak ” is, amely értesíti a pulzációt.
1
2
3
4
5
6
7
8
9
|
digitalWrite (ledPin,magas);
késleltetés(200);
digitalWrite (ledPin,alacsony);
}
}
|
Példa3:
hogyan kell fogadni a távirányító parancsot a Soros monitor segítségével TSOP32838 IR érzékelő Arduino:
először töltse le a szükséges könyvtár IR érzékelő
Arduino IRremote könyvtár
kapcsolási rajz:
programozás:
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(){
Soros.kezdés(9600);
irrecv.enableIRIn();
}
void loop() {
ha (irrecv.dekódolás (&eredmények)!=0) {
if (eredmények.decode_type = = NEC) {
Soros.nyomtatás (“NEC: “);
} else if (eredmények.decode_type = = SONY) {
Soros.nyomtatás (“SONY: “);
} else if (eredmények.decode_type = = RC5) {
Soros.nyomtatás (“RC5: “);
} else if (eredmények.decode_type = = RC6) {
Soros.nyomtatás (“RC6: “);
} else if (eredmények.decode_type = = ismeretlen) {
Soros.nyomtatás (“ismeretlen: “);
}
sorozat.println (eredmények.érték, HEX);
irrecv.folytatás();
}
}
|
programozási magyarázat:
először importálom a szükséges könyvtárat
1
|
#tartalmazza < IRremote.h>
|
ezután meghatározom a vevő digitális bemeneti csapját
1
|
int receiverPin = 11;
|
ezután létrehozok egy irrecv típusú “irrecv” nevű objektumot
1
|
IRrecv irrecv (receiverPin);
|
ezután kijelentem egy speciális típusú változót, “decode_results”.
1
|
decode_eredmény eredmények;
|
ezután elindítom a Vevőt a void step funkcióban
1
|
irrecv.enableIRIn();
|
ezután void loop nézek, hogy ha bármilyen Modulált IR mintát észleltek. Ha igen, elolvasom, és teljes egészében a “results” speciális változóban tartom, hexadecimális szám formában
1
|
if (irrecv.dekódolás (&eredmények)!=0) {
|
Aztán megnézem, hogy milyen kereskedési minta van, ha a könyvtár által elismert
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
if (eredmények.decode_type = = NEC) {
Soros.nyomtatás (“NEC: “);
} else if (eredmények.decode_type = = SONY) {
Soros.nyomtatás (“SONY: “);
} else if (eredmények.decode_type = = RC5) {
Soros.nyomtatás (“RC5: “);
} else if (eredmények.decode_type = = RC6) {
Soros.nyomtatás (“RC6: “);
} else if (eredmények.decode_type = = ismeretlen) {
Soros.nyomtatás (“ismeretlen: “);
}
|
ezután megmutatom a kapott mintát (hexadecimális formátumban) a Soros csatornán
1
|
sorozat.println (eredmények.érték, HEX);
|
a minta dekódolása után aktiválja újra a hallgatókat a következő lehetséges minta észleléséhez
1
2
3
|
irrecv.folytatás();
}
|
Example4:
hogyan lehet távirányító segítségével TSOP32838 IR érzékelő Arduino:
először töltse le a szükséges könyvtár IR érzékelő
Arduino IRremote könyvtár
használja ugyanazt az áramkört, mint én használt az előző projekt
kapcsolási rajz:
programozás:
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
|
#tartalmazza < IRremote.h>
int receiverPin = 11;
IRrecv irrecv(receiverPin);
decode_results eredmények;
void setup(){
Soros.kezdés(9600);
irrecv.enableIRIn();
}
void loop(){
int i;
if (irrecv.dekódolás (&eredmények)!=0) {
művelet ();
(i=0; i< 2; I++) {
irrecv.folytatás();
}
}
}
void action() {
kapcsoló (eredmények.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