Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Arduino + czujnik ultradźwiękowy + pomiar drgań w zależności od czasu

cynognat2017 29 Lis 2017 19:51 381 1
  • #1 29 Lis 2017 19:51
    cynognat2017
    Poziom 1  

    Witajcie, mam problem ponieważ posiadam Arduino + Ultradźwiękowy czujnik odległości US-015 2-400cm dostępny na botland . pl
    o następujących parametrach :
    Napięcie zasilania: 5 V
    Średni pobór prądu: 3 mA
    Zakres pomiarowy: od 2 cm do 400 cm
    Dokładność: 0,3 cm + 1 %
    Kąt: < 15°
    Wyjście: sygnał częstotliwościowy
    Częstotliwość pracy: 40 kHz,
    chciałbym mierzyć nim przykładowo drgania jakiś obiektów / ruch obudowy jakiegoś urządzenia. Wszystko podpięte, zapisuje dane do pliku itd ale oprócz samych informacji dotyczących zmiany odległości badanego obiektu chciałbym znać też czas, w którym dany obiekt był tak, czy siak daleko od mojego czujnika. Potrzebuję wrzucić później dane do np. exela i wykreślić zależność ODLEGŁOŚCI od CZASU. Czy ktoś jest w stanie pomóc mi z powyższym problemem ? Myślę że wyświetlanie czasu co 1 s , jest zbyt mało dokładne. potrzebny byłby równoległy zapis danych dotyczących czasu z dokładnością do 0,1/0,01 s. Proszę o pomoc, w miarę pilna sprawa.

    Kod użyty do pomiaru odległości :

    const int TRIG_PIN = 3;
    const int ECHO_PIN = 2;

    // Anything over 400 cm (23200 us pulse) is "out of range"
    const unsigned int MAX_DIST = 23200;

    void setup() {

    // The Trigger pin will tell the sensor to range find
    pinMode(TRIG_PIN, OUTPUT);
    digitalWrite(TRIG_PIN, LOW);

    // We'll use the serial monitor to view the sensor output
    Serial.begin(9600);
    }

    void loop() {

    unsigned long t1;
    unsigned long t2;
    unsigned long pulse_width;
    float cm;


    // Hold the trigger pin high for at least 10 us
    digitalWrite(TRIG_PIN, HIGH);
    delayMicroseconds(10);
    digitalWrite(TRIG_PIN, LOW);

    // Wait for pulse on echo pin
    while ( digitalRead(ECHO_PIN) == 0 );

    // Measure how long the echo pin was held high (pulse width)
    // Note: the micros() counter will overflow after ~70 min
    t1 = micros();
    while ( digitalRead(ECHO_PIN) == 1);
    t2 = micros();
    pulse_width = t2 - t1;

    // Calculate distance in centimeters and inches. The constants
    // are found in the datasheet, and calculated from the assumed speed
    //of sound in air at sea level (~340 m/s).
    cm = pulse_width / 58.0;


    // Print out results
    if ( pulse_width > MAX_DIST ) {
    Serial.println("Out of range");
    } else {
    Serial.print(cm);
    Serial.print(" cm \n");

    }

    // Wait at least 60ms before next measurement
    delay(60);
    }


    Co należałoby tu zmodyfikować ?

    0 1
  • #2 29 Lis 2017 20:25
    2675900
    Użytkownik usunął konto