Fotodiode, Fototransistor og IR-Sensor Med Arduino

Innholdsfortegnelse

Description:

Fotodiode, fototransistor og IR-Sensor Med Arduino – en fotodiode er en enhet som, når den er begeistret av lys, produserer i kretsen en proporsjonal strømstrøm (og målbar). På denne måten kan de tjene som lyssensorer, selv om det Er sant at det er fotodioder spesielt følsomme for synlig lys, er de aller fleste spesielt i infrarødt lys.

Det må tas hensyn til at til tross for å ha en oppførsel i lignende utseende Til LDRs, er en svært viktig forskjell fra disse (i tillegg følsomhet for andre bølgelengder) responstiden for endringer fra mørke til belysning, og omvendt, som i fotodioder er mye lavere.

som standard dioder har fotodioder en anode og en katode, men vær forsiktig, for at den skal fungere som vi ønsker, må en fotodiode alltid kobles til kretsen i omvendt polaritet. Selvfølgelig, det samme som med dioder som er vanlige, er anoden normalt lengre enn katoden (hvis de er like lange, bør katoden merkes på en eller annen måte).

den interne driften er som følger: når fotodioden polariseres direkte, har lyset som faller på det ikke en merkbar effekt, og derfor oppfører begge enhetene seg som en vanlig diode. Når polarisert i revers og ingen lysstråling når den, oppfører den seg også som en diode normal siden elektronene som strømmer gjennom kretsen ikke har nok energi til å gå gjennom den, slik at kretsen forblir åpen. Men i det øyeblikket fotodioden mottar lysstråling innenfor et lengdeområde av bølgeform, mottar elektronene nok energi til å kunne “hoppe” den omvendte fotodiodebarrieren og fortsette på vei.

Example1: hvordan sjekke oppførselen til fotodiode

for å teste sin oppførsel, kan vi bruke kretsen nedenfor. Denne kretsen er identisk med den vi så Med LDRs, og erstatter disse med en fotodiode (som er identifisert av et nytt symbol som vi ikke hadde sett før nå). Verdien av spenningsdeleren din vil avhenge av mengden lys (infrarødt) som er tilstede i miljøet: høyere motstand forbedrer følsomheten når det bare er en lyskilde og lavere motstand forbedrer den når det er mange (solen selv eller lampene er kilder til infrarød); en verdi 100 KΩ kan være bra å begynne med. La oss også merke til at det er katoden til fotodioden (den korteste terminalen, husk) den som kobles til strømforsyningen.

operasjonen av denne kretsen er som følger: så lenge fotodioden ikke oppdager infrarødt lys, gjennom den analoge inngangen Til Arduino-kortet (i dette tilfellet tallet 0) måles en spenning PÅ 0V fordi kretsen vil fungere som en krets åpnet. Etter hvert som lysintensiteten på fotodioden øker, øker antallet elektroner som passerer gjennom det (det vil si intensiteten av strømmen). Dette innebærer at, som “nedtrekksmotstanden” er fast, Ved Ohms Lov vil spenningen målt ved den analoge inngangspinnen også øke, opp til et øyeblikk der fotodioden ikke forårsaker nesten ingen motstand mot elektronens passasje, og Derfor Leser Arduino-brettet en maksimal spenning PÅ 5V.

Fotodiode, fototransistor, IR-Sensor

Vi har lagt TIL EN LED koblet TIL PWM utgangspinne # 5 som vi gjorde da Vi så LDRs å ha en synlig måte (ordspill ment) for å oppdage forekomsten av infrarødt lys på fotodioden. Som Du Kan Observere i koden som brukes (vist nedenfor), har VI GJORT led-lysstyrkeintensiteten til mengden infrarødt lys oppdaget av fotodioden: jo mer infrarød stråling mottatt, desto lysere BLIR LYSDIODEN.

Programmering:

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

int photodiode_value;
int bright_LED;
void setup (void) {
Seriell.begynn(9600);
}
void loop (void) {
photodiode_value = analogRead(0);
Seriell.println (photodiode_value);
bright_LED = kart(photodiode_value, 0, 1023, 0, 255);
analogWrite (5, bright_LED);
forsinkelse(100);
}

Programmering forklaring:

Først av alt for å motta fotodiodeverdien definerer jeg heltall type variabel

1
int photodiode_value;

deretter definerer jeg heltall type variabel for led verdi “Verdi sendt TIL LED”

1
int bright_LED;

i void loop-funksjonen først mottar jeg verdien ved hjelp av analogRead-funksjonen og lagrer disse verdiene i photodiode_value-variabelen og bruker deretter seriell.println å skrive ut verdier på seriell skjerm

