TCRT5000: tani czujnik zbliżenia

Czujniki zbliżeniowe stosujemy, gdy zależy nam na wykrywaniu różnych przeszkód znajdujących na torze poruszania się robotów lub jego elementów. W przypadku urządzeń mobilnych można ich użyć np. do unikania kolizji.

Jeżeli w zasięgu takiego czujnika pojawi się przeszkoda, stan sygnału wyjściowego zmienia się np. z wysokiego na niski. Zasięg (czyli odległość, na jaką reaguje czujnik), jak i kształ pola widzenia, zależą od konstrukcji czujnika.

TCRT5000
TCRT5000

Tytułowy czujnik TCRT5000 kosztuje około 2.5PLN. Żeby go użyć, potrzebne są jedynie 2 rezystory. Efektywnie wykrywa przedmioty w odległości do 3cm.

Czujniki tego typu składają się z 2 elementów: emitera oraz detektora. Emiter wysyła sygnał o określonej częstotliwości. Odbijając się od przeszkody wraca on do detektora. Zmiana w sygnale jest wykrywana przez czujnik i odzwierciedlana w stanie  jego wyjścia.

W przypadku TCRT5000, emiterem jest dioda podczerwona IR o o długości fali 950 nm. Detektorem jest fototranzystor. Wykrycie sygnalizowane jest zmianą nateżenia prądu w obwodzie detektora.

TCRT5000
Schemat TCRT5000 – widok od góry (pobrane z instrukcji)

Strona emitera

Emiter należy zasilić tak, żeby dioda była spolaryzowana w kierunku przewodzenia. Oznacza to, że do anody powinno być podłączone zasilanie – a do katody masa.

tcrt5000emiter-sideW przypadku Arduino mamy do wyboru 3.3 lub 5V. Spójrzmy jednak do specyfikacji czujnika: największym bezpiecznym prądem, z jakim dioda może pracować, jest 60mA (parametr forward current). Stąd:
I={{V_{cc}-V_{d}} \over R}

V_{cc} to napięcie zasilania, a V_{d} to spadek napięcia na diodzie. Możemy obliczyć wartość rezystora:
R={{V_{cc}-V_{d}} \over I}

Napięcie V_d podano w dokumentacji jako średnio 1.25V (ang. forward voltage, typowe). Weźmy zasilanie z Arduino – które zazwyczaj oscyluje w graniczach 4.9V:
R={{{(4.9-1.25)} [V]} \over {0.06[A]}}=60[\Omega]

Minimalny rezystor, jaki możemy tu użyć, to 60Ω dla zasilania 5V (i 34Ω dla 3,3V). Oczywiście trzeba założyć jakiś bezpieczny margines. Z drugiej strony – nie można za bardzo ograniczyć prądu diody emitera, bo zmniejszy to zasięg czujnika. Wybierzmy więc zasilanie 5V i rezystor 100Ω. Da to prąd:
I={U \over R}={3.65[V] \over {100[ \Omega]}}=36.5[mA]

…co jest bezpiecznym zapasem w stosunku do zastrzeżonych w instrukcji 60mA. W ten sposób wydzielana moc (dla maksymalnego napięcia przewodzenia 1.5V):
P={{V_d} \cdot I}={1.5[V] \cdot 36[mA]}=54[mW]

Co jest znacznie mniejsze niż zalecane w dokumentacji 100mW.

Detektor

W roli detektora występuje tu fototranzystor NPN. Prąd płynący przez złącze kolektor – emiter jest proporcjonalny do odległości od przeszkody – ale i warunków oświetleniowych oraz koloru przeszkody (sposobu w jaki odbija światło). W praktyce, mierzy się nie prąd, ale napięcie na szeregowo podłaczonym rezystorze (V_{out}.

tcrt5000emiter-detector-sideBorąc pod uwagę to, że prąd na diodzie emitującej sygnał I_F będzie ok. 36mA, możemy próbować oszacować wartość prądu na kolektorze
I_{c}=CTR \cdot k \cdot r \cdot I_{F}

Współczynnik CTR przeniesienia prądu można odczytać z wykresu:

transfer_rationDla naszego I_{F}=36[mA], CTR=10%. Tyle prądu zostanie przeniesione na detektor dla idealnie odbijającej przeszkody, gdzie k=100%. Dla szarej płytki PVC współczynnik k=11%.

Kolejnym parameterem jest r, który odzwierciedla wpływ odległości na prąd kolektor-emiter:

max_IcePrzykładowo, dla odległości 10mm, spadek ten wynosi ok. 35%. Razem, dla przykładowej szarej płytki w odległości 10mm od czujnika, prąd kolektora wyniesie:
I_{c}=10\% \cdot 11\% \cdot 35\% \cdot 36[mA] = 138[uA]

Na rezystorze 10kΩ odłoży się wtedy napięcie 1.38V.  Oczywiście jest to jedynie wyliczenie teoretyczne.

W praktyce występuje wiele interferencji z różnych źródeł światła, nierówności powierzchni, które będą dodatkowo rozpraszać sygnał emitera.

Wyniki doświadczalne

TCRT5000 - doświadczenie
TCRT5000 – doświadczenie

W reultacie, dla kilku ścianek zbudowanych z lego, uzyskałem następujące zależności napięcia V_{out} od odległości od sensora:

chart_tcrt5000Z wykresów widać, że sensor dobrze sprawdza się w wykrywaniu przeszkód do 3 cm. Dalej zmiany napięcia są już na tyle niewielkie, że mogą być trudne do zinterpretowania.

Dodatkowo skutecznośc działania czujnika silnie zależy od koloru przeszkody. Najlepiej wydaje się  działać z przeszkodami jasnymi – silnie odbijającymi światło. Im ciemniejsza przeszkoda tym niewielka zmiana odległości powoduje bardzo duży skok napięcia. Z tego też powodu lepiej używać go do wykrywania przeszkód, niż mierzenia odległości do nich.

Arduino

Układ należy zbudować jak zaproponowano powyżej z rezystorami 100Ω po stronie emitera i 10kΩ po stronie detektora. V_{out} należy podłączyć do jednego z wejść analogowych.

Vout mozna też podłączyć do pinu cyfrowego. Wtedy jednak dostaniecie wartość 0-1. Podłączenie do pinu analogowego pozwoli Wam na kontrolę zbliżania się do przeszkody.

Przykładowy kod, dla V_{out} podłączonego do A0:

#define IN_PIN A0

void setup() {
  Serial.begin(9600);
  Serial.println("-----");
  pinMode(IN_PIN, INPUT);
}

void loop() {
  int vout = analogRead( IN_PIN );
  Serial.print("State:");
  Serial.println(vout);
  delay(100);
}

Źródła

Dodaj komentarz