Skocz do zawartości

Czujniki ultradzwiekowe hc- sr04


sparow

Pomocna odpowiedź

Witam

Czy istnieje mozliwosc zaimplementowania w kodzie na arduino UNO dwoch czujnikow hc- sr04? Jeden obsluguje spokojnie ale po oddaniu kolejnego i nadpisaniu programu o kolejny trig oraz echo nie dziala wtedy zaden. Prosze o pomoc i nakierowanie czy sie da w ogole bo jesli nie to powalcze moze z sharpem. Pozdrawiam

Link do komentarza
Share on other sites

A więc tak


#define trig1 2 //czujnik 1
#define echo1 3 
#define trig2 7 //czujnik 2
#define echo2 6

// silnik lewy
const int kierunekLewy=12;
const int hamulecLewy=9;
const int predkoscLewy=5;

//silnik prawy
const int kierunekPrawy=13;
const int hamulecPrawy=8;
const int predkoscPrawy=11;


void setup() {
Serial.begin(9600);
pinMode(trig1, OUTPUT);
pinMode(echo1, INPUT);
pinMode(trig2, OUTPUT);
pinMode(echo2, INPUT);
pinMode(kierunekLewy,OUTPUT);
pinMode(kierunekPrawy,OUTPUT);
pinMode(hamulecLewy,OUTPUT);
pinMode(hamulecPrawy,OUTPUT);
pinMode(predkoscLewy,OUTPUT);
pinMode(predkoscPrawy,OUTPUT);
}

void loop () {
 int czas, dist,czasII,distII;
 digitalWrite(trig1, HIGH);
 delayMicroseconds(1000);
 digitalWrite(trig1, LOW);
 czas = pulseIn(echo1, HIGH);
 dist = (czas/2) / 29.1;
digitalWrite(trig2, HIGH);
 delayMicroseconds(1000);
 digitalWrite(trig2, LOW);
 czasII = pulseIn(echo2, HIGH);
 distII = (czasII/2) / 29.1;

if   (dist >=30 && distII >=30){
doPrzodu();
delay(50);
}

 else { 
doTylu();
delay(500);
 }
}
void doPrzodu()
{
analogWrite(predkoscLewy,255);
analogWrite(predkoscPrawy,255);
//Lewy do przodu
digitalWrite(kierunekLewy,HIGH);
digitalWrite(hamulecLewy,LOW);
//Prawy do przodu
digitalWrite(kierunekPrawy,HIGH);
digitalWrite(hamulecPrawy,LOW);
}

void doTylu()
{
analogWrite(predkoscLewy,255);
analogWrite(predkoscPrawy,0);
//Lewy do przodu
digitalWrite(kierunekLewy,LOW);
digitalWrite(hamulecLewy,LOW);
//Prawy stop
digitalWrite(kierunekPrawy,HIGH);
digitalWrite(hamulecPrawy,HIGH);
}

Kod po zakomentowaniu dzialania jednego czujnika dziala. Dziala zarowno dla czujnika 1 i 2 ale kazdy osobno. Zapewne zrobilem maslo maslane ale to moje poczatki wiec prosze o nakierowanie co i jak. Teraz wykonuje sie od razu warunek drugi czyli jedzie do tylu. Pozdrawiam

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

Dodanie opoznienia powoduje brak zadzialania czujnikow. Nie reaguja wcale nawet osobno po zakomnetowaniu jednego z nich. Jakieś inne pomysly? I tak zmieniłem stany i predkosci w funkcji jazdy do tyłu bo widze ze skopiowalem bledna wersje kodu. Ale reszta bez zmian

Link do komentarza
Share on other sites

Fajnie jakbyś pozbył się z Twojego kodu wszystkich zbędnych funkcji i skupił się na samym pomiarze. Oczyść co się da i wyświetlaj wyniki w konsoli. Gdy to Ci już zadziała to dokładaj kolejne funkcjonalności.

Funkcja pulseIn jest niczym innym jak kolejnym delayem, który oczekuje na stan wysoki i mierzy jego długość. Tu delay, tam delay i robi się jedno wielkie opóźnienie. +jak Jamik zauważył powinno być 10us

Proponuję spróbować coś w stylu:

digitalWrite(trig1, HIGH);
delayMicroseconds(10);
digitalWrite(trig1, LOW); 
czas1 = pulseIn(echo1, HIGH);
Serial.Println(czas1); //wyswietlanie wyniku w konsoli

digitalWrite(trig2, HIGH);
delayMicroseconds(10);
digitalWrite(trig2, LOW); 
czas2 = pulseIn(echo2, HIGH);
Serial.Println(czas2); //wyswietlanie wyniku w konsoli
Link do komentarza
Share on other sites

Wrocilem wlasnie z pracu i sprawdzilem pokolei. Nie no bomba. Wreszcie dziala wszystko. Oczywiscie trzeba dopracowac szczegoły ale jest progres:) Posiadacie moze jakas warta przeczytania lekturke odnosnie reg PI do regulacji predkosci pojazdu? oraz wyznaczania odometri na podstawie enkoderow. Posiadam siliniki Pololu 29:1 350 obr/min z enkoderem 64 imp./obr. Bede za wszystko bardzo wdzieczny. Pozdrawiam i zycze milej nocy

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!

Anonim
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.