fotodiodi, Fototransistori ja IR-anturi, jossa Arduino

Sisällysluettelo

kuvaus:

fotodiodi, fototransistori ja IR-anturi Arduino – a-fotodiodi on laite, joka valon kiihottamana tuottaa piirissä suhteellisen virtavirran (ja mitattavissa). Tällä tavoin ne voidaan saada toimimaan valoantureina, vaikka on totta, että on olemassa fotodiodeja, jotka ovat erityisen herkkiä näkyvälle valolle, valtaosa on erityisesti infrapunavalossa.

on otettava huomioon, että vaikka niiden käyttäytyminen muistuttaa LDRs: ää, erittäin tärkeä ero näistä (lisäksi herkkyys muille aallonpituuksille) on vasteaika muutoksiin pimeydestä valaistukseen ja päinvastoin, joka fotodiodeissa on paljon alhaisempi.

kuten standardidiodeilla, fotodiodeilla on anodi ja katodi, mutta ole varovainen, jotta se toimisi haluamallamme tavalla, fotodiodi on aina kytkettävä piiriin käänteispolaarisuudella. Tietenkin sama kuin diodien yhteinen, yleensä anodi on pidempi kuin katodi (jos ne ovat yhtä pitkiä, katodi on merkittävä jollakin tavalla).

sen sisäinen toiminta on seuraava: kun fotodiodi polarisoituu suorassa, siihen osuvalla valolla ei ole havaittavaa vaikutusta ja siksi molemmat laitteet käyttäytyvät tavallisen diodin tavoin. Kun polarisoituu käänteisesti eikä mikään valosäteily saavuta sitä, se käyttäytyy myös diodin tavoin normaalisti, koska piirin läpi virtaavilla elektroneilla ei ole tarpeeksi energiaa sen läpi kulkemiseen, joten piiri pysyy avoimena. Mutta sillä hetkellä, kun fotodiodi vastaanottaa valosäteilyä aaltomuodon pituusalueella, elektronit saavat tarpeeksi energiaa voidakseen” hypätä ” käänteiseen fotodiodin esteeseen ja jatkaa matkaasi.

Esimerkki 1: Kuinka tarkistaa fotodiodin käyttäytyminen

testataksemme sen käyttäytymistä, Voimme käyttää alla olevaa piiriä. Tämä piiri on identtinen sen kanssa, jonka näimme LDR: ien kanssa, korvaamalla ne fotodiodilla (joka tunnistetaan uudella symbolilla, jota emme olleet nähneet tähän asti). Jännitteenjakajan arvo riippuu ympäristössä olevan valon määrästä (infrapuna): korkeammat vastukset parantavat herkkyyttä, kun on vain yksi valonlähde ja pienemmät vastukset parantavat sitä, kun on monia (aurinko itse tai lamput ovat infrapunalähteitä); arvo 100 KΩ voi olla hieno aloittaa. Olkaamme myös huomata, että se on katodi fotodiodi (Lyhin terminaali, muista) joka yhdistää virtalähteeseen.

tämän piirin toiminta on seuraava: niin kauan kuin fotodiodi ei havaitse infrapunavaloa, Arduino-levyn (tässä tapauksessa numero 0) analogisen tulon kautta mitataan 0V: n jännite, koska piiri toimii avattuna piirinä. Valon voimakkuuden kasvaessa fotodiodilla sen läpi kulkevien elektronien määrä (eli Virran voimakkuus) kasvaa. Tämä tarkoittaa sitä, että, koska” vedä alas ” vastus on kiinteä, Ohmin lain jännite mitataan analoginen tulonappi kasvaa myös, jopa hetki, jolloin vastaanottaessaan paljon valoa fotodiodi ei aiheuta tuskin mitään vastus kulkua elektronien ja siksi Arduino aluksella lukee suurin jännite 5V.

fotodiodi, fototransistori, IR-anturi

