Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Swoerm

Alter Hase

  • »Swoerm« ist der Autor dieses Themas

Beiträge: 451

Wohnort: 127.0.0.1

  • Private Nachricht senden

1

02.11.2015, 21:17

[Arduino] Frage zu IR-Emitter/Sensor

Hallo,

ich möchte für ein Schulprojekt eine Art Abstandssensor bauen, dieser soll (mit Hilfe von IR-Sensoren/Emittern) in der Lage sein zu erkennen ob sich ein Objekt zwischen Sensor und Emitter befindet. Die Werte möchte ich per Arduino (Uno) auslesen. Ich bin mir bei der Auswahl des passenden Sensors/Emitters recht unsicher. Würden diese beiden hier (Sensor, Emitter) gut zusammen funktionieren wenn man sie etwa so ansteuert? Ich sollte die Bauteile noch heute oder morgen bestellen, damit ich noch genug Zeit habe alles zu konstruieren. Deshalb hoffe ich auf eine schnelle Antwort.

Vielen Dank für eure Hilfe,
Swoerm.

C-/C++-Quelltext

1
2
    /* Keep the compiler happy */
    return(0);

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

02.11.2015, 21:48

Denk an den Vorwiderstand für die IR-LED dann sollte es eigentlich passen, wenn du das ganze mit 3V3 oder 5V betreibst. Bei IR-LEDs kann man eigentlich wenig verkehrt machen und der Receiver sieht auch ganz ordentlich aus.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Swoerm

Alter Hase

  • »Swoerm« ist der Autor dieses Themas

Beiträge: 451

Wohnort: 127.0.0.1

  • Private Nachricht senden

3

02.11.2015, 21:51

Ok. Danke für die schnelle Antwort. :) :thumbsup:

C-/C++-Quelltext

1
2
    /* Keep the compiler happy */
    return(0);

Swoerm

Alter Hase

  • »Swoerm« ist der Autor dieses Themas

Beiträge: 451

Wohnort: 127.0.0.1

  • Private Nachricht senden

4

07.11.2015, 00:39

Ich habe so weit die Schaltung aufgebaut (Emitter mit Vorwiderstand angeschlossen und Receiverausgang an einen der Mikrocontrollerpins angeschlossen) und den Code aus dem oben gepostetem Link nahezu 1:1 übernommen. Es funktioniert auch so weit, dass die Schaltung erkennen kann, ob sich ein Objekt zwischen Emitter und Receiver befindet. Allerdings ändert sich der Wert oft nur mit großer Verzögerung (ca. 0,5-6 Sekunden). Das was die Verzögerung vermeiden sollte müsste eigentlich ein Spannungsteiler sein.

Den Spannungsteiler habe ich wie im Link beschrieben aufgebaut. Also nach dem Ausgang des Receivers ein Widerstand dann ein Kabel was in den Mikrocontrollereingang geht und dann ein Widerstand (ich habe 470 Ohm, 10 kOhm und 100 kOhm ausprobiert) , der im Minuspol endet. Jedoch liegt dann am Pin immer nur LOW an.

Ich brauche für die Messungen, die ich mit der Schaltung durchführen möchte, eine maximale Verzögerung von 0,2s und exaktere Werte (es gibt immer wieder kleinere Schwankungen). Ich hoffe jemand kann mir bei diesem Problem helfen. :wacko:

Vielen Dank für eure Hilfe,
Swoerm.

C-/C++-Quelltext

1
2
    /* Keep the compiler happy */
    return(0);

5

07.11.2015, 10:53

Kannst du mal ein Schaltplan zeigen von deiner Schaltung.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

Swoerm

Alter Hase

  • »Swoerm« ist der Autor dieses Themas

Beiträge: 451

Wohnort: 127.0.0.1

  • Private Nachricht senden

6

07.11.2015, 14:53

So sieht die Schaltung ohne Spannungsteiler aus. (Anhang)
»Swoerm« hat folgendes Bild angehängt:
  • Schaltung.PNG

C-/C++-Quelltext

1
2
    /* Keep the compiler happy */
    return(0);

7

07.11.2015, 18:55

Wie ist die Ansteuerung vom Sender, dauersignal oder pwm?
Wie weit ist der Sender und der Empfänger auseinander?
Wie groß ist das Objekt was zwischen beiden kommt?

Wie der Spanungsteiler da in die Schaltung kommt kann ich nur ahnen. Ich denke der bringt den Eingang des Mikrokontrollers auf eine "Vorspannung" so das der Eingang bei geringerer Änderung von 1 auf 0 springt oder von 0 auf 1.
Den solltest du dir berechnen können, sollte im Datenblatt vom mikrokontroller stehen was 1 und was 0 ist.

Glaube aber das, dass eigentliche Problem an etwas anderem liegt.

Eine Art Abtandsmessung mit IR kommt mir etwas ungewöhnlich vor. Abstandsmessung werden normalerweise über Schall Sender/Empfänger realisiert.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

8

07.11.2015, 19:30

