Skocz do zawartości

Czujniki do MicroMouse


wn2001

Pomocna odpowiedź

Witam,

buduję sobie takiego oto MM na silnikach NEMA11 (zdjęcie w załączniku). Wstawiłem tam VSLY5850 i BPV11, jednak jak wynikło z rozmowy w shout-boxie, fototranzystor jest zły, gdyż nie ma filtru IR - sprawdziłem i tak też jest w praktyce, a zależy mi na bezawaryjności 😉 Mam diody:

VSLY5850 - 850nm, +- 3*, 600 mW/sr

TSAL6400 - 940nm, +-25*, 50 mW/sr

TSAL6100 - 940nm, +-10*, 170mW/sr

TSHG6210 - 850nm, +-10*, 230mW/sr

I FT:

BPV11F - 9mA, +-15* , 940nm, filtr światła dziennego

LIRT5B - 2mA, 940nm, kąt - brak danych, filtr światła dziennego

BPV11 - 10mA, +-15*, 850nm, ale reaguje też na światło widzialne - brak filtra

Moje pytanie - jaki zestaw będzie dobry? Odległość elementów - 4mm, powinny być fi5, bo takie mam otwory 🙂 Będę wdzięczny za każdą podpowiedź, oczekiwany zasięg - koło 10, może 8cm. Jak pominąłem jakąś ważną informację, pytajcie 🙂 Rzecz jasna przed wklejeniem jeszcze przetestuję, ale potrzebuję jakiś teoretycznych wskazówek bardziej doświadczonych 😉

Pozdrawiam 🙂

17264355_492492001138720_6834474375905104906_n.thumb.jpg.e5275b77601cc415c840dde06f850626.jpg

Link do komentarza
Share on other sites

W labiryncie MM ściany są zwykle białe i podobne do siebie - nie trzeba wykrywać ciemnych kotar czy pluszowego misia. Przy takim zasięgu nie potrzebujesz ani mocy nadawanej ani jakiejś specjalnej czułości odbiornika. Weź tą wąską diodę 6100 i pierwszy tranzystor z listy. Ona nadaje w 940nm a on ma tam maksimum czułości - "będzie Pan zadowolony".

Przy takiej konstrukcji czujników pamiętaj, że tranzystor będzie widział nie tylko promień swojej diody odbity od ściany, ale też jej bezpośrednie światło (tak, świeci w bok) oraz światło od koleżanki na tym samym słupku (ta też świeci w bok). Kąty wiązki podawane w katalogu to spadek czułości/energii o 50% a nie całkowita blokada. Tak więc każdy z tych elementów coś jarzy pod kątem nawet 90°. Zrób pomiary napięć z tranzystorów w pustej przestrzeni (bez żadnych przeszkód) bez włączonych diodek IR, z zapaloną tylko "swoją" i z zapaloną "koleżanką" z tego samego słupa i sprawdź, czy to za bardzo nie przeszkadza. To jest sygnał zakłócający, tj. zmniejszający dynamikę sygnału oczekiwanego. Jeśli te bezpośrednie "przesłuchy" od diodek będą przekraczać np. 10-20% sygnału odbitego od przeszkody ustawionej na granicy wymaganego zasięgu, to pomyśl o jakichś rurkach na diody i/lub tranzystory. Wpływ skrośny jednego czujnika na drugi możesz wyeliminować przez naprzemienne włączanie diodek i pomiary tylko tego tranzystora którego dioda jest akurat aktywna. Zakładam, że i tak wynikiem każdego kanału będzie różnica między napięciem przy diodce zapalonej i zgaszonej.

Napięcia wyjściowe tj. zakresy czułości fototranzystorów dobierasz opornikami. Znajdź takie wartości, przy których sygnał nie nasyca się nawet przy białej ścianie w odległości kilku cm.

Obawiam się także, że idealnie równoległe umieszczenie wąsko świecącej diody i fototranzystora spowoduje, że przy małych odległościach sygnał zacznie być coraz słabszy, bo przestaną pokrywać się stożki widzenia. Pokaż wykres ADC w funkcji odległości.

Jak będziesz napędzał silniki? Jakim napięciem? Jaki driver?

