INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 1 Bewertungen - 1 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Hilfe bei IR Lichtschranke
12.08.2014, 13:51
Beitrag #49
RE: Hilfe bei IR Lichtschranke
Hallo cd_baer,

ich sehe gerade, du hast den Code von hier: http://www.instructables.com/id/Arduino-...n/?lang=de nicht richtig umgesetzt.
Die debounceTime ist ein long, kein int Wert.
Weiterhin wird in dem Link zweistufig vorgegangen.
1. Stufe ISR "debounceInterrupt" springt an sobald der Interrupt eintritt und wartet die Verzögerung von debounceTime ab. Erst wenn die abgelaufen ist wird die 2 Stufe gestartet.
2. Stufe ist die eigentliche Aktion im Falle eines Interrupts und nicht mehr. Also das setzen von LS1 bzw. LS2.
Du hast irgendwie alles zusammen getan Huh
Ebenso müssen last_LS1 und last_LS2 oben deklariert werden und nicht in den Routinen der 2. Stufe.
Guck dir das nochmal genau an und baue es genau so nach. Du musst also je LS eine Routine für die 1. Stufe (im Link debounceInterrupt) und je LS eine Routine für die 2. Stufe (im Link Interrupt(), bei dir dann Lichtschranke() und Lichtschranke1() ) schreiben.
Grüße RK

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.08.2014, 22:06 (Dieser Beitrag wurde zuletzt bearbeitet: 15.08.2014 22:08 von Bitklopfer.)
Beitrag #50
RE: Hilfe bei IR Lichtschranke
Hallo zusammen,
ich habe mal das Ganze für mich nachgestellt und die Lichtschranken durch einen Zweiten UNO simuliert der im Abstand von 1500uS die Impulse liefert. Die Laufzeit kann ich da in 1uS Schritten verändern.
In Int.-Serviceroutinen habe ich es auf das nötigste beschränkt und nur der erste eintreffende Impuls der LS wird zur Auswertung nach Flagabfrage durchgereicht womit das entprellen entfällt. Falls die Startlichtschranke aus versehen triggern würde und kein Stopp Impuls kommt wird nach 1100 mS das LS1 Flag wieder gelöscht um für die nächste Messung bereit zu sein. Um die Wegstrecke leichter vermessen zu können werden die LS Signale auf den LED Ports 4 und 6 gespiegelt. Somit kann man mittels eines MAßstabes den man durch die Messtrecke schiebt den wahren Abstand der Lichtschranken ermitteln und in den Sourcecode zwecks korrekter Berechnung einpflegen.
Hier nun mein Code, allerdings ohne LCD Ausgabe da ich einen anderen Displaytyp habe und zum testen eh nur den seriellen Monitor benutzt habe.
lg
bk

Code:
//#include <SPI.h>
//#include <Wire.h>


//volatile int bounceTime  = 1000;   // Switch bouncing time in milliseconds
volatile unsigned long int LS1 = 0;
volatile unsigned long int LS2 = 0;
volatile unsigned long int LS1in = 0;
volatile unsigned long int LS2in = 0;
unsigned long int speedre;
unsigned long int timeoutLS1 = 1100;
unsigned long int LS1old;

//float messd = 0;
double dist = 100;  //angabe in mm
double basis = 1000; // Basislaenge der Messstrecke

const double feet = 3.280839895013;
double distanz_in_feet;
double zeit_teiler;
double fps;
double speedls;
double speedredb;

byte flls1;
byte flls2;
byte flls1old;


void setup()   {    
  Serial.begin(9600);
  attachInterrupt(0, Lichtschranke, FALLING);
  attachInterrupt(1, Lichtschranke1, FALLING);
  
  pinMode(2, INPUT);
  pinMode(3, INPUT);
  digitalWrite(2, 1);
  digitalWrite(3, 1);

  pinMode(4, OUTPUT);
  pinMode(6, OUTPUT);

  
  flls1 = false;
  flls2 = false;
  flls1old = false;
  

  
}

void loop() {
  if( flls2 == true){
   speedre = LS2 - LS1;
  
   Serial.print("Speed ");
   Serial.println(speedre);
   // speedre = 1000;   // Referenz 100m/S auf 100mm = 1000 uS
    speedredb = double(speedre);  // Typumwandlung
   // m/s =   1/(messzeit*(bassisstrecke / messtrecke))    Musterformel
   speedls = 1/((speedredb / 1000000.0) * (basis / dist));
   Serial.println(speedls);
   flls1 = false;
   flls2 = false;
   flls1old = false;
   }
//######## LS1 Flag automatisch nach 2 Sek loeschen
if( flls1 == true && flls1old == false)
       {
       LS1old = millis();
       flls1old = true;
       }

if(flls1old == true && (millis() >= (LS1old + timeoutLS1)))
       {
       Serial.println("Timeout");  
       flls1old = false;
       flls1 = false;
       }
digitalWrite(4, !digitalRead(2));   // LS1 auf LED4 anzeigen zum eichen
digitalWrite(6, !digitalRead(3));   // LS2 auf LED6 anzeigen zum eichen  
  
}

