Verbinden mehrerer Ultraschallsensoren mit einem Arduino

Ich versuche, fünf Ultraschallsensoren (HC-SR04, um genau zu sein) an ein Arduino-Board anzuschließen, um Hindernisse in fünf Richtungen (vier Himmelsrichtungen + eine Z-Achse) zu erkennen. Ich habe auch das Datenblatt der HC-SR04s und des Arduino Uno gelesen und festgestellt, dass der Ultraschallsensor im aktiven Zustand 15 mA zieht und der Uno maximal 40 mA durch jeden Pin und insgesamt 200 mA von allen Pins liefern kann.

Da ich jetzt keine zehn PWM-E / A-Pins habe, dachte ich, dass ein Trigger-Pin ausreicht, da ich die Sensoren auf einmal auslösen werde. Die ECHO-Pins gehen für jedes Modul an einen separaten PWM-Pin.

Ich habe hier zwei Bedenken (ich bin nur ein Anfänger in der Elektronik :)):

  1. Ich werde jeden Sensor über ein 5V/2A BEC mit Strom versorgen. Wird dies also zu einer Stromüberziehung von den Arduino PWM-Pins führen? Wenn ja, gibt es eine Problemumgehung? Vielleicht eine transistorgesteuerte Lösung? (Ich habe am College einen Grundkurs in Elektronik absolviert, hatte aber nie die Gelegenheit, selbst einen zu entwerfen.)

  2. Die zweite Sorge betrifft mein Trigger-Pin-Design. Kann ein Stift fünf der Sensoren pulsieren, oder lässt der Stromabfall sie nicht feuern (da sie alle parallel sind)? Ich vermute, dass es nur die Spannung ist, die sie antreibt (Annahme) und parallel wäre alles gleich, also sollte es funktionieren, oder?

Ich habe mich umgesehen, aber ich habe nur Informationen zum Anschließen eines Sensors an den Arduino gefunden. Ich habe etwas über den Betrieb von Hochleistungsmotoren mit Arduino gelesen, indem ich den Strom über eine Batterie liefere, also denke ich, dass meine erste Sorge in Ordnung sein sollte? Aber ich bin mir nicht sicher, und deshalb dachte ich, ich frage hier. Danke!

Das klingt sinnvoll: separate Stromversorgung für alle Sensoren. Ich würde nicht erwarten, dass der Trigger eine signifikante Stromaufnahme aufweist. Ich wäre jedoch besorgt darüber, dass die Sensoren die Echos des anderen erkennen. Benötigen Sie PWM von den Return-Pins, da Sie nur versuchen, die Impulsbreite zu erkennen?
Okay, die Sorge um die Stromversorgung ist klar. Ich habe sowieso vier BECs, aber eines sollte funktionieren, oder? Es hat einen Nennstrom von 5 V und 2 A. Und ja, ich brauche auch PWM für die Return-Pins. Die Rückkehr jedes Sensors geht zu einem separaten Pin auf dem Arduino.
Ja, ein BEC für alle, nicht für jeden.
Okay danke! Das hat geholfen. :) Und ich habe gerade etwas mehr gelesen - PWM ist nicht unbedingt erforderlich. Ich habe viel zu lernen. :)
Was ist mit dem Auslösen von 2 Sensoren von einem Port? Sie werden 20 mA verbrauchen, also sollten sie richtig funktionieren. Ich hoffe es!

Antworten (2)

Das Problem mit hobbybezogenen Lösungen ist, dass die Dokumentation begrenzt ist und nicht wie kommerzielle Komponenten oder Module spezifiziert ist.

Es ist möglich, dass es funktioniert, aber erstellen Sie ein Blockschaltbild und konsultieren Sie den OEM. Wohlgemerkt, ich weiß nicht, ob sie eine angemessene Unterstützung für Ihre Frage haben, da diese in China gebaut werden.

Hobby Services 3002 N. Apollo Dr. Suite 1 Champaign, IL 61822 (217) 398-0007 E-Mail: hobbyservices@hobbico.com Internetadresse: www.supertigre.com

Es scheint, dass Ihre Ultraschalllast TTL ist, sodass es kein Problem gibt, 5 gleichzeitig mit einem BEC zu schalten, aber ich frage mich, ob Sie die Auswirkungen des Übersprechens auf das gleichzeitige Feuern berücksichtigt haben. Sie geben einen Erkennungswinkel von 15 Grad an, dies hängt jedoch vom Reflexionswinkel der Objekte ab, die Sie erkennen möchten. Es kann zu Phasenproblemen mit Reflexionsauslöschungen kommen, z. B. wenn 5 Hochtöner in einem Raum ausgerichtet sind. Das Lesen der Antwort jedes Echos parallel zu einer Zeitintervallzählung wird bei nicht glatten Objekten mit 5 Sendern kein einfaches Lehrbuchergebnis sein.Geben Sie hier die Bildbeschreibung ein

Sie können Ihr orthogonales Array-Design mit einem beliebigen Signalimpulsgenerator testen und das Signal auf einem Parallelport-Logikanalysator oder Oszilloskop betrachten, um sicherzustellen, dass Ihr Design funktioniert.

Power Drive ist das geringste Ihrer Bedenken bei diesen Low-Power-Geräten. Die Vermeidung von Rauschen durch leitungsgebundene und abgestrahlte Quellen wird von größter Bedeutung sein, und das Design des Transponder-Arrays muss an erster Stelle stehen. Ich würde einige Zeit damit verbringen, diesen ersten Teil zu testen, um alle elektrischen, physikalischen, akustischen, EMI-, thermischen und Vibrationsquellen zu identifizieren, sowohl leitungsgebundene als auch abgestrahlte Interferenzquellen und wie sich jede auf Ihre SONAR-Erwartungen mit verschiedenen Objekten auswirkt. Wird es mikrofonisch mit Vibration oder lauten Pulsgeräuschen sein. Wie gut unterdrückt es andere Ultraschall-Rauschquellen? Ändert sich die Impulsbreite des TTL-Echoausgangs mit der Signalstärke oder nur mit der Verzögerungszeit?

Erhalten Sie aufgrund von Eckenreflexionseffekten Echos vom falschen Absender?

Ja, das sind billige chinesische. Aber für ein Low-Cost-Projekt, mit dem ich gerade beginne, sind diese ein Schnäppchen, weil sie die Bank nicht sprengen, wenn sie nicht funktionieren oder wenn ich keine Verwendung für sie finde (jedenfalls nicht jetzt). Ich gehe nur von den Spezifikationen aus, die ich irgendwo gelesen habe - ich weiß nicht, wie viel Strom sie tatsächlich ziehen, aber im Moment halte ich nur an diesen Werten fest.
Sie sind MOSFET-Schalter, die für diesen Wert ausgelegt sind, zeigen aber nicht den Treiberstrom an. Sie können die Antriebsspannung nacheinander messen, um festzustellen, ob eine signifikante Belastung vorliegt. Ein Zielfernrohr würde helfen, Geräusche zu sehen. Aber auf jeden Fall würde ich sie per E-Mail um Rat fragen.
Das BEC bedeutet Batterie-Eliminator-Schaltung, es soll also eine zweite Batterie für ein Funkgerät von der Hauptservobatterie ersetzen, und es ist bereits ein Transistorschalter (MOSFET) mit V- und A-Begrenzungen zur Last.
Hmmm, okay, das ist eine Menge Dinge, die zu berücksichtigen sind, aber ja, ich habe auch über das Übersprechen nachgedacht, aber nicht über die anderen Probleme, die Sie hervorgehoben haben. Für das Problem des Übersprechens dachte ich darüber nach, die Sensoren in einem Muster zu feuern, das die anderen Sensoren nicht stört (vielleicht gegenüberliegende Sensoren oder im schlimmsten Fall einer nach dem anderen). Ich habe sie noch nicht wirklich bekommen, aber ich habe einiges darüber gelesen. Sie scheinen nicht sehr genau zu sein, aber im Moment schaue ich nur, um zu sehen, wie das alles funktioniert. Es ist nur ein einfaches Robotikmodul zur Objekterkennung und -vermeidung in der Schule.
Ich muss jedoch die anderen Geräuschquellen überprüfen, wie Sie sie erwähnt haben. Ich habe nicht über die Auswirkungen von Vibrationen auf diese Sensoren nachgedacht, bis ich Ihren Beitrag gelesen habe (und da es sich um einen sich bewegenden Bot handeln wird ...). Ich plane, jedes Modul einzeln zu testen und zu kalibrieren (ich weiß nicht wie, aber ich werde einen Weg finden. :D) und dann alles auf einem Steckbrett aufbauen, bevor es auf den Bot geht.
Ein Oszilloskop oder Logikanalysator scheint unerlässlich zu sein und dann Ihren Zeitintervallzähler in Firmware zu entwerfen. Testen Sie mit einem einzelnen T/R-Sensor, dann mehreren Arrays mit verschiedenen Objekten bis zum Entfernungsbereich. Achten Sie auf V+ und gnd-Rauschen.
Okay, das werde ich machen und sehen, wie es läuft. Danke für die Hilfe! :)
Wenn irgendetwas davon tatsächlich hilft, ist +1 gegebenenfalls ein nützliches Feedback.

Mir ist klar, dass dies ein bisschen wie ein alter Thread ist, aber ... Ich habe ein paar davon, und das Problem ist, dass Sie zum "Lesen" des Ergebnisses ein pulseIn verwenden, das den Arduino "bindet". die Zeit des Echos.

Also müssen Sie zuerst ein Timeout auf pulseIn setzen, wie unsigned long pulse_length = pulseIn( iEchoPin , HIGH , 9000 ) ; wobei 9000 9000 Mikrosekunden oder 9 Millisekunden sind, was ungefähr 150 cm oder 5 Fuß entspricht (Schallgeschwindigkeit, zweimalige Wegstrecke, viel Mathematik). Der Grund für ein Timeout ist, dass das Standard-Timeout eine volle Sekunde ist, sodass Sie 1.000 Millisekunden oder 1.000.000 Mikrosekunden auf ein Ergebnis warten könnten (und 0 zurückerhalten, weil es abgelaufen ist). Also habe ich 9000 us eingegeben, das gibt mir 150 cm, was für die Hindernisortung ausreicht.

Und zweitens kann ich nicht herausfinden, wie ich beide Sensoren gleichzeitig lesen kann, da mein Arduino nur jeweils einen Impuls ausführt und das Echo vom 2. Sensor bis dahin bereits zurückgekehrt ist.

Und drittens muss man auf eventuelle "sekundäre" Echos eine gewisse Zeit warten, im Datenblatt stehen 60ms, mit 40ms habe ich gute Erfolge erzielt. Aber wenn ich 2 davon habe, muss ich 40 ms warten, bevor ich den 2. abfeuere, oder es gibt falsche Echos vom ersten (sie sind ungefähr 30 Grad voneinander entfernt).

Der Grund, warum ich hier gesucht habe, ist, dass ich wissen wollte, ob ich denselben Echo-Pin für mehrere SR04-Sensoren (oder auch mehrere IR-Abstandssensoren) verwenden könnte. Wenn ich 1 SR04 triggere und dann den "kombinierten" Echo-Pin lese, brauche ich nur 1 Pin, um eine beliebige Anzahl von Sensoren zu lesen, aber 1 Pin, um jeden auszulösen.

Die andere Möglichkeit besteht darin, den Pin auf Ausgang zu ändern, den Trigger zu senden, ihn dann auf Eingang zu ändern und den PulseIn auszuführen und denselben Draht sowohl zu den Trigger- als auch zu den Echo-Pins auf der SR04-Platine zu führen. Beides werde ich ausprobieren. Wollte aber mal nachfragen, ob das schon mal jemand gemacht hat.