1
2
3

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

lysstyrken PÅ LED er proporsjonal med mengden av infrarødt lys mottatt

1
2
3

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

fototransistor:

En annen type lyssensorer i tillegg til fotodioder kalles fototransistorer, det vil si lysfølsomme transistorer (også normalt infrarød). Operasjonen er som følger: når lyset faller på basen, genererer det en strøm som bringer transistoren til en ledende tilstand. Derfor er en fototransistor lik en vanlig transistor med den eneste forskjellen at basestrømmen Ib er avhengig av mottatt lys. Faktisk er det fototransistorer som kan fungere på begge måter: enten som fototransistorer eller som vanlige transistorer med en gitt bestemt basestrøm Ib.

fototransistoren er mye mer følsom enn fotodioden (på grunn av effekten av forsterkning av transistoren selv), siden strømmen som kan oppnås med en fotodiode, er veldig begrenset. Faktisk kan du forstå en fototransistor som en kombinasjon av fotodiode og forsterker, så faktisk hvis vi ønsker å bygge en hjemmelaget fototransistor, ville det være nok å legge til en transistor felles en fotodiode, som forbinder katoden til fotodioden til transistorens samler og anoden til basen. I denne konfigurasjonen vil strømmen levert av fotodioden (som vil sirkulere mot transistorens base) forsterkes β ganger.

i mange kretser kan vi finne en fototransistor kort avstand fra en infrarød emitting LED av en kompatibel bølgelengde. Dette paret av komponenter er nyttig for å oppdage interposisjon av et hinder mellom dem (på grunn av avbrudd av lysstrålen) og fungerer derfor som brytere optikere. De kan brukes i en rekke applikasjoner, for eksempel i detektorer av passering av et kredittkort (VED EN MINIBANK) eller innføring av papiret (i en skriver) eller som takometre, blant mange andre. Et turteller er en enhet som teller svingene per minutt laget av et hinder som er gjenstand for et hjul eller blad som roterer (vanligvis på grunn av driften av en motor); det er det, det brukes til å måle rotasjonshastigheten til en gjenstand.

fototransistor består av to terminaler som svarer til anoden og katoden TIL LED, og to terminaler som svarer til kollektoren og emitteren TIL EN npn-fototransistor. Generelt vil vi koble terminalene TIL LYSDIODEN til en lukket krets kontinuerlig drevet (anode til kilde, katode til jord), kollektorterminalen til bildebryteren til en strømkilde og emitterterminalen til bildebryteren til en digital inngang på Vårt Arduino-kort, for å kunne oppdage dermed utseendet av strøm når belysningen mottas. På den annen side bør Både Denne Arduino-styreinngangen som emitteren jordes til gjennom samme nedtrekksmotstand, for å oppnå mer stabile avlesninger (en typisk verdi på 10 KΩ kan fungere, men avhengig av kretsen kan det være behov for høyere verdier).

vi kan også finne infrarød LED plus phototransistor par i noen komponenter kalt “optocouplers” eller “optoisolator”. Den skjematiske representasjonen er vanligvis slik:

 Fotodiode, fototransistor, IR-Sensor

I Stor grad fungerer en optokoppler som en lukket krets når Lys kommer fra LYSDIODEN til transistorens base og åpnes når LYSDIODEN er slått av. Hovedfunksjonen er å kontrollere og samtidig isolere to deler av en krets som de normalt jobber med forskjellige spenninger (akkurat som en vanlig transistor ville, men på en noe tryggere måte). Fysisk er de vanligvis sjetonger som tilbyr som minst fire pinner (samme som fotobyttene): to som svarer TIL led-terminaler og to som svarer til solfangeren og emitteren til fototransistoren (selv om de kan ha en annen pinne som svarer til basen hvis det tillates, styrer intensiteten som strømmer gjennom den også som standard). Eksempler PÅ optokoblere ER 4N35 eller CNY75, produsert av ulike selskaper.

LED-fototransistorparet er også nyttig for å oppdage objekter som ligger i små avstander fra den. Vi vil studere dette i avsnittet som svarer til avstandssensorer.

Hvordan Lage Fjernkontroll VED HJELP AV IR-sensor:

en umiddelbar praktisk bruk av et infrarødt emitter-mottakerpar (FOR EKSEMPEL EN LED og en fotodiode/ fototransistor) plassert i en viss avstand er sendingen” meldinger ” mellom dem. Det vil si at siden infrarødt lys ikke er synlig (og derfor ikke “irriterer”), kan pulser av en viss varighet sendes ut og / eller frekvens som kan mottas og behandles flere meter unna uten å la det bli lagt merke til.”Enheten som mottar dem må da programmeres til å utføre forskjellige handlinger avhengig av typen pulslesing.

