Skocz do zawartości

Ultradźwiękowy czujnik odleglości HC-SR04 program (Bascom)


mateusz45412

Pomocna odpowiedź

Witam

Zbudowałem robota już chodzi ale tylko do przodu. Posiada on ultradźwiękowy czujnik odległości HC-SR04. Tylko nie wiem co mam wpisać do mojego programu aby czujnik dział.

Na początek chciałbym aby po wykryciu przeszkody w odległości 30cm zaczęła świecić się dioda.

Czujnik bezpośrednio podpięty do atmegi 8

PD7 - echo

PD6 - trig

PD0- dioda

a to mój program

$regfile = "m8def.dat"
$crystal = 1000000

'Deklaracja zmiennych:
Dim I As Integer
Dim Pomocnicza As Integer

'Konfiguracja portów:
Config Portd.3 = Output
Config Portd.6 = Output
Config Portd.4 = Output
Config Portd.5 = Output
Config Portd.2 = Output
Config Portd.1 = Output
Config Portd.0 = Output
Config Portc.4 = Output
Config Portc.5 = Output
Config Portb.1 = Input
Config Portb.0 = Input

'Ustawienia początkowe stanów na portach:
Reset Portd.3
Reset Portd.4
Reset Portd.5
Reset Portd.6
Reset Portd.7

'Główny program:
Do

If Pinb.0 = 0 And Pinb.1 = 0 Then
  Gosub Niebieski
  Gosub Obrot_w_prawo
  Gosub Obrot_w_lewo
Else
  Gosub Niebieski
  Gosub Obrot_w_prawo
  Gosub Obrot_w_lewo
End If

Loop
End

'Poszczególne funkcje

Niebieski:
Set Portc.4                                                 'Zapala diodę
Set Portc.5                                                 'Zapala diodę
For I = 1 To 15
Pulseout Portd , 4 , 500
Pulseout Portd , 2 , 630
Pulseout Portd , 1 , 500
Pulseout Portd , 3 , 500
Waitms 20
Next
Reset Portc.4                                               'Gasi diodę
Reset Portc.5                                               'Gasi diodę
Return

Obrot_w_prawo:
Set Portd.0                                                 'Zapala diodę białą
Set Portd.5                                                 'Zapala brzęczyk
For I = 1 To 15
Pulseout Portd , 4 , 450
Pulseout Portd , 2 , 450
Pulseout Portd , 1 , 450
Pulseout Portd , 3 , 450
Waitms 20
Next
Reset Portd.0                                               'Gasi diodę białą
Reset Portd.5                                               'Gasi brzęczyk
Return
Obrot_w_lewo:
Set Portc.4                                                 'Zapala diodę
Set Portc.5                                                 'Zapala diodę
For I = 1 To 15
Pulseout Portd , 4 , 400
Pulseout Portd , 2 , 270
Pulseout Portd , 1 , 400
Pulseout Portd , 3 , 400
Waitms 20
Next
Reset Portc.4                                               'Gasi diodę
Reset Portc.5                                               'Gasi diodę
Return
Link do komentarza
Share on other sites

W celu rozpoczęcia pomiaru czujnika HC-SR04, na linię TRIG musisz podać stan wysoki (5V) na przynajmniej 10us. Po otrzymaniu takiego impulsu czujnik wyemituje 8 wiązek ultradźwiękowych o częstotliwości 40kHz i poczeka aż wrócą (odbiją się od przeszkody). W przypadku powrotu tych fal do czujnika, na linii ECHO podany zostanie stan wysoki. Długość trwania tego stanu wysokiego jest proporcjonalna do zmierzonej odległości. Zatem reasumując:

-podajesz na linię TRIG (PD6) stan wysoki przez około 10 us

-czekasz na stan wysoki na linii ECHO (PD7)

-mierzysz czas trwania tego stanu wysokiego

Odległość w centymetrach = czas/58

Jak już uda Ci się mierzyć odległość wtedy wystarczy dodać prosty warunek który zapali diodę przy wykrytej odległości < 30cm.

Link do komentarza
Share on other sites

Powinieneś użyć : Pulseout a następnie Pulsein

Pierwsza podaje stan wysoki na podany port przez określony czas np:

