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

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • 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.