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.

Thema geschlossen 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Konflikt Ultraschallsensor und Infrarotfernbedienung
15.01.2021, 18:31
Beitrag #1
Konflikt Ultraschallsensor und Infrarotfernbedienung
Hallo liebe Mitglieder,

ich bin neu hier und habe Grundkenntnisse in meinem neuen LD-Zeitvertreib, der Arduinowelt. Ich habe ein Set mit einem UNO R3 (Elegoo) durch und will nun mein erstes Projekt angehen. Ziel ist eine Alarmanlage mit Abstandsmessung durch Ultraschall und entsprechenden Maßnahmen (Buzzer, WLAN, Nachricht auf`s Handy – so der Plan zumindest).

Gleich am Anfang habe ich ein Problem erkannt was ich in der Form nirgends finden konnte bzw. die eventuellen Lösungen nicht halfen.

Also:
Mein USS mit der SR04.h - Bibliothek funktioniert einwandfrei. Ich habe schon einen Parksensor mit Buzzer und LED programmiert.

Im Projekt wollte ich erst mal eine Fernbedienung zum Aktivieren der ganzen Chose implementieren.

Sobald ich den Sensor mittels irrecv.enableIRIn() (IRremote.h - Bibliothek) aktiviere (bzw. den im Programm aufführe) liefert der USS falsche Werte (aus 150 cm Abstand werden 130 cm). Das geschieht auch ohne verbundenen Infrarotempfänger oder Buzzer. Hardwarebeeinflussung in dem Sinne schließe ich dann aus. Lösche ich alle beim Kompilieren zickenden Infrarotmerkmale funktioniert der USS einwandfrei (bei gleicher Belegung).

Mein erster Ansatz war ein TIMERkonflikt bei der PWM. Diese sind wohl wie folgt deklariert:
8 Bit-Timer0: PWM bei Pin D5 und D6
16 Bit Timer1: PWM bei Pin D9 und D10 (hier D9 = USS)
8 Bit Timer2: PWM bei Pin D3 und D11 (hier D3 = Infrarot)

Ich habe also alle möglichen PIN-Belegungen versucht (der Messwert ändert sich dann, fast auf 70 cm runter) sowie in der Bibliothek den Timer verändert (sprich auf 2 oder 1 gesetzt). Auch dies ohne Veränderung. Das einsetzen von delays oder die Veränderung derselben half auch nichts.

Bibliothek (IRremoteln.h):
Code:
// Arduino Duemilanove, Diecimila, LilyPad, Mini, Fio, etc
#else
  //#define IR_USE_TIMER1   // tx = pin 9
    #define IR_USE_TIMER2     // tx = pin 3
#endif

Im Prinzip würde es funktionieren, da US-Werte erkannt und verändert werden. Ist aber nicht mein Anspruch.

Hier ist der Code mit der Frage: Hat jemand eine Idee was ich sonst noch tun könnte? Beißen sich die Signalfrequenzen der Komponenten über die Bibliotheken? Vielleicht braucht es auch ein DUE oder so? Im Notfall versuche ich ein anderes Arduino mit anderer Belegung (und hoffe). Vorab Danke für Unterstützung.

Code:
#include "IRremote.h"
#include "SR04.h"
#define TRIG_PIN 12
#define ECHO_PIN 9
int receiver = 3;
int buzzer = 4;
long a;

SR04 sr04 = SR04(ECHO_PIN, TRIG_PIN);

IRrecv irrecv(receiver);     // create instance of 'irrecv'
decode_results results;      // create instance of 'decode_results'

void translateIR() // takes action based on IR code received
{
  switch (results.value)
  {
    case 0xFFA25D: Serial.println("POWER"); break;
    case 0xFF6897: Serial.println("0"); break;
  }
  delay(100); // Do not get immediate repeat
}

void setup()
{
  Serial.begin(115200);
  irrecv.enableIRIn(); // Start the receiver
  pinMode(buzzer, OUTPUT);
}

void loop()
{
  a = sr04.Distance();
  Serial.print(a);
  Serial.println("cm");

  if (irrecv.decode(&results)) // have we received an IR signal?
  {
    translateIR();

    if (results.value == 0xFFA25D) //"Power"
    {
      digitalWrite(buzzer, HIGH);
    }

    if (results.value == 0xFF6897) //"0"
    {
      digitalWrite(buzzer, LOW);
    }
    irrecv.resume();
    delay(100);
  }
}

P.s.: Ich weiß das ich meilenweit vom Ziel entfernt bin, aber ich möchte anfangs dieses Problem mit einem einfachen Code angehen – übersichtlicher wird es sicher nicht.
15.01.2021, 18:44 (Dieser Beitrag wurde zuletzt bearbeitet: 15.01.2021 18:44 von Tommy56.)
Beitrag #2
RE: Konflikt Ultraschallsensor und Infrarotfernbedienung
Wenn Du diese SR04.h benutzt, die benutzt intern pulseIn und pulsIn blockiert während der Ausführung, d.h. in der Zeit kann der Arduino nicht auf die FB reagieren.
Wenn Du eine andere Lib benutzt, gib uns bitte einen Link.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
15.01.2021, 19:04
Beitrag #3
RE: Konflikt Ultraschallsensor und Infrarotfernbedienung
Hallo,

diese ist es:
https://github.com/mrRobot62/Arduino-ult...ter/SR04.h
Sie ist wohl auf die Elegoo USS-Hardware getrimmt.
Wobei eher die SR04.h von der IRremote.h blockiert/gestört wird?
15.01.2021, 19:17
Beitrag #4
RE: Konflikt Ultraschallsensor und Infrarotfernbedienung
Diese Lib benutzt auch pulseIn.
Die ISR bem IR-Empfang feuert alle 50 µs. Das kann natürlich auch die Messung der Pulsbreite für die Entfernung beeinflussen.

Ich sehe 2 mögliche Wege:

1. IR-Empfang auf einen anderen Prozessor auslagern
2. Beide Libs so umbauen, dass sie nicht gleichzeitig arbeiten, also Messen (dann ist IR-Empfang abgeschaltet) und wenn IR-Empfang, dann keine Messung.

Ähnliche Probleme gibt es auch beim "Zusammenspiel" IR-Empfang und RGB-LEDs WS2812.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
15.01.2021, 19:24
Beitrag #5
RE: Konflikt Ultraschallsensor und Infrarotfernbedienung
Die Lib schaltet eigentlich während pulsIn die Interrupts aus, so dass die IR-Lib das Messergebnis bei dieser Lib nicht beeinflussen kann. Die vorherige Aussage bezog sich auf die andere Lib.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
15.01.2021, 19:30
Beitrag #6
RE: Konflikt Ultraschallsensor und Infrarotfernbedienung
Danke dir.

Erst mal bin ich "beruhigt" das es wohl kein "völliges Ahnungslosenproblem" ist.

1. Also wäre ein Arduiono DUE eine Möglichkeit (2 CPUs)?
2. Ok, ob ich das hinbekomme sehe ich dann. Auf jeden Fall kann ich es wohl nicht in der Schleife lösen (USS-Messung erst bei Infrarot).
Ich vermute die Bibliotheken sind schon geladen und das Problem beginnt. Eine attach(Pin) / detach(Pin) Variante in der Schleife wird dann wohl auch nicht funktionieren?

Und eine Frage: Kann ich auch andere Libraries versuchen in der Annahme das die Hardware mit denen umgehen kann?
Oder ist das immer nur auf die speziellen Sensoren gemünzt?
15.01.2021, 19:38
Beitrag #7
RE: Konflikt Ultraschallsensor und Infrarotfernbedienung
Wie kommst Du auf den Gedanken, dass der DUE 2 Prozessoren hätte?

Du kannst die Libs so umschreiben, dass sie das machen, was Du Dir vorstellst. Sie liegen auf Deinem Rechner im Quelltext vor. Das setzt aber eine intensive Beschäftigung mit den Grundlagen von C++ voraus.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
15.01.2021, 19:50
Beitrag #8
RE: Konflikt Ultraschallsensor und Infrarotfernbedienung
Gute Frage. Ich habe das verwechselt mit der Fähigkeit mehrere Schleifen gleichzeitig/parallel/einzeln laufen zu lassen. Was ich "meine" gelesen zu haben wohl funktioniert (aber wohl nicht das Problem löst).

Gut, ich schaue mal wie ich weiterkomme und weiß jetzt wo der Hase im Pfeffer liegt.
Ich hasse abgestorbene Threads und schließe das hier ab falls ich eine Lösung finde.
Thema geschlossen 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Konflikt bei Rotary Encoder Karl Stanger 9 673 02.01.2021 13:39
Letzter Beitrag: hotsystems
  Konflikt NEMA17 und LCD1602 ArnaCronix 1 1.041 25.03.2019 19:54
Letzter Beitrag: Tommy56
  Seriell Konflikt? jgrothe 3 2.127 19.10.2016 21:09
Letzter Beitrag: hotsystems
  Library-Konflikt Retian 3 2.852 23.09.2015 10:16
Letzter Beitrag: hotsystems
  Konflikt PWM und libaries... Arduino nano MaHa1976 5 2.903 27.03.2015 11:38
Letzter Beitrag: MaHa1976
  WS2811, Serial.available konflikt ? Chris_Arduino 3 3.305 26.03.2015 12:02
Letzter Beitrag: Thorsten Pferdekämper
  Ultraschallsensor Ausgabe verbessern Semi 9 5.825 12.12.2014 13:39
Letzter Beitrag: marcus
  Ultraschallsensor am I2C Bitte um Hilfe Zerebrator 16 9.469 27.08.2014 17:27
Letzter Beitrag: rkuehle

Gehe zu:


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