void Lichtschranke(){
  LS1in = micros();
      if(flls1 == false && flls2 == false){
        flls1 = true;
        LS1 = LS1in;
        }
}

void Lichtschranke1(){
  LS2in = micros();
      if(flls2 == false && flls1 == true){
        flls2 = true;
        LS2 = LS2in;
  }
}

Viel Erfolg beim austesten. Smile
...fast hätte ich es vergessen, die micros() Funktion liefert nur Werte mit einer maximalen Auflösung von 4uS. Eine Hardwarelösung wie ich anfangs hier mal vorgeschlagen habe wäre um den Faktor 4 besser....ja sogar 40 fach besser wäre möglich Tongue

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.08.2014, 23:40
Beitrag #51
RE: Hilfe bei IR Lichtschranke
WOW, danke ersteinmal für deine und auch rKeule´s Mühe. Ich bin heute noch im Urlaub, werde das aber die Kommende Woche Testen. Die von dir Vorgeschlagene Hardwarelösung habe ich auch ausprobiert. Hatte mir extra alle Teile doppelt besorgt (sind ja nicht extrem teuer) Aber entweder hatte ich einen dreher oder irgentetwas vertauscht. Ich habe immer ein dauerhaftes Signal bekommen. Da hab ich mir dann gedacht ich versuch es mal softwaremäßig. Ich wollte mich an die Hardware Variante aus Lernzwecken noch einmal ran wagen wenn der rest funktioniert.
Ich melde mich wenn ich neue ergebnisse liefern kann. Danke aber trotzdem nocheinmal euch beiden.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.08.2014, 10:52
Beitrag #52
RE: Hilfe bei IR Lichtschranke
(15.08.2014 23:40)cb_baer schrieb:  ... Aber entweder hatte ich einen dreher oder irgentetwas vertauscht. Ich habe immer ein dauerhaftes Signal bekommen. Da hab ich mir dann gedacht ich versuch es mal softwaremäßig. Ich wollte mich an die Hardware Variante aus Lernzwecken noch einmal ran wagen wenn der rest funktioniert.
Ich melde mich wenn ich neue ergebnisse liefern kann. Danke aber trotzdem nocheinmal euch beiden.

jupp, wenn du dann soweit bist dann schauen wir mal zusammen die Hardwarevariante durch...
lg
bk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.08.2014, 19:14
Beitrag #53
RE: Hilfe bei IR Lichtschranke
So heute habe ich das nächste Problem entdeckt. Das böse sonnenlicht Sad
Ich benutze ja schon fertige Lichtschranken. hab ich ne chance die dinge irgentwie so umzubauen dass ich mit einem gepulsten signal arbeite?
http://www.ebay.de/itm/281241517376?ssPa...1423.l2649
die habe ich zzt dazu in gebrauch.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.08.2016, 12:57
Beitrag #54
RE: Hilfe bei IR Lichtschranke
(16.08.2014 10:52)Bitklopfer schrieb:  jupp, wenn du dann soweit bist dann schauen wir mal zusammen die Hardwarevariante durch...
lg
bk

Servus alle zusammen,

ich klinke mich hier einfach mal ein. Ich versuche schon länger praktisch das gleiche wie cb_baer nur mit etwas höheren Geschwindigkeiten. Um genau zu sein bis über 1000 m/s auf nur maximal 3cm Tongue

Auf die Idee mit den IR Modulen von ebay und der Programmierung mit Interrupts bin ich auch schon gekommen. Ich bin dann aber aus Genauigeitsgründen weg vom Arduino und zum C167CR gegangen aber selbst da ist meine Resolution vom GPT auf 400ns beschränkt. Ich würde aber aus Platzgründen auch gerne wieder zurück zum nano oder pro wechseln das mit dem C167 war nur mal ein test weil ich den in der Arbeit rumfliegen hab Big Grin

Aus deinen vorherigen Beiträgen hab ich deine Hardware Lösung so verstanden, dass du einen Quarz Oszillator an einen Zähler hängst der dann jede positive Flanke zählt. Der Takt wird dann mit einem Flipflop und den Lichtschranken zugeschaltet.
Um eine angemessene Genauigkeit zu erreichen hab ich mir überlegt einen 25 MHz Oszillator an einen Binärzähler zu hängen. Wobei 32 Bit reichen dürften.
Die Binärzahl kann ich dann (evtl. je nach größe der zahl über einen mux) vom Arduino einlesen lassen und in eine Geschwindigkeit umrechnen