Link do komentarza
Share on other sites

Bardzo dziękuję, test zrobię 🙂

Silniki będę sterował poprzez A4988, z 2x LiPo2S, czyli nominalnie 14,4V. Sterowanie będzie się opierać na biblitece AccelStepper - bardzo wygodne, podaję przyspieszenie, v max i ile chcę zrobić kroków 🙂

Link do komentarza
Share on other sites

A to jeszcze napisz co to konkretnie za silniki, na jakie napięcie są cewki i ile pełnych kroków lub obrotów na sekundę chcesz robić. Coś maławo te 14V się wydaje.

A sterowanie i tak będziesz musiał własne napisać i na bibliotekę nie licz - ta przyda się tylko do pierwszych zabaw. Przecież podczas jazdy musisz na bieżąco kontrolować i korygować prędkość więc zadawanie z góry liczby kroków jest bezużyteczne. Już teraz zacznij się zastanawiać jak zrobić 2 niezależne generatory impulsów STEP produkujących 2 ciągi sygnałów o wskazanych (i zwykle różnych) częstotliwościach wynikających z nadążnej regulacji położenia (podłużnego i poprzecznego) w korytarzu i wykonywania zakrętów o zadanym promieniu. Do tego dołóż rampy rozpędzania i hamowania takie by nie przekroczyć maksymalnych przyśpieszeń, bo grozi to a) zerwaniem przyczepności (co kładzie ideę stosowania silników krokowych), b) zgubieniem kroków (to samo).

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

https://botland.com.pl/silniki-krokowe/3604-silnik-krokowy-jk28hs32-0674-200-krokowobr-38v-067a-006nm.html

Zobaczę, jaką prędkość uda się osiągnąć, ale liczę na przynajmniej 2RPS.

http://semiengineering.weebly.com/blog/stepper-driven-by-arduino-a4988

Ta biblioteka daje mi kontrolę nad ilością kroków, ograniczając przy tym prędkość i przyspieszenie/zwalnianie do zadanych prędkości. A jeżeli teraz na przykład stoję przed ścianą i muszę na przykład dosunąć się prawą stroną o 5mm, to nie można zrobić tego tak, że po prostu prawy silnik przesuwa się o to 5mm? Albo jak wiem, że jestem w komórce krzywo, to normalnie muszę zadać (rzecz jasna po przeliczeniu na kroki):

L->180mm

P->180mm

A tak, żeby skorygować, to zadaję:

L->175mm

P->185mm ?

===EDIT===

Wziąłem 3x równolegle 100om do diody (100mA starczy czy zwiększyć?) i 1k do FT. Na laser czerwony nie reaguje, na latarkę trochę, ale ULN2003 powinno załatwić sprawę.

Tak, mogę montować? 🙂

Link do komentarza
Share on other sites

Nie zajrzę teraz do kart katalogowych diodek, ale 100mA prądu ciągłego to bardzo dużo dla plastikowej obudowy. Doczytaj dokładnie ile możesz tam wepchnąć w stanie ustalonym. Zwykle są to prądy rzędu 20mA, ale może dla tej konkretnej jest inaczej. Zapomnij o parametrach maksymalnych. Czasem takie prądy diod IR dochodzą do 1A, ale to wyłącznie przy impulsach kilkumikrosekundowych i małym wypełnieniu (np. 0.1%).

Czy te 100mA to z sufitu piszesz czy zmierzyłeś? Bo port procesora taki silny nie jest a na wyjściu układów serii ULN masz pary Darlingtona na których tracisz min. 1V. Jeśli tego nie weźmiesz pod uwagę, to rzeczywisty prąd może być dużo mniejszy niż ten z pobożnych życzeń.

Sam sobie odpowiedz na pytanie czy chcesz mieć czujniki nieodróżniające 10 od 30mm. Spróbuj ze skosem, takim by osie diody i tranzystora przecinały się w odległości np. 30-50mm. Powinno pomóc na ten prawy "zwis" wykresu.

