Przejdź do głównej zawartości

[Arduino] Czujnik martwej strefy w lusterku bocznym

Poruszanie się motocyklem, w szczególności w mieście, związane jest z ryzykiem wjechania innemu uczestnikowi ruchu przed przysłowiową maskę. Jest to o tyle niebezpieczne, że mimo względnie niewielkich prędkości może dojść do wywrotki motocykla wraz z kierującym i pasażerem. Aby tego uniknąć trzeba umiejętnie korzystać z lusterek, jednak w przypadku motocykli są one na ogół dość małe i bardziej niż ma to miejsce w samochodach doświadczamy tzw. martwej strefy. Ogólnie rzecz biorąc jest to strefa w bliskiej odległości od motocykla, której nie widzimy w lusterku (trzeba się wychylić i spojrzeć w nie pod innym kątem albo odwrócić głowę), a w której może znaleźć się inny pojazd. Z pomocną ręką może przyjść nowoczesna elektronika. W niniejszym wpisie przedstawię bardzo prostą propozycję wykorzystania Arduino jako czujnika martwej strefy motocykla.  Oczywiście zamiast motocykla można wstawić każdy inny pojazd, a wręcz pomysł można potraktować jako czujkę alarmową (czujnik ruchu). Cały projekt udostępniony jest online poprzez TinkerCAD (link w stopce wpisu).
Pomysł polega na tym, aby monitorować przestrzeń po bokach motocykla lekko z tyłu. Oczywiście jest to kwestia montażu, natomiast w tym projekcie przedstawiona jest idea rozwiązania. Jego bazą jest płytka Arduino Uno R3. Dodatkowe elementy to dwa czujniki zbliżeniowe Parallax 28015 Rev. C PING))), dwie czerwone diody LED oraz dwa rezystory 470 omów. Dla czytelności projektu wykorzystana została również mała płytka stykowa.
Schemat połączeń
Do portów cyfrowych o numerach 2 (lewa strona motocykla) i 3 (prawa strona motocykla) dołączone zostały czerwone diody LED celem sygnalizacji obecności pojazdu w odległości mniejszej niż założona, czyli w tym przykładzie było to 100 cm. Czujniki zbliżeniowe zostały dołączone do kolejnych portów: 4 (lewa strona) i 5 (prawa strona). Zasada działania wykorzystanego czujnika zbliżeniowego przedstawiona jest na poniższym rysunku.
Zasada działania czujnika zbliżeniowego  [1]
Żeby czujnik zadziałał należy piny zasilające połączyć z masą oraz zasilaniem +5V, a następnie wystartować go krótkim impulsem stanu wysokiego (TRIG), co spowoduje wygenerowanie serii testowych impulsów (CHIRP), a następnie impulsu odpowiedzi (ECHO), której czas trwania jest proporcjonalny do odległości. 

Zależności czasowe czujnika zbliżeniowego [2]

Odległość tę możemy przeliczyć na cm korzystając ze wzoru:

odległość [cm] = ( czas_odpowiedzi [us] * 34 ) / 1000 / 2

System ten działa w ten sposób, że w trybie ciągłym monitorowana jest odległość obiektów od czujników i jeśli jakiś znajdzie się bliżej niż założone 100 cm zaświeci się lewa lub prawa dioda, zależnie od strony gdzie ten obiekt się pojawił. Wykorzystane rezystory z punktu widzenia symulacji nie są niezbędne, jednak wykonując model praktycznie warto o nich pamiętać - ograniczają prąd płynący przez diodę. Program realizujący to wszystko, czyli generujący impulsy wyzwalające czujniki, odbierający sygnały, przeliczający odległości oraz zaświecający diody LED w razie potrzeby wygląda następująco:

#define LeftLed 2
#define RightLed 3
#define LeftSensor 4
#define RightSensor 5
#define MinimalDistance 100 //centimeters

void setup() {              
  pinMode(LeftLed, OUTPUT);
  pinMode(RightLed, OUTPUT);
}

float LeftDistance() {
  unsigned long czas;
  pinMode(LeftSensor,OUTPUT);
  digitalWrite(LeftSensor, LOW);
  delayMicroseconds(2);
  digitalWrite(LeftSensor, HIGH);
  delayMicroseconds(5);
  digitalWrite(LeftSensor, LOW);
  pinMode(LeftSensor, INPUT);
  czas=pulseIn(LeftSensor, HIGH);
  return czas / 58;
}

float RightDistance() {
  unsigned long czas;
  pinMode(RightSensor,OUTPUT);
  digitalWrite(RightSensor, LOW);
  delayMicroseconds(2);
  digitalWrite(RightSensor, HIGH);
  delayMicroseconds(10);
  digitalWrite(RightSensor, LOW);
  pinMode(RightSensor, INPUT);
  czas=pulseIn(RightSensor, HIGH);
  return ((czas * 34 ) / 1000 / 2);
}

