IR Näherungssensor selber bauen

Über den Beitrag

Eigentlich hatte ich meine Reihe über Licht- und Näherungssensoren mit meinem letzten, zusammenfassenden Beitrag abgeschlossen. Allerdings kam in mir noch die Frage auf, ob man einen IR Näherungssensor nicht auch selber bauen kann (IR = Infrarot). Davon handelt nun dieser Beitrag. 

Konzepte

Zunächst hatte ich mir die Frage noch allgemeiner gestellt: Kann man generell Näherungssensoren oder Bewegungssensoren mit einfachen Mitteln auch selber bauen? Zunächst einmal braucht man dazu eine physikalische Messgröße, mit der eine Annäherung detektiert werden kann. Dabei wollte ich eine Lösung, bei der Signal und Sensor auf nur einer Seite kontrolliert werden. Also nicht etwas wie beispielsweise Lichtschranken oder Magnet / Hallsensor Kombinationen.

Beim Durchgehen durch die verschiedenen physikalischen Methoden wie Radar, Licht (Time of Flight), Ultraschall, usw. fiel meine Wahl ziemlich schnell auf Infrarotlicht als einfachste Lösung. Der Sensor soll also Infrarotlicht aussenden und das reflektierte Signal detektieren. Grundsätzlich gibt es dabei zwei Möglichkeiten, nämlich gepulste und nicht gepulste Infrarotstrahlung. Ich beginne mit Letzterem.

IR Näherungssensor selber bauen: ungepulst

LED Auswahl

Als infrarote Strahlungsquelle eignet sich am besten eine LED. Diese gibt es vorwiegend mit den Wellenlängen 850 oder 940 nm. Als Empfänger dient eine Infrarot Fotodiode. Beides bekommt ihr, auch häufig im Doppelpack, für wenig Geld zum Beispiel bei Amazon. Wenn ihr dem Link folgt, dann findet ihr dort sowohl dreibeinige Empfänger wie auch die zweibeinigen. In diesem Abschnitt reden wir über die Zweibeiner, im nächsten Abschnitt (gepulstes IR) über die Dreibeiner.

IR LED (oben) und IR Fotodiode (unten)

Bei der Auswahl der IR LED solltet ihr auf die Leistung schauen und diese nicht zu gering wählen. Meine LEDs für diesen Beitrag vertragen bis zu 100 Milliampere bei 1,2 bis 1,5 Volt und damit komme ich gut aus.

Die Schaltung

IR LED

An den Daten oben seht ihr schon, dass die IR LEDs vom Stromverbrauch her in einer anderen Liga spielen als herkömmliche LEDs. Keinesfalls solltet ihr sie wie gewohnt direkt an einen I/O Pin eures Arduinos oder anderen Microcontrollers anschließen. Ich habe mich dafür entschieden, eine externe 5V Spannungsversorgung zu verwenden. Ein Arduino I/O Pin schaltet die IR LED über einen NPN Transistor (547B). Dieser kommt mit 100 Milliampere noch klar, mehr darf es aber auch nicht sein. 

Es fallen 1,2 bis 1,5 Volt über der IR LED ab und ca. 0,5 V über dem Transistor (siehe Datenblatt). Bei VCC = 5 Volt bleiben 3,0 bis 3,3 Volt für den Vorwiderstand. Bei 100 mA Strom müsste man entsprechend einen Widerstand von 35 bis 38 Ohm einsetzen. Ich habe einen 39 Ohm Widerstand eingesetzt und 84 Milliampere gemessen.

IR Näherungssensor selber bauen - Schaltung für ungepulste Methode
IR Näherungssensor selber bauen – Schaltung für ungepulste Methode
... und hier das Ganze noch einmal schematisch
… und hier das Ganze noch einmal schematisch

Die Fotodiodenseite

