Hallo Leute, Basierend auf dem Multiwii Projekt(www.multiwii.com) habe ich mir einen Quadrocopter zusammengebaut und dieser fliegt auch wunderbar. Jetzt möchte ich diesen um eine automatisch Höhen Regelung mit einen Ultraschallsensor erweitern. Verwendet habe ich folgende Bauteile: 1x Arduino ProMini mit ATmega 328p 1x Arduino Uno mit Atmega 328p 1x Ultraschallsensor SRF02 Dazu habe ich mir den Ultraschallsensor SRF02 gekauft der über I2C ausgelesen werden kann. Der Multiwii Code: http://code.google.com/p/multiwii/source/browse/tags Zuerst habe ich versucht den Ultraschallsensor direkt mit dem ProMini auszulesen, was auch geklappt hat, nur war dann die Zykluszeit extrem beschissen(26ms ohne SRF02 4ms). Eventuell liegt es an meinem verwendeten Code oder es ist eben Bauteilbedingt nicht anders möglich. Dann habe ich versucht den Srf02 über einen zweiten Mikrocontroller auszulesen und über die Serielle Schnittstelle die Daten zum Arduino ProMini zu schicken. Das hat auch geklappt, nur war die Zykluszeit wieder extrem schlecht. Diesen Code habe ich auf dem UNO laufen, zum senden über die UART: Aus einem Buch entnommen! #include <Wire.h> #define srf02Address (0xE0 >> 1) #define cmdByte 0x00 //Startbefehl zum messen #define rangeByte 0x02 #define startMessung 0x51 byte MSB = 0x00; byte LSB = 0x00; void setup() { Serial.begin(115200); Wire.begin(); } void loop() { int rangeData = getRange(); Serial.println(rangeData); delay(200); } int getRange() { int range = 0; Wire.beginTransmission(srf02Address); Wire.send(cmdByte); //Startbefehl zum messen Wire.send(startMessung); //Startet Messvorgang in cm Wire.endTransmission(); delay(100); Wire.beginTransmission(srf02Address); Wire.send(rangeByte); Wire.endTransmission(); Wire.requestFrom(srf02Address, 2); while(Wire.available() < 2); MSB = Wire.receive(); LSB = Wire.receive(); range = (MSB << 8) + LSB; return(range); } ______________________________________________________________________ _ Und diesen Code auf dem ProMini zum empfangen der Daten: void srf02_serial() { // #define INLENGTH 20 // #define INTERMINATOR 13 char inString[21]; int inCount; inCount = 0; do { while (Serial.available()==0); inString[inCount] = Serial.read(); if(inString[inCount]==13) break; } while(++inCount < 20); inString[inCount] = 0; Serial.print("inString:"); Serial.println(inString); } ______________________________________________________________________ _ Wie kann ich den Sensor so auslesen, dass er meine Zykluszeit kaum beeinträchtigt???? hoffentlich kann mir jemand helfen!! Ich habe ein Bild von meiner Schaltung mal angehängt! lg Tobias
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.