void loop() {
  if(LeftDistance() < MinimalDistance) {
    digitalWrite(LeftLed, HIGH);
  }
  else {
    digitalWrite(LeftLed, LOW);
  }
 
  if(RightDistance() < MinimalDistance) {
    digitalWrite(RightLed, HIGH);
  }
  else {
    digitalWrite(RightLed, LOW);
  }
}
W pierwszym bloku zostały zdefiniowane stałe elementy, jak przyporządkowane porty czy minimalna odległość. W funkcji setup() skonfigurowane zostały porty, do których dołączono diody LED, jako wyjściowe. Kolejne dwie funkcje (LeftDistance oraz RightDistance) służą odczytowi odległości od przeszkody odpowiednio z lewej i prawej strony. Zgodnie z przedstawionym wcześniej sposobem działania najpierw przełączają port z dołączonym wyjściem SIG czujnika w tryb wyjściowy, następnie generują impuls wyzwalający czujnik (impuls o czasie trwania 10 us), dalej przełączają tryb pracy portu w stan wejściowy i odczytują czas trwania impulsu, który się tam pojawił. Ostatnią rzeczą jest przeliczenie tego czasu na odległość do obiektu. W programie głównym (czy raczej pętli głównej) wykonywane są pomiary odległości do obiektów z lewej, potem z prawej strony. Jeśli w którymś momencie okaże się, że jest obiekt bliżej niż 100 cm to zaświeca się dioda LED odpowiadająca stronie, po której się on pojawił, a jeśli nie to pozostaje zgaszona lub gaśnie. Realizuje to instrukcja warunkowa if, w której odczytana z danej strony odległość jest porównywana z minimalną dozwoloną. Model, gotowy do uruchomienia udostępniony jest online na platformie TinkerCAD - tutaj.

Na chwilę obecną pogoda jest mało zachęcająca do jazd motocyklowych, ale być może na wiosnę najdzie mnie i spróbuję zrobić takie urządzenie w praktyce. Póki co zostaje zabawa przy komputerze, np. uzupełnienie projektu o element regulacyjny czułość (minimalną odległość) w zadanym zakresie.

[2] Botland

Komentarze

Popularne posty z tego bloga

Z psem na Turbacz

 Wyjazd wakacyjny nie musi się wiązać z zostawianiem psa w domu pod opieką rodziny czy sąsiadów, albo oddawaniem do psiego hotelu. Przy odrobinie wyobraźni i dobrych chęci czas ten można znakomicie spędzić wspólnie. Pewną propozycją dla osób posiadających psa lubiącego dalekie spacery może być wycieczka na Turbacz. Turbacz jest najwyższym szczytem Gorców, a jego wysokość to 1310 m.  Dojście z psem na szczyt możliwe jest legalnie niebieskim szlakiem z Łopusznej. O tyle zaznaczam legalność wejścia, ponieważ wstęp psów do parków narodowych jest w większości przypadków zabroniony, a Trubacz od północy otacza Gorczański Park Narodowy. Proponowany niebieski szlak jest to dość długi, bowiem ma około 11 km licząc od parkingu. Część turystów zostawia samochód na dzikim parkingu 3 km dalej po trasie szlaku, ale miejsca jest tam nie za dużo i może być problem. Poza tym umówmy się, że jak się idzie szlakiem to się idzie, a nie jedzie - do czego wrócę w innym wpisie. A zatem samochód zosta...

Bolimowski Park Krajobrazowy

Dzisiejszy wpis ma charakter praktycznych rozważań życiowych - co zrobić z psem, kiedy rodzina chce jechać na większą część dnia w miejsce, gdzie nie obsługują psów? To zależy. W tym przypadku docelowym miejscem wyjazdu było Suntago - znany myślę każdemu, choćby z mediów, park wodny w centralnej części Polski. Ponieważ nie stanowię targetu dla projektantów zjeżdżalni stąd odpowiedź na wyżej postawione pytanie była jasna - pies zostaje ze mną. Ale trzeba go czymś zająć. I gdyby ktoś stał przed podobnym pytaniem dotyczącym właśnie Suntago, albo basenów termalnych w Mszczonowie (rzut beretem obok Suntago) to mogę polecić rozwiązanie. Spacer po lesie w Bolimowskim Parku Krajobrazowym. Jak już odstawimy rodzinę do parku wodnego należy udać się około 22 km na zachód w kierunku miejscowości Bartniki, gdzie znajduje się parking leśny o całkiem niezłych możliwościach. Mapa dojazdu z Suntago Miejsce na ognisko, wiata, ławki, stoły, kosze - cud miód. Parking leśny Mnie jednak interesowała okolica...

Mrozy i Jeruzal, czyli szlakiem serialu „Ranczo”

Tematem dzisiejszego wyjazdu są dwa miejsca, które łączy serial pt. „Ranczo”. Oba znajdują się na wschodnim końcu województwa mazowieckiego, kawałek za Mińskiem Mazowieckim. Główny szlak dojazdowy to autostrada A2 z Warszawy, ale jak ktoś woli bardziej klimatyczne drogi to bez problemu znajdzie coś mniej lub bardziej równoległego. Ja wybrałem autostradę, choć najpierw musiałem do niej dojechać co oznaczało ostrożne omijanie sznurka samochodów na ulicy Żołnierskiej. Lokalni wiedzą o co chodzi - ogółem spory chaos ze względu na trwającą budowę estakady.  Mrozy Pierwszy z punktów wycieczki to jedyny w Polsce tramwaj konny, czyli miejscowość Mrozy. Tramwaj ten powstał w 1902 roku z konieczności transportowania materiałów budowlanych ze stacji kolejowej Mrozy do nowo budowanego szpitala w pobliskiej wsi Rudka. Był to czas epidemii gruźlicy, a panujący tam mikroklimat przyspieszał proces powrotu do zdrowia. Budowa trwała 6 lat i po jej zakończeniu tramwaj zaczęto wykorzystywać do transpo...