Die Fotodiode wird in Sperrrichtung (!) angeschlossen. Tut irgendwie weh, nicht wahr? Gehört aber so, denn durch die Infrarotstrahlung wird sie durchlässig und das proportional zur Strahlungsintensität. Mit steigendem Strom erhöht sich der Spannungsabfall über dem 10 kOhm Widerstand. Und damit haben wir unsere Messgröße zur Abstandsmessung.

Und was soll der Anschluss an ARef?

Bei Spannungsmessungen mittels analogRead() und Verwendung einer externen Spannungsquelle für seinen Sensor sollte man die externe Spannungsquelle als Bezugsgröße nehmen. Das kommt hier nicht so sehr darauf an, ist aber sauberer.

Aufbau auf dem Breadboard

Anordnung von IR LED und IR Fotodiode auf dem Breadboard
Anordnung von IR LED und IR Fotodiode auf dem Breadboard

Der eine oder andere mag sich fragen, ob die IR LED bei dem Aufbau oben nicht zu sehr direkt auf die Fotozelle strahlt. Der Einfluss hält sich aber in Grenzen, da die IR LED vorwiegend nach oben abstrahlt.

Die externe Spannungsversorgung

Ein kleiner Tipp noch: als externe Spannungsversorgung für Breadboardversuche empfehle ich folgendes Modul, dass ihr direkt in das Breadboard stecken könnt:

Stromversorgung für das Breadboard
Stromversorgung für das Breadboard

Sowas gibt’s – wo wohl? – ja genau, bei Amazon zum Beispiel.

Der Sketch (ungepulst)

Zunächst liest der Arduino das Signal bei ausgeschalteter IR LED. Dadurch messen wir den Einfluss der IR Umgebungsstrahlung (baseSignal), verursacht z. B. durch Lampen- oder Tageslicht. Einzelmessungen können recht stark schwanken. Deswegen liest der Arduino fünfzig Werte aus und mittelt sie. Ich konnte die Werte noch erheblich stabilisieren, indem ich eine Pause von 500 Mikrosekunden zwischen den Einzelmessungen eingefügt habe. Dann schaltet der Arduino die IR LED ein, misst erneut fünfzig Werte und mittelt sie (rawSignal). Die Differenz (proximity) ist der dimensionslose Abstandswert.

Bei fünfzig Messwerten würde für baseSignal und rawSignal ein „unsigned int“ ausreichen. Ich habe zwischendurch auch mit mehr Messwerten gespielt. Deswegen sind diese Variablen als „unsigned long“ definiert. 

Ein Arduino benötigt für einen analogRead() ungefähr 100 Mikrosekunden. Damit brauchen fünfzig Messungen 50 x (500 + 100) Mikrosekunden, also ca. 3 Millisekunden. Nur für diese Zeit ist die IR LED angeschaltet. Da nur ein Messzyklus pro Sekunde stattfindet, hält sich der Stromverbrauch damit, trotz der stromfressenden IR LED, in Grenzen.

const int irLEDPin =  5;  
const int irReceiverPin = A0;
unsigned long baseSignal, rawSignal; 
unsigned int proximity;

void setup()   {
  Serial.begin(9600);
  analogReference(EXTERNAL);
  pinMode(irLEDPin, OUTPUT);
}

void loop(){
  baseSignal = 0;
  rawSignal = 0;
  delay(1000);
  
  for(int i=0; i<50; i++){
    baseSignal += analogRead(irReceiverPin);
    delayMicroseconds(500);
  }
  baseSignal /= 50;
  Serial.print("Ambient IR Light: "); Serial.print(baseSignal);
  
  digitalWrite(irLEDPin, HIGH);
  for(int i=0; i<50; i++){
    rawSignal += analogRead(irReceiverPin);
    delayMicroseconds(500);
  }
  rawSignal /= 50;
  Serial.print("   Raw Signal: "); Serial.print(rawSignal);
  proximity = baseSignal - rawSignal;
  Serial.print("   Proximity: "); Serial.println(proximity);
  digitalWrite(irLEDPin,LOW);
}

 

