fotodiode, fototransistor og IR-Sensor med Arduino

Indholdsfortegnelse

beskrivelse:

fotodiode, fototransistor og IR– Sensor med Arduino-a fotodiode er en enhed, der, når den er ophidset af lys, producerer i kredsløbet en proportional strømstrøm (og målbar). På denne måde kan de få dem til at fungere som lyssensorer, selvom det er det er sandt, at der er fotodioder, der er særligt følsomme over for synligt lys, langt de fleste er især i infrarødt lys.

det skal tages i betragtning, at på trods af at have en adfærd i lignende udseende som LDRs, er en meget vigtig forskel fra disse (ud over følsomhed over for andre bølgelængder) responstiden til ændringer fra Mørke til belysning og omvendt, som i fotodioder er meget lavere.

ligesom standarddioder har fotodioder en anode og en katode, men vær forsigtig, for at den skal fungere som vi ønsker, skal en fotodiode altid være Tilslut til kredsløbet i omvendt polaritet. Selvfølgelig er det samme som med dioder almindelige, normalt er anoden længere end katoden (hvis de er lige lange, skal katoden markeres på en eller anden måde).

dens interne drift er som følger: når fotodioden polariseres i direkte, har lyset, der falder på det, ikke en mærkbar effekt, og derfor opfører både enheden sig som en fælles diode. Når polariseret i omvendt og ingen lysstråling når den, opfører den sig også som en diode normal, da elektronerne, der strømmer gennem kredsløbet, ikke har nok energi til at gå igennem det, så kredsløbet forbliver åbent. Men i det øjeblik, at fotodioden modtager lysstråling inden for et længdeområde af bølgeform, modtager elektronerne nok energi til at kunne “hoppe” den omvendte fotodiodebarriere og fortsætte på din vej.

Eksempel1: Sådan kontrolleres fotodiodens opførsel

for at teste dens adfærd kan vi bruge nedenstående kredsløb. Dette kredsløb er identisk med det, vi så med LDRs, og erstatter disse med en fotodiode (som identificeres med et nyt symbol, som vi ikke havde set indtil nu). Værdien af din spændingsdeler afhænger af mængden af lys (infrarød), der er til stede i miljøet: højere modstande forbedrer følsomheden, når der kun er en lyskilde, og lavere modstande forbedrer den, når der er mange (solen selv eller lamperne er kilder til infrarød); en værdi 100 K liter kan være fint til at begynde med. Lad os også bemærke, at det er fotodiodens katode (den korteste terminal, husk) den der forbinder strømforsyningen.

driften af dette kredsløb er som følger: så længe fotodioden ikke registrerer infrarødt lys, måles en spænding på 0V gennem den analoge indgang på Arduino-kortet (i dette tilfælde tallet 0), fordi kredsløbet fungerer som et åbent kredsløb. Efterhånden som lysintensiteten på fotodioden øges, øges antallet af elektroner, der passerer gennem det (det vil sige intensiteten af strømmen). Dette indebærer, at når” nedtrækningsmodstanden ” er fast, vil Ohms lov også øge spændingen målt ved den analoge indgangsstift, op til et øjeblik, hvor fotodioden, når den modtager meget lys, næppe forårsager nogen modstand mod passagen af elektronerne, og derfor læser Arduino-kortet en maksimal spænding på 5V.

Photodiode, phototransistor, IR Sensor

vi har tilføjet en LED forbundet til PMM output pin # 5 som vi gjorde, da vi så LDRs at have en synlig måde (ordspil beregnet) til at detektere forekomsten af infrarødt lys på fotodioden. Som du kan observere i den anvendte kode (vist nedenfor), har vi lavet LED-lysstyrkeintensiteten af mængden af infrarødt lys detekteret af fotodioden: jo mere infrarød stråling modtaget, jo lysere bliver LED ‘ en.

programmering:

1
2
3
4
5
6
7
8
9
10
11
12

int photodiode_value;
int bright_LED;
void setup(void) {
seriel.begynd(9600);
}
void loop (void) {
photodiode_value = analogRead(0);
seriel.println (photodiode_value);
bright_LED = kort (photodiode_value, 0, 1023, 0, 255);
analogskriv (5, bright_LED);
forsinkelse(100);
}

programmering forklaring:

først og fremmest for at modtage fotodiodeværdien definerer jeg heltalstypevariabel

1
int photodiode_value;

derefter definerer jeg heltalstypevariabel for led-værdi “værdi sendt til LED”

1
int bright_LED;

i void loop funktion først er jeg modtager værdien ved hjælp analogRead funktion og gemme disse værdi i photodiode_value variabel og derefter bruge seriel.println til at udskrive værdier på seriel skærm

1
2
3

photodiode_value = analoglæs(0);
seriel.println (photodiode_value);

