Conrad Ultraschall-Abstandswarner Bausatz mit Multiwii

Roberto

Erfahrener Benutzer
#1
Hi!
Ich habe mir hier in Ddorf bei Conrad diesen (http://www.conrad.de/ce/ProductDeta...tm_content=dl_article&utm_campaign=g_shopping) 11€ Ultraschall Bausatz gekauft. Nach dem Aufbau hat das Ding auch funktioniert - die 80 cm kommen über Steinfußboden ungefähr hin, über Teppich ca. Kniehöhe - naja, ist eben billo. Das Teil hat noch einen Relaisausgang mit gemessenen ca. 6,X V bei ca. 12V Eingangsspannung. Der Plan: Das Ding mit fest eingestellter Höhe an die Multiwii flanschen. Probleme 1: Das Teil elektrisch kompatibel machen 2:programmieren lernen ....
Zu1: (Bild)
a) Der Bausatz braucht 9-12V, in meinem Copter liegen 12,6V an - ok, 2 Dioden 1N4001 in Reihe zur Spannungsreduktion.
b) Der Promini verkraftet nur 5V an den Eingängen die gemessenen 6,x V sind zuviel - ok, Spannungsteiler mit 2x10Kohm gebaut.
c) Anschluss an die Multiwii: Da ich die Batterieüberwachung der Multiwii nicht nutze, nehme ich A3 ("V_BATPIN")
So, alles verkabelt und Testprogramm geschrieben:
Code:
int a3wert=0;

void setup()
{
  pinMode(13,OUTPUT);
  digitalWrite(13,LOW);
  Serial.begin(9600);
  Serial.println("Jetzt gehts los");
}

void loop()
{
  a3wert=analogRead(A3);
  Serial.print("Der Wert ist: ");
  Serial.println(a3wert);

  if(a3wert>=200)
    {
    digitalWrite(13,HIGH);
    }
  else
    {
    digitalWrite(13,LOW);
    }
}
Funktioniert! Über die Konsole werden mir Werte zwischen 45 und 600 (1=0,0048V;0,2-2,88V). Die Werte korrelieren eigentlich nicht mit einer realen Entfernung. Ich entscheide mich für den Wert "200" als Schwellenwert, als Signal für:"Achtung der Boden kommt".
So jetzt gehts an den Multiwii Code. Was soll überhaupt passieren?
1. Ich will die Sache zuschaltbar haben
2. Wenn es überhaupt funktioniert, dann sowieso nur bei relativ grader Fluglage, also Level (ACC) Modus. Also Aktivierung zusammen mit dem Levelmode, wenn alles schief läuft, kann ich immer noch schnell auf den Acromodus(Gyro) zurückschalten.
3. Der Copter soll nur Höhe machen, wenn ich auch Gas gebe. D.h. Start im Levelmode darf kein Raketenstart sein (mein erster Test sah so aus....) und wenn ich landen will, soll ich nicht vom Boden abgestossen werden. OK mein Schwebegas liegt laut GUI irgendwo bei 1400 d.h. dass sollte ich als Referenz verwenden. Gebe ich mehr Gas will ich fliegen, gebe ich weniger will ich landen.

Ich bin aktuell bei diesem (dreckigen) Code, der im Wohnzimmer schon echt gut funktioniert:
Code:
In der MultiWii_dev_20120504.ino habe ich folgendes geändert:

Am Anfang:
....
int mbmsono=0;
int mbmsonothr=0;
....

Gegen Ende in der Mainloop, vor dem PID Kontroller:
...
   mbmsono=analogRead(V_BATPIN);
    if(mbmsono > 200 && accMode == 1 && rcCommand[THROTTLE] > 1400 && mbmsonothr==0)
      {
        mbmsonothr=rcCommand[THROTTLE]; //Initialisiere Throttlecounter
      }
   if (mbmsono > 200 && accMode == 1 && rcCommand[THROTTLE] > 1400 && !mbmsonothr==0)
      {
        mbmsonothr=mbmsonothr+1;
        rcCommand[THROTTLE]=mbmsonothr;
      }
   if (mbmsono < 200 && !mbmsonothr==0)
      {
        mbmsonothr=0;
      }