Das Ergebnis

Mit den von mir gewählten Parametern, also vor allem dem IR Strom, hat der Selbstbausensor eine Reichweite von ca. fünfzig bis sechzig Zentimetern. Die Reichweite hängt natürlich von der Größe des Objekts, seiner Oberflächenstruktur und dem Material ab. Einige Materialien reflektieren IR Strahlung sehr gut, andere absorbieren einen großen Teil. Ein weißes DIN-A4-Blatt wurde bis über siebzig Zentimeter detektiert.

Die Screenshots weiter unten zeigen die Ausgabe auf dem seriellen Monitor bei Annäherung meiner Hand bis kurz vor die Fotodiode.

Der erste Screenshot zeigt das Ergebnis bei wenig Umgebungslicht, nämlich abends und bei schwachem Deckenlicht. Der Messwert bei nicht eingeschalteter IR LED (Ambient IR Light) liegt bei 1022 bis 1023, d.h. die Fotozelle ist fast undurchlässig. Bei eingeschalteter IR LED (Raw Signal) und keinem Objekt in Reichweite liegt der Messwert bei ca. 1008. Es fließt also ein geringer Strom durch die Fotodiode. Dieser ist bedingt durch die Querstrahlung der IR LED auf die Fotodiode und durch diffuse Reflexion an Wänden und Gegenständen. Mit fortschreitender Annäherung sinkt dann der Widerstand der Fotodiode. Entsprechend groß wird die Differenz zwischen dem Raw Signal und dem Ambient IR Light.

Annäherung bei wenig Umgebungslicht
Annäherung bei wenig Umgebungslicht

Der zweite Screenshot zeigt das Ergebnis unter dem Einfluss meiner 40 Watt Halogen Schreibtischlampe, Licht von schräg oben (damit sie nicht das IR Signal reflektiert) und in ca. fünfzig Zentimeter Entfernung. Der Ambient IR Light Wert ist entsprechend niedrig (also viel Umgebungslicht), trotzdem erhält man ein eindeutiges Signal des sich nähernden Objekts. Interessant ist noch, dass der Ambient IR Light Wert bei Annäherung erst leicht sinkt und dann ansteigt. Erklärung: zuerst reflektiert meine Hand das Licht der Schreibtischlampe und sorgt für mehr Licht, dann verdeckt sie es zunehmend.

Annäherung bei viel Umgebungslicht
Annäherung bei viel Umgebungslicht

IR Näherungssensor selber bauen: gepulst

Gepulste IR Signale

Ich werde in einem meiner nächsten Beiträge etwas über Infrarotsender (Fernbedienungen) schreiben. Deswegen möchte ich an dieser Stelle nicht allzu sehr ins Detail gehen. Nur so viel: in der Übertragungstechnik wird gepulstes Infrarotlicht eingesetzt. Die Pulsfrequenz liegt dabei meistens bei 38 Kilohertz. Auf der Sendeseite kann man dieselben IR LEDs einsetzen, nur eben mit gepulstem Signal. Der Clou befindet sich auf der Empfängerseite. Diese „versteht“ nur die gepulsten Signale. Das hat den Vorteil, dass die Übertragung nicht durch das Umgebungslicht beeinflusst wird. Die Empfänger sind die oben erwähnten „Dreibeiner“:

IR Näherungssensor selber bauen -
Empfängermodule für gepulste IR Signale
Empfängermodule für gepulste IR Signale

Ihr findet diese Empfänger unter der Bezeichnung VS1838B oder TSOPxx38 mit xx = z.B. 18, 22, 24, 48. Enden die Bezeichnungen nicht auf 38, z.B. TSOP2256, dann liegt die Pulsfrequenz nicht bei 38 kHz, sondern in diesem Beispiel bei 56 kHz.

Hier ein Funktionsschema eines IR Empfängers:

Schematischer Aufbau eines Empfängermoduls für gepulste IR Signale
Schematischer Aufbau eines Empfängermoduls für gepulste IR Signale

Der Empfänger verstärkt und demoduliert das eingehende Signal, d.h. er macht aus einem Puls Signal ein Dauersignal. Wird ein Signal detektiert, schaltet der Transistor (oder Schmitt-Trigger) zwischen 1 und 2 durch. An Pin 1 gibt es entsprechend einen Spannungsabfall.

Die Schaltung

IR LED

Zunächst einmal muss ein gepulstes Signal gesendet werden. Das lässt sich an einem PWM-fähigen (Pulsweitenmodulation) Arduino Pin leicht bewerkstelligen. Ein IR Empfänger für gepulste Signale ist allerdings wesentlich empfindlicher als die zuvor verwendete Fotodiode. Verwendet man denselben IR LED Strom wie oben, dann gibt es durch die seitliche Abstrahlung und durch Reflexion weiter entfernter Wände und Gegenstände ein Dauersignal. Beim Herumprobieren bin ich letztlich mit einem 330 Ohm Widerstand vor der IR LED glücklich geworden. Nehmt am besten ein Poti statt des Festwiderstandes für eure eigenen Versuche.

Die Schaltung funktionierte nur zuverlässig, wenn ich a) überhaupt einen Transistor auf der Receiverseite eingesetzt habe, b) den Receiver hinter den Transistor platzierte (was man eigentlich nicht tut) und c) nur mit den Receivermodell mit Metallgehäuse. Bei Verwendung alternativer IR-Receiver habe ich festgestellt, dass diese wieder andere Einstellungen brauchten. Das Ganze ist eine ziemliche Fummelei und nur bedingt zum _Nachbau zu empfehlen!

Hinweis: Die Belegung der Pins des Empfängermoduls kann variieren. Schaut in das Datenblatt eures Moduls!

... und auch hier noch einmal die schematische Darstellung
… und auch hier noch einmal die schematische Darstellung

Die Empfängerseite

Ein IR Empfänger für gepulste Signale zieht ca. 0.6 Milliampere Strom. Das ist nicht viel. Aber eins kommt zum anderen und gerade bei batteriebetriebenen Projekten möchtet ihr den Stromverbrauch wahrscheinlich gering halten. Deshalb schalte ich den Empfänger auch hier über einen Transistor nur dann ein, wenn er benötigt wird.

Aufbau auf dem Breadboard

Aufbau für Pulsmethode
Aufbau für Pulsmethode

Auch mit dem reduzierten IR LED Strom musste ich die Empfängerdiode noch gegen die IR LED abschirmen. Das habe ich hier provisorisch-pragmatisch mit ein paar Legosteinen gelöst, die ich mir von meinem Sohn geborgt habe. Außerdem habe ich die Beinchen des Empfängermoduls um 90 Grad geknickt.

Der Sketch

Der Sketch ist noch einfacher als bei der Nicht-Puls-Methode, da man sich die Messung des Umgebungslichtes sparen kann. Das 38 Kilohertz Signal wird über die tone() Funktion erzeugt und über noTone() wieder abgeschaltet. Auch hier habe ich eine Pause zwischen den Einzelmessungen eingefügt, bin aber mit 50 Mikrosekunden hingekommen. Allerdings musste ich vorab ein 10 Millisekunden langes Signal einfügen (Zeile 20), um vernünftige Werte zu bekommen. Das hängt mit der AGC (automatic gain control) Einheit im Empfänger zusammen (siehe Schema oben). Diese sorgt für eine automatische Verstärkung des Signals, sie braucht aber ein bisschen Zeit, um sich einzustellen.

const int irLEDPin =  5;   
const int irReceiverDataPin = A0;
const int irReceiverEnablePin = 10;
unsigned long proximity;