Pulseout portd, 6 , 30 - na porcie D, końcówce 7 stan wysoki przez 30 mikrosekund (przy 4Mhz)

następnie Pulsein, która zmiennej przypisze czas jaki upłynie między zmianą stanów końcówki np:

Pulsein czas, portd, 7, 1 - zmiennej czas przypisany zostanie czas między zmianą stanu wysokiego na niski na porcie d.7

Następnie czas musisz przeliczyć na odległość.

Link do komentarza
Share on other sites

Dodałem trochę do programu ale nie wiem czy to jest dobrze.

Nie wie czy w dobrym miejscu umieściłem Pulseout Portd , 6 , 30 a gdy pod tym umieszczę Pulsein Portd , 7 , 1 to wyskakuje błąd. Gdzie powinienem umieścić Pulseout Portd , 6 , 30 i Pulsein Portd , 7 , 1 ??

Czujnik nadal mi nie działa 😕

$regfile = "m8def.dat"
$crystal = 1000000

'Deklaracja zmiennych:
Dim I As Integer
Dim Pomocnicza As Integer

'Konfiguracja portów:
Config Portd.3 = Output
Config Portd.4 = Output
Config Portd.5 = Output
Config Portd.2 = Output
Config Portd.1 = Output
Config Portd.0 = Output
Config Portc.4 = Output
Config Portc.5 = Output
Config Portb.1 = Input
Config Portb.0 = Input


Trigger Alias Portd.6
Config Trigger = Output
Ech Alias Pind.7
Config Ech = Input

'Ustawienia początkowe stanów na portach:
Reset Portd.3
Reset Portd.4
Reset Portd.5
Reset Portd.6
Reset Portd.7

'Główny program:
Do

Pulseout Portd , 6 , 30

If Pinb.0 = 0 And Pinb.1 = 0 Then
  Gosub Niebieski
  Gosub Obrot_w_prawo
  Gosub Obrot_w_lewo
End If
If Pind.7 = 0 Then
  Gosub Diody_zielone
End If
If Pind.7 = 1 Then
  Gosub Dioda_biala
End If

Loop
End

'Poszczególne funkcje

Niebieski:
Set Portc.4                                                 'Zapala diodę
Set Portc.5                                                 'Zapala diodę
For I = 1 To 15
Pulseout Portd , 4 , 500
Pulseout Portd , 2 , 630
Pulseout Portd , 1 , 500
Pulseout Portd , 3 , 500
Waitms 20
Next
Reset Portc.4                                               'Gasi diodę
Reset Portc.5                                               'Gasi diodę
Return

Obrot_w_prawo:
Set Portd.0                                                 'Zapala diodę białą
Set Portd.5                                                 'Zapala brzęczyk
For I = 1 To 15
Pulseout Portd , 4 , 450
Pulseout Portd , 2 , 450
Pulseout Portd , 1 , 450
Pulseout Portd , 3 , 450
Waitms 20
Next
Reset Portd.0                                               'Gasi diodę białą
Reset Portd.5                                               'Gasi brzęczyk
Return
Obrot_w_lewo:
Set Portc.4                                                 'Zapala diodę
Set Portc.5                                                 'Zapala diodę
For I = 1 To 15
Pulseout Portd , 4 , 400
Pulseout Portd , 2 , 270
Pulseout Portd , 1 , 400
Pulseout Portd , 3 , 400
Waitms 20
Next
Reset Portc.4                                               'Gasi diodę
Reset Portc.5                                               'Gasi diodę
Return
Diody_zielone:
Set Portc.4                                                 'Zapala diodę
Set Portc.5                                                 'Zapala diodę                                              'Gasi diodę
Return

Dioda_biala:
Set Portd.0                                                 'Zapala diodę białą
                                             'Gasi brzęczyk
Return
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Wrzucę kawałek kodu z robota z tym czujnikiem może pomoże:

 Cls
  Odleglosc = 0
  For I = 1 To 5
  Pulseout Portc , 5 , 50
  Pulsein Czas , Pinc , 4 , 1
  Waitms 20
  Next I
  Lcd "czas=" ; Odleglosc

napisz jaki błąd .

[ Dodano: 27-02-2015, 07:46 ]

oczywiście powinno być pind a nie pord w pulsein

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.