lysstyrken af LED ‘ en er proportional med mængden af infrarødt lys modtaget

1
2
3

bright_LED = kort (photodiode_value, 0, 1023, 0, 255);
analogskriv (5, bright_LED);

fototransistor:

en anden type lyssensorer ud over fotodioder kaldes fototransistorer, det vil sige lysfølsomme transistorer (også normalt infrarød). Dens funktion er som følger: Når lyset falder på sin base, er det genererer en strøm, der bringer transistoren til en ledende tilstand. Derfor er en fototransistor lig med en fælles transistor med den eneste forskel, at basisstrømmen IB er afhængig af det modtagne lys. Faktisk er der fototransistorer, der kan fungere på begge måder: enten som fototransistorer eller som almindelige transistorer med en given specifik basisstrøm Ib.

fototransistoren er meget mere følsom end fotodioden (på grund af effekten af forstærkningen af selve transistoren), da de strømme, der kan opnås med en fotodiode, virkelig er begrænsede. Faktisk kan du forstå en fototransistor som en kombination af fotodiode og forstærker, så faktisk hvis vi gerne vil bygge en hjemmelavet fototransistor, ville det være nok at tilføje til en transistor fælles en fotodiode, der forbinder fotodiodens katode til transistorens samler og anoden til basen. I denne konfiguration ville strømmen leveret af fotodioden (som ville cirkulere mod bunden af transistoren) blive forstærket med en mængde gange.

i mange kredsløb kan vi finde en fototransistor en kort afstand fra en infrarød emitterende LED med en kompatibel bølgelængde. Dette par komponenter er nyttige til at detektere interpositionen af en hindring mellem dem (på grund af afbrydelsen af lysstrålen) og fungerer derfor som afbrydere optikere. De kan bruges i en lang række applikationer, såsom i detektorer til overførsel af et kreditkort (ved en pengeautomat) eller introduktion af papiret (i en printer) eller som turtællere, blandt mange andre. Minut foretaget af en hindring underlagt et hjul eller blad, der roterer (normalt på grund af driften af en motor); det er det vil sige, det bruges til at måle omdrejningshastigheden for et objekt.

fototransistor består af to terminaler svarende til LED ‘ ens anode og katode og to terminaler svarende til kollektoren og emitteren af en NPN-fototransistor. Generelt vil vi gerne forbinde terminalerne på LED ‘ en til et lukket kredsløb, der kontinuerligt drives (anode til kilde, katode til jord), kollektorterminalen på fotoafbryderen til en strømkilde og emitterterminalen på fotoafbryderen til en digital indgang på vores Arduino-kort, for at kunne registrere således udseendet af strøm, når belysning modtages. På den anden side skal både denne Arduino-kortindgang som emitter jordes til gennem den samme nedtrækningsmodstand for at opnå mere stabile aflæsninger (en typisk værdi på 10 K liter kan fungere, men afhængigt af kredsløbet kan det være brug for højere værdier).

vi kan også finde det infrarøde LED plus fototransistorpar i nogle komponenter kaldet “optokoblere” eller “optoisolator”. Den skematiske repræsentation er normalt sådan:

fotodiode, fototransistor, IR-Sensor

generelt set fungerer en optokobler som et lukket kredsløb, når lys kommer fra LED ‘en til transistorens bund og åbnes, når LED’ en er slukket. Hovedfunktionen er at kontrollere og samtidig isolere to dele af et kredsløb, som de normalt arbejder ved forskellige spændinger (ligesom en fælles transistor ville, men på en noget sikrere måde). Fysisk er de normalt chips, der tilbyder som mindst fire ben (samme som fotoafbryderne): to svarende til LED-terminalerne og to svarende til solfangeren og emitteren af fototransistoren (selvom de muligvis har en mere stift svarende til basen, hvis det er tilladt, styrer intensiteten, der strømmer gennem den også som standard). Eksempler på optokoblere er 4N35 eller CNY75, fremstillet af forskellige virksomheder.

LED-fototransistorparet er også nyttigt til at detektere objekter placeret i små afstande fra det. Vi vil studere dette i det afsnit, der svarer til afstandssensorer.

Sådan laver du Fjernbetjening ved hjælp af IR-sensor:

en øjeblikkelig praktisk anvendelighed af et infrarødt emitter-modtagerpar (såsom en LED og en fotodiode / fototransistor) placeret i en bestemt afstand er at sende “meddelelser” mellem dem. Det vil sige, da infrarødt lys ikke er synligt (og derfor ikke “irriterer”), kan pulser af en bestemt varighed udsendes og / eller frekvens, der kan modtages og behandles flere meter væk uden lad det “blive bemærket.”Enheden, der modtager dem, skal derefter programmeres til at udføre forskellige handlinger afhængigt af typen af pulslæsning.