olemme lisänneet LED kytketty PWM lähtö pin # 5 kuten teimme, kun näimme LDRs on näkyvä tapa (pun tarkoitettu) havaita infrapunavalon fotodiodi. Kuten voit havaita käytetyn koodin (alla), olemme tehneet valodiodin havaitseman infrapunavalon määrän LED-kirkkauden intensiteetin: mitä enemmän infrapunasäteilyä vastaanotetaan, sitä kirkkaampi LED on.

ohjelmasuunnittelu:

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);
sarjamurhaaja.println (photodiode_value);
bright_LED = map(photodiode_value, 0, 1023, 0, 255);
analogWrite (5, bright_LED);
delay(100);
}

Ohjelmointiselitys:

ensinnäkin fotodiodin arvon vastaanottamiseksi I määrittelee kokonaislukutyyppimuuttujan

1
int photodiode_value;

sitten määrittelen kokonaisluku tyyppi muuttuja led arvo “arvo lähetetään LED”

1
int bright_LED;

void loop-funktiossa vastaanotetaan ensin arvo analogRead-funktiolla ja tallennetaan nämä arvot photodiode_value-muuttujaan ja käytetään sitten sarjamuuttujaa.println tulostaaksesi arvot sarjamonitorilla

1
2
3

photodiode_value = analogRead(0);
sarjamurhaaja.println(photodiode_value);

ledin kirkkaus on verrannollinen vastaanotetun infrapunavalon määrään

1
2
3

bright_LED = kartta(photodiode_value, 0, 1023, 0, 255);
analogWrite (5, bright_LED);

fototransistori:

toista valosensorityyppiä fotodiodien lisäksi kutsutaan fototransistoreiksi eli valoherkiksi transistoreiksi (yleensä myös infrapunatransistoreiksi). Sen toiminta on seuraava: Kun valo putoaa sen pohjaan, se tuottaa virran, joka tuo transistorin johtavaan tilaan. Siksi fototransistori on yhtä suuri kuin tavallinen transistori, jonka ainoa ero on, että kantavirta Ib on riippuvainen vastaanotetusta valosta. Itse asiassa on olemassa fototransistoreja, jotka voivat toimia molemmilla tavoilla: joko fototransistoreina tai tavallisina transistoreina, joilla on tietty perusvirta Ib.

fototransistori on paljon herkempi kuin fotodiodi (johtuen itse transistorin vahvistuksen vaikutuksesta), sillä fotodiodilla saatavat virrat ovat todella rajalliset. Itse asiassa, voit ymmärtää fototransistori yhdistelmänä fotodiodi ja vahvistin, joten oikeastaan jos haluamme rakentaa kotitekoinen fototransistori, se riittäisi lisätä transistori yhteinen fotodiodi, liittämällä katodi fotodiodi keräilijä transistori ja anodi pohjaan. Tässä kokoonpanossa fotodiodin toimittama virta (joka kiertäisi transistorin pohjaa kohti) vahvistettaisiin β-kertaa.

monissa piireissä voimme löytää fototransistori lyhyen matkan päässä infrapuna emitting LED yhteensopivan aallonpituuden. Tämä pari komponenttia on hyödyllinen havaitsemaan niiden välisen esteen (johtuen valonsäteen keskeytymisestä) ja siksi toimivat kytkiminä optikot. Niitä voidaan käyttää monissa sovelluksissa, kuten ilmaisimissa, jotka osoittavat luottokortin kulun (pankkiautomaatilla) tai paperin käyttöönoton (tulostimessa), tai takometreinä, monien muiden joukossa. Kierroslukumittari on laite, joka laskee kierrokset minuutissa, jonka esteen alainen pyörä tai terä pyörii (yleensä moottorin toiminnan vuoksi); se on, että sitä käytetään mittaamaan kohteen pyörimisnopeutta.