Du hast keinen Zugang zu einem Oszi oder? Verzögerungen (vorallem schwankende) kommen selten durch die Schaltung selbst (wenn es sich wie hier um Digitalschaltungen handelt), sondern typischerweise durch die Verarbeitung der Signale. Falls du keinen Zugang zu einem Oszi hast, könntest du testweise einfach eine LED(+Vorwiderstand) an den Ausgang deines IR Empfänger hängen um zu prüfen, ob die Verzögerung schon dort auftritt. Ein Spannungsteiler wird dir bei Digitalsignalen übrigens wenig helfen (verbrät nur zusätzlich Strom).
Ich tippe darauf, dass das Auslesen des Serialports dir die Verzögerung verursacht.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Swoerm

Alter Hase

  • »Swoerm« ist der Autor dieses Themas

Beiträge: 451

Wohnort: 127.0.0.1

  • Private Nachricht senden

9

07.11.2015, 21:01

Wie ist die Ansteuerung vom Sender, dauersignal oder pwm?
Der Sender ist an einem Normalen Digitalpin angeschlossen (Pin 4) und wird mit folgendem Code angesteuert:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/******************************************************************************
 * This function can be used with a panasonic pna4602m ir sensor
 * it returns a zero if something is detected by the sensor, and a 1 otherwise
 * The function bit bangs a 38.5khZ waveform to an IR led connected to the
 * triggerPin for 1 millisecond, and then reads the IR sensor pin to see if
 * the reflected IR has been detected
 ******************************************************************************/
int irRead(int readPin, int triggerPin)
{
  int halfPeriod = 13; //one period at 38.5khZ is aproximately 26 microseconds
  int cycles = 38; //26 microseconds * 38 is more or less 1 millisecond
  int i;
  for (i=0; i <=cycles; i++)
  {
    digitalWrite(triggerPin, HIGH); 
    delayMicroseconds(halfPeriod);
    digitalWrite(triggerPin, LOW); 
    delayMicroseconds(halfPeriod - 1);     // - 1 to make up for digitaWrite overhead    
  }
  return digitalRead(readPin);
}


Wie weit ist der Sender und der Empfänger auseinander?
Ca. 4-5cm. (Später wahrscheinlich max. 10cm).

Wie groß ist das Objekt was zwischen beiden kommt?

Ca. 16cm².

Eine Art Abtandsmessung mit IR kommt mir etwas ungewöhnlich vor. Abstandsmessung werden normalerweise über Schall Sender/Empfänger realisiert.
Das ganze soll auch nur eine Lichtschranke werden (ich sehe erst jetzt gerade, dass ich weiter oben (aus versehen) Abstandssensor gesagt habe).

Du hast keinen Zugang zu einem Oszi oder?
Leider nein.
könntest du testweise einfach eine LED(+Vorwiderstand) an den Ausgang deines IR Empfänger hängen um zu prüfen, ob die Verzögerung schon dort auftritt.
Wenn ich die LED einfach zwischen Sensor und Eingangspin hänge brennt sie unabhängig von der Polung gar nicht. Wenn ich den Eingangspin durch einen Minuspol ersetze brennt sie immer (unabhängig davon ob sich ein Objekt zwischen Sensor und IR-LED befindet oder nicht).

Ein Spannungsteiler wird dir bei Digitalsignalen übrigens wenig helfen (verbrät nur zusätzlich Strom).

Mein Physiklehrer erwähnte vor den Ferien den Spannungsteiler als Mittel um diese Verzögerung zu vermeiden. Er erklärte (ich bin mir nicht mehr ganz sicher wie er sich ausgedrückt hatte), dass wenn ein Signal am Eingangspin anläge und dann wieder verschwinde immer noch restliche Elektronen am Pin vorhanden sind. Durch das hinzufügen eines Spannungsteiler könnten diese Elektronen abgeleitet werden (-> keine Verzögerung mehr).
Ich tippe darauf, dass das Auslesen des Serialports dir die Verzögerung verursacht.
Wie ich durch Beobachtung sehen konnte tritt die Verzögerung nur auf wenn ich ein Objekt wieder wegnehme. Daher schließe ich eine Allgemeine Verzögerung aus (Außerdem würde diese doch dann in manchen Fällen keine 5 Sekunden betragen).

C-/C++-Quelltext

1
2
    /* Keep the compiler happy */
    return(0);

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

10

07.11.2015, 21:39

Typischerweise nutzt man pull-up oder pull-down (vgl. Recv Datenblatt), aber keinen Spannungsteiler. Auch ist das nach meinen Kenntnisstand nur notwendig, wenn man wirklich HF hat oder aber mit Analogsignale arbeitet. Dein Aufbau reagiert sofort drauf, wenn das Objekt dazwischen geschoben wird, aber nicht drauf, dass das Objekt entfernt wird?
P.S: Wenn du die LED zwischen Ausgangspin und GND schaltest siehst du immer dann einen DIP, wenn der RECV was empfängt. Allerdings ist die Sendedauer nur 1 ms. Schraub das mal auf ne Sekunde oder so hoch.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Nox« (07.11.2015, 21:52)


Werbeanzeige