Hallo ich habe ein Problem bei einem kleinen Projekt von mir. Ich habe zwei Laserlichtschranken hintereinander platziert und möchte jetzt gerne von der Fotodiode ein HIGH oder LOW Signal für den attachInterrupt bekommen. Jedoch gibt er mir permanent ein LOW Signal zurück. Mit analogRead geht alles so wie es soll. Meine Frage ist nun, ob es überhaupt möglich ist diese Signale von einem Sensor zu bekommen?
Das Arduino Forum ist gerade meine letzte Hoffnung habe alles versucht.
Vielen Danke schonmal im voraus!
Gruß Sven
Am besten skizzierst Du Deinen Aufbau und sagst, was für Teile Du wie/wo angeschlossen hast. Wenn Du schon einen Sketch hast, aus dem hervorgeht, was Du vorhast, dann zeigst Du den am besten auch. Schließe ihn ggf. in Code-Tags ein.
Gruß
Gregor
Mit analogRead geht alles so wie es soll
Und zwar?
analogRead liefert entweder unter 100 (LOW) oder über 700 (HIGH) ?
Nie Werte im Bereich 300 .. 600 ?
Welchen Sensor hast du denn wie angeschlossen? Und wo/wie bekommt er Licht?
Eine Fotodiode ohne alles?
Mit "analogRead" habe ich nur getestet ob die Fotodiode überhaupt läuft. Auf die Fotodiode zeigt ein Laser. Mit analogRead bekomme ich Werte von 40-70.
Das ganze soll am Ende die Geschwindigkeit messen sollen z.B von Luftgewehrkugeln. Also das Programm berechnet mit der Strecke und der vergangenen Zeit von der einen Lichtschranke zur anderen die Geschwindigkeit.
Das Datenblatt zur Diode: https://www.vishay.com/docs/81521/bpw34.pdf
Das wäre einmal der Schaltplan: Screenshot by Lightshot
Der Code: (Hoffe das ist so richtig eingefügt bin zum ersten mal hier Unterwegs auf dem Forum)
// Dieses Programm misst durch zwei Lichtschranken die Geschwindigkeit beispielsweise eines Luftgewehr Projektils
// Im Grunde funktioniert das Programm wie folgt:
// Wenn der erste Sensor eine Unterbrechung feststellt wird eine Funktion aufgerufen wo dann die Zeit gestoppt wird
// Wird nun beim zweiten Sensor danach ebenfalls eine Unterbrechung festgestellt stoppt das Programm und berechnet die Geschwindigkeit
// T = Zeit2 - Zeit1
// V = 3600 * l / T | T = Zeit in mikro Sekunden, l = Abstand Lichtschranke A nach B,V = Geschwindigkeit in Km/h
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
int i;
LiquidCrystal_I2C lcd(0x3F,20,4); // Deklariert das LCD Display als ein 20x4 LCD Display mit einem I2C Interface Modul
volatile int l = 91; //Abstand der Lichtschranke in mm
volatile int counter1 = 0;
volatile int counter2 = 0;
volatile unsigned long Zeit1 = 0;
volatile unsigned long Zeit2 = 0;
volatile unsigned long T = 0;
float V = 0;
float V1 = 0;
void setup() {
lcd.begin ();
lcd.setBacklight(HIGH);
lcd.home ();
lcd.setCursor(0,0);
lcd.print("Maximal:");
lcd.setCursor(16,0);
lcd.print("km/h");
lcd.setCursor(0,2);
lcd.print("Anzahl:");
lcd.setCursor(16,2);
lcd.print("A:");
lcd.setCursor(0,3);
lcd.print("Zeit us:");
lcd.setCursor(16,3);
lcd.print("B:");
lcd.setCursor(16,1);
lcd.print("km/h");
lcd.setCursor(0,1);
lcd.print("Aktuell:");
attachInterrupt(0, Starten, FALLING);//PIN2, wenn an diesem Pin eine Unterbrechung stattfindet löst er aus und springt in die Starten funktion
attachInterrupt(1, Stoppen, FALLING);//PIN3, wenn das Projektil bzw. der zu messende Gegenstand am zweiten Sensor eine Unterbrechung auslöst springt das Programm in die Stoppen funktion
}
void loop() {
if ((counter2==counter1))T=Zeit2-Zeit1; // Wenn beide Funktionen "Starten" "Stoppen" durchgelaufen sind beginnt das Programm mit der Berechnung
V=3600.0*l/T;
if (V>10000) V=0;
V1=max(V,V1);
lcd.setCursor(8,0);
if (V1 < 1000) lcd.print(" ");
if (V1 < 100) lcd.print(" ");
if (V1 < 10) lcd.print(" ");
lcd.print(V1,2);
lcd.setCursor(8,1);
if (V < 1000) lcd.print(" ");
if (V < 100) lcd.print(" ");
if (V < 10) lcd.print(" ");
lcd.print(V,2);
lcd.setCursor(19,2);
lcd.print(digitalRead(2));
lcd.setCursor(19,3);
lcd.print(digitalRead(3));
lcd.setCursor(11,2);
if (counter1 < 1000) lcd.print(" ");
if (counter1 < 100) lcd.print(" ");
if (counter1 < 10) lcd.print(" ");
lcd.print(counter1);
lcd.setCursor(8,3);
if (T > 9999999) T=0;
if (T < 1000000) lcd.print(" ");
if (T < 100000) lcd.print(" ");
if (T < 10000) lcd.print(" ");
if (T < 1000) lcd.print(" ");
if (T < 100) lcd.print(" ");
if (T < 10) lcd.print(" ");
lcd.print(T);
delay(2000); //Abbruch der Messung nach 2 Sekunden
counter2=counter1;
}
void Starten() {
Zeit1=micros();
counter1++;
}
void Stoppen() {
Zeit2=micros();
counter2++;
}
Setze Deinen Code bitte in Codetags (</>-Button im Forumseditor oder [code] davor und [/code] dahinter - ohne *). Das kannst Du auch nachträglich noch tun. Dann ist er für alle vernünftig lesbar.
Gruß Tommy
Mit analogRead bekomme ich Werte von 40-70.
Das ist LOW
Wenn du den 39k Widerstand durch was Größeres ersetzt (100k...390k) oder/und dann das Signal mit einem Transistor verstärkt, oder einen opamp oder Komparator verwendest, kommst du dahin, wo du alternativ mit einem Fototransistor auch hinkommst.
Hi
Wenn 40 <-> 70 die Werte für offene/geschlossene Lichtschranke stehen, ginge Das zwar, der Störabstand wäre aber extrem klein.
MfG
Danke schonmal für die Antworten. Wie wäre das denn möglich trotz kleinem Stör Abstand?
Svenne:
Wie wäre das denn möglich trotz kleinem Stör Abstand?
Du müsstest entsprechende Bedingungen formulieren, also etwa „wenn kleiner als ...“ und „wenn größer als ...“ mit passenden Werten.
Du solltest IMO jedoch eher versuchen, den Störabstand zu vergrößern. Mit kleinem Störabstand riskierst Du Fehlmessungen, was blöd wäre, wenn Du nicht nur „just for fun“ bastelst.
Wie Du den Störabstand vergrößern kannst, hängt vom Aufbau ab. Vielleicht kannst Du mit Abschirmung von Umgebungslicht eine Verbesserung erreichen. Wie das per Schaltungsänderung möglich wäre, müssen andere sagen - ich bin noch nicht so irre fit in Schaltungsdingen.
Gruß
Gregor
Sowas mit einer Fotodiode zu machen ist tatsächlich ungünstig, aber ich sehe 2 Möglichkeiten:
-
Kleine Verstärkerschaltung bauen, siehe z.B. die Sensorschaltung hier. Ist sauempfindlich einstellbar, kostet fast nix und Du wirst mit entsprechender Abschirmung der Diode brauchbare Ergebnisse bekommen. Und läuft mit 5 V. ACHTUNG: Fotodiode im Bild ist verpolt!
-
Nimm einen Fototransistor! Du bist viele Sorgen los, brauchst nur 1 Kollektorwiderstand und hast ebenfalls bei entsprechender Abschirmung ein gutes Signal.
Wenn Du wirklich Luftgewehrkugeln erkennen willst: viel Spaß beim Treffen beider Strahlen hintereinander. Das wirst Du aus der Hand sicher nicht hinbekommen, ob mit entsprechendem Halter bleibt auszuprobieren.
Aber auch hier gibt es entsprechende Varianten, aber das sollte der nächste Schritt sein.
ACHTUNG: Fotodiode im Bild ist verpolt!
Welches Bild meinst du?
(Fotodioden werden üblicherweise in Sperr-Richtung betrieben. Der Effekt beruht darauf, dass der Sperr-Strom (im µA Bereich) mehr von der Beleuchtung der Diode als von der Spannung (in Sperr-Richtung) abhängt.
Deinen Tips 1. und 2. stimme ich generell zu.
Einen "einfachen Verstärker" sehe ich eher so:
Welches Bild meinst du?
Das hier:
Und in diesem Plan ist die Diode falsch rum, daher der Hinweis.
Hallo Sven,
ich finde es sehr nett, daß Dir der Autor des Progamms angeboten hat, Dich anzurufen, wenn Du ihm seine Nummer gibt, hat das nichts gebracht? Oder nicht genutzt?
Da mich das Thema interessiert, habe ich einfach mal eine Suchmaschine angeworfen: Geschwindigkeitsmessung mit Arduino über zwei Laserlichtschranken - YouTube
Das mit dem (zumindest mit diesem!) Operationsverstärker würde ich lassen, da die Schaltzeiten bei V=1 bereits 50x länger sind als die der BPW34 mit 100ns, bei V=10 würde der OPV das Signal glatt verschlucken, da dieser dann 500x langsamer ist.
Gruß André
Das hier
Stimmt.
Da liegt unten an Fotodiode Vcc an und oben geht es über den 100k auf GND.
Für Sperr-Richtung muss die Diode anders rum rein.
Wie die zwei Verstärker/Komparatorstufen des LM358 zusammenspielen, hängt wohl auch mit dem Kondensator zusammen, und da der geheim ist, wird man wohl in einer LTSplice Simulation nicht viel brauchbares/verlässliches rauskriegen.
Kann auch gut sein, dass ein wesentlicher Unterschied zwischen "Harfe anzupfen" und Geschoß-Erkennung sein wird. Werden bei der LaserHarp nicht alle Saiten mit 1 Laser gemultiplext ? Das ist bei den zwei Lichtschranken hier ja auch anders. Also sicher nichts zum direkt nachbauen...
Geheim = halbwegs unkritisch, hab ein paar pF bis 100 nF probiert, klappt. Irgendwo in der Anleitung war von 2n2 zu lesen (=2,2 nF)
Natürlich ist das nicht die Geheimwaffe für alles, aber letztlich ist das ein Verstärker mit nachgeschaltetem Komparator. Der Impuls von der Diode wird über den C eingekoppelt, mit dem Poti wird der Arbeitspunkt fein eingestellt. Und der Komparator sorgt für saubere Flanken und entsprechenden Level für den Interrupt.
Bei der Laserharfe geht es um das sichere Erkennen kleiner Lichtmengen, egal ob Multiplex oder nicht. Da wird ja die Reflexion des Lasers über die Hand über eine Entfernung von > 1 m detektiert.
Falls Svenne sich eine Geschwindigkeitsmessanlage wie im YT Video bauen will und mit nem Laserpointer über die Mini-Entfernung direkt auf die Diode ballert herrschen da ganz andere Spannungsverhältnisse.
Und ich bin immer noch der Meinung: Diode weg, Fototransi rein. Genauso groß, gleicher Preis, weniger Streß.