Lichtschranke TRCT5000 und schnelles, kleines Objekt

@agmue
Das Modul gibt einen analogen Wert und einen digitalen aus. Mit dem digitalen hatte ich noch weniger Erfolg. Man kann am Modul über einen Poti die Empfindlichkeit einstellen wann der digitale Ausgang schaltet, aber damit konnte ich nicht einmal die durchfallende Kugel detektieren. Deswegen bin ich auf den analogen Wert gegangen, damit konnte ich wenigstens vorher genannte Ergebnisse erzielen. Wenn meine Versuche heute mit den noch ausstehenden Änderungen am Code von wno158 keinen Erfolg erzielen dann werde ich deinem Vorschlag mal nachgehen.

@my_xy_projekt
Das sind auch noch gute Ansätze, ich habe jetzt selbst noch nicht recherchiert, gibt es da auch relativ einfache Lösungen mit "Plug and Play"-Modulen? Der Bauraum im Gehäuse ist auch stark begrenzt, deswegen kam mir das kleine TRCT5000 ganz gelegen. So wie ich das Verstanden habe (und damit ja auch einen Teilerfolg erzielen konnte dank wno158) ist das Modul ja auch quasi eine Art Lichtschranke. Ob das IR-Licht nun reflektiert wird und auf den Sensor trifft oder ob er direkt angestrahlt wird sollte ja erstmal keine Rolle spielen?
Nach Gabellichtschranken habe ich auch geschaut, aber bisher keine in passender Größe gefunden.

disorder218:
Nach Gabellichtschranken habe ich auch geschaut, aber bisher keine in passender Größe gefunden.

10mm als Modul?
https://eckstein-shop.de/10mm-Lichtschranke-Photoelectric-Infrarot-Zaehler-Counter-Sensor-Modul

Es gibt ein archiv dazu, da ist nen Plan bei - muss man drüberlesen und sicher auch selbst Hand anlegen, aber ist verfügbar...

disorder218:
Nach Gabellichtschranken habe ich auch geschaut, aber bisher keine in passender Größe gefunden.

In der Mitte durchsägen und was dazwischensetzen.

Analog ist wegen der notwendigen Kondensatoraufladung zum Messen langsam, digital schneller. Also sollte digital das Ziel sein.

@agmue
Hab das jetzt probiert nachdem ich mit dem analogen Wert keine besseren Ergebnisse erzielen konnte. Vielen Dank, das mit dem Interrupt scheint zu funktionieren. Nachdem ich dann gemerkt habe dass nur Pin 2 und 3 den Interrupt unterstützen^^.

Hab es jetzt so umgesetzt:

const byte pinIRd = 2; //"SensorPin"
const int pinIRa = A0;
//const int pinLED = 9;
bool fired = false;

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
 #include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif

#define LED_PIN    4
#define LED_COUNT 15

Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

void CLOCK()
{
  fired = true;
}

void setup() {
  pinMode(pinIRd, INPUT_PULLUP);
  pinMode(pinIRa, INPUT);
  attachInterrupt(digitalPinToInterrupt(pinIRd), CLOCK, RISING); //zu RISING geändert, IR-Modul gibt digital 1 bei Unterbrechung
  
  #if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
  clock_prescale_set(clock_div_1);
  #endif
  
  strip.begin();           
  strip.show();           
  strip.setBrightness(255); 

  //Boot test
  for (int a=0; a <= 3; a++){
  for (int i=0; i <= LED_COUNT ; i++){
  strip.setPixelColor(i,255,120,0);
  strip.show();}
  delay(40);
  for (int i=0; i <= LED_COUNT ; i++){
  strip.setPixelColor(i,0,0,0);
  strip.show();}
  delay(100);
  }
  
}


void loop() {

{
  if (fired)
  {
 for (int i=0; i <= LED_COUNT ; i++){
      strip.setPixelColor(i,255,120,0);}
      strip.show();
      delay(40);
       for (int i=0; i <= LED_COUNT ; i++){
      strip.setPixelColor(i,0,0,0);}
      strip.show();
    fired = false;
  }
}


}

Jetzt muss ich nur noch ausführlich testen wie empfindlich ich das IR-Modul mit dem Poti einstellen kann, aktuell bin ich an der absolut unteren Grenze, wenn ich den Poti minimal weiter runter drehe gibt der digitale Output dauerhaft 1 (für unterbrochen) aus.

Danke für die Rückmeldung :slight_smile:

Hallo,

ich glaube, ein Mikrocontroller ist hier der falsche Ansatz.
wenn man
90m = 1s
0,006m = x
ins Verhältnis setzt, kommt man auf 66,6 µs Zeit, die die Kugel zum Durchfliegen der 6mm braucht. Bestenfalls. Jetzt nehmen wir an, das die Kugel die Lichtschranke an den Rändern nicht genügend verschattet und die Schaltzeiten der Lichtschranke auch nicht im Nanosekundenbreich liegen (wäre nur bei Fotodioden gegeben)
Auf der sicheren Seite liegt man mit 30µs, würder ich sagen. Die gilt es sicher zu detektieren.
Der Arduino taktet mit 16 MHz, das sind 1/16 0,00625 µs Periodendauer.
Jetzt muß ein Profi ran und abschätzen, wieviel Takte sein Programm zur Abarbeitung braucht.
Ich finde das schon "sportlich".
Einfacher wäre es, den Mikrocontroller außen vor zu lassen und das Ganze mit ein paar CMOS Gattern zu lösen.
Da passt der Spruch: "Für jemanden mit einem Hammer, sieht alles, wie ein Nagel aus" :smiling_imp:

[OT]"... Programmieren null Ahnung!" stimmt doch nicht mehr, möchte ich hoffen :wink:
[/OT]

nix_mehr_frei:
Ich finde das schon "sportlich".

Darum ja der Interrupt, das ist eine eigene Hardware als Teil des µCs.

nix_mehr_frei:
wenn man
90m = 1s
0,006m = x
ins Verhältnis setzt, kommt man auf 66,6 µs Zeit, die die Kugel zum Durchfliegen der 6mm braucht.

Ach schau. Hab ich mich nicht verrechnet. :slight_smile:
https://forum.arduino.cc/index.php?topic=734873.msg4944354#msg4944354

Wie agmue schon schrub; mit nem Interrupthandler funktioniert das schon.
Wobei das mit der Signalaufbereitung vorher schon gesichert sein sollte. Ich plädiere da immer noch für einen Schmitt-Trigger; anderen mag 'n Komparatur reichen.

my_xy_projekt:
Ich plädiere da immer noch für einen Schmitt-Trigger;

Der sollte Teil des µC-Eingangs sein, wenn ich mich recht erinnere.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.