I²C-Sonarplatinen

Status
Nicht offen für weitere Antworten.
#1
Moin,

endlich sind sie fertig, meine kleinen I²C-Sonarplatinen :)
Einige von euch hatten ja schon per PN Interesse bekundet, die kriegen gleich Post. Trotzdem wollte ich diesen Beitrag als kleine Anleitung schreiben.

Für alle die noch nicht wissen worum es geht:
Mir gefiel der Gedanke nicht, einen Sonarsensor wie den HC-SR04 direkt an meine FC anzuschließen, also habe ich eine kleine Platine designed, die mit einem Tiny44 bestückt den Sensor ausliest und die Werte über I²C an die FC schickt.

Technische Daten:

- Maße 45x21mm (genau wie HC-SR04)
- 2mm Bohrlöcher wie HC-SR04 zur Huckepackmontage und/oder 3mm Bohrlöcher 35mm Abstand
- mit Lötpads zur Adressauswahl, kann 8 verschiedene Adressen annehmen (somit sind mehrere Sonarsensoren parallel möglich)
- Versorgungsspannung 5V
- eigener 3,3V 100mA Spannungswandler, kann für externe Zwecke genutzt werden (Spektrum, …)
- I²C Ports 5V (Arduino) und 3,3V kompatibel (Naze32)
- I²C mit 100kHz oder 400kHz (mehr ist nicht getestet, halt ich aber nicht für ratsam)
- Sonarauflösung 16-bit, Wert wird als Reinwert übergeben, ungefiltert. Division durch 58 ergibt Abstand in cm
- wahlweise ADC nutzbar. 10-bit Auflösung 0-5V zum Anschluss analoger Sensoren, Sharp IR-Sensoren, aber auch Spannungs- oder Strommessung möglich
- mit zwei LEDs, eine zeigt Versorgungsspannung an, die andere Betriebsmodi (2x Blinken = ADC, 3x Blinken = Sonar)
- Abtastung erfolgt mit 50ms

NOCH gibt es keine fertige Integration für das Sonar in die Naze32. Alexmos hat im Multiwii Forum mit dem HC-SR04 eine sehr erfolgreiche Implementierung des Sonars vorgenommen, mein Bestreben ist es, diese bald auf das Naze32 zu kopieren. Jeder der Interesse an der Platine hat, sollte sich aber im Klaren darüber sein, dass er selber Hand anlegen muss, oder auf diese Implementierung warten.
Diese Platine ist ebenfalls kein Serienprodukt und ist mit äußerster Sorgfalt zu verwenden. Wenn z.B. die I²C Steckverbindung unglücklich getrennt wird (im Flug), oder die Stromversorgung des Boards ausfällt, kann das zu Problemen auf dem I²C-Bus führen. Da hier alle lebenswichtigen Sensoren für den Copter dranhängen, ist dies gefährlich! Nicht das es nachher heißt mein Copter ist abgestürzt und deine doofe Platine ist Schuld, Verwendung auf eigene Gefahr!

Die Standardadresse der Sensoren ist hex40 (8-bit Schreibweise, im Naze32 Sourceode wäre das hex20, weil dort 7-bit Schreibweise verwendet wird) und kann über Lötbrücken bis auf hex4E erhöht werden, somit sind 8 verschiedene Adressen möglich.

Um das Sonar zu aktivieren muss einmal der Befehl hex32 gesendet werden, zur Aktivierung des ADC hex33. Man kann auch beide im Wechsel auslesen, es ist also möglich an eine Platine sowohl Sonar als auch einen analogen Sensor anzuschließen, falls gewünscht.
Als Beispielprogramm zum Sonarauslesen folgende Zeilen, geschrieben für das Naze32:

Code:
#define SONAR_ADDRESS           0x20 //7-bit!!!

// Registers
#define SONAR_DISTANCE_OUT      0x32
#define SONAR_ADC_OUT           0x33

void i2c_sonar_get_distance(int16_t *sonarAlt)
{

    uint8_t buf[2];
    int16_t temp;

    i2cRead(SONAR_ADDRESS, SONAR_DISTANCE_OUT, 2, buf);

    temp = (int16_t)((buf[1] << 8) | buf[0]);
    *sonarAlt = temp / 58;
}
Last but not least: Ich habe ein paar mehr Platinen fertigen lassen, als ich selber brauche, darum gebe ich gerne welche ab, solange der Vorrat reicht. Fertig aufgebaut mit allen Bauteilen und geflashtem Prozessor hät ich gerne 10€ inkl. Versand dafür. Versand von den Kanaren, kann also 'ne Woche dauern per Luftpost...
 

Anhänge

#2
Hallo,

ich will nochmal nachtragen aus Angst, dass das falsch verstanden wird: Es handelt sich dabei nur um die aufgesetzte Platine, OHNE den HC-SR04 Sensor, die gibt es aber sehr günstig in der Bucht!
Falls sich einer der Leute, die schon bestellt haben veräppelt fühlt, schreibt mir bitte eine PN!

Gruß!
 
#3
Da es langsam konkret wird für die ersten, hier die Pinbelegung. links werden die Sensoren angeschlossen. Entweder den HC-SR04 einfach einstecken von unten und festlöten, oder analogen Sensor anschließen an den 3 Pins dadrunter.

Spannungsversorgung und I²C Signale sind jeweils doppelt ausgeführt, damit sie weitergeschleift werden können. Es reicht oben also eine Stiftleiste 2x1 und unten eine Stiftleiste 4x1, oder Kabel direkt anlöten. Auf jeden Fall darauf achten, die Platine nicht zu verpolen! Ich habe Stecker verwendet, die nicht verpolbar sind, sicher ist sicher.

Für den Anschluss reichen im Prinzip 5V, GND SDA und SCL.
Die 3,3V sind für externe Zwecke, GND unten kann direkt zur FC verdrahtet werden, wenn die 5V woanders herkommen. Wenn die 5V direkt von der FC kommen, braucht man keine zwei GND legen.

Die grüne LED oben leuchtet sobald Betriebsspannung 5V anliegt. Die untere rote LED zeigt den Betriebsmodus an.
Beim Einschalten blinkt sie 3x um zu zeigen, dass alles in Ordnung ist. Wird die Platine im ADC Modus betrieben blitzt sie 2x auf alle 3sec. Wird sie im Sonarmodus betrieben blitzt sie 3x auf alle 3sec.
Empfängt das Sonar kein gültiges Signal leuchtet die LED konstant, so kann man auf anhieb sehen, ob gültige Werte vorliegen. Ungültige Werte wären z.B. Sonar unter 1-2cm oder größer 3-5m, die max. Reichweite hängt stark vom Untergrund ab.
 
Zuletzt bearbeitet:

Komma

Erfahrener Verwender
#4
Hi Daddy W.

Feine Sache das sich jemand um den Sonarteil kümmert.
Respekt!
 

Zuse

Erfahrener Benutzer
#6
Hi Denis,
Sendung ist angekommen.
Veröffentlichst Du auch mal einen Schaltplan / ein Schema?
Ich fühle mich immer etwas wohler, wenn ich mal mit der Meßspitze nachschauen kann ... :)

Gruß
Manfred
 
#8
Oh Fuck, mega peinlich! Natürlich so wie Roberto es aufgemalt hat. Da sag ich noch zehnmal nicht verpolen und geb dazu noch die perfekte Anleitung, man man man...
 

kajot

Erfahrener Benutzer
#9
Was ist den der Vorteil/Nachteil wenn ich ein Sonar-Modul direkt am Seriellen-Port bzw. mit deiner I2C-Platine betreibe?
 

ApoC

Moderator
#10
Es gibt FCs, die nur einen seriellen Port haben, der meist für Bluetooth / GPS oder FTDI / Telemetrie verwendet wird. Damit belegt.

I²C Bus, sagt der Name ja schon, ist ein Bus, an dem viele Sensoren parallel angeschlossen werden können. Darum wohl diese "Umsetzung".
 
Zuletzt bearbeitet:

Roberto

Erfahrener Benutzer
#12
Alternativ könnte man auch 2 PWM Kanäle oder 2RC Kanäle für das Sonar opfern. Dann bräuchte man am besten noch einen DC 5V -> 3,3V Wandler (nur bei der RC Anschlussvariante). Einzelheiten stehen in der drv_hcsr04.c. Bislang sind das alles Luftnummern, da noch kein wirklicher Code dahinter steht. Ich probiere das I2C heute mal aus. Die potentielle Gefahr ist natürlich, dass sich der ganze I2C Bus im Flug aufhängen kann......
 

Roberto

Erfahrener Benutzer
#13
Hilfe!
Irgendwie bekomme ich es nicht auf die Kette:

Das Problem:
Alles hoffentlich richtig angeschlossen (GND,+5V SCL/SDA)
Nur power über USB, d.h I2C Platine bekommt keinen Saft -> I2C hängt sich auf mit Stock FW, CLI unmöglich
Strom über ESC/Lipo -> I2C hängt sich auf mit Stock FW, CLI unmöglich
SDA/SCL getauscht, das gleiche Spiel.
Irgendwie bin ich der Ansicht, dass man auch mit der original FW wenigstens noch ins CLI kommen sollte, sonst ist es doch nicht praktikabel? Was mache ich falsch? Vielleicht könnte man auch, statt des I2C Bus, einen "RC PWM in" nehmen, der sowieso im SumsiBetrieb frei ist, zur Datenübertragung?
Daddy, Hilfe!

LG
Rob
 
Zuletzt bearbeitet:
#14
Hi Roberto,

mit Originalfirmware kommst du nicht weit, deswegen hatte ich die geänderte schonmal gepostet. Das Problem ist einfach: Das Naze32 bootet zu schnell. Der Slavecontroller braucht ein paar ms um den I²C-Bus zu initalisieren, das muss geschehen, bevor das Naze damit arbeiten will. Deswegen ist es zwingend erforderlich ein delay(100); vor der I²C Initalisierung zu haben. (drv_system.c Zeile 99)

Ich habe lange dran rum gerätselt, wie ich dran vorbeikomme, aber keine Lösung gefunden. Letztendlich bringt die Original-FW mit Sonar aber eh nichts und somit habe ich es aufgegeben.

@kajot Der Gedanke hinter dem I²C Bus ist keine weiteren Pins zu verbrauchen, insbesondere weil ich später gerne nicht nur einen, sondern 6-8 Sonarsensoren an die FC hängen möchte, sozusagen als Einparkhilfe ;)
 

JUERGEN_

Generation 60++
#15
....
Vielleicht könnte man auch,
statt des I2C Bus, einen "RC PWM in" nehmen, ...
das sehe ich eigentlich auch so.
und wie ich hörte, ist der I2C-Bus am STM32 auch nicht gerade der optimalste?

wenn ich mich nicht täusche sind sogar noch 1-2 Pin des STM nicht beschaltet,
und man könnte die auch in einer späteren Platinenrevision aktivieren?

:)
 

Roberto

Erfahrener Benutzer
#16
Jetzt verstehe ich, da müsste quasi eine Einschaltverzögerung für den Naze her, oder ein Chip auf dem Sonarboard, das sofort "handshaken" kann. Du willst also eine Sonardiskokugel bauen für den Rundflug in der Fledermaus Höhle.... Das wäre für eine Indoor Überwachungsdrohne mit selbstfindender Ladestation natürlich fein. Die könnte dann alle paar Stunden einen Kontrollflug durchs Haus machen. Schlage doch bitte TC eine offizielle Codeänderung der I2C Initialisierung vor (delay), damit auch andere Bastelprojekte auf Arduino Basis laufen und nicht inkompatibel zum offiziellen code werden.

@Jürgen: Der I2C Bus funktioniert immerhin mit 0 "errors". Meint der verlorene Pakete oder Performance Probleme?

LG
Rob
 
#17
Ich bin der Meinung die 100ms waren sogar im original MultiWii Code drin, bei tc sind sie hinter dem init... ich schlag es ihm mal vor, ja!

Naja eigenständige Drohne find ich weit gegriffen, aber wenn ich z.B. Videoflüge mache und rückwärts fliege, wäre es z.B. toll wenn der Copter sagt "nö da ist ne Wand, da flieg ich nicht weiter" oder in meinem speziellen Fall wenn eine Wasserwand von 4m Höhe anrollt mit der Absicht meinen Copter unter Tonnen H²O zu begraben "get the fuck outta here" ;)

Ich kann mir vorstellen, dass so eine Einparkhilfe nicht nur für mich sehr praktisch ist, butcher hatte mich auch schon per PN angeschrieben, dass er sowas auch programmieren will/dabei ist.
 

Windelwilli

Erfahrener Benutzer
#20
hmmm kann man an den I2C nur mehrere gleiche Sensoren dranmachen oder kann man dann auch BT, GPS & Sonar an die Sonarplatinen hängen oder nur mehrere gleiche Sonars ???
 
Status
Nicht offen für weitere Antworten.
FPV1

Banggood

Oben Unten