Skocz do zawartości
Komentator

Kurs Arduino - #9 - Czujnik odległości HC-SR04, funkcje

Pomocna odpowiedź

html_mig_img
W tej części kursu Arduino wykorzystamy czujnik odległości HC-SR04, który cieszy się dużym zainteresowaniem wśród majsterkowiczów.Przyszła również pora, aby zacząć pisać własne funkcje. Na koniec zajmiemy się także bardzo prostym elementem akustycznym - buzzerem.

UWAGA, to tylko wstęp! Dalsza część artykułu dostępna jest na blogu.

Przeczytaj całość »

Poniżej znajdują się komentarze powiązane z tym wpisem.

Udostępnij ten post


Link to post
Share on other sites

Świetny kurs, czekam na kolejne części, które mam nadzieje się pojawią!

Udostępnij ten post


Link to post
Share on other sites

Odcinek miód-malina, jesteście Panowie Wielcy.Tyle informacji w dzisiejszym materiale, musiałbym szukać jeszcze długo, a tu rach-ciach i mam 😉

PS.

Koniecznie następne kursy dla Arduinowców- inna opcja nie istnieje 🙂

Udostępnij ten post


Link to post
Share on other sites

Zakurek, dzięki 🙂

Odcinek miód-malina, jesteście Panowie Wielcy.

Dzięki liczbę mnogą potraktuję jako komplement, bo pisałem tekst sam 🙂

Udostępnij ten post


Link to post
Share on other sites

Świetny kurs dla początkujących. Ja osobiście dodałbym pracę na przerwaniach i wbudowanych licznikach żeby niepotrzebnie nie blokować pracy uC np jeśli ktoś będzie chciał zamrugać 4 razy diodą po 1 sec. Mikro-kontroler stałby w funkcji Delay 7 sekund a to już długo. W najprostszych rozwiązaniach może i się to sprawdzi ale później to już inna bajka 🙂

Mimo wszystko gratuluję dobrej i skrupulatnej części + to że napisane tak że każdy zrozumie.

Udostępnij ten post


Link to post
Share on other sites

Treker, używając liczby mnogiej miałem na uwadze, też twoich współpracowników, którzy piszą teksty w innych kursach 🙂 Jako autorowi tego wpisu- gratuluję Ci wiedzy i pracowitości, której mi brak 😉

Udostępnij ten post


Link to post
Share on other sites

hob_bit, dzięki 🙂

Udostępnij ten post


Link to post
Share on other sites

po long czas, dystans brakuje ; a w ostatnim kodzie brakuje pinMode(3, OUTPUT);

Udostępnij ten post


Link to post
Share on other sites

Zakurek, dzięki - coś przy kopiowaniu musiał się namieszać. Już poprawione 🙂

Udostępnij ten post


Link to post
Share on other sites

rafalski76, dzięki za motywację do dalszej pracy 🙂

Udostępnij ten post


Link to post
Share on other sites

Witam

Jako swój pierwszy projekt na arduino stworzyłem prosty "fotoradar" obliczający prędkość obiektu poruszanego się przed tym właśnie czujnikiem.

Brakuje kilku elementów, które chciałbym dodać w najbliższym czasie tj. "flash" przy oświetleniu niższym niż 50%, zapisywanie prędkości większej od 10km/h do tablicy i generowanie "mandatów", oraz kilka innych bajerów.

Poniżej wklejam kod, użyłem wyświetlacza 2x16 w projekcie, na którym wyświetlane są 2 odległości po czasie 1s, oraz prędkość liczona z różnicy pomiędzy tymi odległościami przez czas 1s bo po takim czasie następują pomiary.

#include <LiquidCrystal.h> //Dołączenie bilbioteki
#define trig 10
#define echo 11

LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //Informacja o podłączeniu nowego wyświetlacza

void setup() {
 lcd.begin(16, 2); //Deklaracja typu
 lcd.setCursor(0, 0); //Ustawienie kursora
 pinMode(trig,OUTPUT);
 pinMode(echo, INPUT);

 lcd.print("Fotoradar v1");
 delay(1500);
 lcd.clear();
}

void pomiar(){
 digitalWrite(trig,LOW);
 delayMicroseconds(2);
 digitalWrite(trig,HIGH);
 delayMicroseconds(10);
}

void loop() {
 double czas, dist, czas1, dist1;


 delay(100);
 pomiar();
 czas = pulseIn(echo, HIGH);
 dist = czas / 58;

 lcd.print(dist);
 lcd.print("   ");

 delay(1000);

 pomiar();
 czas1 = pulseIn(echo, HIGH);
 dist1 = (czas1 / 58);

 lcd.print(dist1);

 lcd.setCursor(0,1);
 lcd.print("v: ");
 lcd.print((dist1-dist)/100 * 3,6);
 lcd.print(" km/h");

 delay(3000);
 lcd.clear();

}

Udostępnij ten post


Link to post
Share on other sites

BartoszBor, bardzo ciekawy projekt! Mała sugestia, nie lepiej byłoby, aby funkcja pomiar() zwracała obliczoną odległość? W tej chwili jest to mało intuicyjne, że po jej wywołaniu musimy nasłuchiwać jeszcze osobno impulsu.

Udostępnij ten post


Link to post
Share on other sites

Treker, program do poprawek, dzięki za radę 😉 pochwale się gotowym projektem 😉

Udostępnij ten post


Link to post
Share on other sites

Zamiast buzera dałem LED.

Zmodyfikowałem funkcję zakres(int a) aby sprawdzała jedynie jedną wartość, a mianowicie czy jest poniżej danej wartości. wywołuję ją z a=25. W oknie monitora portu szeregowego otrzymuję wartości zawsze grubo powyżej 25, a mimo to LED częściej się zapala niż gaśnie.

#define trigPin 13
#define echoPin 12

void setup() {
 Serial.begin (9600);
 pinMode(trigPin, OUTPUT); //Pin, do którego podłączymy trig jako wyjście
 pinMode(echoPin, INPUT); //a echo, jako wejście
 pinMode(8, OUTPUT);
 digitalWrite(8, LOW);
}

void loop() {
 Serial.println(zmierzOdleglosc());
 zakres(25);
 delay(500);
}

int zmierzOdleglosc() {
 long czas, dystans;

 digitalWrite(trigPin, LOW);
 delayMicroseconds(2);
 digitalWrite(trigPin, HIGH);
 delayMicroseconds(10);
 digitalWrite(trigPin, LOW);

 czas = pulseIn(echoPin, HIGH);
 dystans = czas / 65;

 return dystans;
}

void zakres(int a) {
 int jakDaleko = zmierzOdleglosc();
 if (jakDaleko < a) {
     digitalWrite(8, HIGH); //Włączamy LED
 } else {
     digitalWrite(8, LOW); //Wyłączamy LED, gdy obiekt poza zakresem
 }
}

Udostępnij ten post


Link to post
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ę »

×