faktisk er enhver enhed, der arbejder med en “fjernbetjening” det fungerer på en lignende måde, fordi jeg i sin forreste del skal have en sensor infrarøde sensorer (også kaldet “IR” sensorer, fra den engelske “infrarød”), der modtager de infrarøde signaler, der udsendes af fjernbetjeningen. Og hvad der er inde i dette er dybest set en LED, der udsender pulser af infrarødt lys efter et bestemt mønster, der signalerer til enheden ordren, der skal udføres: der er en blink-kode for at tænde TV ‘ et, en anden til at skifte kanal osv.

ovenfor talte vi om “IR-sensorer” og ikke om fotodioder / fototransistorer, fordi førstnævnte er noget mere sofistikerede. Specifikt registrerer IR-sensorer ikke noget infrarødt lys, men kun det, der (takket være inkorporeringen af et internt båndpasfilter og en demodulator) moduleres af en bærebølge med en frekvens på 38 KHS + 3 KHS. Dette betyder dybest set kun de signaler, hvis information bæres af en 38 KHS bølgeform, vil blive læst. Dette er for at forhindre, at IR-sensorer bliver “skøre”, når de modtager det infrarøde lys, der findes, der kommer fra alle sider (sol, elektrisk lys … på denne måde reagerer de kun på meget konkret, der allerede er standardiseret.

en anden forskel med fotodioder / fototransistorer er, at IR-sensorer tilbyder et binært svar: hvis de registrerer et IR-signal på 38 KHS, er den værdi, du kan læse fra dem i de fleste tilfælde lav (0 V), og hvis de ikke registrerer noget, giver din læsning en høj værdi (5 V). Denne adfærd er det, der normalt kaldes “aktiv lav eller” lavaktiv “.

eksempler på IR-sensorer kan være TSOP32838 eller GP1H311H. Som funktioner har de mest fremtrædende, at deres følsomhedsområde er mellem bølgelængder på 800 nm til 1100 nm med et maksimalt respons ved 940 nm og har brug for omkring 5V og 3 mA til at fungere.

TSOP32838-chippen tilbyder tre stifter: vender mod ryggen halvkugleformet, den venstre Stift er den digitale udgang, der leveres af sensoren, den midterste stift skal være jordet, og den højre stift skal jordes. Tilslut til strømforsyningen (mellem 2,5 V og 5,5 V).

Eksempel2:

Sådan tændes led med fjernbetjening ved hjælp af Arduino og TSOP32838 IR-Sensor:

for at teste dens funktion kunne vi designe et kredsløb som det følgende. Spændingsdeleren til LED ‘ en kan være mellem 200 og 1000 ohm.

fotodiode, fototransistor, IR-Sensor

ideen er kort at tænde LED ‘ en, når IR-sensoren registrerer et infrarødt signal. Men vær forsigtig, ikke bare et infrarødt signal er gyldigt, men kun det modulerede ved 38 KHS. Derfor, for at teste dette kredsløb, kan vi ikke bruge nogen infrarød LED: vi skal bruge en fjernbetjening til kontrolknappen, som vi har til rådighed (fra et fjernsyn, en DVD-afspiller, en computer osv.). Når den først er indlæst på Arduino-tavlen, præsenteres skitsen for næste, hvis vi peger fjernbetjeningen mod IR-sensoren og trykker på nogle af dens knapper, skal vi se LED ‘ en lyse op. På denne måde bruger vi IR-sensoren, som om det var en kontakt, der lyser LED ‘ en, mens vi registrerer dette signal og slukker det, når det ikke længere registreres.

sensorudgangen er forbundet til den digitale indgangsstift2 på Arduino-kortet, og LED ‘ en er forbundet til dens digitale udgangsstift12):

programmering:

1
2
3
4
5
6
7
8
9
10
11
12
13
14

int irPin=2;
int ledPin=12;
ugyldig opsætning() {
pinMode(irPin,INPUT);
pinMode(ledPin,OUTPUT));
}
void loop () {
hvis (pulseIn (irPin,lav) > 0) {
forsinkelse (100);
digitalskriv (ledPin, høj);
forsinkelse(200);
digitalskriv(ledPin, lav);
}
}

Programmeringsforklaring:

først definerer jeg heltalstypevariabel for IR-sensor og led

1
2
3

int irPin=2;
int ledPin=12;

i opsætningsfunktionen indstiller jeg IR-sensor som input og led som output

1
2
3

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

da signalet, der udsendes af sensoren, normalt er højt, ændres det til lavt, når der trykkes på en fjernbetjeningsknap. Hvad pulseIn () – funktionen er at sætte skitsen på pause, indtil et signal registreres lavt, hvis varighed ikke rigtig interesserer os, men logisk set vil det altid være større end nul. Derfor, hvis tilstanden af if betyder, at der blev trykket på en knap på en fjernbetjening

1
hvis (pulseIn (irPin,lav) > 0) {

det er nødvendigt at vente et bestemt tidspunkt (som afhænger af den specifikke fjernbetjeningsmodel) efter detektering af det første lave signal, fordi hvert knaptryk producerer flere svingninger mellem høje og lave værdier. Selvom han fysisk ikke har noget at se, kan vi forstå denne ventetid, som om det var en måde at undgå en “bounce” (fænomen studeret, når vi behandler trykknapperne). Når denne ventetid er gået, skal signalet fra sensoren være vendt tilbage til sin hviletilstand (høj værdi).

1
forsinkelse(100);

vi holder LED ‘ en tændt i et par millisekunder. I løbet af denne tid vil skitsen ikke kunne registrere andre tastetryk, der kommer fra fjernbetjeningen. Vi kunne også have sendt en besked til” Serial monitor”, der meddelte pulsationen.

1
2
3
4
5
6
7
8
9

digitalskriv(ledPin, høj);
forsinkelse(200);
digitalskriv(ledPin, lav);
}
}

Eksempel3:

sådan modtager du fjernbetjeningskommandoen på den serielle skærm ved hjælp af TSOP32838 IR-Sensor med Arduino:

først og fremmest Hent det nødvendige bibliotek til IR-sensor

Arduino IRremote library

kredsløbsdiagram:

fotodiode, fototransistor, IR-Sensor

programmering:

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;
ugyldig opsætning () {
seriel.begynd(9600);
irrecv.enableIRIn();
}
void loop () {
if (irrecv.afkode (&resultater) !=0) {
hvis (resultater .decode_type = = NEC) {
seriel.print (“NEC: “);
} ellers hvis (resultater .decode_type = = SONY) {
seriel.print (“SONY: “);
} ellers hvis (resultater .decode_type == RC5) {
seriel.print (“RC5: “);
} ellers hvis (resultater .decode_type == RC6) {
seriel.print (“RC6: “);
} ellers hvis (resultater .decode_type = = ukendt) {
seriel.print (“ukendt: “);
}
seriel.println (resultater.værdi, sekskant);
irrecv.genoptag();
}
}

Programmeringsforklaring:

først importerer jeg det krævede bibliotek

1
#Medtag < IRremote.h>

så definerer jeg digital input pin til modtager

1
int receiverPin = 11;

så opretter jeg et objekt kaldet” irrecv ” af typen IRrecv

1
IRrecv irrecv (receiverPin);

så erklærer jeg en variabel af en speciel type, “decode_results”.

1
decode_results resultater;

så starter jeg modtageren i void step-funktion

1
irrecv.enableIRIn ();

så i void loop ser jeg ud for at se, om der er fundet et moduleret IR-mønster. I så fald læser jeg det, og jeg holder det helt i den specielle variabel “resultater”, i seksadecimal talformular

1
hvis (irrecv.afkode (&resultater) !=0) {

så ser jeg på, hvilken slags handelsmønster det er, hvis det er fra en anerkendt af biblioteket

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

hvis (resultater .decode_type = = NEC) {
seriel.print (“NEC: “);
} ellers hvis (resultater.decode_type = = SONY) {
seriel.print (“SONY: “);
} ellers hvis (resultater .decode_type == RC5) {
seriel.print (“RC5: “);
} ellers hvis (resultater .decode_type == RC6) {
seriel.print (“RC6: “);
} ellers hvis (resultater .decode_type = = ukendt) {
seriel.print (“ukendt:”);
}

og så viser jeg det modtagne mønster (i geksadecimal format) på seriekanalen

1
seriel.println (resultater.værdi, sekskant);

når mønsteret er afkodet, skal du genaktivere lytterne for at registrere det næste mulige mønster

1
2
3

irrecv.genoptag();
}

Eksempel4:

Sådan laver du fjernbetjening ved hjælp af TSOP32838 IR-Sensor med Arduino:

først og fremmest Hent det krævede bibliotek til IR-sensor

Arduino IRremote library

brug det samme kredsløb som jeg brugte i det forrige projekt

kredsløbsdiagram:

fotodiode, fototransistor, IR-Sensor

programmering:

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

#Medtag < IRremote.h>
int receiverPin = 11;
IRrecv irrecv(receiverPin);
decode_results resultater;
ugyldig opsætning () {
seriel.begynd(9600);
irrecv.enableIRIn();
}
void loop () {
int i;
if (irrecv.afkode (&resultater)!=0) {
handling ();
til (i=0; i<2; i++) {
irrecv.genoptag();
}
}
}
ugyldig handling () {
skift(resultater.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