....
In der Codezeile mbmsonothr=mbmsonothr+1 erhöhe ich den Throttlewert nur um 1 pro Prozessordurchlauf - passt für das Wohnzimmer gut.
Die "1400" könnte man natürlich noch durch ein def.h "sonoschwebegas" und die "1" durch "sonogasinkrement" ersetzten.
Soweit der Stand der 11€ Billiglösung. Ich bin richtig gespannt, was draussen passiert - v.a wenn ich den Baro in Bodennähe noch dazu schalte.....

LG

Rob
 

Anhänge

Zuletzt bearbeitet:

Roberto

Erfahrener Benutzer
#2
Update:
Wegen des sch.. Wetters steht der Freiflug noch aus. Ich habe mein mini Programm noch etwas geändert. Die wesentliche Änderung ist die feinere Einstellmöglichkeit der Gaserhöhung. Dieses ist jetzt mit dem Faktor 4 möglich, d.h. der Wert 4 entspricht einer Addition von 1 zum Gaskanal bei jedem Durchlauf ("2" dann 0,5; "8" dann 2 usw.)

In der Config.h habe ich folgende Konstanten hinzugefügt:
Code:
//*******************************************************
//Mod mit Conrad Sonar auf Pin A3
//*******************************************************
#define sonoschwebegas 1400      // Gaswert aus der Gui, bei der geschwebt wird
#define sonogasinkrement 4       // Wieviel Gas pro Durchlauf draufgepackt wird. Der Wert wird später durch 4 geteilt d.h. "4" egibt eine Nettothrottleerhöhung von 1
#define sonoschwellenwert 300    // Schwellenwert von Pin A3 ab dem die kritische Höhe erkannt wird
Im Hauptprogramm habe ich folgende Variablen, vor die anderen "statics" gestellt.
Code:
int mbmsono=0;
int mbmsonothr=0;
Das Hauptprogramm habe ich an das Ende, direkt vor " //**** PITCH & ROLL & YAW PID **** " gesetzt.

Code:
// Primitivsonar mit fester Höhe vbatpin > sonoschwellenwert wenn Höhe unterschritten
// Höhe halten: Wenn armed u mehr als Schwebegas u Levelmode u Sonar unter Wunschhöhe, dann Throttle erhöhen bis Höhe überschritten.

    mbmsono=analogRead(V_BATPIN);
    if(armed==1 && mbmsono > sonoschwellenwert && accMode == 1 && rcCommand[THROTTLE] > sonoschwebegas && mbmsonothr==0)
      {
        mbmsonothr=rcCommand[THROTTLE];                                                                                   //Initialisiere Throttlecounter
        mbmsonothr=mbmsonothr<<2;                                                                                         //mal 4 (höhere Auflösung)
      }
   if (armed==1 && mbmsono > sonoschwellenwert && accMode == 1 && rcCommand[THROTTLE] > sonoschwebegas && !mbmsonothr==0)
      {
        mbmsonothr=mbmsonothr+sonogasinkrement;
        rcCommand[THROTTLE]=mbmsonothr>>2;                                                                                //und wieder durch 4 teilen
        rcCommand[THROTTLE]=constrain(rcCommand[THROTTLE],MINTHROTTLE,MAXTHROTTLE);                                       //Limits überprüfen u ggf anpassen
      }
   if (mbmsono < sonoschwellenwert)
      {
        mbmsonothr=0;
      }
LG

Rob
 

Roberto

Erfahrener Benutzer
#3
Jetzt führe ich das Selbstgespräch noch zuende:) .

Der Praxistest war ernüchternd: Über Gras funktioniert es bis ca 15 cm Höhe. Wer mit seinem Quadro Ameisen filmen oder Papieraufsammeln möchte, kann es nachbauen.
Aber erstaunlich ist, dass es ohne aufwändigen Software-PID Kontroller schon so "glatt" läuft.
Hätte ich einen Ultraschallsensor, der sicher 1-2m über Gras erkennt, hätte ich noch über eine butterweiche FPV - Landefunktion nachgedacht. (z.B Wenn Armschalter auf aus und die Sonarhöhe erreicht ist, dann sicheres Schwebegas nehmen und langsam herunterzählen bis Gyro und Accelerometer keine Zappelwerte mehr liefern, dann Motoren aus)
Ich kann natürlich versuchen, an den Potis des Ultraschallbausatzes herumzuspielen um etwas mehr Reichweite zu bekommen, nur wird das wahrscheinlich nicht viel bringen.
Wenigstens habe ich bei diesem Test etwas "Arduino" basteln und Wiicode umstricken gelernt - und 11€ in den Sand gesetzt.

