Einfahrtlicht via Ardino und Lichtschranke steuern

Moin zusammen,
ich habe folgenden Plan:
Ich will die Beleuchtung in meiner Einfahrt (ca. 3m Breit) neu machen mit einem Led streifen welcher an geht wenn ein Auto die Auffahrt hochkommt oder wenn man sie herunter fährt. Also brauche ich Sensoren welche messen ob ein Auto kommt/geht. Nach kurzer Recherche ich auf optische Lichtschranken gestoßen die mir im ersten Moment sinnvoll und ausreichend erscheinen

Jetzt ist die Frage ob ich bei dem Sensor im angehängten Foto das Signal mit einen Arduino auslesen kann und somit ein Relais welches das Licht schaltet ansteuern kann ?

Der Sensor ist ein Preiswertes Modell von Aliexpress was aber für mein Vorhaben denke ich mal ausreicht. Mein Wissen reicht nur leider nicht aus um zu verstehen was der Sensor misst bzw. wie er die Signale ausgibt.

Achja und ich hatte schon öfters

die Begriffe : NPN NC, NPN NO, PNP NO, PNP NC
gelesen kann mir die jemand erklären ich finde im Internet nicht wirklich eine Erklärung.

Wäre schön wenn mir jemand weiterhelfen kann!

Danke schon mal!




Datenblatt lesen hilft.

Mit NO / NC werden die Schaltzustände von Relaiskontakten bezeichnet:

  • NO bedeutet i.d.R. Normally Open
  • NC bedeutet i.d.R. Normally Closed

NPN und PNP sind die Bezeichnungen für Transistortypen. Siehe z.B. hier
https://www.elektronik-kompendium.de/sites/bau/0201291.htm#:~:text=Beim%20PNP%2DTransistor%20ist%20die,werden%20f%C3%BCr%20negative%20Spannungen%20verwendet.

und auch informativ:

https://www.aeq-web.com/transistor-basics-npn-vs-pnp-basistrom-und-versuche-mit-analogen-schaltungen-teil-1/

NPN Transistoren schalten gegen Masse, PNP gegen Plus.

Erst mal die Abkürzungen:
Normalzustand (gilt auch für Schalter/Taster)
NC = normal closed (also ohne Betätigung/Ansteuerung geschlossen/durchgesteuert)
NO = normal open (also ohne Betätigung/Ansteuerung offen/nicht durchgesteuert)

Die Transistoren:
NPN schalten nach GND durch (auch bei N-Kanal-MOSFET)
PNP schalten nach +VCC des Gerätes durch (auch bei P-Kanal-MOSFET)

Diese Ausgangsschaltungen brauchen für den nicht durchgesteuerten Zustand einen Widerstand, der das andere Potential sicher stellt, also

NPN - einen PullUp Widerstand nach +Vcc des Microcontrollers
PNP - einen PullDown Widerstand nach GND

Für Dich am Besten ist NPN NO, d.h. der zieht den Eingang Deines Microcontrollers nach GND. Du kannst den internen PullUp benutzen. Außerdem bist Du unabhängig von der Betriebsspannung des Sensors.

Ich hoffe, das war nicht zuviel auf einmal.

Gruß Tommy

Edit: Als Reflektor würde ich retro-reflective nutzen.

Hallo Tommy vielen dank für die ausführliche gute Antwort. Dennoch reicht mein technisches Verständnis nicht ganz aus um alles zu verstehen.
Du hast gesagt die NPN Version wäre für mich am besten. Was bedeutet es wenn das NPN nach GND durchschaltet wird und brauche ich dieses P kanal mosfet ?

Woher weiß ich welchen Pull Down widerstand ich brauche ?

Ist es möglich ein Kabel des Sensors einfach an den Arduino anzuschließen ? kann der da einfach so dann ein Signal entziffern oder brauche ich da noch mehr ? bzw. wie müsste ich das dann anschließen ?

Danke für die Hilfe!

Verstehend lesen ist nicht Deine Stärke? Das, was Du behauptest, habe ich nie vorgeschlagen.

Erstmal richtig lesen, dann das vorgeschlagene bestellen, dann kannst Du das mit INPUT_PULLUP direkt anschließen. Aktiv ist LOW!

Gruß Tommy

Sorry habe mich beim Schrieben vertan. Könntest du das vielleicht nochmal für doofe erklären ?:sweat_smile: ich hab die Basics des arduino verstanden aber da hört es dann auch schon auf.

Da die Versorgungsspannung des Sensors zwischen 10V und 30V sein soll ist der Fall PNP zu vermeiden.

Der NPN ( egal ob NO oder NC) zieht den Ausgang auf Masse wenn ein Objekt in den Strahlengang kommt (NO) bzw der Strahlengang nicht (mehr) unterbrochen ist (NC).

