fotodiod, fototransistor och IR-Sensor med Arduino

Innehållsförteckning

beskrivning:

fotodiod, fototransistor och IR– Sensor med Arduino-a fotodiod är en enhet som, när den är upphetsad av ljus, producerar i kretsen ett proportionellt strömflöde (och mätbart). På detta sätt kan de göras fungera som ljussensorer, även om det är sant att det finns fotodioder som är särskilt känsliga för synligt ljus, är de allra flesta särskilt i infrarött ljus.

det måste beaktas att trots att det har ett beteende i liknande utseende som LDR, är en mycket viktig skillnad från dessa (förutom känslighet för andra våglängder) svarstiden för förändringar från mörker till belysning och vice versa, vilket i fotodioder är mycket lägre.

liksom standarddioder har fotodioder en anod och en katod, men var försiktig, för att den ska fungera som vi vill måste en fotodiod alltid anslutas till kretsen i omvänd polaritet. Naturligtvis, samma som med dioder vanliga, normalt är anoden längre än katoden (om de är lika långa, bör katoden markeras på något sätt).

dess interna funktion är som följer: när fotodioden polariseras i direkt, har ljuset som faller på det ingen märkbar effekt och därför uppträder båda enheten som en vanlig diod. När polariserad i omvänd och ingen ljusstrålning når den, beter den sig också som en diod normal eftersom elektronerna som strömmar genom kretsen inte har tillräckligt med energi för att gå igenom den, så kretsen förblir öppen. Men i det ögonblick som fotodioden mottar ljusstrålning inom ett längdområde av vågform, får elektronerna tillräckligt med energi för att kunna “hoppa” den omvända fotodiodbarriären och fortsätta på väg.

exempel 1: Hur man kontrollerar fotodiodens beteende

för att testa dess beteende kan vi använda nedanstående krets. Denna krets är identisk med den vi såg med LDR: erna och ersätter dessa med en fotodiod (som identifieras med en ny symbol som vi inte hade sett förrän nu). Värdet på din spänningsdelare beror på mängden ljus (infraröd) som finns i miljön: högre motstånd förbättrar känsligheten när det bara finns en ljuskälla och lägre motstånd förbättrar den när det finns många (solen själv eller lamporna är källor till infraröd); ett värde 100 K kg kan vara bra att börja med. Låt oss också notera att det är fotodiodens katod (den kortaste terminalen, kom ihåg) den som ansluter till strömförsörjningen.

driften av denna krets är som följer: så länge fotodioden inte upptäcker infrarött ljus, genom den analoga ingången på Arduino-kortet (i detta fall numret 0) kommer en spänning på 0V att mätas eftersom kretsen kommer att fungera som en krets öppnad. När ljusintensiteten på fotodioden ökar ökar antalet elektroner som passerar genom det (det vill säga intensiteten av strömmen). Detta innebär att, när “pull-down” – motståndet är fixerat, enligt Ohms lag kommer spänningen uppmätt vid den analoga ingångsstiftet också att öka, upp till ett ögonblick då fotodioden inte orsakar något motstånd mot elektronernas passage när man tar emot mycket ljus och därför läser Arduino-kortet en maximal spänning på 5V.

fotodiod, fototransistor, IR-Sensor

vi har lagt till en LED ansluten till PWM-utgångsstift # 5 som vi gjorde när vi såg LDR: erna för att ha ett synligt sätt (ordspel avsedd) för att upptäcka förekomsten av infrarött ljus på fotodioden. Som du kan observera i den använda koden (visas nedan) har vi gjort LED-ljusstyrkan för mängden infrarött ljus som detekteras av fotodioden: ju mer infraröd strålning som mottas, desto ljusare blir lysdioden.

programplanering:

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

int photodiode_value;
int bright_LED;
ogiltig inställning(ogiltig) {
seriell.börja(9600);
}
void loop (void) {
photodiode_value = analogRead(0);
serie.println (photodiode_value);
bright_LED = karta(photodiode_value, 0, 1023, 0, 255);
analogWrite (5, bright_LED);
fördröjning(100);
}

programmering förklaring:

först och främst för att ta emot fotodiodvärdet definierar jag heltalstyp variabel

1
int photodiode_value;

sedan definierar jag heltalstyp variabel för led-värde “värde skickat till lysdioden”

1
int bright_LED;

I void loop-funktionen först får jag värdet med analogRead-funktionen och lagrar dessa värden i photodiode_value-variabeln och använder sedan seriell.println för att skriva ut värden på seriell bildskärm

1
2
3

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