faktisk, alle enheter som fungerer med en “fjernkontroll” det fungerer på en lignende måte fordi i sin fremre del jeg må ha en sensor infrarøde sensorer (også kalt ” IR “sensorer, fra den engelske “infrarød”) som mottar infrarøde signaler fra fjernkontrollen. Og hva er inne i dette er i utgangspunktet EN LED som avgir pulser av infrarødt lys etter et bestemt mønster som signalerer til enheten rekkefølgen som skal utføres: det er en blinkkode for å slå PÅ TVEN, en annen for å bytte kanaler, etc.

ovenfor snakket vi om “IR-sensorer” og ikke om fotodioder / fototransistorer fordi de tidligere er noe mer sofistikerte. Spesielt oppdager IR-sensorer ikke noe infrarødt lys, men bare at det (takket være inkorporeringen av et internt båndpassfilter og en demodulator) moduleres av en bærebølge med en frekvens på 38 KHz + 3 KHz. Dette betyr i utgangspunktet bare signaler hvis informasjon bæres av en 38 KHz bølgeform, vil bli lest. DETTE er for å hindre AT IR-sensorer blir “galne” når de mottar det infrarøde lyset som eksisterer fra alle sider (sol, elektrisk lys … på denne måten reagerer de bare på veldig konkret allerede standardisert.

En annen forskjell med fotodioder / fototransistorer er AT IR-sensorer tilbyr et binært svar: hvis DE oppdager ET IR-signal på 38 KHz, er verdien som du kan lese FRA dem I DE fleste tilfeller LAV (0 V), OG hvis de ikke oppdager noe, gir lesingen EN HØY verdi (5 V). Denne oppførselen er det som vanligvis kalles “Aktiv lav eller “lavaktiv”.

EKSEMPLER PÅ IR-sensorer kan VÆRE TSOP32838 eller GP1UX311QS. Som funksjoner har de mest fremtredende at deres følsomhetsområde er mellom bølgelengder på 800nm til 1100nm med maksimal respons ved 940nm og trenger rundt 5V og 3 mA for å fungere.

TSOP32838-brikken har tre pinner: vendt mot sin bakre halvkuleformede, den venstre pinnen er den digitale utgangen fra sensoren, midtpinnen må jordes og den høyre pinnen må jordes. koble til strømforsyningen (mellom 2,5 V og 5,5 V).

Eksempel2:

slik slår du på led med fjernkontroll Ved Hjelp Av Arduino OG TSOP32838 IR-Sensor:

for å teste driften kan vi designe en krets som den som følger. Spenningsdeleren FOR LED KAN være mellom 200 og 1000 ohm.

 Fotodiode, fototransistor, IR-Sensor

tanken er å slå PÅ LYSDIODEN kort når IR-sensoren oppdager et infrarødt signal. Men vær forsiktig, ikke bare et infrarødt signal er gyldig, men bare det modulerte ved 38 KHz. Derfor, for å teste denne kretsen, kan Vi ikke bruke noen infrarød LED: vi må bruke en kontrollknapp fjernkontroll som vi har på hånden(fra en tv, EN DVD-spiller, en datamaskin, etc.). Når lastet På Arduino bord skissen presentert Til Neste, hvis vi peker at fjernkontrollen PÅ IR-sensor og trykk på noen av knappene, vi bør se LED-lys opp. PÅ denne måten vil VI bruke IR-sensoren som om det var en bryter, som lyser LYSDIODEN mens det oppdages signalet og slår det av når det ikke lenger oppdages.

sensorutgangen er koblet til den digitale inngangspinnen 2 På Arduino-kortet og LYSDIODEN er koblet til den digitale utgangspinnen 12):

Programmering:

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

int irPin=2;
int ledPin=12;
ugyldig oppsett () {
pinMode(irPin,INNGANG);
pinMode(ledPin,UTGANG));
}
void loop () {
hvis (pulseIn(irPin, LAV) > 0) {
forsinkelse(100);
digitalWrite (ledPin,HØY);
forsinkelse(200);
digitalWrite (ledPin,LAV);
}
}

Programmering forklaring:

først definerer jeg heltall type variabel FOR IR sensor og led

1
2
3

int irPin=2;
int ledPin=12;

i oppsettfunksjonen setter JEG IR-sensor som inngang og led som utgang

1
2
3

pinMode (irPin,INNGANG);
pinMode(ledPin, UTGANG);