void setup()   {
  Serial.begin(9600);
  analogReference(EXTERNAL);
  pinMode(irReceiverEnablePin, OUTPUT);
  pinMode(irLEDPin, OUTPUT);
}

void loop(){
  proximity = 0;
  delay(1000);
  
  tone(irLEDPin, 38000);
  digitalWrite(irReceiverEnablePin, HIGH);
  delay(10);
  for(int i=0; i<50; i++){
    proximity += analogRead(irReceiverDataPin);
    delayMicroseconds(50);
  }
  proximity /= 50;
  Serial.print("Proximity: "); Serial.println(proximity);
  noTone(irLEDPin);
  digitalWrite(irReceiverEnablePin, LOW);
}

 

Das Ergebnis

Ergebnis der Pulsmethode
Ergebnis der Pulsmethode

Ich habe versucht, mich dem Sensor mit einer ähnlichen Geschwindigkeit zu nähern wie oben. Ihr seht einen hohen Wert, wenn kein Objekt in Reichweite ist, da der im Empfänger integrierte Transistor gesperrt ist. Kommt ein Objekt in Reichweite, dann geht der Wert sehr schnell auf ein Minimum und bleibt konstant. Durch den internen Aufbau reagiert das Empfängermodul quasi digital. In dem kurzen Übergangsbereich mit mittleren Werten kommen einige Signale an und andere nicht.

Die Reichweite dieser Variante ist bei den gewählten Parametern ähnlich wie bei der Nicht-Puls-Methode. Allerdings hat man schon nach ca. zwanzig bis dreißig Prozent des Weges im Erfassungsbereich das Messwerteminimum erreicht. Damit ist dieser Aufbau eher ein Bewegungsmelder als ein Näherungssensor.

Da der Empfänger nur ein HIGH / LOW Signal liefert, kann man die analogRead() Funktion auch durch die schnellere digitalRead() Funktion ersetzen. Dann sollte man allerdings nicht mehr durch die Anzahl der Messungen teilen, um den Übergangsbereich zu erfassen. Das könnt ihr dann ja einmal ausprobieren.

Danksagungen

Das Bild mit Hammer und Nägeln, in die ich die IR LEDs, Empfänger und das Lineal für mein Beitragsbild hineingepixelt habe, stammt von analogicus auf Pixabay. Das Lineal stammt von mbnachhilfe_de, auch Pixabay.

19 thoughts on “IR Näherungssensor selber bauen

  1. Hallo. Ich habe aus einer alten Box den dunklen Sensor ohne Gehäuse für ein Projekt ausgebaut. Darauf steht hinten nur 266. Welcher Typ ist das? Vielen Dank.

      1. Hallo. Bin irgendwann auf den TSOP nach meiner Anfrage gestoßen. Werde den morgen einmal testen. Vielen Dank.

  2. Huhu,
    besser wäre auch die IRed Sendediode mit einer Konstantstromquelle „für Arme“ = Emitter-R + Led an Basis-GND zu betreiben, besonder wenn Batterie verwendet wird. Mit Iir = (Vled-Vbe) / Re, Rc fällt dann weg!

    Keep going!

  3. „Fallen 1,2 bis 1,5 Volt über der IR LED ab, dann sind es 3,5 bis 3,8 über dem Vorwiderstand (wenn VCC = 5 V). Bei 100 mA Strom müsste man entsprechend einen Widerstand von 35 bis 38 Ohm einsetzen. Soweit die Theorie. Letzten Endes habe ich einen 27 Ohm Widerstand gewählt und dabei einen Strom von 92 Milliampere gemessen.“
    Wenn die Theorie so stark von der Realität abweicht, ist die Theorie meist fehlerhaft. In diesem Fall wurde der Spannungsabfall über Kollektor-Emitter-Strecke von rund 0,7V nicht berücksichtigt. Im Übrigen sollten die Basen der Transistoren nur über einen Vorwiderstand mit den Digitalausgängen des Arduino verbunden werden, um letztere nicht unnötig zu belasten.

  4. Moin!
    Die beiden Schaltbilder für den ungepulsten Fall sind verschieden!
    Im Fritzing Schaltbild wird an A0 die Spannung über der Fotodiode gemessen und im Schaltplan wird die Spannung über den Widerstand gemessen, so wie es auch sein soll.
    Proximity = Rohwert – Offset, oder?

    1. Ups! Stimmt, danke für den Hinweis. Beides würde funktionieren. Wenn kein IR Licht auf die Diode fällt, dann ist sie gesperrt und die gesamte Spannung fällt an ihr ab. Hängt die Diode an V+ und der Widerstand an GND bedeutet das, dass kein Strom fließt und die Spannung vor und nach dem Widerstand Null ist. Mit steigendem IR Licht (Näherung) öffnet sie, es fließt ein Strom und die Spannung vor dem Widerstand steigt. Ist die Diode auf der GND Seite ist es anders herum. Mit steigendem IR Licht fällt die Spannung. In meinem Beispiel sinkt der Raw Wert bei Annäherung, d.h. die Diode hängt an der GND Seite und damit ist das Fritzing Schema das richtige und nicht das Schaltbild. Ich werde das anpassen. Aber nochmal gehen tut beides, man muss dann nur den Sketch entsprechend anpassen.

    1. Die Genauigkeit der Messung ist davon abhängig, wie viel der zu detektierende Gegenstand an IR Licht zurückwerfen kann. Das hängt z.B. von seiner Fläche, dem Material, der Oberflächenstruktur und dem Winkel, in dem das ausgestrahlte Licht auftrifft, ab. Gegebenenfalls gibt es auch noch störende Fremdstrahlung. Um absolute Entfernungen zu messen, müsste man Kalibrieren und immer denselben Gegenstand unter denselben Bedingungen verwenden.

  5. Wow, super Anleitung, die jeder versteht. Ich lese deinen Blog echt gerne, weil selbst Neulinge dem ganzen gut folgen können – ich selbst habe glücklicherweise schon einiges an Grundkenntnissen. Eine Frage habe ich hier aber an dich: Wie kann man die Reichweite erhöhen? Braucht man dafür eine stärkere Lampe und eine andere Diode? Oder muss man auf andere Techniken zurückgreifen? Ich hätte gerne eine Reichweite von etwa 2-3 Metern.
    Danke für dein Feedback im Voraus

    1. Hi Tchnikgirly, begrenzt wird die Reichweite der Methode durch die Leistung der IR LED und die Empfindlichkeit der Diode. Da habe ich aber noch nicht nach gesucht. Vielleicht kann man auch zwei IR LEDs nehmen? Das wird die Reichweite allerdings nicht verdoppeln, da die Signalstärke „mit hoch 3“ der Entfernung abnimmt. Mehr fällt mir spontan nicht ein. Aber vielleicht hat ein anderer Leser eine Idee? Ansonsten würde ich dann doch auf andere Lösungen ausweichen wie Ultraschall oder Time-of-Flight Sensoren.

      1. Die Signalstärke nimmt mit dem Quadrat ab (Kugeloberfläche, nicht Volumen, quadratisches Abstandsgesetz). Daher benötigt man für die Verdoppelung der Distanz 4 IR-LEDs, zumindet theoretisch.
        Finde deine Beträge SUPER!

    2. Hallo, habe diesen Block eben erst entdeckt, deshalb kommt mein Kommentar sicher viel zu spät. Trotzdem hier eine Idee: Die Reichweite der IR-LED ließe sich evtl. „nicht-elektronisch“ mit kleinen Hohlspielen auf Empfänger und/oder Senderseite erhöhen.

      1. Hallo Ulli, viele Fragen sind sozusagen zeitlos und tauchen immer wieder auf – also vielen Dank für den Beitrag zu dieser Frage!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert