Fischertechnik Ultraschallsensor am Arduino auslesen

Alles rund um TX(T) und RoboPro, mit ft-Hard- und Software
Computing using original ft hard- and software
Forumsregeln
Bitte beachte die Forumsregeln!
davidrpf
Beiträge: 252
Registriert: 14 Jul 2015, 14:27
Kontaktdaten:

Fischertechnik Ultraschallsensor am Arduino auslesen

Beitrag von davidrpf » 15 Apr 2017, 11:35

Hallo zusammen,

im Rahmen meines Projekts, die Arduino Platform zur Steuerung von ft-Hardware zu benutzen (https://youtu.be/UdzuQfM4sNw) stellt sich mir die Frage, wie man die Fischertechnik Ultraschallsensoren auslesen kann. Ich besitze sowohl die erste, als auch die zweite Generation.

Zur Verschaltung (alte Generation mit zwei Steckern): Wie schließt man die an?

Zur Verschaltung (neue Generation mit +, - und Signalleitung: + / - ist klar, wird mit 5V / Ground verbunden und die Signalleitung wahrscheinlich mit einem GPIO (muss dieser analog sein?)

Zum Programm: Ich habe bereits einen Ultraschallsensor vom Typ HC-SR04 erfolgreich ausgelesen, das wird im Internet ja auch ausführlich dokumentiert. Ein GPIO wird zum Senden eines kurzen Pulses, der andere zum Empfangen des Pulses verwendet. Es gibt auch eine Variante, bei der man nach dem Senden von Output auf Input wechselt und so nur einen GPIO benötigt. Zumindest die neue Generation ähnelt von der Verschaltung her dem Typ HC-SR04. Wie liest man den ft-Sensor aus? Liefert er ein codiertes digitales oder analoges Ausgangssignal oder muss man am Arduino Differenzzeiten messen und diese in den Weg umrechnen wie beim Typ HC-SR04?

Hat jemand die Auslesung des Sensor schon einmal probiert? Für mich wäre es im Prinzip egal, ob es mit der alten oder der neuen klappt.

Konstruktive Grüße
David
Polarkoordinaten Plotter https://youtu.be/u6XwKxZuxqk
Autofabrik: https://youtu.be/mX9JWcca6kQ

Benutzeravatar
MasterOfGizmo
Beiträge: 2720
Registriert: 30 Nov 2014, 07:44

Re: Fischertechnik Ultraschallsensor am Arduino auslesen

Beitrag von MasterOfGizmo » 15 Apr 2017, 15:14

Das habe ich mich neulich auch gefragt, als ich den Ultraschallsensor am Bluetooth Smart Controller anschliessen wollte.

Man hört am TXT das regelmässige Messen des Sensors nur, wenn man auf Entfernungsmessung stellt. Es gibt nicht so schrecklich viel, was ein TXT aktiv an einem Eingang machen kann. Eigentlich kann er nur den Pullup aktivieren. Hast Du in Deinem Arduino die ft-üblichen zuschaltbaren Pullups? Kannst Du z.B. darüber eine Messung auslösen?
Arduino für fischertechnik: ftDuino http://ftduino.de, ftDuino32 http://ftduino.de/32

Benutzeravatar
ski7777
Beiträge: 870
Registriert: 22 Feb 2014, 14:18
Wohnort: Saarwellingen

Re: Fischertechnik Ultraschallsensor am Arduino auslesen

Beitrag von ski7777 » 15 Apr 2017, 15:15

Dass es eine Initialisierung gibt, ist mit auch aufgefallen. Das Protokoll sieht nach UART aus.

Raphael

Benutzeravatar
MasterOfGizmo
Beiträge: 2720
Registriert: 30 Nov 2014, 07:44

Re: Fischertechnik Ultraschallsensor am Arduino auslesen

Beitrag von MasterOfGizmo » 15 Apr 2017, 15:45

"UART" hätte ich es zwar nicht genannt, aber ich denke ich weiss, was Du meinst. Es ist ein serielles digitales Signal. Wie bist Du denn darauf gekommen?

Der TXT aktiviert wie erwartet den Pullup und kurze Zeit später zieht der Sensor das Signal aktiv auf Masse und darauf scheint ein digitaler Messwert mit besagen ~8.5us/Bit zu folgen. Das ist zumindest was ich aus dem errate, was ich eben auf dem Oszilloskop gesehen habe. Raphael, wie hast Du das rausbekommen?

Edit: ~8.5us sind reichlich nah an 115200bit/s. Von daher ist tatsächlich auf Sensorseite ein UART im Spiel. Da frage ich mich ja noch mehr, wie Du drauf gekommen bist ....
Arduino für fischertechnik: ftDuino http://ftduino.de, ftDuino32 http://ftduino.de/32

Benutzeravatar
MasterOfGizmo
Beiträge: 2720
Registriert: 30 Nov 2014, 07:44

Re: Fischertechnik Ultraschallsensor am Arduino auslesen

Beitrag von MasterOfGizmo » 15 Apr 2017, 21:44

Hier mal zwei Screenshots vom Oszilloskop. Im ersten Bild war die Entfernung "maximal", also 1023cm, im zweiten war es irgendwas nahes.

Man sieht ganz links noch kurz, wie der Pegel auf ca. 3 Volt liegt, das scheint der Sensor zu machen. Dann schaltet der TXT seinen Pullup ein und das Signal geht auf gute 5V hoch. Dann passiert gute 100us nichts, bevor jemand das Signal auf Masse zieht. Das kann der TXT selbst m.E. nicht. Das muss dann also der Sensor sein. Nach 60-70us wird das Singnal wieder losgelassen. Nach nochmal 100us zieht es der Sensor wieder auf Masse. Was jetzt folgt sieht nach 115200 Bit/s aus.

Die Cursor befinden ich m.E. links eines Start und eines Stop-Bits, das wären 19 Bits bei 115200bit/s. Gehen wir von 8N1 aus, dann befinden sich zwischen beiden Cursor ein ganzes Byte (1 Start-, 8 Daten-, 1 Stoppbit) und eines ohne Stopp-Bit, weil das Stoppbit rechts des rechten Cursors ist. Also sendet der Sensor zwei Bytes. Also ich würde mal versuchen, den Sensor an den UART des Arduino anzuschließen.
ultrasonic_1023cm.jpg
ultrasonic_close.jpg
Arduino für fischertechnik: ftDuino http://ftduino.de, ftDuino32 http://ftduino.de/32

chehr
Beiträge: 193
Registriert: 07 Apr 2015, 21:07
Wohnort: Friedrichshafen

Re: Fischertechnik Ultraschallsensor am Arduino auslesen

Beitrag von chehr » 16 Apr 2017, 08:11

Anbei Link mit ähnlichen Ergebnisse

viewtopic.php?f=8&t=2191&p=13729

Benutzeravatar
ski7777
Beiträge: 870
Registriert: 22 Feb 2014, 14:18
Wohnort: Saarwellingen

Re: Fischertechnik Ultraschallsensor am Arduino auslesen

Beitrag von ski7777 » 16 Apr 2017, 09:46

Es ist kein Pullup, sondern eher ein Pulldown. bis ganz GND. Wenn man den Sensor mit Strom verbindet und das Datenkabel kurz an GND hält knackt er, wie im Betrieb.

Raphael

davidrpf
Beiträge: 252
Registriert: 14 Jul 2015, 14:27
Kontaktdaten:

Re: Fischertechnik Ultraschallsensor am Arduino auslesen

Beitrag von davidrpf » 16 Apr 2017, 10:37

Vielen Dank für die Antworten
ski7777 hat geschrieben:Es ist kein Pullup, sondern eher ein Pulldown. bis ganz GND. Wenn man den Sensor mit Strom verbindet und das Datenkabel kurz an GND hält knackt er, wie im Betrieb.
Diesen Eindruck habe ich auch. Ich habe am Arduino den Pin auf LOW geschaltet, dann kam eine Antwort, mit der ich bis jetzt aber noch nichts anfangen kann.

David
Polarkoordinaten Plotter https://youtu.be/u6XwKxZuxqk
Autofabrik: https://youtu.be/mX9JWcca6kQ

Benutzeravatar
ski7777
Beiträge: 870
Registriert: 22 Feb 2014, 14:18
Wohnort: Saarwellingen

Re: Fischertechnik Ultraschallsensor am Arduino auslesen

Beitrag von ski7777 » 16 Apr 2017, 10:38

Kannst du mal versuchen die Daten als UART(115299,8,n,1) einzulesen und hier posten?

Raphael

davidrpf
Beiträge: 252
Registriert: 14 Jul 2015, 14:27
Kontaktdaten:

Re: Fischertechnik Ultraschallsensor am Arduino auslesen

Beitrag von davidrpf » 16 Apr 2017, 11:09

ski7777 hat geschrieben:Kannst du mal versuchen die Daten als UART(115299,8,n,1) einzulesen und hier posten?
Da der Sensor nur eine Ausgangsleitung hat, ist mir nicht ganz klar, wie ich ihn an RX/TX anschließen soll und welche Befehle zum Auslesen benötigt werden. Wie hast du das gemeint?

David
Polarkoordinaten Plotter https://youtu.be/u6XwKxZuxqk
Autofabrik: https://youtu.be/mX9JWcca6kQ

Benutzeravatar
ski7777
Beiträge: 870
Registriert: 22 Feb 2014, 14:18
Wohnort: Saarwellingen

Re: Fischertechnik Ultraschallsensor am Arduino auslesen

Beitrag von ski7777 » 16 Apr 2017, 11:16

Du musst den Pin kurz auf Low setzen, dannach wieder open drain und dann per serial/softserial zwei bytes lesen.

Raphael

Benutzeravatar
MasterOfGizmo
Beiträge: 2720
Registriert: 30 Nov 2014, 07:44

Re: Fischertechnik Ultraschallsensor am Arduino auslesen

Beitrag von MasterOfGizmo » 16 Apr 2017, 11:26

Es gibt alles nötige Know-How in den Oszilloskop-Screenshots. Man muss den Sensor an einen Uart-Eingang am Arduino anschliessen, dann einen Pullup-Widerstand aktivieren, den uart des Arduino auf 115200 bit/s schalten und lesen.

Da wir alles aus den Screenshots ablesen können sollten wir m.E. auf das Know-How aus FT- und Knobloch-internen Dokumenten verzichten.
Arduino für fischertechnik: ftDuino http://ftduino.de, ftDuino32 http://ftduino.de/32

davidrpf
Beiträge: 252
Registriert: 14 Jul 2015, 14:27
Kontaktdaten:

Re: Fischertechnik Ultraschallsensor am Arduino auslesen

Beitrag von davidrpf » 16 Apr 2017, 11:33

MasterOfGizmo hat geschrieben:Da wir alles aus den Screenshots ablesen können sollten wir m.E. auf das Know-How aus FT- und Knobloch-internen Dokumenten verzichten.
Gibt es denn solche, die der Fangemeinde offenliegen?
Ich habe den Sensor geöffnet, um nach einer Artikelnummer zu suchen. Außer Knobloch.ws steht da aber nichts verwertbares.

David
Polarkoordinaten Plotter https://youtu.be/u6XwKxZuxqk
Autofabrik: https://youtu.be/mX9JWcca6kQ

Benutzeravatar
MasterOfGizmo
Beiträge: 2720
Registriert: 30 Nov 2014, 07:44

Re: Fischertechnik Ultraschallsensor am Arduino auslesen

Beitrag von MasterOfGizmo » 16 Apr 2017, 11:35

Ah, der TXT zieht den Eingang selbst gegen Masse? Dass das der TXT macht kann man aus den Screenshots leider nicht sehen. War mir auch nicht klar, das der TXT das kann.
Arduino für fischertechnik: ftDuino http://ftduino.de, ftDuino32 http://ftduino.de/32

Benutzeravatar
MasterOfGizmo
Beiträge: 2720
Registriert: 30 Nov 2014, 07:44

Re: Fischertechnik Ultraschallsensor am Arduino auslesen

Beitrag von MasterOfGizmo » 16 Apr 2017, 11:37

davidrpf hat geschrieben:Gibt es denn solche, die der Fangemeinde offenliegen?
Ja, diie Screenshots. Sie enthalten alles was man über die Datenübertragung wissen muss. Und wie man die Messung startet habt ihr ja auch heraus bekommen.
Arduino für fischertechnik: ftDuino http://ftduino.de, ftDuino32 http://ftduino.de/32

davidrpf
Beiträge: 252
Registriert: 14 Jul 2015, 14:27
Kontaktdaten:

Re: Fischertechnik Ultraschallsensor am Arduino auslesen

Beitrag von davidrpf » 16 Apr 2017, 11:38

Code: Alles auswählen

void setup() {
  Serial2.begin(115200);  
  Serial.begin(9600);
}

void loop() {
  // Pin 17 = RX Serial2 Arduino Mega
  pinMode(17, OUTPUT);
  pinMode(17, LOW);
  delay (10);
  pinMode(17, INPUT);
  i=0;

  if (Serial2.available() >= 1)
  {
    Rx_DATA[i++]=(Serial2.read());  
  }
  
  for (int j = 0; j < 16; j++)
  {
    Serial.print(Rx_DATA[j]);
  }
  Serial.println();

  delay(1000);
}
Ausgabe: 00000000 00000000

Was mache ich falsch?
Polarkoordinaten Plotter https://youtu.be/u6XwKxZuxqk
Autofabrik: https://youtu.be/mX9JWcca6kQ

Benutzeravatar
ski7777
Beiträge: 870
Registriert: 22 Feb 2014, 14:18
Wohnort: Saarwellingen

Re: Fischertechnik Ultraschallsensor am Arduino auslesen

Beitrag von ski7777 » 16 Apr 2017, 11:43

Die 10 ist deutlich zuviel. Der Impuls sollte viel kürzer sein. Danach fängt der Sensor sofort an zu sprechen.

Raphael

davidrpf
Beiträge: 252
Registriert: 14 Jul 2015, 14:27
Kontaktdaten:

Re: Fischertechnik Ultraschallsensor am Arduino auslesen

Beitrag von davidrpf » 16 Apr 2017, 11:45

Es funktioniert auch mit deutlich kleineren Zeiten nicht (z.B. mit den 60-70 µs aus den Screenshots)
David
Polarkoordinaten Plotter https://youtu.be/u6XwKxZuxqk
Autofabrik: https://youtu.be/mX9JWcca6kQ

Benutzeravatar
ski7777
Beiträge: 870
Registriert: 22 Feb 2014, 14:18
Wohnort: Saarwellingen

Re: Fischertechnik Ultraschallsensor am Arduino auslesen

Beitrag von ski7777 » 16 Apr 2017, 11:47

Kannst du mal versuchen, was passiert, wenn du beim serial einen pullup aktivierst?

davidrpf
Beiträge: 252
Registriert: 14 Jul 2015, 14:27
Kontaktdaten:

Re: Fischertechnik Ultraschallsensor am Arduino auslesen

Beitrag von davidrpf » 16 Apr 2017, 11:52

Gleiches Ergebnis.

Ich hab mal eine ISR geschrieben, die ähnlich wie das Oszilloskop die Zeiten zwischen den Flankenwechseln misst. Der Output sieht so aus (in Mikrosekunden)
104 (HIGH)
12 (LOW)
12 ...
44
20
16
16
16
12
20

Vertraut man auf die 115200, sollten der GGT aller Zeiten etwa 8,5µs sein, die gemessenen Zeiten Vielfache des GGTs. Doch schon allein das stimmt hier nicht.

Edit: Immerhin verändern sich die Werte, wenn man einen Gegenstand vor den Sensor hält: (bei 4cm)

100 (HIGH)
68 (LOW)
20 ...
16
16
44


David
Polarkoordinaten Plotter https://youtu.be/u6XwKxZuxqk
Autofabrik: https://youtu.be/mX9JWcca6kQ

Antworten