fototransistori koostuu kahdesta päätteestä, jotka vastaavat LED-valon anodia ja katodia, sekä kahdesta liittimestä, jotka vastaavat NPN-fototransistorin kerääjää ja lähettäjää. Yleensä haluamme liittää päätteet LED suljetun piirin jatkuvasti powered (anodi lähde, katodi maahan), keräilijä terminaali valokytkin virtalähteeseen ja lähettimen valokytkin digitaalituloon meidän Arduino aluksella, pystyä havaitsemaan siten ulkonäkö nykyisen, kun valaistus on vastaanotettu. Toisaalta, sekä tämä Arduino hallituksen tulo kuin päästäjä olisi maadoitettu läpi saman vetää alas vastus, saada vakaampi lukemat (tyypillinen arvo 10 KΩ voi toimia, mutta riippuen piiri se voi olla tarpeen korkeammat arvot).

infrapuna-LED – valotransistoripari löytyy myös joistakin komponenteista, joita kutsutaan” optouplereiksi “tai”optoisolaattoriksi”. Kaavamainen esitys on yleensä tällainen:

fotodiodi, fototransistori, IR-anturi

yleisesti ottaen optoupleri toimii suljettuna virtapiirinä, kun valo tulee ledistä transistorin pohjaan ja avautuu, kun LED on pois päältä. Sen päätehtävä on ohjata ja samalla eristää kaksi osaa piiri, että ne normaalisti toimivat eri jännitteillä (aivan kuten yhteinen transistori olisi, mutta hieman turvallisempi tapa). Fyysisesti ne ovat yleensä pelimerkkejä, jotka tarjoavat vähintään neljä nastat (sama kuin valokytkimet): kaksi vastaa liittimiin LED ja kaksi vastaa keräilijä ja emitteri fototransistori (vaikka ne voivat olla yksi tappi vastaa pohja, jos sallitaan control intensiteetti, joka virtaa sen läpi myös vakiona). Esimerkkejä optouplereista ovat eri yritysten valmistamat 4N35 tai CNY75.

LED-fototransistoripari on hyödyllinen myös pienten etäisyyksien päässä sijaitsevien kohteiden havaitsemiseen. Tutkimme asiaa etäisyysantureita vastaavassa osiossa.

Kuinka tehdä kauko-ohjaus ir-anturilla:

Infrapunalähettimen ja vastaanottimen parin (kuten LED ja fotodiodi / fototransistori) välitön käytännön hyöty tietyllä etäisyydellä on niiden välinen “viestien” lähettäminen. Toisin sanoen, Koska infrapunavalo ei ole näkyvissä (ja siksi se ei “ärsytä”), tietyn keston pulsseja voidaan lähettää ja / tai taajuutta, joka voidaan vastaanottaa ja käsitellä useiden metrien päässä ilman, että se “huomataan.”Laite, joka vastaanottaa ne, on sitten ohjelmoitava suorittamaan erilaisia toimia riippuen pulssinlukutyypistä.

itse asiassa jokainen laite, joka toimii “kaukosäätimellä”, toimii samalla tavalla, koska sen etuosassa on oltava anturi infrapuna-anturit (kutsutaan myös” IR “- antureiksi, englannin sanasta” infra-red”), jotka vastaanottavat kaukosäätimen lähettämät infrapunasignaalit. Tämän sisällä on LED, joka lähettää infrapunavaloa tietyn kaavan mukaan. se lähettää laitteelle tehtävän tilauksen.: on räpäytyskoodi, jolla televisio kytketään päälle, toinen vaihtaa kanavaa jne.

