Spisu treści:

SONIC LED FEEDBACK: 7 kroków (ze zdjęciami)
SONIC LED FEEDBACK: 7 kroków (ze zdjęciami)

Wideo: SONIC LED FEEDBACK: 7 kroków (ze zdjęciami)

Wideo: SONIC LED FEEDBACK: 7 kroków (ze zdjęciami)
Wideo: Kaluch, gdy nie nagrywa 🥴 #shorts 2024, Lipiec
Anonim
DŹWIĘKOWE INFORMACJE ZWROTNE LED
DŹWIĘKOWE INFORMACJE ZWROTNE LED
DŹWIĘKOWE INFORMACJE ZWROTNE LED
DŹWIĘKOWE INFORMACJE ZWROTNE LED
DŹWIĘKOWE INFORMACJE ZWROTNE LED
DŹWIĘKOWE INFORMACJE ZWROTNE LED

Witaj ponownie, Nienawidzisz, że twój robot wpada na wszystko? To rozwiąże ten problem. Z 8 czujnikami dźwiękowymi wygląda to na skomplikowane… ale w rzeczywistości zrobiłem to bardzo proste. Staram się publikować projekty, które pomogą ci poznać Arduino i pokazać koncepcję „niestandardową”. Ten post pomoże Ci zrozumieć przełączanie 595, pro-minis jako programowalny czujnik oraz wspaniałe wykorzystanie sprzężenia zwrotnego w czasie rzeczywistym. Jeśli podoba Ci się Arduino jako „kopiuj, wklej i wtyczkę”, możesz po prostu to pominąć.

Lubię używać pro-mini. Kosztują około 2,50 USD, pracują jako pełnowartościowe uno, a instalacja nagłówków czyni je bardzo elastycznymi. Używany jako czujnik micro, możesz go „robić, co chcesz”, zamiast tego, co dyktuje zakupiony czujnik. Dzięki I2C przy użyciu tylko 2 przewodów można je połączyć razem na jednej linii. Więc przejdź na MEGA Mogę mieć 4 minis uruchamiające 4 oddzielne linie kodu w tym samym czasie, za jedyne 10,00 $. Tutaj używam mini, aby przebić czujniki dźwiękowe przez 595 i pokazać odległość w czasie rzeczywistym. Następnie po prostu udostępnij 8 bitów danych płycie głównej. To odciąża płytę główną i czyni jej kod bardzo prostym.

Jest problem z czujnikami dźwiękowymi… brak wizualnego sprzężenia zwrotnego. Nigdy nie wiesz, czy czujnik to tylko martwy ciężar, czy działa! Wierzę, że ktokolwiek wymyślił „BLINK”, jest mądrzejszy niż Einstine. Tylko JEDNA dioda LED, a miganie przekazuje świat informacji. Tak więc czujnik dźwiękowy potrzebuje informacji zwrotnej w czasie rzeczywistym. Tutaj użyłem szeregu diod led do monitorowania każdego czujnika. Nie potrzebujesz ich, po prostu zrób czujniki bez diod. Ale pomocne jest posiadanie diod LED na płytce drukowanej.

Krok 1: Zrób PCB

ZROBIĆ PCB
ZROBIĆ PCB
ZROBIĆ PCB
ZROBIĆ PCB
ZROBIĆ PCB
ZROBIĆ PCB
ZROBIĆ PCB
ZROBIĆ PCB

zrobić PCB i wypełnić. UWAGA… popełniłem błąd na płytce drukowanej przy 4-pinowych połączeniach do podłączenia czujników dźwiękowych. ECHO i TRIGGER Vcc i uziemienie miały zostać podłączone do płytki drukowanej. Nie ma wystarczająco dużo miejsca na złącza, więc po prostu zrobiłem płytkę z pinami. Możesz więc przylutować złącze przewodu do płytki drukowanej i podłączyć do rzeczywistych czujników dźwiękowych. Jeśli chodzi o diody, to umieściłem żółte diody na wewnętrznej krawędzi i czerwone na zewnątrz. pomaga to zobaczyć na odległość, czy czujniki prawidłowo mierzą.

Jest to jeden z NIEWIELU 2-stronnych płytek drukowanych, jakie kiedykolwiek zrobiłem. Wolałbym zrobić 2 z każdej strony i biegać zworki. Ale aby uzyskać wyświetlacz LED, potrzebujesz przynajmniej górnej płytki drukowanej. Rozdzieliłem układ w downloadzie.

Płytka jest przeznaczona dla pro-mini z A4-A5 wewnątrz nagłówka krawędziowego. Tak czy inaczej, po prostu podłącz A4-A5 do Master A4-A5. Nie zapomnij też o Vcc i Grounds.

Krok 2: WIELE BŁĘDÓW

WIELE BŁĘDÓW
WIELE BŁĘDÓW

A teraz moje błędy… Próbowałem uruchomić wszystkie wyzwalacze naraz (wszystkie powiązane) i to trochę działało dobrze, ale miały miejsce pewne interakcje. Więc teraz wszystkie ECHOS idą do mikro (8), a WYZWALANIE są ustawione na 595. Jeszcze trzy piny (3). Jeśli chodzi o diody, multipleksowanie nie zadziała. Potrzebujesz pełnego czasu włączenia dla każdego leda. Oznacza to, że każdy rząd 7 diod led musi mieć swój własny 595. Po aktualizacji 595 diody świecą się do następnej aktualizacji. Gdzie multipleksowanie diody led świeci tylko przez tę dziesiątą część sekundy. Działa to dobrze w moich czytelnikach i wymaga dedykowanego mikro. Nie ma czasu na skanowanie 8 czujników dźwiękowych i mierzenie odległości. Próbowałem i uzyskałem bardzo słabe wyniki. Multipleksowanie diod LED będzie również oznaczać siatkę wiersz + kolumnę, a to oznacza około 64+ przepustów w płytce drukowanej.

Użyłem tylko 7 wyjść z 595 z powodu bałaganu na PCB. Z daleka nie można stwierdzić, czy jest 7 czy 8 diod led tylko ich ruch. Możesz pokusić się o powiązanie wszystkich diod led z jednym rezystorem i to działa, ale jasność tablicy zmienia się wraz z ilością świecących diod. Więc jeden rezystor na diodę jest najlepszy. Po prostu uwielbiam 595, ale gdyby po prostu przesunęli piny Vcc i 0-out lub zrobili 18-pinowy układ scalony ze WSZYSTKIMI wyjściami po tej samej stronie… podłączenie wszystkich ośmiu wyjść byłoby tak łatwe. Ale wtedy nie sprzedałaby się za mniej niż 30 centów.

Krok 3: MONTAŻ CZUJNIKÓW

CZUJNIKI MONTAŻU
CZUJNIKI MONTAŻU
CZUJNIKI MONTAŻU
CZUJNIKI MONTAŻU
CZUJNIKI MONTAŻU
CZUJNIKI MONTAŻU
CZUJNIKI MONTAŻU
CZUJNIKI MONTAŻU

Przyklej czujniki dźwiękowe do pokrywki kawy. męskie gniazdo musi być wygięte do wewnątrz na każdym czujniku. Działa to lepiej, jeśli zginasz jedną szpilkę na raz. Użyłem 2-stronnej taśmy piankowej, aby wibracje były mniejsze. Moje czujniki są zbyt blisko i potrzebują przestrzeni 1/4 cala, aby lepiej dopasować płytkę drukowaną. Używałem wcześniej czujników dźwiękowych i czasami jeden nie mierzy dokładnie i trzeba o tym pamiętać. Więc nie KLEJ ich wszystkich na stałe.

Pomaga również przeprowadzić szybki test odległości na każdym z nich przed ich użyciem. Dostaję około jednego czujnika ze słabym odczytem w partii 20. Nieźle jak na cenę, którą zapłaciłem.

Krok 4: TWARDY PRZEWÓD

DRUT TWARDY
DRUT TWARDY

Myślałem, że będzie miejsce na gniazda i wtyczki od komputera do

szpilki dźwiękowe, ale zabrakło mi miejsca. Więc na stałe podłączyłem końcówkę PCB i właśnie wykonałem przewody echa i wyzwalacza z gniazdami żeńskimi (8 szt.). Połączyłem ze sobą masy 8ea Vcc i 8ea czujników, więc wykonałem dla nich tylko 2 połączenia z płytką drukowaną.

Z 8 czujnikami i 8 595s, uno lub pro-mini NIE MOGĄ tego zasilać. W ramach tego projektu musi istnieć regulowane źródło 5V. Mój robot ma prosty 7805 @ 1A z baterii. To wiąże się ze wszystkimi 5 V Vcc dla wszystkich urządzeń. 7805 spada o około wolta, więc potrzebujesz co najmniej 6,5 wolta, aby go zasilić. Czyli 2 baterie litowe przy 3,3v. Mój robot ma stare nikady z używanych pakietów wiertniczych, a 8 nikad napędza typowy chiński silnik z przekładnią 12V w podwoziu typu czołg za 20 USD.

Krok 5: POBIERZ SZKIC DŹWIĘKOWY

POBIERZ SZKIC DŹWIĘKOWY
POBIERZ SZKIC DŹWIĘKOWY

Pobierz szkic i zainstaluj. Jest wiele sposobów na rozmowę

inny uno ale lubię I2c. zamieszanie dotyczy adresowania i master/slave. Jak w przypadku większości czujników (pomyśl o drugiej mini jako o czujniku) adresujesz czujnik i prosisz o x ilość bajtów. to samo tutaj. W 2 mini odkładasz x ilość bajtów, które chcesz wysłać. Zamieszanie polega na tym, że nazwy nie mają znaczenia. To tylko pomaga Wam zapamiętać, jeśli udostępniacie imiona. Czyli w szkicu przesyłam 8 pomiarów odległości dźwiękowych w cm jako sendR1, sendR2, sendR3, sendR4, sendL1, sendL2, sendL3, sendL4. Master pobiera tylko 8 bajtów danych i możesz nazwać te bajty, jak chcesz. Odczytałem je jako gotR1, gotR2, got….. Wysłana kolejność bajtów jest taka sama. Więc bajt A, B, C….. nie myśl, że zmiana nazwy da ci inne dane. Z drugiej strony możesz odbierać tylko dane, które mają zostać wysłane. Więc jeśli chcesz inne dane, musisz zmienić ZARÓWNO master, jak i slave.

Krok 6: KOMUNIKACJA

KOMUNIKACJA
KOMUNIKACJA

Możesz to pominąć, jeśli wiesz, jak skonfigurować 2 Uno, aby rozmawiać ze sobą. Na końcu mam kilka ciekawostek. Dla ułatwienia nazwę uno w podstawie robota M1 i czujnik dźwiękowy jako S2. Połącz ze sobą Vcc, uziemienie, A4, A5.

W szkicu S2 zaczyna się od #include

Następnie utwórz 8 bajtów do wysłania. bajt R1, bajt R2, bajt L1 itd. Uno jest mikro 8-bitowym, więc wysyłają 1 bajt na raz, używając 'byte' zamiast 'int' jest poprawne.

W 'setup()' dodaj 'Wire.begin(address)' to powie I2c, które to urządzenie. Adres jest zwykle dowolną liczbą z przedziału od 4 do 200. Rozmiar jednego bajtu. Tutaj użyłem numeru 10. Aby porozmawiać z tym czujnikiem S2, mistrz musi zadzwonić do Wire.requestFrom(10, 8). To jest adres 10, a 8 to liczba bajtów, które są potrzebne. Również w 'setup()' dodaj Wire.onRequest(isr anyName). Gdy M1 wywołuje żądanie, czujnik S2 reaguje z przerwaniem. To po prostu wywołuje funkcję anyName. Więc ta funkcja anyName musi zostać utworzona. Spójrz na szkic i zobacz funkcję 'sendThis()' W tym miejscu bajty są faktycznie wysyłane do M1. Same bajty idą, a NIE nazwy i w kolejności wysłanej. Od tego zaczyna się rozmiar i ilość danych do wysłania. W tym prostym formacie bajtów wysyłanie i odbieranie powinny być zgodne. Tutaj 8 bajtów wysłanych i 8 bajtów odebranych. Jedna uwaga tutaj mówi, że wywołanie funkcji wymaga (). Jak delay(), millis(), Serial.print(). Podczas korzystania z ISR (przerwania procedury obsługi) wywołanie funkcji porzuca (). Więc Wire.onRequest(sendThis) nie Wire.onRequest(sendThis()).

Zamieszanie, które miałem, było sprawą pana/niewolnika. Na początku myślałem, że mistrz był ZAWSZE mistrzem. Ale w szkicu możesz przełączać master/slave, aby zażądać od innych micros lub wysłać do innych micros. Pod warunkiem, że postępowałeś zgodnie z podstawowym formatem opisanym powyżej. Pamiętaj… udostępniasz TYLKO dane, które zostały przypisane.

Dwa kawałki drobiazgów. Przerwanie isr tylko przerywa pomiędzy liniami szkicu. Jeśli jesteś zablokowany w pętli „while” lub „for”, nic się nie dzieje, dopóki pętla się nie zakończy. To nic wielkiego, ponieważ może to zająć kilka mikrosekund, a dane są stare.

Innym problemem jest to, że „wewnątrz” mikro jest w 100% bezbłędna kalkulacja. Wszelka komunikacja „zewnętrzna” (przewodowa) jest obarczona błędami. Istnieje wiele sposobów sprawdzenia, czy dostarczone dane nie zawierają błędów i są zgodne ze źródłem. Najprostszym sposobem jest suma kontrolna. Po prostu dodaj sumy wysyłanych bajtów (wartości rzeczywiste) i wyślij sumy, a po stronie odbiorczej dodaj sumy i sprawdź, czy pasują. Jeśli się zgadzają, lub wyrzuć ten zestaw danych, jeśli nie. Oczywiście wiąże się to z wysłaniem wartości całkowitej, a nie bajtów. Więc po prostu dzielisz liczbę całkowitą na bajt HI i LO i wysyłasz jako oddzielne bajty. Następnie składane przy odbiorniku.

ŁATWO:

int x = 5696; (dowolna prawidłowa wartość int, maks. to 65 tys. lub 32 tys. ujemne)

bajt hi = x >>8; (22)

bajt lo = x; (64)

wyślij bajty i połącz na drugim końcu….

bajt hi = Wire.read();

bajt lo = Wire.read();

int newx = (hi <<8) + lo; (5696)

Krok 7: ZAMYKANIE

ZAMKNIĘCIE
ZAMKNIĘCIE
ZAMKNIĘCIE
ZAMKNIĘCIE
ZAMKNIĘCIE
ZAMKNIĘCIE
ZAMKNIĘCIE
ZAMKNIĘCIE

Aby zamknąć, ten czujnik dźwiękowy podaje surowe dane dotyczące odległości płyty głównej w czasie rzeczywistym. Uwalnia to mikro i sprawia, że szkic jest znacznie mniej skomplikowany. Mikro może teraz podjąć dobrą decyzję o spowolnieniu, skręceniu, zatrzymaniu lub cofnięciu w oparciu o dobre dane zamiast losowych domysłów. Zobacz mój inny post o Bluetooth IDE do przesyłania szkiców bez przewodów i konieczności ciągłego podłączania robota, aby szybko zmienić szkic. Dzięki za obejrzenie tego. oldmaninsk.

Zalecana: