Bogusław Kempny

Ultradźwiękowy pomiar odległości

Autor adres
Początek HC-SR04 LCD Kamera fork() sms strfry() GPIO impulsy Klawiatura Brama GPIO PWM SG90 ....











Żeby pozbyć się zakłóceń (może nietoperz przeleciał?) zamiast jednego pomiaru wykonamy 100 (#define SERIA 100):

  for(i=0;<SERIA;i++)
   {

Na pinie TRIGPIN ustawiamy 0, potem na 10 milisekund jedynkę i znów 0, HC-SR04 rozpocznie pomiar:

    digitalWrite (TRIGPIN,0) ; //LOW
    Delay(2);
    digitalWrite (TRIGPIN,1) ; //HIGH
    Delay(10);
    digitalWrite (TRIGPIN,0) ; //LOW

Czekamy na impuls na pinie Echo czujnika. Jeśli się pojawi, funkcja int_impuls zmieni wartość zmiennej impuls na zero.
Na wszelki wypadek nie czekamy w nieskończoność, bo jakby impuls na Echo się nie pojawił?

    impuls=1;
    for(k=1;k<9000;k++)
     { if (impuls==0) break;
       Delay(1);
     } 
    if (impuls==1) 
      {
       printf("Zgubiony impuls\n"); fflush(0);
       tim2.tv_nsec=tim.tv_nsec+1;
      }

Wyliczamy czas trwania impulsu Echo, w mikrosekundach, korygując zapamiętane przez int_impuls czasy jeśli trafiliśmy z pomiarem na koniec sekundy:

    if(tim2.tv_nsec < tim.tv_nsec) 
     tim2.tv_nsec= tim2.tv_nsec+1000000000;

    usec[i]=(tim2.tv_nsec -tim.tv_nsec)/1000;
    usectmp=usec[i];

Jeśli do procesu wysłaliśmy sygnał USR1 wyświetli się wyliczony czas:

if(debug)
printf("%4.1f microsec\n",usectmp);

Czekamy 90 milisekund żeby zanikło ewentualne echo ultradźwięków w pomieszczeniu. To na wypadek, gdyby nasz program działał w pętli (tak jak to robi dist.c)


    Delay(90000);
   }