Verwendung von mehr als einem Ping-Ultraschall-Entfernungsmesser


7

Ich habe verschiedene Anwendungen mit dem Ultraschall- Beispielprojekt durchgeführt, aber es wird immer ein Pinger verwendet. Ich möchte einen Scanner auf einem Servo-Sweep ruhen lassen, aber um die Sweep-Zeit zu verkürzen, verwenden Sie mehr als einen Zensor.

Die Dokumentation ist eher ein einfacher Ping-Sonic , der angibt, dass das Signal 40 kHz verwendet wird.

Nun zur Frage. Gibt es eine Möglichkeit, einen Pinger anzuweisen, 40 kHz zu verwenden, und einen anderen, 45 kHz zu sagen?

Dies würde es mir ermöglichen, zwei Bereiche (verschiedene Richtungen) pro Zyklus zu scannen, wodurch sich der Zeitrahmen für den vollständigen Bereichsscan um die Hälfte verringert.


@NickAlexeev, es kann tatsächlich keine Antwort geben, die Pinger-Hardware ist der Schlüssel, nicht das Arduino selbst - der 40-kHz-Zyklus kann tatsächlich durch seine Hardware behoben werden. Ich werde es einen Tag sitzen lassen und dann Ihren Vorschlag annehmen, danke.

Die Frage könnte auch auf EE.SE funktionieren , aber lassen Sie das Arduino-Tag weg , wenn es nicht unbedingt erforderlich ist.

Apropos. Wie lange dauert der Scan mit einem einzelnen Sensor? Wie viele Schritte? Wie lange dauert die Servoeinstellung? Wie viel Zeit benötigt der eigentliche Ping?

Ich schwenke um 180 Grad, es sind ungefähr 30 Sekunden, ich schätze aus dem Gedächtnis, dass ich es nicht zeitlich festgelegt habe. Aber ich möchte die Zeit verkürzen.

Vielleicht möchten Sie die Frage ein wenig klären. Diese Ping-Sensoren arbeiten mit einer "pulsgesteuerten" Methode. Der Arduino sendet den Aktivierungsimpuls und erkennt die Zeitdifferenz von der Rückkehr (Echo). Die Verwendung von zwei (oder mehr) Sensoren an separaten E / A-Pins bedeutet, dass jeder Sensor separat aktiviert (gepulst) wird. Ihre Ultraschallsignale stören sich NICHT, da sie nicht gleichzeitig ausgelöst werden.
Ron J.

Antworten:


4

Es gibt keine Möglichkeit, die Frequenz zu ändern, es gibt jedoch auch andere Möglichkeiten, das zu tun, was Sie erreichen möchten. Ich denke, das Beste ist, das Timing der Pings zu verschieben, damit sie nicht gleichzeitig auftreten.

Beispielcode, von mir geändert:

#include <Servo.h> 
Servo servo; // create servo object to control a servo

int pingPins[] = {7,8}; //The pins for the two sensors
char *pingString[] = {"Ping1", "Ping2"};

void setup()
{
  servo.attach(10); // attaches a servo to pin 10
  Serial.begin(9600);
}

void loop()
{
  unsigned long ultrasoundValue;
  for(int i = 0; i < ultraSoundSignalPins.length; i++)
  {
    ultrasoundValue = ping(i);
    Serial.print(pingString[i]);
    Serial.print(": ");
    Serial.print(ultrasoundValue);
    Serial.print("in, ");    
    delay(50);
  }
  Serial.println();
  delay(50);
 } 

//Ping function
unsigned long ping(int i)
{
  unsigned long echo;

  pinMode(pingPins[i], OUTPUT);         // Switch signalpin to output
  digitalWrite(pingPins[i], LOW);       // Send low pulse
  delayMicroseconds(2);                 // Wait for 2 microseconds
  digitalWrite(pingPins[i], HIGH);      // Send high pulse
  delayMicroseconds(5);                 // Wait for 5 microseconds
  digitalWrite(pingPins[i], LOW);       // Holdoff
  pinMode(pingPins[i], INPUT);          // Switch signalpin to input
  digitalWrite(pingPins[i], HIGH);      // Turn on pullup resistor
  echo = pulseIn(pingPins[i], HIGH);    //Listen for echo
  return (echo / 58.138) * .39;         //convert to CM then to inches
}

Quellen:


1

Der Ping))) Sensor verwendet einen Kristall für das Timing. Einige der billigen Nachahmer verwenden tatsächlich einen MAX3232-Chip (der eine serielle RS232-Schnittstelle / usart ist), um den Rückimpuls nur zur Trägererkennung zu erfassen. Wenn die Parallaxe ähnlich ist, haben diese einen ziemlich großen Frequenzbereich, bei dem sie arbeiten, da Sie nie die zu erwartende Baudrate von 9600 bis 1 MHz kennen, obwohl sie absichtlich nicht sehr pingelig sind, wenn sie versehentlich nahegelegene Frequenzen aufnehmen. Da es wahrscheinlich eine andere Logik auf den anderen Chips gibt und wahrscheinlich alles von einem Kristall ausgeht, würde ich empfehlen, die Frequenzen zu senken, sonst übertakten Sie. Stellen Sie außerdem sicher, dass Sie einen längeren Triggerimpuls senden, da die gesamte Logik langsamer ist. Auf dem Bild sieht es aus wie ein 16-MHz-Kristall, der auf 40 kHz heruntergeteilt werden muss. So löten Sie in einem 14MHz und einem 11MHz,

Nebenbei können Sie auch weiter auseinander scannen. Wenn Sie 30 Sekunden brauchen, überprüfen Sie wahrscheinlich jeden Grad. Versuchen Sie es vielleicht alle 15 oder 30 Grad (geben Sie dem Servo nur Zeit, sich zu bewegen).


0

Ich denke nicht, dass es sehr einfach wäre, die Frequenz zu ändern, wenn Parallax nicht beschließt, die Firmware für den Ping freizugeben. Es ist möglich, zwei zu verwenden, solange Sie jeweils einen anderen Daten-Pin verwenden. Die Ultraschallsignale können jedoch stören.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.