Takie start-stopowe sterowanie jest strasznie prymitywne. Mysz ma jeździć a nie zatrzymywać się po każdym manewrze tylko dlatego, że nie umiesz inaczej sterować silnikami. Poza tym przy zatrzymywania i ruszaniu powiększasz uślizgi kół i zwiększasz błędy położenia. Zastanów się przez chwilę i wyobraź sobie jak to będzie się zachowywać. Np. w trybie uczenia jadąc z jednej komórki do następnej nie ma sensu w każdej stawać. Mając silniki krokowe wiesz (zawsze tylko mniej więcej) gdzie jesteś, a dysponując sygnałami z czujników bocznych, przed którymi "otwierają się" i "zamykają" boczne korytarze możesz wprowadzać poprawki na przejechaną odległość. Dzięki temu możesz płynnie jechać prosto lub ze skrętem bez "namyślania" się na środku każdej komórki. Narysuj sobie tę mysz podczas przejazdów między komórkami i popatrz kiedy dostajesz sygnały z czujników o ścianach w nieznanej komórce a kiedy musisz zacząć wykonywać ew. skręt. Jeśli dobrze to wymyśliłeś, nie musisz dojeżdżać do środka komórki i stawać żeby się obrócić w miejscu. No ale fakt, coś takiego nie zadziała na start-stopowym, planowanym "z góry" sterowaniu silnikami.

Podczas dobierania prądu diody i czułości fototranzystora (jego opornik w emiterze - sądząc po wynikach z ADC) musisz znaleźć złoty środek między sygnałem nadawanym - by wystarczająco przewyższał zakłócenia od otoczenia a jednocześnie niepotrzebnie nie grzał diody, a czułością detektora - by go nie przesterować. Tu wydaje się nieźle, masz jeszcze trochę zapasu na ADC ale teraz spróbuj tego samego z np. 2x mniejszym prądem diody (mierz go po każdej zmianie oporników - musisz być pewien ile tego jest) i 2x większym (lub jakimś innym) opornikiem przy fototranzystorze. Po to jest ten etap byś wybrał rozwiązanie optymalne na jednej sztuce i je powielił, a nie pierwsze z brzegu. Czy zauważyłeś jakiś wpływ diody ustawionej pod kątem 90° z tego samego słupa? Sprawdzałeś to?

Te silniki będą lubić raczej wyższe napięcia z uwagi na sporą rezystancję i indukcyjność uzwojenia. Myślę, że te planowane 400kroków/s to będzie szczyt możliwości tego zestawu przy sensownym momencie. Być może będziesz musiał ograniczyć przyśpieszenia i hamowania przy dużych prędkościach, bo przy tych 14V i 2obr/s nie starczy momentu. Kółka będą co najmniej fi 40mm, bo sam silnik ma 28mm a przecież jeszcze jakieś podwozie, prześwit itp. Dostaniesz więc z jednego napędu 300g siły w zatrzymaniu, malejącej wraz z obrotami. Do żółwio-myszy powinno starczyć 🙂 Ile będzie całość ważyć?

Link do komentarza
Share on other sites

To 100mA wyliczyłem, rzeczywiście jest tam 80mA, ale w dokumentacji pisze Forward Current 100 mA, a dla impulsów Peak Forward Current 200 mA / Surge Forward Current 1.5 A @ 100u mikrosekund. Dioda jest podłączona pod 5V, ale docelowo będzie pod ULN i tak teraz będę robił testy. 2x silnik i 2x akumulator ważą 320g, wydruki razem 60g, elektronika... 500g z zapasem. Kółka mają fi50. Może być wolniej, dla mnie ważne jest, żeby wyglądało to lepiej niż rok temu, szczególnie jeśli chodzi o "kulturę jazdy".

===EDIT===

Zapomniałem dodać - chciałbym dla zwiększenia rozdzielności i płynności dać 1/4 kroku 🙂 czyli 2rps = 1600 (ćwierć)kroków/s

Link do komentarza
Share on other sites

Poprawa kultury jazdy odbywa się głównie poprzez ulepszanie algorytmów a nie zmianę silników na krokowe. To nie panaceum a wręcz wyzwanie. W tamtej konstrukcji mogłeś zrobić to o niebo lepiej mimo, że (jak widzę) korzystasz z prostej metody śledzenia prawej ściany. Mysz mogła fajnie i płynnie skręcać lub jechać wzdłuż prostej a dziobie jak ślepa kura blokując się na prawie każdym zakręcie. Coś w kodzie poszło nie tak i chyba sam rozumiesz, że nie z powodu napędu silnikami DC(?).

Jeśli od tamtego czasu czegoś się w programowaniu nauczyłeś, może spróbuj podejść do tej konstrukcji raz jeszcze i napisać kod jeżdżący ładnie. Tak dla sportu. Wywal wszystkie delay'e i załączanie silników na stałe odcinki czasu a zrób kilka równoległych i komunikujących się ze sobą procesów oraz główny automat spokojnie przechodzący od jednego stanu jazdy do innego. Wyznacz poprawne (nie zero-jedynkowe) wysterowania silników dla płynnych zakrętów nawet jeśli pokonujesz je "na ślepo" itd itp.

Nie chcę Cię zniechęcać bo nowy projekt rajcuje zwykle dużo bardziej niż stara, opatrzona mysza, ale dopóki nie nauczysz się robić dobrego kodu na prostszych rzeczach, w bardziej skomplikowanych konstrukcjach problemów będzie dużo więcej - bez doświadczenia ich nie pokonasz.

Link do komentarza
Share on other sites

Testy - dla FT zawsze 1k, dla diody kolejno - 3x100om -> 65mA | 4x100om -> 80mA | 5x100om -> 90mA + ULN2003 i program

int led=13;
int on;
int off;

void setup() {
 pinMode(led, OUTPUT);
 Serial.begin(9600);
}

void loop() {
 digitalWrite(led, HIGH);
 int on = analogRead(A0);
 delay(1);
 digitalWrite(led, LOW);
 int off = analogRead(A0);
 delay(1);
 Serial.println(on-off);
 delay(1);
}

I kolejne wykresy:

Wydaje mi się, że najlepszy jest ten ostatni 🙂 Pytanie z innej beczki - czy SoftwareSerial nada się do przesyłu odległości z jednego Arduino Nano do drugiego, sterującego silnikami? Kiedy już się zatrzymam, chciałbym wysłać jakąś komendę i w odpowiedzi dostałbym odległości (już obrobione, z lookup-table)? Czy lepiej wykorzystać do tego I2C?

=============

Przy tamtym robocie wyszło, jak wyszło 😋 Miałem regulator PD, ale zamiast linearyzować wyniki, chociażby przez tabelkę, brałem bezpośrednio do regulatora + kilka ifów, jakby się przyblokował. Oprócz tego te silniki były tanie, bez enkoderów i miały duży rozrzut dla choćby PWM-u. Na koniec, czujniki też były zrobione budżetowo i generalnie całość była zrobiona tak, żeby jeździła.

===EDIT===

Teraz jeszcze zauważyłem - ponieważ off jest równe 1 lub 2, to powinny te wykresy przypominać ten z poprzedniego postu - nie przypominały, bo były rozsunięte tak, że ich osie(a konkretnie przedłużenia) spotkałyby się z tyłu. Zmiana kąta, pod jakim spotykają się osie, daje poprawę 🙂

Link do komentarza
Share on other sites

Nawet ten z najmniejszym prądem (a jeszcze mniejszym?) daje ilościowo wystarczające wyniki. Gorzej z tym zagięciem wykresu, bo gdy podjedziesz do ściany to ślepniesz nie wiedząc czy to 10 czy 30mm.

Pokaz taki z osiami przecinającymi się z przodu. Może ze dwa przypadki różnych "zezów"? Dobierz tak, by nie było zagięcia (może być płasko) nawet kosztem słabszego sygnału w większej odległości.

Link do komentarza
Share on other sites

Pomogło zsunięcie do 4mm, czyli tak jak mam w tych uchwytach drukowanych 🙂

Kolejno - 2x; 3x; 4x; 5x 100om

1) Pytanie jak poprzednio - do przesyłu odległości (w miarę szybkiego) z jednego do drugiego Arduino Nano lepiej wziąć programowy UART czy I2C?

2) I który wariant czujnika wybrać?

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.