- Case closed -

LG

Rob

P.s.: Ausserdem weiss ich jetzt auch wie ein "Alarmstart" meines Copters aussieht .... Gott sei Dank, ist es bei 11€ Lehrgeld geblieben ....
 
Zuletzt bearbeitet:

DerCamperHB

Erfahrener Benutzer
#4
Wie Alarmstart, hast du in aus größerer Höhe Fallen lassen?
Wie ist das mit der Stabilisierung, um so tief zu kommen, musst du doch fast 0Gas geben, wo die Regelung nicht mehr greift
Du arbeitet mit einem 1/0 Signal, Copter sinken lassen, bis Boden erkennt wird, dann leicht steigen, bis Boden weg, ist das Richtig?
Hast du das ganze mal auf unwegsammeren Gelände getestet, wie Schotterstrasse, wo die Höhe öfters wechselt, bei 15 cm, sollte das doch bemerkbar machen.
 

Roberto

Erfahrener Benutzer
#5
@DerCamperHB:

Der Alarmstart war mit meinem allerersten Versuchscode, da hatte ich noch nicht die Gasknüppelposition abgefragt. Bei dem Start im Levelmode hat er natürlich ruck-zuck das Throttle auf 2000 hochgezählt - und bei Verlassen des Sonarbereichs wurde sofort mein Stickinput wieder verwendet (knapp über Standgas). Du kannst Dir sicher vorstellen wie dieser Froschsprung aussah.... und mein blödes Gesicht dazu.

"Du arbeitet mit einem 1/0 Signal, Copter sinken lassen, bis Boden erkennt wird, dann leicht steigen, bis Boden weg, ist das Richtig?" Richtig, mehr gibt der Bausatz nicht her.

"Wie ist das mit der Stabilisierung, um so tief zu kommen, musst du doch fast 0Gas geben, wo die Regelung nicht mehr greift" - Der Gaui 330 ist ziemlich schwach auf der Brust, der sackt gerne mal durch auch bei fast Halbgas - also kein Problem den Sonobereich zu erreichen...

Draussen habe ich es nur über der Wiese getestet. Im Wohnzimmer hält er sich über Laminat in Hüfthöhe und sobald man über den Teppich fliegt, geht er auf Kniehöhe. Sieht schon lustig aus, wenn man an der Teppich Grenze herumschwebt.

LG
Rob
 
Zuletzt bearbeitet:

DerCamperHB

Erfahrener Benutzer
#6
Ist ja auch klar, Laminat brüllt beser zurück, als Schall schluckender Teppich, bei Langhaarigen Flauschigen Teppich wird es dann wohl sogar ne "Bruchlandung"

Frage mich wie das bei APM gemeistert wird, oder ob da auf härteren Untergrund auf 1-1,5m eingestellt wird, bzw das Sonar besser abgefragt werden kann

Hast du mal die Basisdspannung am T1 gemessen, ob du da evtl ein Brauchbares Signal für unterschiedliche Höhen entnehmen kannst, das ganze baut ja nur auf eine Schwellenspannung auf, mit einem Meßeingang wie dem A1, sollte es aber Möglich sein, auch unterschiedliche Höhen "auszulesen"
 
Zuletzt bearbeitet:

bubu10

Erfahrener Benutzer
#7
Cool will auch haben :) wann meinste den wann es reif ist nach zu Bauen ??,wenn ich Programmieren könnte würde ich dir gerne helfen kann ich aber leider nicht aber kannst mir dein auto vorbei bringen das kann ich reparieren und helfen dran ;-).

Gruß BUBU10
 

Roberto

Erfahrener Benutzer
#8
@bubu
"Cool will auch haben :) wann meinste den wann es reif ist nach zu Bauen ??"

Das kannst Du sofort nachbauen - ich wüsste nicht, was man aus der Hardware noch rausholen kann. Für Indoor Kaffeholen ist es geeignet - solange kein Teppich auf dem Weg liegt - oder der Hund unter dem Sensor herumwandert. Allerdings sind Hunde ultraschallempfindlich - er wird jaulen und Dich dafür hassen.. da "brüllt" dann nicht nur das Laminat zurück...


@DerCamperHB
Ich bin mit dem Oszi an jedem Transistor dran gewesen - ein auswertbares Entfernungssignal habe ich nicht bekommen - allerdings bin ich auch nicht der Elektronikchecker. Die Sonosensoren bei der APM schmeissen direkt über I2C/Seriell ein Entfernungssignal raus. So bescheiden der Conradbausatz auch ist, so zeigt er dennoch deutlich die Probleme der US-Sensoren bei schlechtem Untergrund. Es sollte mich nicht wundern, wenn diese 5m Sensoren im Praxisbetrieb (Wiese) nur 1-1,5m anständig darstellen.
Bei Lipoly habe ich einen 30€ Sensor gesehen, der die Entfernung auch als Spannung oder als PWM Signal ausgeben kann. So etwas wäre natürlich eine einfache, prominikompatible Möglichkeit.

LG

ROB
 
Zuletzt bearbeitet:

bubu10

Erfahrener Benutzer
#9
Super wenn ich nächste woche nähe conrad bin besorg ich mir auch mal sonar platinchen und bastel was .

Mach doch mal ein video würde mal gerne in aktion sehen wenn du mal zeit dafür hast eilt ja nicht .

Und das mit dem hund glaub ich gerne das der dann abgeht ;-) .


Gruß Rene
 

Roberto

Erfahrener Benutzer
#10
Bin jetzt gleich auf Achse - Verpflichtungen - und mein 450er FBL Heli kratzt auch schon von innen an seinen Koffer. Ein Video kann ich machen! Frühestens heute Abend - wahrscheinlich wirds aber eher Sonntag Abend. Ich kann mir aber nicht vorstellen, dass jemand Verwendung für diese Funktion hat - vielleicht zum Üben im Hinterhof - oder Vierbeiner ärgern.

LG

Rob
 

Roberto

Erfahrener Benutzer
#11
Hier: http://www.lipoly.de/index.php?main_page=product_info&products_id=224247 so ein Sensor mit bereits gefilterter Ausgabe (Analog Voltage, RS232 or TTL Serial, and Pulse Width) wäre natürlich perfekt, damit könnte man eher was anfangen. Diese MaxBotix Sensoren unterscheiden sich in ihrere Abstrahlcharakteristik (von schmal bis breit). Müsste für den Coptergebrauch nicht eine breitere "Keule" besser sein wg. der möglichen Winkeländerungen?
 

Roberto

Erfahrener Benutzer
#12
Jetzt gibts das Video!

Man sieht schön den Unterschied zwischen den Platten und dem Rasen.
Ich habe über die Potis tatsächlich den Bausatz noch giftiger bekommen, allerdings macht sich das über dem Rasen kaum und über den Platten deutlich bemerkbar. Komisch....muss ich das verstehen?

Egal, hier das Video:


http://youtu.be/VvXr0uGc05E
 

vistauser

Neuer Benutzer
#13
Hallo Roberto,

dein Testprogramm für den Conradsensor hat mich dazu animiert dieses mal mit meinem SHARP 2Y0A02 zu versuchen.
Der mißt, wenn ich mich noch recht erinnere, von 20 cm bis 150 cm.

Ich bekomme im ser. Monitor Werte von
ca 20 bei weiter Entfernung bis
ca 550 bei 20 cm angezeigt
bei 200 schaltet die LED und das sind ca. 60 cm vom Sensor.
Die Werte im Monitor werden also mit der Entfernung vom Sensor immer kleiner. Ist das bei deinem Sensor auch so?
Das ist natürlich für das MultiWii-Programm, das ich schon geflashed habe relevant.

V_BATIN habe ich für diese Versuche abgeschaltet.
Mein MWiiCP hat eine original MultiWiiP, ein ATAVRSBIN1 Multisensorboard und einen BMP085 und wiegt 750 gr.

Ich möchte also gerne z.B. Ameisen beobachten und habe nun noch einige Fragen an dich.
Muß in der MultiWConf dafür etwas geändert werden?
Muß der Baromode aktiviert sein?
Muß am DX7 TX etwas dafür eingestellt werden (Schalter oder so)?
Warum hast du in deiner Mod den Schwellwert 300 gewählt und nicht die 200 wie im Testprogramm?

Danke für dieses Projekt, morgen will ich es mal versuchen
Olaf
 

Roberto

Erfahrener Benutzer
#14
@vistauser:

"..Die Werte im Monitor werden also mit der Entfernung vom Sensor immer kleiner. Ist das bei deinem Sensor auch so?..."

Leider nein, der Conrad kann nur 1 oder 0, manchmal flackert die LED auch deswegen habe ich mit 200 und 300 gespielt.
Den Baro kannst Du aktivieren - einfach mal probieren ob es mit Deinem Sensor etwas bringt.
" Muß in der MultiWConf dafür etwas geändert werden?"
Stell das "sonogasinkrement" erstmal auf 1 (#define sonogasinkrement 1) und schau mal, was der copter macht (je höher, desto mehr gas gibt er). Das sonoschwebegas ist sehr wichtig, damit es funktioniert.
"Muß am DX7 TX etwas dafür eingestellt werden (Schalter oder so)?"
Ja, Du musst den Levelmode aktivieren können - das frage ich im Programm ab. Sonst musst Du das "&& accMode == 1" jeweils entfernen, ist aber nicht zu empfehlen, da Du es sonst nicht abschalten kannst, wenn sich z.B Dein copter aufschaukelt.

LG

Rob
 

vistauser

Neuer Benutzer
#15
Danke Rob für die Antwort.

Eben die Mod indoor getestet --> Raketenstart bei erreichen des Schwellwertes. Geht so nicht mit
meinem analogen Sensor. Das ">" müßte wohl ein "=" sein und bei der zweiten Bedingung weiß ich nicht,
bin kein Programmer.

Mal schaun, ob ich irgendwo eine Sono-Lösung mit einem analogen Sensor finde.

mfg
vistauser
 

Roberto

Erfahrener Benutzer
#16
Ach, Du Schei...! - Hoffentlich ist nichts passiert!!!
Der Code erhöht ab Schwebegas so lange das Gas, bis der Sensorbereich (vbatpin<300) verlassen ist oder das Gas unter Schwebegas zurückgenommen wurde.
 
#17
Schönes Projekt!

Überlege gerade ob es nicht möglich ist einen dieser Sharp IR Sensoren zum indoor Höhe halten zu nehmen.
http://arduinomega.blogspot.de/2011/05/infrared-long-range-sensor-gift-of.html
die Spucken zwischen 20 und 120cm eine Spannung aus die sich per A/D read und etwas rechnen recht gut in cm umrechnen lässt.

Hatte schon überlegt ob ich mal versuche das als Baro sensor in der Multiwii zu implementieren, aber dein Weg scheint ja auch recht einfach zu sein.

Werde erstmal etwas mit dem Sensor spielen wie gut der sich macht.
 
Zuletzt bearbeitet:
#18
Huch, hatte ich doch glatt die Posts von vistauser übersehen auf m handy....nun ja, leider scheint er hier nicht mehr aktiv zu sein.

Ich werde mich mal daran versuchen.
Perfekt wäre es eben wenn man es per Schalter zuschalten könnte und er dann die Höhe hält die zu diesem Zeitpunkt aktiv war - wie beim Baro auch.

Werde wohl aber erstmal mit fester Höhe spielen, bei dem analogen Sensor könnte man das Gas inc/dec ja je nach Differenz zwischen soll und ist machen.
 
#20
Ja, die Berechnung der Entfernung ist der einfache Teil, da gibts ja jede Menge Doku zu.
Spannender wird die Integration ins Multiwii...

Wie gesagt, ist die Frage ob man das nicht als Baro-Sensor implementieren kann - liefert ja eigentlich auch nur nen Höhenwert - und dann das ganze drumrum schon hat.
 
FPV1

Banggood

Oben Unten