siden signalet som sendes ut av sensoren, er NORMALT HØYT, når knappen på en fjernkontroll trykkes, endres DEN TIL LAV. Hva pulseIn () – funksjonen er å pause skissen TIL et signal oppdages LAVT, hvis varighet ikke virkelig interesserer oss, men logisk vil det alltid være større enn null. Derfor, hvis tilstanden til if betyr at en knapp på en fjernkontroll ble trykket

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

det er nødvendig å vente en viss tid (som avhenger av den spesifikke fjernkontrollmodellen) etter deteksjon AV det FØRSTE LAVE signalet fordi hvert knappetrykk gir flere svingninger MELLOM HØYE og LAVE verdier. Selv om han fysisk ikke har noe å se, kan vi forstå dette venter som om det var en måte å unngå en “sprett” (fenomen studert når vi behandler trykknappene). Når denne ventetiden er gått, skal signalet fra sensoren ha returnert til hvilestatus (HØY verdi).

1
forsinkelse(100);

VI holder LYSDIODEN på i noen millisekunder. I løpet av denne tiden vil skissen ikke kunne oppdage andre tastetrykk som kommer fra fjernkontrollen. Vi kunne også ha sendt en melding til “Serial monitor” som varsler pulsasjonen.

1
2
3
4
5
6
7
8
9

digitalWrite (ledPin, HØY);
forsinkelse(200);
digitalWrite (ledPin,LAV);
}
}

Eksempel3:

slik mottar du fjernkontrollen på seriell skjerm ved HJELP AV TSOP32838 IR-Sensor Med Arduino:

først og fremst last ned det nødvendige biblioteket FOR IR-sensor

arduino IRremote library

Kretsdiagram:

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 oppsett () {
Seriell.begynn(9600);
irrecv.enableIRIn();
}
ugyldig sløyfe () {
hvis (irrecv.dekode (& resultater) !=0) {
hvis (resultater.decode_type = = NEC) {
Seriell.print (“NEC: “);
} annet hvis (resultater.decode_type = = SONY) {
Seriell.skriv ut (“SONY: “);
} annet hvis (resultater.decode_type = = RC5) {
Seriell.print (“RC5: “);
} annet hvis (resultater.decode_type = = RC6) {
Seriell.print (“RC6: “);
} annet hvis (resultater.decode_type = = UKJENT) {
Seriell.print (“Ukjent: “);
}
Seriell.println (resultater.VERDI, HEX);
irrecv.resume();
}
}

Programmeringsforklaring:

først importerer jeg det nødvendige biblioteket

1
#inkluder < IRremote.h>

da definerer jeg digital inngangspinne for mottaker

1
int receiverPin = 11;

deretter lager jeg et objekt som heter” irrecv ” av Typen IRrecv

1
Irecv irecv (receiverPin);

da erklærer jeg en variabel av en spesiell type, “decode_results”.

1
decode_resultater resultater;

Da Starter jeg mottakeren i void step-funksjonen

1
irrecv.enableIRIn();

Så i void loop ser jeg for å se om noen modulert IR mønster har blitt oppdaget. I så fall leser jeg det og jeg holder det helt i den spesielle variabelen “resultater”, i heksadesimal tallform

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

så ser jeg på hva slags handelsmønster det er, hvis det er fra en anerkjent av 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) {
Seriell.skriv ut (“NEC:”);
} annet hvis (resultater.decode_type = = SONY) {
Seriell.skriv ut (“SONY: “);
} annet hvis (resultater.decode_type = = RC5) {
Seriell.print (“RC5: “);
} annet hvis (resultater.decode_type = = RC6) {
Seriell.print (“RC6: “);
} annet hvis (resultater.decode_type = = UKJENT) {
Seriell.skriv ut (“Ukjent: “);
}

og så viser jeg det mottatte mønsteret (i heksadesimalt format) på seriekanalen

1
Seriell.println (resultater.verdi, HEX);

Når mønsteret er dekodet, reaktivere lytter til å oppdage neste mulige mønster

1
2
3

irrecv.resume();
}

Eksempel4:

hvordan lage fjernkontroll ved HJELP AV TSOP32838 IR-Sensor Med Arduino:

først og fremst last ned det nødvendige biblioteket FOR IR-sensor

Arduino IRremote library

Bruk samme krets som jeg brukte i forrige prosjekt

Kretsdiagram:

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

#inkluder < IRremote.h >
int receiverPin = 11;
IRrecv irrecv(receiverPin);
dekode_results resultater;
ugyldig oppsett () {
Seriell.begynn(9600);
irrecv.enableIRIn();
}
ugyldig sløyfe () {
int i;
hvis (irrecv.dekode (& resultater)!=0) {
handling ();
for (i = 0; i< 2; i++) {
irrecv.resume();
}
}
}
ugyldig handling () {
bryter (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