lysdiodens ljusstyrka är proportionell mot mängden mottaget infrarött ljus

1
2
3

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

fototransistor:

en annan typ av ljussensorer förutom fotodioder kallas fototransistorer, det vill säga ljuskänsliga transistorer (även normalt infraröda). Dess funktion är som följer: när ljuset faller på basen genererar det en ström som bringar transistorn till ett ledande tillstånd. Därför är en fototransistor lika med en gemensam transistor med den enda skillnaden att basströmmen Ib är beroende av det mottagna ljuset. Faktum är att det finns fototransistorer som kan fungera på båda sätten: antingen som fototransistorer eller som vanliga transistorer med en given specifik basström Ib.

fototransistorn är mycket känsligare än fotodioden (på grund av effekten av förstärkningen av transistorn själv), eftersom strömmarna som kan erhållas med en fotodiod är verkligen begränsade. Faktum är att du kan förstå en fototransistor som en kombination av fotodiod och förstärkare, så faktiskt om vi vill bygga en hemlagad fototransistor, skulle det vara tillräckligt att lägga till en transistor gemensam en fotodiod, som förbinder fotodiodens katod till transistorns samlare och anoden till basen. I denna konfiguration skulle strömmen som levereras av fotodioden (som skulle cirkulera mot transistorns bas) förstärkas med en gång i tiden.

i många kretsar kan vi hitta en fototransistor på kort avstånd från en infraröd emitterande LED med en kompatibel våglängd. Detta par komponenter är användbara för att detektera interpositionen av ett hinder mellan dem (på grund av ljusstrålens avbrott) och fungerar därför som omkopplare optiker. De kan användas i en mängd olika applikationer, till exempel i detektorer för passering av ett kreditkort (vid en bankomat) eller införandet av papperet (i en skrivare) eller som takometrar, bland många andra. En varvräknare är en anordning som räknar varv per minut som görs av ett hinder som är föremål för ett hjul eller blad som roterar (vanligtvis på grund av driften av en motor); det är det som används för att mäta rotationshastigheten för ett objekt.

fototransistor består av två terminaler som motsvarar LED-anoden och katoden och två terminaler som motsvarar kollektorn och emitteren för en NPN-fototransistor. I allmänhet vill vi ansluta LED-terminalerna till en sluten krets kontinuerligt driven (anod till källa, katod till jord), kollektorterminalen på fotomkopplaren till en strömkälla och emitterterminalen på fotomkopplaren till en digital ingång på vårt Arduino-kort, för att kunna upptäcka sålunda utseendet av ström när belysning tas emot. Å andra sidan, både denna Arduino ombord ingång som emitter bör jordas till genom samma pull-down motstånd, för att få mer stabila avläsningar (ett typiskt värde på 10 K kan fungera, men beroende på kretsen kan det vara behöver högre värden).

vi kan också hitta det infraröda LED plus fototransistorparet i vissa komponenter som kallas “optokopplare” eller “optoisolator”. Den schematiska representationen är vanligtvis så här:

 fotodiod, fototransistor, IR-Sensor

i stort sett fungerar en optokopplare som en sluten krets när ljuset kommer från lysdioden till transistorns bas och öppnas när lysdioden är avstängd. Dess huvudsakliga funktion är att styra och samtidigt isolera två delar av en krets som de normalt arbetar vid olika spänningar (precis som en vanlig transistor skulle, men på ett något säkrare sätt). Fysiskt är de vanligtvis chips som erbjuder som minst fyra stift (samma som fotomkopplarna): två som motsvarar LED-terminalerna och två som motsvarar fototransistorns kollektor och emitter (även om de kan ha ytterligare en stift som motsvarar basen om de tillåts kontrollera intensiteten som strömmar genom den också som standard). Exempel på optokopplare är 4N35 eller CNY75, Tillverkad av olika företag.

LED-fototransistorparet är också användbart för att upptäcka objekt som ligger på små avstånd från det. Vi kommer att studera detta i avsnittet som motsvarar avståndssensorer.

hur man gör fjärrkontroll med IR-sensor:

ett omedelbart praktiskt verktyg för ett infrarött emitter-mottagarpar (som en LED och en fotodiod / fototransistor) som ligger på ett visst avstånd är de sändande “meddelandena” mellan dem. Det vill säga eftersom infrarött ljus inte är synligt (och därför inte “irriterar”) kan pulser av en viss varaktighet avges och / eller frekvens som kan tas emot och bearbetas flera meter bort utan att låta det “märkas.”Enheten som tar emot dem måste sedan programmeras för att utföra olika åtgärder beroende på typen av pulsläsning.