Da hast Du mal ein LOW signal.
Für das HIGH Signal mußt Du sorgen. Du kannst Die internen Pullupwiderstände aktivieren oder besser einen Widerstand zwischen Ausgang Sensor und Versorgungsspannung Arduino (meist 5V) schalten. Dafür würde ich einen 1kOhm Widerstand wählen, damit das ganze etwas Störunempfindlicher (als mit den hochohmigeren internen Puuluwiderstand) ist.

Auswertung je nachdem ob NO oder NC.

Grüße Uwe

Was an dem Text hast Du konkret nicht verstanden?
Hier mal etwas Grundlagenlektüre zur Elektronik.

Gruß Tommy

Siehe auch die Links im meinem Post #5 ...

ich glaube es ist einfacher wenn ich erkläre wie ich es machen würde und dann dürft ihr mir gerne sagen ob das so funktioniert oder nicht.
Dieser Lasersensor (ich habe den NPN NO als retro-reflective bestellt, so wie Tommy es mir empfohlen hat), der hat ja 3 Kabel ( +VCC, GND und Signal denke ich mal ?) also +VCC und GND könnte ich ja dann vom Arduino ziehen weil ich den eh über VIN mit 12V betreiben wollte, geht das ?, der muss dann wie Tommy sagte mit einen Pull Up Widerstand (1kOhm Widerstand ?? ) nach +VCC angeschlossen werden ? Und das Signal Kabel kann ich dann an einen Digital Pin am Arduino anschließen ? Dann kann ich mir die Werte im seriellen Monitor wahrscheinlich anzeigen ?

bisschen viele Fragen auf einmal aber deswegen bin ich ja hier

Wenn ich ganz falsch bin bitte korrigieren, man merkt wahrscheinlich das ich nicht der hellste auf dem Gebiet bin :sweat_smile:

12V am Arduino, da kannst Du an 5V kaum noch etwas betreiben, weil dann der Spannungsregler wegen Überhitzung abschaltet. Besser 8-9V oder gleich mit 5V an 5V speisen.

Wieder falsch gelesen. Der muss mit einem PullUp genutzt werden. Nimm erst mal den internen mit INPUT_PULLUP, wenn die Leitung nicht zu lang ist.

Da hast Du dann ein LOW-Signal, wenn die Lichtschranke unterbrochen wird. Das musst Du auswerten.

Gruß Tommy

Oh man ich komme immer mit NPN und PNP durcheinander aber danke schon mal!

Ein externer Pullup muß bei einem 5V Arduino-Modell mit +5V angeschlossen werden.
grüße Uwe

Nicht dass es Missverständnisse gibt: Pullup bezieht sich auf die Datenleitung, nicht auf Vcc.

Wenn das klar war, einfach ignorieren.

Und Vcc (der Lichtschranke) ist lt. Datenblatt (in #1) 10..30 V, also deine 12V.
Nachtrag: Das hat nichts mit dem Pullup Widerstand zu tun

Das halte ich für falsch und zerstörerisch für den Arduino. Der PullUp-Widerstand muss zwischen Dateneingang und Vcc des Arduino, also 5V oder 3,3V je nach Arduino.
Nach 12V würde die 12V an den Eingang des Arduino legen und diesen zerstören!

Gruß Tommy

Sagte ich doch, "nicht dass es Missverständnisse gibt". Da habe auch ich mich unklar ausgedrückt: Vcc der Laserlichtschranke ist 12V.
Vcc des Arduino ist 5V bzw. evtl 3.3V
Der Pullup-Widerstand kommt zwischen das Vcc des Arduino und den Signalpin.
Evtl. reicht sogar pinMode(signal, INPUT_PULLUP); ohne den gefährlichen :slight_smile: Widerstand.

Hallo nochmal!
Die Lichtschranke ist inzwischen angekommen aber wie erwartet kriege ich es nicht hin. Ich habe mal Fotos von einem Testaufbau gemacht der nur ein High/Low Signal anzeigen soll. Das Multimeter ist an +12v der Lichtschranke und am Signal Kabel der Lichtschranke angeschlossen. Die Lichtschranke siehe foto hat 3 kabel (Braun = + 10-30v, Blau= Masse und Schwarz = Signal)
Das Multimeter zeigt mir ein High/low signal an, wenn ich meine hand vor den Laser halte/wegnehme . Im Seriellen Monitor wird mir aber dauerhaft High angezeigt. Pullup wie empfohlen an.

Meine Vermutung ist jetzt, weil das Multimeter nicht bis ganz auf Null geht, dass eine Rest Spannung anliegt und deswegen der Serielle Monitor kein Low Signal anzeigt???




Hier der Code falls es hilft:

const int signalPin= 4; 

void setup() {
  Serial.begin(9600); 

  pinMode(signalPin, INPUT_PULLUP); 
  
}

void loop() {
  
  if (digitalRead(signalPin) == HIGH) {
    Serial.println("Signal: HIGH");
  } else {
    Serial.println("Signal: LOW");
  }
  
  delay(100); 
}

Hast Du GND vom Sensor mit GND vom Arduino verbunden?

Gruß Tommy

Du tust ja Wechselspannung Messen :slight_smile:
außer dem unter 2V ist LOW.