Ihr Warenkorb ist leer
Ihr Warenkorb ist leermartin janke
Bewertet in Deutschland am 10. September 2024
Funktioniert extrem genau und keine Fehlinterpretationen! (habe schon sehr viele wasserdichte sensoren getestet, dies ist der erste der keine Falschen Messungen 0von 10k generiert hat. Hier mein Code #include #include #include const int a22Address = 0x74; // I2C-Adresse des Sensorsconst int triggerRegister = 0x10; // Register zum Triggern einer Messungconst int distanceRegister = 0x02; // Register, das die Entfernung speichertconst int angleRegister = 0x07; // Register zum Einstellen des Winkelslong desiredDistance = 500; // Erwünschter Messwert in Millimetern (z.B. 500 mm)int tolerance = 30; // Toleranz von ±3 cm = 30 mmint totalMeasurements = 0; // Zählt die Anzahl der Messungenint outOfToleranceCount = 0; // Zählt, wie oft der Wert außerhalb der Toleranz liegt// Funktion zum Einstellen des Messwinkelsvoid setAngleLevel(int level) { Wire.beginTransmission(a22Address); Wire.write(angleRegister); // Sende an das Register 0x07 (Winkelsteuerung) Wire.write(level); // Sende den gewünschten Winkel Level (1-4) Wire.endTransmission(); Serial.print("Messwinkel auf Level "); Serial.print(level); Serial.println(" eingestellt.");}// Funktion zum Triggern der Messungvoid triggerMeasurement() { Wire.beginTransmission(a22Address); Wire.write(triggerRegister); // Sende an das Register 0x10 Wire.write(0xB0); // Trigger-Befehl für eine Messung im Bereich von 0,5 m Wire.endTransmission(); delay(100); // Wartezeit für die Messung}// Funktion zum Lesen der Entfernunglong readDistance() { Wire.beginTransmission(a22Address); Wire.write(distanceRegister); // Lese ab Register 0x02 Wire.endTransmission(); // Fordere 2 Bytes an, um die 16-Bit-Entfernung zu lesen Wire.requestFrom(a22Address, 2); if (Wire.available() == 2) { int highByte = Wire.read(); // Lese das High-Byte int lowByte = Wire.read(); // Lese das Low-Byte // Kombiniere die beiden Bytes zu einem 16-Bit-Wert long distance = (highByte // Falls der Sensor noch nicht bereit ist, gibt er 0xFFFF zurück if (distance == 0xFFFF || distance == 65533) { return -1; // Messung nicht abgeschlossen oder fehlerhaft } return distance; // Die Entfernung in Millimetern } else { return -1; // Fehler beim Lesen der Entfernung }}void setup() { Serial.begin(9600); Wire.begin(); // Initialisiere die I2C-Schnittstelle Serial.println("A22 Ultraschallsensor bereit."); // Manuell den gewünschten Winkel setzen setAngleLevel(1); // Ändere den Wert hier auf 1, 2, 3 oder 4 für die verschiedenen Winkel (30°, 40°, 50°, 60°)}void loop() { triggerMeasurement(); // Starte eine neue Messung long distance = readDistance(); // Lese die gemessene Entfernung if (distance != -1) { totalMeasurements++; // Zählt die Gesamtanzahl der Messungen Serial.print("Gemessene Entfernung: "); Serial.print(distance); Serial.println(" mm"); // Überprüfe, ob der Wert außerhalb der Toleranz liegt if (abs(distance - desiredDistance) > tolerance) { outOfToleranceCount++; // Zähle, wenn die Messung außerhalb der Toleranz liegt } } else { Serial.println("Messung nicht abgeschlossen. Versuche es erneut."); } // Gib nach jeder 10. Messung die Statistiken aus if (totalMeasurements % 10 == 0) { Serial.print("Gesamtanzahl der Messungen: "); Serial.println(totalMeasurements); Serial.print("Anzahl der Messungen außerhalb der Toleranz: "); Serial.println(outOfToleranceCount); }}
Produktempfehlungen