Fotodiode, Fototransistor und IR-Sensor mit Arduino
Inhaltsverzeichnis
Beschreibung:
Photodiode, Fototransistor und IR-Sensor mit Arduino – Eine Photodiode ist ein Gerät, das, wenn es durch Licht angeregt wird, in der Schaltung einen proportionalen Stromfluss erzeugt (und messbar ist). Auf diese Weise können sie als Lichtsensoren dienen, obwohl es zwar stimmt, dass es Fotodioden gibt, die besonders empfindlich für sichtbares Licht sind, die überwiegende Mehrheit jedoch insbesondere für Infrarotlicht.
Es muss berücksichtigt werden, dass trotz eines Verhaltens in ähnlichem Aussehen wie LDRs Ein sehr wichtiger Unterschied zu diesen (zusätzlich Empfindlichkeit gegenüber anderen Wellenlängen) ist die Reaktionszeit auf Änderungen von Dunkelheit zu Beleuchtung und umgekehrt, die bei Photodioden viel geringer ist.
Wie Standarddioden haben Fotodioden eine Anode und eine Kathode, Aber seien Sie vorsichtig, damit es so funktioniert, wie wir es wünschen, muss eine Fotodiode immer sein Verbinden Sie sich mit der Schaltung in umgekehrter Polarität. Natürlich ist die gleiche wie bei Dioden üblich, normalerweise ist die Anode länger als die Kathode (wenn sie gleich lang sind, sollte die Kathode in irgendeiner Weise markiert werden).
Sein interner Betrieb ist wie folgt: Wenn die Fotodiode direkt polarisiert ist, hat das Licht, das darauf fällt, keinen nennenswerten Effekt und daher verhält sich das Gerät wie eine gemeinsame Diode. Wenn es umgekehrt polarisiert ist und keine Lichtstrahlung es erreicht, verhält es sich auch wie eine Diode normal Da die durch den Stromkreis fließenden Elektronen nicht genug Energie haben, um ihn zu durchlaufen, bleibt der Stromkreis offen. Aber in dem Moment, in dem die Photodiode Lichtstrahlung innerhalb eines Wellenformlängenbereichs empfängt, erhalten die Elektronen genug Energie, um die umgekehrte Photodiodenbarriere zu “springen” und Ihren Weg fortzusetzen.
Example1: So überprüfen Sie das Verhalten der Fotodiode
Um ihr Verhalten zu testen, können wir die folgende Schaltung verwenden. Diese Schaltung ist identisch mit der, die wir bei den LDRs gesehen haben, und ersetzt diese durch eine Fotodiode (die durch ein neues Symbol gekennzeichnet ist, das wir bisher nicht gesehen hatten). Der Wert Ihres Spannungsteilers hängt von der in der Umgebung vorhandenen Lichtmenge (Infrarot) ab: Höhere Widerstände verbessern die Empfindlichkeit, wenn nur eine Lichtquelle vorhanden ist, und niedrigere Widerstände verbessern sie, wenn viele vorhanden sind (die Sonne selbst oder die Lampen sind Infrarotquellen); Ein Wert von 100 KΩ kann zunächst in Ordnung sein. Beachten Sie auch, dass die Kathode der Fotodiode (der kürzeste Anschluss, denken Sie daran) an die Stromversorgung angeschlossen ist.
Der Betrieb dieser Schaltung ist wie folgt: solange die Fotodiode kein Infrarotlicht erkennt, wird über den Analogeingang der Arduino-Platine (in diesem Fall die Zahl 0) eine Spannung von 0 V gemessen, da die Schaltung als Schaltung fungiert geöffnet. Wenn die Lichtintensität auf der Fotodiode zunimmt, erhöht sich die Anzahl der Elektronen, die durch sie hindurchtreten (dh die Stromintensität). Dies bedeutet, dass, da der “Pull-Down” -Widerstand durch das Ohmsche Gesetz festgelegt ist, auch die am analogen Eingangspin gemessene Spannung ansteigt, bis zu einem Moment, in dem die Fotodiode beim Empfang von viel Licht keinen Widerstand verursacht Kaum Widerstand gegen den Durchgang der Elektronen und daher liest das Arduino-Board eine maximale Spannung von 5 V.
Wir haben hinzugefügt eine LED verbunden zu PWM ausgang pin #5 wie wir haben, wenn wir sah die LDRs zu haben eine sichtbare weg (wortspiel beabsichtigt) von erkennen die inzidenz von infrarot licht auf die photodiode. Wie Sie im verwendeten Code (siehe unten) sehen können, haben wir die LED-Helligkeitsintensität von der von der Fotodiode erfassten Infrarotlichtmenge bestimmt: Je mehr Infrarotstrahlung empfangen wird, desto heller wird die LED.
Programmierung:
1
2
3
4
5
6
7
8
9
10
11
12
|
int photodiode_value;
int bright_LED;
void setup(void) {
Seriell.beginnen(9600);
}
leere Schleife(void) {
photodiode_value = analogRead(0);
Seriell.println(photodiode_value);
bright_LED = Karte(photodiode_value, 0, 1023, 0, 255);
analogWrite (5, bright_LED);
verzögerung(100);
}
|
Programmierung Erklärung:
Zunächst definiere ich für den Empfang des Fotodiodenwerts eine ganzzahlige Typvariable
1
|
int Photodiode_wert;
|
Dann definiere ich eine ganzzahlige Typvariable für den LED-Wert “Wert an die LED gesendet”
1
|
int bright_LED;
|
In der Void-Loop-Funktion erhalte ich zuerst den Wert mit der analogRead-Funktion und speichere diesen Wert in der Variablen photodiode_value und verwende dann serial .println zum Drucken von Werten auf dem seriellen Monitor
1
2
3
|
photodiode_value = Analoglesen(0);
Seriell.println(Photodiode_wert);
|
Die Helligkeit der LED ist proportional zur Menge des empfangenen Infrarotlichts
1
2
3
|
bright_LED = Karte (photodiode_value, 0, 1023, 0, 255);
analogWrite(5, bright_LED);
|
fototransistor:
Eine andere Art von Lichtsensoren zusätzlich zu Fotodioden werden Fototransistoren genannt, dh lichtempfindliche Transistoren (normalerweise auch Infrarot). Seine Funktionsweise ist wie folgt: Wenn Licht auf seine Basis fällt, erzeugt es einen Strom, der den Transistor in einen leitenden Zustand bringt. Daher ist ein Fototransistor gleich einem gemeinsamen Transistor mit dem einzigen Unterschied, dass der Basisstrom Ib vom empfangenen Licht abhängig ist. Tatsächlich gibt es Fototransistoren, die auf beide Arten arbeiten können: entweder als Fototransistoren oder als gemeinsame Transistoren mit einem bestimmten spezifischen Basisstrom Ib.
Der Fototransistor ist viel empfindlicher als die Fotodiode (aufgrund des Verstärkungseffekts des Transistors selbst), da die Ströme, die mit einer Fotodiode erhalten werden können, wirklich begrenzt sind. Wenn wir also einen selbstgebauten Fototransistor bauen möchten, reicht es aus, einem Transistor eine gemeinsame Fotodiode hinzuzufügen, die die Kathode der Fotodiode mit dem Kollektor des Transistors und die Anode mit der Basis verbindet. In dieser Konfiguration würde der von der Photodiode gelieferte Strom (der zur Basis des Transistors zirkulieren würde) β-mal verstärkt.
In vielen Schaltungen finden wir einen Fototransistor in kurzer Entfernung von einer Infrarot emittierenden LED einer kompatiblen Wellenlänge. Dieses Paar von Komponenten ist nützlich, um die Zwischenlage eines Hindernisses zwischen ihnen zu erkennen (aufgrund der Unterbrechung des Lichtstrahls) und wirkt daher als Schalter Optiker. Sie können in einer Vielzahl von Anwendungen verwendet werden, wie zum Beispiel in Detektoren der Weitergabe einer Kreditkarte (an einem Geldautomaten) oder der Einführung des Papiers (in einem Drucker) oder als Tachometer, unter vielen anderen. Ein Drehzahlmesser ist ein Gerät, das die Umdrehungen pro Minute eines Hindernisses zählt, das einem sich drehenden Rad oder Blatt ausgesetzt ist (normalerweise aufgrund des Betriebs eines Motors); Das heißt, es wird verwendet, um die Rotationsgeschwindigkeit eines Objekts zu messen.
Der Fototransistor besteht aus zwei Anschlüssen, die der Anode und Kathode der LED entsprechen, und zwei Anschlüssen, die dem Kollektor und Emitter eines NPN-Fototransistors entsprechen. Im Allgemeinen möchten wir die Anschlüsse der LED an einen geschlossenen Stromkreis anschließen, der kontinuierlich mit Strom versorgt wird (Anode an Quelle, Kathode an Masse), den Kollektoranschluss des Fotoschalters an eine Stromquelle und den Emitteranschluss des Fotoschalters an einen digitalen Eingang unseres Arduino-Boards, um so das Auftreten von Strom beim Empfang von Beleuchtung erkennen zu können. Auf der anderen Seite sollten sowohl dieser Arduino-Board-Eingang als auch der Emitter durch denselben Pull-Down-Widerstand geerdet werden, um stabilere Messwerte zu erhalten (ein typischer Wert von 10 KΩ kann funktionieren, aber abhängig von der Schaltung kann es sein höhere Werte benötigen).
Das Infrarot-LED-plus-Fototransistor-Paar finden wir auch in einigen Komponenten, die als “Optokoppler” oder “Optoisolator” bezeichnet werden. Die schematische Darstellung ist normalerweise so:
Im Großen und Ganzen wirkt ein Optokoppler als geschlossener Stromkreis, wenn Licht von der LED zur Basis des Transistors kommt, und als offener Stromkreis, wenn die LED ausgeschaltet ist. Seine Hauptfunktion besteht darin, zwei Teile einer Schaltung so zu steuern und gleichzeitig zu isolieren, dass sie normalerweise mit unterschiedlichen Spannungen arbeiten (genau wie ein gewöhnlicher Transistor, jedoch auf etwas sicherere Weise). Physikalisch sind sie in der Regel Chips, die als mindestens vier Pins bieten (wie die Fotoschalter): zwei, die den Anschlüssen der LED entsprechen, und zwei, die dem Kollektor und dem Emitter des Fototransistors entsprechen (obwohl sie einen weiteren Stift haben können, der der Basis entspricht, wenn dies zulässig ist, steuern Sie standardmäßig auch die Intensität, die durch sie fließt). Beispiele für Optokoppler sind der 4N35 oder der CNY75, hergestellt von verschiedenen Firmen.
Das LED-Fototransistor-Paar ist auch nützlich, um Objekte zu erkennen, die sich in kleinen Abständen von ihm befinden. Wir werden dies in dem Abschnitt untersuchen, der den Abstandssensoren entspricht.
Fernbedienung mit IR-Sensor:
Ein unmittelbarer praktischer Nutzen eines Infrarot-Sender-Empfänger-Paares (z. B. einer LED und einer Fotodiode / Fototransistor), das sich in einem bestimmten Abstand befindet, ist das Senden von “Nachrichten” zwischen ihnen. Das heißt, da Infrarotlicht nicht sichtbar ist (und daher nicht “nervt”), können Impulse einer bestimmten Dauer und / oder Frequenz emittiert werden, die mehrere Meter entfernt empfangen und verarbeitet werden können, ohne lassen Sie es “bemerkt werden.” Das Gerät, das sie empfängt, muss dann so programmiert werden, dass es je nach Art des gelesenen Impulses unterschiedliche Aktionen ausführt.
In der Tat, jedes Gerät, das mit einem arbeitet “Fernbedienung” Es funktioniert auf ähnliche Weise, weil ich in seinem vorderen Teil einen Sensor haben muss Infrarotsensoren (auch “IR” -Sensoren genannt, aus dem Englischen “infra-red”), die die von der Fernbedienung ausgestrahlten Infrarotsignale empfangen. Und was drin ist, ist im Grunde eine LED, die Infrarotlichtimpulse nach einem bestimmten Muster aussendet, das dem Gerät die Reihenfolge signalisiert, die ausgeführt werden soll: es gibt einen Blinkcode zum Einschalten des Fernsehgeräts, einen anderen zum Wechseln der Kanäle usw.
Oben haben wir über “IR-Sensoren” und nicht über Fotodioden / Fototransistoren gesprochen, da erstere etwas ausgefeilter sind. Insbesondere erfassen IR-Sensoren kein Infrarotlicht, sondern nur das, das (dank der Integration eines internen Bandpassfilters und eines Demodulators) von einer Trägerwelle mit einer Frequenz von 38 kHz + 3 kHz moduliert wird. Dies bedeutet im Wesentlichen, dass nur die Signale gelesen werden, deren Informationen von einer 38-kHz-Wellenform übertragen werden. Dies soll verhindern, dass IR-Sensoren “verrückt” werden, wenn sie das von allen Seiten kommende Infrarotlicht empfangen (Sonne, elektrisches Licht … auf diese Weise reagieren sie nur auf sehr konkrete Signale).
Ein weiterer Unterschied zu Fotodioden / Fototransistoren besteht darin, dass IR-Sensoren eine binäre Antwort bieten: Wenn sie ein IR-Signal von 38 kHz erfassen, ist der Wert, den Sie von ihnen ablesen können, in den meisten Fällen NIEDRIG (0 V), und wenn sie nichts erkennen, ergibt Ihr Messwert einen HOHEN Wert (5 V). Dieses Verhalten wird normalerweise als “Aktiv” oder” niedrig aktiv ” bezeichnet.
Beispiele für IR-Sensoren sind TSOP32838 oder der GP1UX311QS. Als Merkmale haben die bekanntesten, dass ihr Empfindlichkeitsbereich zwischen Wellenlängen von 800 nm bis 1100 nm mit einer maximalen Reaktion bei 940 nm liegt und zum Betrieb etwa 5 V und 3 mA benötigt.
Die TSOP32838 chip bietet drei pins: mit blick auf seine zurück hemisphärische, die ganz links pin ist die digitale ausgang zur verfügung gestellt durch die sensor, die die mittleren pin muss geerdet werden und die ganz rechts pin muss geerdet werden. an die Stromversorgung anschließen (zwischen 2,5 V und 5,5 V).
Beispiel2:
So schalten Sie die LED mit der Fernbedienung mit Arduino und dem IR-Sensor TSOP32838 ein:
Um den Betrieb zu testen, können wir eine Schaltung wie die folgende entwerfen. Der Spannungsteiler für die LED kann zwischen 200 und 1000 Ohm liegen.
Die Idee ist, die LED kurz einzuschalten, wenn der IR-Sensor ein Infrarotsignal erkennt. Aber Vorsicht, nicht irgendein Infrarotsignal ist gültig, sondern nur das mit 38 kHz modulierte. Daher, um diese Schaltung zu testen, nicht Wir können jede Infrarot-LED verwenden: wir müssen eine Fernbedienung verwenden, die wir zur Hand haben (von einem Fernseher, einem DVD-Player, einem Computer usw.). Wenn wir diese Fernbedienung auf den IR-Sensor richten und einige ihrer Tasten drücken, sollte die LED aufleuchten. Auf diese Weise verwenden wir den IR-Sensor wie einen Schalter, der die LED beleuchtet, während dieses Signal erkannt wird, und sie ausschaltet, wenn sie nicht mehr erkannt wird.
die sensor ausgang verbunden ist die digitale eingang pin2 der Arduino board und die LED verbunden ist seine digitale ausgang pin12):
Programmierung:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
int irPin = 2;
int ledPin = 12;
leere setup () {
pinMode (irPin, EINGANG);
pinMode (ledPin, AUSGANG);
}
leere Schleife () {
if(pulseIn(irPin, NIEDRIG) > 0) {
verzögerung(100);
digitalWrite (ledPin, HOCH);
Verzögerung(200);
digitalWrite (ledPin, NIEDRIG);
}
}
|
Programmiererklärung:
Zuerst definiere ich eine ganzzahlige Typvariable für IR-Sensor und LED
1
2
3
|
int irPin = 2;
int ledPin = 12;
|
in der Setup-Funktion setze ich den IR-Sensor als Eingang und die LED als Ausgang
1
2
3
|
pinMode (irPin, EINGANG);
pinMode (ledPin, AUSGANG);
|
Da das vom Sensor abgegebene Signal normalerweise HOCH ist, wechselt es beim Drücken der Taste einer Fernbedienung zu NIEDRIG. Die Funktion pulseIn () pausiert die Skizze, bis ein Signal erkannt wird NIEDRIG, dessen Dauer uns nicht wirklich interessiert, aber logischerweise immer größer als Null ist. Wenn daher der Zustand des if bedeutet, dass eine Taste auf einer Fernbedienung gedrückt wurde
1
|
wenn (pulseIn (IR), NIEDRIG) > 0) {
|
Es ist notwendig, eine bestimmte Zeit (die vom spezifischen Fernbedienungsmodell abhängt) nach der Erkennung des ersten NIEDRIGEN Signals zu warten, da jeder Tastendruck mehrere Schwingungen zwischen HOHEN und NIEDRIGEN Werten erzeugt. Obwohl er physisch nichts zu sehen hat, können wir dieses Warten so verstehen, als wäre es eine Möglichkeit, einen “Sprung” zu vermeiden (Phänomen, das untersucht wird, wenn wir die Druckknöpfe behandeln). Nach Ablauf dieser Wartezeit sollte das Signal des Sensors in seinen Ruhezustand (HOHER Wert) zurückgekehrt sein.
1
|
verzögerung(100);
|
Wir halten die LED für einige Millisekunden an. Während dieser Zeit kann der Sketch keine anderen Tastenanschläge von der Fernbedienung erkennen. Wir hätten auch eine Nachricht an den “seriellen Monitor” senden können, die die Pulsation benachrichtigt.
1
2
3
4
5
6
7
8
9
|
digitalWrite (ledPin, HOCH);
Verzögerung(200);
digitalWrite (ledPin, NIEDRIG);
}
}
|
Beispiel3:
So empfangen Sie den Fernbedienungsbefehl auf dem seriellen Monitor mit dem TSOP32838 IR-Sensor mit Arduino:
Laden Sie zunächst die erforderliche Bibliothek für den IR-Sensor herunter
Arduino IRremote library
Schaltplan:
Programmierung:
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.beginnen(9600);
irrecv.enableIRIn();
}
leere Schleife() {
wenn (irrecv.dekodieren(&Ergebnisse) !=0) {
wenn (Ergebnisse.decode_type == NEC) {
Seriell.drucken(“): “);
} else if (Ergebnisse.decode_type == SONY) {
Seriell.drucken(“): “);
} else if (Ergebnisse.decode_type == RC5) {
Seriell.drucken(“RC5: “);
} else if (Ergebnisse.decode_type == RC6) {
Seriell.drucken(“RC6: “);
} else if (Ergebnisse.decode_type == UNBEKANNT) {
Seriell.print(“Unbekannt: “);
}
Seriell.println(Ergebnisse.wert, HEX);
irrecv.lebenslauf();
}
}
|
Programmiererklärung:
Zuerst importiere ich die erforderliche Bibliothek
1
|
# include <IRremote.h>
|
Dann definiere ich den digitalen Eingangs-Pin für den Empfänger
1
|
int receiverPin = 11;
|
Dann erstelle ich ein Objekt namens “irrecv” vom Typ IRrecv
1
|
IRRECV irrecv(receiverPin);
|
Dann deklariere ich eine Variable eines speziellen Typs, “decode_results”.
1
|
decode_results Ergebnisse;
|
Dann starte ich den Empfänger in void step Funktion
1
|
irrecv.enableIRIn();
|
Dann schaue ich in der Void-Schleife, ob ein moduliertes IR-Muster erkannt wurde. Wenn ja, lese ich es und behalte es vollständig in der speziellen Variablen “results” in hexadezimaler Zahlenform
1
|
wenn (irrecv.dekodieren(&Ergebnisse) !=0) {
|
Dann schaue ich mir an, um welche Art von Handelsmuster es sich handelt, wenn es von einem von der Bibliothek anerkannten stammt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
wenn (Ergebnisse.decode_type == NEC) {
Seriell.drucken(“NEC: “);
} else if (Ergebnisse.decode_type == SONY) {
Seriell.drucken(“): “);
} else if (Ergebnisse.decode_type == RC5) {
Seriell.drucken(“RC5: “);
} else if (Ergebnisse.decode_type == RC6) {
Seriell.drucken(“RC6: “);
} else if (Ergebnisse.decode_type == UNBEKANNT) {
Seriell.print(“Unbekannt: “);
}
|
Und dann zeige ich das empfangene Muster (im Hexadezimalformat) auf dem seriellen Kanal
1
|
Seriell.println(Ergebnisse.wert, HEX);
|
Sobald das Muster decodiert wurde, reaktivieren Sie die Listen, um das nächstmögliche Muster zu erkennen
1
2
3
|
irrecv.lebenslauf();
}
|
Example4:
wie zu machen fernbedienung mit TSOP32838 IR Sensor mit Arduino:
Erste von alle download die erforderlich bibliothek für IR sensor
Arduino IRremote bibliothek
Verwenden die gleiche schaltung wie ICH verwendet in die vorherigen projekt
schaltplan:
Programmierung:
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
|
# include <IRremote.h>
int receiverPin = 11;
IRrecv irrecv(receiverPin);
decode_results Ergebnisse;
void setup(){
Seriell.beginnen(9600);
irrecv.enableIRIn();
}
leere Schleife(){
int i;
wenn (irrecv.dekodieren(&Ergebnisse)!=0) {
action();
für (i=0; i<2; i++) {
irrecv.lebenslauf();
}
}
}
leere Aktion() {
Schalter(Ergebnisse.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