faktum är att alla enheter som fungerar med en” fjärrkontroll “det fungerar på ett liknande sätt eftersom jag i sin främre del måste ha en sensor infraröda sensorer (även kallade” IR “-sensorer, från engelska” infraröd”) som tar emot de infraröda signalerna från fjärrkontrollen. Och vad som finns inuti detta är i grunden en LED som avger pulser av infrarött ljus efter ett visst mönster som signalerar till enheten den ordning som ska utföras: det finns en blinkkod för att slå på TV: n, en annan för att byta kanal etc.

ovan pratade vi om “IR-sensorer” och inte om fotodioder / fototransistorer eftersom de förra är något mer sofistikerade. Specifikt upptäcker IR-sensorer inget infrarött ljus, utan bara det (tack vare införlivandet av ett internt bandpassfilter och en demodulator) moduleras av en bärvåg med en frekvens på 38 KHz + 3 KHz. Detta betyder i princip bara de signaler vars information bärs av en 38 KHz vågform kommer att läsas. Detta för att förhindra att IR-sensorer blir “galna” när de får det infraröda ljuset som finns från alla sidor (Sol, elektriskt ljus … på detta sätt svarar de bara på mycket konkreta redan standardiserade.

en annan skillnad med fotodioder / fototransistorer är att IR-sensorer erbjuder ett binärt svar: om de upptäcker en IR-signal på 38 KHz är värdet som du kan läsa från dem i de flesta fall lågt (0 V), och om de inte upptäcker något, ger din läsning ett högt värde (5 V). Detta beteende är det som vanligtvis kallas “aktiv låg eller “lågaktiv”.

exempel på IR-sensorer kan vara TSOP32838 eller GP1UX311QS. Som funktioner har de mest framträdande att deras känslighetsområde är mellan våglängder av 800nm till 1100Nm med ett maximalt svar vid 940nm och behöver runt 5V och 3 mA att fungera.

tsop32838-chipet erbjuder tre stift: vänd mot sin bakre halvklotformiga, den vänstra stiftet är den digitala utgången som tillhandahålls av sensorn, mittstiftet måste jordas och den högra stiftet måste jordas. Anslut till strömförsörjningen (mellan 2,5 V och 5,5 V).

Exempel2:

hur man slår på led med fjärrkontroll med Arduino och TSOP32838 IR-Sensor:

för att testa dess funktion kan vi designa en krets som den som följer. Spänningsdelaren för LED kan vara mellan 200 och 1000 ohm.

fotodiod, fototransistor, IR-Sensor

tanken är att kort slå på lysdioden när IR-sensorn upptäcker en infraröd signal. Men var försiktig, inte bara någon infraröd signal är giltig, men bara den modulerade vid 38 KHz. För att testa denna krets kan vi därför inte använda någon infraröd LED: vi måste använda en kontrollknapp fjärrkontroll som vi har till hands (från en TV, en DVD-spelare, en dator etc.). En gång laddad på Arduino-kortet skissen som presenteras för nästa, om vi pekar på fjärrkontrollen på IR-sensorn och trycker på några av dess knappar, bör vi se LED-lampan lysa. På detta sätt kommer vi att använda IR-sensorn som om det var en strömbrytare, som lyser upp lysdioden medan den upptäcker den signalen och stänger av den när den inte längre detekteras.

sensorutgången är ansluten till den digitala ingångsstiftet 2 på Arduino-kortet och lysdioden är ansluten till sin digitala utgångsstift12):

programplanering:

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

int irPin=2;
int ledPin=12;
void setup() {
pinMode (irPin, ingång);
pinMode(ledPin, utgång);
}
void loop () {
om (pulseIn (irPin, låg) > 0) {
fördröjning (100);
digitalWrite (ledPin, hög);
fördröjning(200);
digitalWrite (ledPin, låg);
}
}

Programmeringsförklaring:

först definierar jag heltalstyp variabel för IR-sensor och led

1
2
3

int irPin = 2;
int ledPin=12;

i inställningsfunktionen ställer jag in IR-sensor som ingång och led som utgång

1
2
3

pinMode (irPin,ingång);
pinMode(ledPin, utgång);

eftersom signalen som emitteras av sensorn normalt är hög, ändras den till låg när knappen på en fjärrkontroll trycks in. Vad pulseIn () – funktionen är att pausa skissen tills en signal detekteras låg, vars varaktighet inte riktigt intresserar oss men logiskt kommer den alltid att vara större än noll. Därför, om tillståndet för if innebär att en knapp på en fjärrkontroll trycktes

1
om (pulseIn (irPin, låg) > 0) {

det är nödvändigt att vänta en viss tid (vilket beror på den specifika fjärrkontrollmodellen) efter detektering av den första låga signalen eftersom varje knapptryckning ger flera svängningar mellan höga och låga värden. Även om han fysiskt inte har något att se, kan vi förstå denna väntan som om det var ett sätt att undvika en “studsa” (fenomen som studeras när vi behandlar tryckknapparna). När denna väntetid har gått, bör signalen från sensorn ha återgått till sitt vilotillstånd (högt värde).

1
fördröjning(100);

vi håller lysdioden på i några millisekunder. Under denna tid kommer skissen inte att kunna upptäcka andra tangenttryckningar som kommer från fjärrkontrollen. Vi kunde också ha skickat ett meddelande till” Serial monitor ” som meddelade pulsationen.

1
2
3
4
5
6
7
8
9

digitalWrite (ledPin,hög);
fördröjning(200);
digitalWrite (ledPin, låg);
}
}

Exempel3:

hur man tar emot fjärrkontrollkommandot på seriell bildskärm med TSOP32838 IR-Sensor med Arduino:

först och främst ladda ner det nödvändiga biblioteket för IR-sensor

Arduino IRremote library

kretsschema:

fotodiod, 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;
void setup(){
seriell.börja(9600);
irrecv.enableIRIn();
}
void loop () {
om (irrecv.avkoda (&resultat)!=0) {
om (resultat.decode_type = = NEC) {
seriell.tryck (“NEC: “);
} annars om (resultat.decode_type = = SONY) {
seriell.Skriv ut (“SONY: “);
} annars om (resultat.decode_type = = RC5) {
seriell.Skriv ut (“RC5: “);
} annars om (resultat.decode_type = = RC6) {
seriell.Skriv ut (“RC6: “);
} annars om (resultat.decode_type = = okänd) {
seriell.Skriv ut (“okänt: “);
}
serie.println (resultat.värde, HEX);
irrecv.fortsätt();
}
}

Programmeringsförklaring:

först importerar jag det nödvändiga biblioteket

1
#inkludera <IRremote.h>

sedan definierar jag digital ingångsstift för mottagare

1
int receiverPin = 11;

sedan skapar jag ett objekt som heter” irrecv ” av typen IRrecv

1
IRrecv irrecv (receiverPin);

sedan förklarar jag en variabel av en speciell typ, “decode_results”.

1
decode_results resultat;

sedan startar jag mottagaren i void step-funktionen

1
irrecv.enableIRIn();

sedan i void loop ser jag ut för att se om något modulerat IR-mönster har upptäckts. Om så är fallet läser jag det och jag håller det helt i specialvariabeln “resultat” , i hexadecimal talform

1
om (irrecv.avkoda (&resultat)!=0) {

då tittar jag på vilken typ av handelsmönster det är, om det är från en som erkänns av biblioteket

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

om (resultat.decode_type = = NEC) {
seriell.Skriv ut (“NEC: “);
} annars om (resultat.decode_type = = SONY) {
seriell.Skriv ut (“SONY: “);
} annars om (resultat.decode_type = = RC5) {
seriell.Skriv ut (“RC5: “);
} annars om (resultat.decode_type = = RC6) {
seriell.Skriv ut (“RC6: “);
} annars om (resultat.decode_type = = okänd) {
seriell.Skriv ut (“okänt:”);
}

och sedan visar jag det mottagna mönstret (i hexadecimalt format) på seriell kanal

1
serie.println (resultat.värde, HEX);

när mönstret har avkodats, återaktivera lyssningarna för att upptäcka nästa möjliga mönster

1
2
3

irrecv.fortsätt();
}

Example4:

hur man gör fjärrkontroll med TSOP32838 IR-Sensor med Arduino:

först och främst ladda ner det nödvändiga biblioteket för IR-sensor

Arduino IRremote library

Använd samma krets som jag använde i föregående projekt

kretsschema:

fotodiod, 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

#inkludera <IRremote.h>
int receiverPin = 11;
IRrecv irrecv(receiverPin);
decode_results resultat;
void setup(){
seriell.börja(9600);
irrecv.enableIRIn();
}
void loop () {
int i;
om (irrecv.avkoda (&resultat)!=0) {
åtgärd ();
för (i=0; jag<2; Jag++) {
irrecv.fortsätt();
}
}
}
void action () {
växla(resultat.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