edellä puhuttiin “IR-sensoreista” eikä fotodiodeista / fototransistoreista, koska edelliset ovat hieman kehittyneempiä. Erityisesti IR-anturit eivät havaitse infrapunavaloa, vaan ainoastaan sen, että (kiitos sisäisen kaistanpäästösuodattimen ja demodulaattorin sisällyttämisen) moduloidaan kantoaallolla, jonka taajuus on 38 KHz + 3 KHz. Tämä tarkoittaa käytännössä sitä, että vain signaalit, joiden informaatiota 38 KHz: n aaltomuoto kuljettaa, luetaan. Tämä on estää IR anturit mennä “hullu”, kun ne vastaanottavat infrapunavaloa, joka on olemassa tulossa joka puolelta (aurinko, sähkövalo … tällä tavalla ne reagoivat vain hyvin konkreettisia jo standardoitu.

toinen ero fotodiodien / fototransistorien kanssa on se, että IR-anturit tarjoavat binäärivasteen: jos ne havaitsevat 38 KHz: n IR-signaalin, niistä voidaan useimmissa tapauksissa lukea vain vähän (0 V), ja jos ne eivät havaitse mitään, lukemasi antaa suuren arvon (5 V). Tätä käyttäytymistä kutsutaan yleensä nimellä “Active low, tai “low-active”.

esimerkkejä IR-antureista voi olla TSOP32838 tai gp1ux311qs. Ominaisuuksina näkyvin niistä on, että niiden herkkyys alue on aallonpituuksien välillä 800nm 1100nm suurin vastaus 940nm ja tarvitsevat noin 5V ja 3 mA toimimaan.

TSOP32838-sirussa on kolme pinniä: selkä puolipallon suuntaisesti, vasemmanpuoleisin tappi on anturin antama digitaalinen ulostulo, keskimmäinen tappi on maadoitettava ja oikeanpuoleisin tappi maadoitettava. liitä virtalähde (välillä 2,5 V ja 5,5 V).

Esimerkki 2:

miten käynnistää led kaukosäätimellä Arduino ja, TSOP32838 IR-anturi:

sen toiminnan testaamiseksi voisimme suunnitella seuraavan kaltaisen piirin. LED-valaisimen jännitteenjakaja voi olla 200-1000 ohmia.

fotodiodi, fototransistori, IR-anturi

ideana on kytkeä LED hetkeksi päälle, kun IR-anturi havaitsee infrapunasignaalin. Mutta ole varovainen, ei mikä tahansa infrapunasignaali on voimassa, mutta vain se moduloitu 38 KHz. Siksi testata tämän piirin, Emme voi käyttää infrapuna LED: meidän on käytettävä control nuppi kaukosäädin, että meillä on käsillä(televisiosta, DVD-soitin, tietokone, jne.). Kun ladattu Arduino aluksella luonnos esitetään seuraavaksi, jos osoitamme, että kaukosäädin on IR-anturi ja paina joitakin sen painikkeita, meidän pitäisi nähdä LED-valo. Tällä tavoin käytämme IR-anturia ikään kuin se olisi kytkin, joka valaisee LED-valon havaitessaan kyseisen signaalin ja sammuttaa sen, kun sitä ei enää havaita.

anturin ulostulo on kytketty Arduino-levyn digitaalituloon pin2 ja LED on kytketty sen digitaaliseen ulostuloon pin12):

ohjelmasuunnittelu:

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) {
viive (100);
digitalWrite (ledPin,korkea);
delay(200);
digitalWrite(ledPin, LOW);
}
}

Ohjelmointiselitys:

ensin I määrittelee kokonaislukutyyppimuuttujan IR-anturille ja ledille

1
2
3

int irPin=2;
int ledPin=12;

asetustoiminnossa asetan IR-anturin tuloksi ja led-lähdöksi

1
2
3

pinMode (irPin,INPUT);
pinMode(ledPin, OUTPUT);

koska anturin lähettämä signaali on normaalisti korkea, kaukosäätimen nappia painettaessa se muuttuu matalaksi. Pulseinin () funktio on keskeyttää sketsi, kunnes havaitaan matala signaali, jonka kesto ei varsinaisesti kiinnosta meitä, mutta loogisesti se on aina suurempi kuin nolla. Jos siis Ifin tila tarkoittaa, että kaukosäätimen nappia painettiin

1
if (pulseiini (irPin, matala) > 0) {

on tarpeen odottaa tietyn ajan (joka riippuu tietyn kaukosäätimen malli) havaitsemisen jälkeen ensimmäisen matalan signaalin, koska jokainen painallus tuottaa useita heilahteluja välillä korkea ja matala arvot. Vaikka fyysisesti hänellä ei ole mitään nähtävää, voimme ymmärtää tämän odottamisen ikään kuin se olisi tapa välttää “pomppu” (ilmiö tutkittu, kun käsittelemme painonappeja). Kun tämä odotusaika on kulunut, anturin signaalin olisi pitänyt palata lepotilaansa (korkea arvo).

1
viive(100);

pidämme lediä päällä muutaman millisekunnin. Tänä aikana piirros ei pysty havaitsemaan muita kaukosäätimestä tulevia näppäilyjä. Olisimme myös voineet lähettää viestin “Sarjamonitorille” ilmoittaen sykäyksestä.

1
2
3
4
5
6
7
8
9

digitalWrite (ledPin,HIGH);
delay(200);
digitalWrite(ledPin, LOW);
}
}

esimerkki 3:

kuinka saada kauko-ohjauskomento sarjamonitorille käyttäen TSOP32838 IR-anturia Arduinon kanssa:

Ensinnäkin lataa tarvittava kirjasto IR-anturia varten

Arduinon IRremote library

piirikaavio:

fotodiodi, fototransistori, IR-anturi

ohjelmointi:

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.enableiriini();
}
void loop () {
if (irrecv.decode (& tulokset)!=0) {
if (tulokset.decode_type == nec) {
Serial.print (“NEC: “);
} else if (tulokset.decode_type = = SONY) {
Serial.print (“SONY: “);
} else if (tulokset.decode_type == RC5) {
Serial.print(“RC5: “);
} else if (tulokset.decode_type == RC6) {
Serial.print (“RC6: “);
} else if (tulokset.decode_type = = UNKNOWN) {
Serial.print (“tuntematon: “);
}
sarjamurhaaja.println(tuloksia.arvo, HEX);
irrecv.jatka();
}
}

Ohjelmointiselitys:

ensin tuon tarvittavan kirjaston

1
#sisältää < IRremote.h>

sitten määrittelen digitaalisen tulotapin vastaanottimelle

1
int receverpin = 11;

sitten luon objektin nimeltä “irrecv” tyyppi IRrecv

1
IRrecv irrecv (konkurssipesä);

sitten julistan erityisen muuttujan, “decode_results”.

1
decode_tulokset tulokset;

Sitten käynnistän vastaanottimen tyhjässä askelfunktiossa

1
irrecv.enableiriini();

sitten void loop katson onko moduloitu IR kuvio on havaittu. Jos näin on, luen sen ja pidän sen kokonaan erityismuuttujassa “tulokset”, heksadesimaalilukumuodossa

1
if(täsmennyssivudecode (& tulokset)!=0) {

sitten katson, millainen kaupankäyntikuvio se on, jos se on kirjaston tunnistamasta

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

if (tulokset.decode_type == nec) {
Serial.print (‘NEC:’);
} else if (tulokset.decode_type = = SONY) {
Serial.print (“SONY: “);
} else if (tulokset.decode_type == RC5) {
Serial.print(“RC5: “);
} else if (tulokset.decode_type == RC6) {
Serial.print (“RC6: “);
} else if (tulokset.decode_type = = UNKNOWN) {
Serial.tulosta (‘tuntematon:’);
}

ja sitten näytän vastaanotetun kuvion (heksadesimaalisessa muodossa) sarjatason kanavalla

1
sarjamurhaaja.println(tuloksia.arvo, HEX);

kun kuvio on dekoodattu, aktivoi kuuntelut uudelleen havaitaksesi seuraavan mahdollisen kuvion

1
2
3

irrecv.jatka();
}

Example4:

miten tehdä kaukosäädin TSOP32838 IR-anturilla Arduinon kanssa:

Ensinnäkin lataa tarvittava kirjasto IR-anturia varten

Arduinon IRremote-kirjasto

käytä samaa piiriä kuin edellisessä projektissa

piirikaavio:

fotodiodi, fototransistori, IR-anturi

ohjelmointi:

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

#sisältää < IRremote.h>
int receiverPin = 11;
IRrecv irrecv(receiverPin);
decode_results results;
void setup(){
Serial.begin(9600);
irrecv.enableiriini();
}
void loop () {
int i;
if (irrecv.decode (& tulokset)!=0) {
action ();
for (i=0; i<2; i++) {
irrecv.jatka();
}
}
}
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