z.B. diese ICs
https://www.conrad.de/de/oszillator-qx8-...09245.html

https://www.conrad.de/de/logik-ic-zaehle...17085.html

Da es schon ein bisschen her ist, dass ich Schaltungen mit ICs gelernt habe und mich seitdem weder beruflich noch privat sonderlich damit beschäftigt habe wäre ich über ein bisschen Hilfe wie die Dinger anzuschließen sind äußerst dankbar (du hast ja z.B. mal was von 100nF Keramikkondensatoren gesagt die man noch irgendwo zwischenschalten soll) . Smile
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.08.2016, 20:54 (Dieser Beitrag wurde zuletzt bearbeitet: 31.08.2016 22:33 von ardu_arne.)
Beitrag #55
RE: Hilfe bei IR Lichtschranke
Hallo,
die Auswahl der beiden Komponenten sieht schon mal nicht schlecht aus.
Einen zusätzlichen Mux brauchst du vermutlich nicht. Auch nicht bei mehreren SN74LV8154N weil die Ausgänge Y0...Y7 Tri-State können.
Mit dem Arduino kannst du über die Eingänge GAL, GAU, GBL, und GBU wählen welches Byte am Ausgang ansteht.
Wenn 32 Bit nicht reichen, kannst du also die Ausgänge Y0...Y7 mehrerer Zähler parallel schalten.
Zum starten und stoppen würde sich ein RS-Flipflop anbieten.

Die 100nF Keramikkondensatoren sollten an jedem Logik-IC auf kurzem Weg zwischen VCC und GND geschaltet werden.
Als Lichtschranke würde ich nichts nehmen was mit 38kHz moduliert wird. Die sind für diese Anwendung viel zu langsam.

Gruß
Arne

p.s.
Hast du mal nachgerechnet wie viele Takte der Oszillator bei 1000 m/s auf 3cm macht. Wenn ich mich nicht verrechnet habe sind das 750.
Dazu reicht schon 1/2 SN74LV8154N als 16 Bit Zähler.
Kannst du das bestätigen?

ExclamationMit zunehmender Anzahl qualifizierter Informationen bei einer Problemstellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.Exclamation
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.09.2016, 14:37
Beitrag #56
RE: Hilfe bei IR Lichtschranke
Vielen Dank für die schnelle Antwort.

Die Teile werd ich dann mal so bestellen und mein Glück mit den ICs versuchen.

Die 750 Impulse habe ich auch so ausgerechnet allerdings sind 1000 m/s ja auch das ungefähre Maximum und mit einem 32 Bit Zähler kann ich dann auch deutlich langsamere Projektile erfassen bis zu 0.001 m/s wenn ich mich nicht verrechnet hab. Ob das sinnvoll ist eine Schnecke beim kriechen zu messen sei mal dahingestellt Tongue aber ich kann dann Paintball und Airsoft Waffen genauso wie Scharfe Waffen und Railguns messen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Hilfe 433MHz Empfänger OLDARDUINO 12 384 16.11.2016 09:55
Letzter Beitrag: hotsystems
  Hilfe für einen GPS gestützten Quadrocopter TeamQuadro 13 391 02.11.2016 08:14
Letzter Beitrag: Binatone
  Hilfe, ist der bmp280 defekt? reimundko 5 596 12.09.2016 18:49
Letzter Beitrag: ardu_arne
  Bitte un Hilfe 3ddrucker 3 249 18.08.2016 16:24
Letzter Beitrag: Binatone
Star Bitte um hilfe bei Aurel Empfänger & Sender Mischa 3 523 08.06.2016 15:26
Letzter Beitrag: hotsystems
Heart Bitte um Hilfe um auf Display Temperatur auzugeben Mischa 6 518 04.06.2016 20:49
Letzter Beitrag: hotsystems
  Hilfe bei Ironman Helm Sketch Heppo 4 401 31.05.2016 17:18
Letzter Beitrag: Heppo
  Benötige Hilfe zu Schaltbild torsten_156 4 490 07.04.2016 16:09
Letzter Beitrag: Bitklopfer
  Lichtschranke mit IR-LED und Fototransistor C++Developer2000 7 1.462 01.01.2016 13:12
Letzter Beitrag: hotsystems
  Lichtschranke - Speichen Waishon 1 912 16.09.2015 23:03
Letzter Beitrag: hotsystems

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste