Skocz do zawartości

[Praca inżynierska - worklog] Pojazd sensory pogodowe, stream z kamery, GPS - sterowanie Android.


Pomocna odpowiedź

Pozwolę sobie założyć tu temat (to też tak bardziej dla siebie, jak będę zamieszczał rożne rzeczy i opisywał, to przy pisaniu pracy nie pominę istotnych rzeczy). Tak więc mój temat pracy inżynierskiej to "Sterowanie obiektem mobilnym za pomocą aplikacji Android". Z uwagi na to iż praca była przeznaczona na 2 osoby, a ja ją wziąłem sam, postanowiłem, że tuż przed rozpoczęciem roku akademickiego muszę skompletować cały pojazd, żebym przez cały semestr w większości zajął się tylko samą aplikacją i szczerze mówiąc to na niej skupiam się w swoim projekcie.

1. Podwozie + silniki + koła:

Podwozie, które wybrałem, z braku właściwie czasu i chęci ograniczania kosztów założyłem budżet 200 zł z AliExpress mógłbym dostać podwozie gąsienicowe (TE PODWOZIE ), ale za 300 zł i za nim by przyszło byłby koniec października, a jak pisałem zależało mi, żeby na 1 października kwestie hardware'u były gotowe, tak więc wybrałem te: Pirate-4WD

Koła były w zestawie, prawdopodobnie to są te:Dagu RW002 65x26mm Myślałem, że będzie gorzej, z zewnątrz jest guma, po bardzo puszystym dywanie śmigają, nie ślizgają się na panelach, mogło być gorzej myślę 😃

Silniki są 4 były razem z podwoziem, prawdopodobnie to są te: DC Dagu DG02S-L 48:1 4.5V Oczywiście jasne, że "szału" nie ma, dzisiaj może pójdę z ciekawości zobaczyć jak radzą sobie na asfalcie (czy w ogóle sobie radzą 😃), ale za tą cenę to nie ma co oczekiwać cudów.

2. Jednostka kontrolująca (MCU):

Wybrałem pewnie najtańszą i najwygodniejszą dla mnie opcję (w tamtym roku robiłem własną płytkę z Atmegą8 do robota mini sumo, ale tu z uwagi na czas, wybrałem Arduino), czyli Arduino Uno, wczoraj zacząłem się zastanawiać czy wystarczy mi pinów do obsługi tego co zaplanowałem, ale po zobaczeniu, że UART jest też dostępny na analogowych pinach stwierdziłem, że wystarczy.

3. Komunikacja:

Nad tym dość długo się zastanawiałem. Łączność radiowa odpada, bo nie ma jak skontaktować się z moją aplikacją. Zostało WiFi i Bluetooth, z uwagi na to, mniejszy stopień skomplikowania w obsłudze Bluetooth w AndroidStudio oraz mniejszy pobór prądu wybrałem Bluetooth.

Moduł, który wybrałem to: XM-15B

Opisywałem w tym temacie:KLIK moje uwagi na temat tego modułu Bluetooth i tego, że zasięg to w przybliżeniu +/- 20 metrów (bardziej 15 metrów). Jak wyczytacie w tym temacie znalazłem inny moduł Bluetooth, który podobno ma zasię do +/- 100 metrów: BTM222, ale został już wycofany ze sprzedaży. Ja już ten zakupiłem i tak zostaje.

4. Sterownik silników:

Szczerze mówiąc nie głowiłem się nad tym jaki zakupić, po prostu jeszcze przy samym zakupie Arduino, allegrowicz miał inne przedmioty, zobaczyłem, że jest za niecałe 12zł, pomyślałem, że i tak będę jakiś potrzebował i zakupiłem ten: Moduł z L298N

No silniki są 4, a ten obsługuje tylko 2, więc musiałem je podłączyć parami z lewej strony razem pojazdu i z prawej strony pojazdu razem. I teraz się zastanawiam czy nie kupić np. tego : Motor Control Shield Arduino 9V/0.6A . Ale szczerze mówiąc ten L298N tak ładnie mi się zmieścił pod tą dolną platformą i jest tak estetycznie, że chyba nie chcę go zmieniać. Ponadto no już mówiłem, że nie wiem czy mi starczy pinów na obsługę czujników, a tak musiałbym jeszcze dodatkowe 4 piny poświęcić na to.

I co daje możliwość kontrolowania 4 silników osobno, poprawcie mnie jeśli się mylę, bo nie jestem pewny. Czy kontrola 4 silników osobno daje możliwość jakby obrotu pojazdu w miejscu, gdy przedni silnik z jednej strony kręci się do przodu, a drugi silnik z tyłu po przeciwnej stronie, kręci się do tyłu, czyli tak?

No, bo kontrola w moim przypadku silników parami daje takie możliwości:

A więc jak dla mnie kontrola 4 osobno daje możliwość obrotu w miejscu w taki sposób:

No, a co do tego mojego: Moduł z L298N to jedyne co mi się w nim nie podoba to te dwie zwory:

Bo żeby kontrolować prędkość silników PWM'em to trzeba je zdjąć i gdy podłączy się pod ten goldpin u dołu na którego właśnie podajemy PWM'a, to temu górnemu co go zwora łączyła trzeba zapewnić '1' i to jest jak dla mnie jedyna wada, bo trzeba podłączyć do 5V z arduino, żeby móc kontrolować PWM'em, ale właściwie to ja nie wiem czy będę w ogóle kontrolować prędkość tych silników jak one pewnie przy 200 PWM'a będę się już ledwo toczyły.

5. Kamera i streamowanie obrazu:

Na początku miało być Rasberry Pi Zero W (z WiFi) do tego kamera USB i wykorzystanie MPJG Streamera, żeby przesłać obraz na lokalny serwer HTTP i stamtąd spróbować go przechwycić do swojej aplikacji Android -> https://forbot.pl/blog/jak-wykorzystac-raspberry-pi-do-budowy-robota-z-kamera-id10212

Ale jak już pisałem w tym temacie: KLIK natrafiłem na tą aplikację: DroidCam Wireless Webcam, która umożliwia streamowania obrazu z kamery telefonu na lokalny serwer HTTP również w formacie MJPG dokładnie jak ten pomysł z Rasberry Pi i dzięki temu nie kupiłem ostatecznie maliny z kamerą.

Tylko do streamowania obrazu korzystam z tej właśnie aplikacji: DroidCam Wireless Webcam oraz tego starego, małego telefonu: LG L3 II E430.

Ogólnie na początku miałem problem, żeby przechwycić obraz do swojej aplikacji, bo jest to format MPJG, który nie jest wspierany przez podstawowe komponenty androida, ale ostatecznie mi się udało napisać aplikację, która przechwytuje i wyświetla obraz na telefonie, i muszę powiedzieć, że dużych opóźnień nie ma, właściwie żadnych i nie klatkuje.

6. Zasilanie:

W podwoziu był koszyk na 5 baterii AA, ale z niego nie skorzystałem, bo w miejsce tego koszyka wstawiłem: Moduł z L298N żeby kable mi się nie plątały od silników. I teraz główne zasilanie stanowi bateria 9V, w podwoziu był TOGGLE SWITCH, który jest zamontowany z przodu pojazdu i który no wykorzystałem podłączając go z : baterią 9V, TOGGLE SWITCH

em oraz L298N przez co zarówno silniki jak i Arduino ma też z tego zasilanie.

Co prawda bateria 9V zasila poprzez L298N zarówno silniki jak i Arduino, ale gdy próbowałem przez Bluetooth'a wysłać jazdę na wprost lub w tył, czyli wtedy kiedy cztery silniki pracują, moduł Bluetooth rozłączał się, pewnie z uwagi na to, że bateria 9V nie dawała rady równocześnie zasilać Arduino i silników, dlatego na górnej platformie zamieściłem PowerBank Xiaomi, który kiedyś już miałem i to on zasila Arduino i teraz już jazda do przodu i w tył niestanowi problemu.

7. Czujniki:

Jak dotąd pojazd ma tylko jeden czujnik temperatury i wilgotności:

DHT11 , no bo musiałem mieć jakiś czujnik żeby móc napisać moduł aplikacji odpowiedzialny za poprawne przesyłanie danych z Arduino do telefonu przez Bluetooth, jak dotąd jest podłączony podobnie jak i moduł Bluetooth na płytce stykowej.

8. Wygląd (montaż itd.)

Wczoraj przyszło do mnie te podwozie: Pirate-4WD złożenie go zajęło z 45 minut/godzinę. I powiem Wam, że podoba mi się te podwozie z uwagi na to, że tak wszystko rozmieściłem, że jest w miarę estetycznie. Jak zobaczycie na zdjęciach: w dolnym pudlem są silniki z włącznikiem no i udało mi się upchać tam: Moduł z L298N. Po zamknięciu pudła dolną platformą, fajnie udało mi się zamieścić Arduino, były już wycięty dziury do niego, te wsporniki do montażu miały ciut za krótkie gwinty, ale udało mi się ostatecznie dokręcić nakrętki i się trzyma.

Płytkę prototypową też udało mi się w dość dobry sposób zamieścić, bo jest z przodu pojazdu na takiej podstawce, która była w tym podwoziu, przykleiłem ją taśmą piankową (trzyma bardzo mocno) no i jest. Baterię 9V upchałem też na tej dolnej platformie, z uwagi na to, że nie mam lutownicy, ani tego klip na baterię 9V, to przewody musiałem przyczepić gumkami recepturkami 😃 No i później jak już przyjdzie ten klip to no będzie tuż obok Arduino, żeby był do niej dostęp łatwy i łatwa wymiana.

No i została się górna platforma. Na niej zamieściłem PowerBank dokładniej z tyłu na górnej platformie waży trochę, ale taśma piankowa dała radę, przyczepił też tą taśmą piankową także telefon z tą kamerą do streamowania obrazu, trzyma się, no ale oczywiście jak przyjdzie Pan/Tilt to go na Pan/Tilta wsadzę 😃

9. Zdjęcia:

,,,

,,,,

10. Aplikacja:

Jak dotąd nie miałem tych wszystkich rzeczy jednocześnie, więc starałem się pisać jakby no aplikację tylko dla tego hardware'u co mam, modułami. Napisałem jedną aplikację, w której ogarnąłem już komunikację Bluetooth, pozwala ona na wysyłanie dowolnej wiadomości przez Bluetooth do Arduino i na odbieranie wiadomości z Arduino. Druga, którą napisałem to do obsługi kamery, tj. przechwycenia obrazu z serwera HTTP w formacie MJPG, to jak pisałem było najtrudniejsze, bo podstawowe komponenty Androida nie wspierają tego formatu i musiałem szukać bibliotek itd. ale się udało i ładnie łączy się z tym drugim telefonem przez WiFi i wyświetla obraz z kamery w aplikacji.

,

11. Plany na przyszłość (aplikacja/ czujniki):

Hardware:

→ Pan/Tilt do kamery

→ GPS

→ czujnik natężenia światła (fotorezystor), który zapali lampę IR przy telefonie (pewnie kupną) "gdy się ściemni"

→ 9DOF z barometrem

→ odczyt napięcia z baterii 9V i PowerBanku

→ zrobienie własnego shielda na Arduino, żeby to wszystko zamieścić, ale szczerze mówiąc nie wiem czy mi się będzie chciało dziś zamówiłem: Proto Shield dla Arduino i bardzo prawdopodobne, że po prostu to wszystko z płytki stykowej, przeniosę tam i polutuję co by było bardziej zorganizowane i bardziej estetycznie i tyle.

Dziś również zamówiłem trzy pierwsze rzeczy z tych: Pan/Tilt + serwa, GPS, fotorezystor

A 9DOF+Barometr, który upatrzyłem sobie: Waveshare IMU 10DoF, zamówię wtedy kiedy będę wiedział, że starczy mi pamięci na Arduino do jego obsługi.

Software:

Spytacie pewnie po co GPS pojazdowi, który ma zasięg 20 metrów? Albo po co dawać 9DOF'a. Odpowiedź jest prosta na mój kolejny projekt mam ochotę zrobić coś latającego i sądzę, że te dwa czujniki mi się do tego celu przydadzą, po drugie jak już pisałem skupiam się w tej mojej inżynierce, głównie na aplikacji (to moja działka), chce żeby naprawdę była dość rozbudowana i dlatego trochę ten pojazd, te czujniki itd. to taka "sztuka dla sztuki" po to właśnie żebym mógł napisać rozbudowaną aplikację. To pora na założenia aplikacji:

1 Ekran (główny):

→ U dołu obraz z kamery

→ Do góry wirtualny joystick (kółko z punkcikiem w środku), który da się przeciągać w dowolną stronę - sterowanie pojazdem (silnikami) -> Multitouch

→ Sterowanie Pan/Tiltem (serwami) poprzez pochylanie/przechylanie/przekręcanie telefonu czytaj, w którą stronę spojrzę ja, w tą stronę spojrzy kamera, czyli wykorzystanie akcelerometru z telefonu do sterowania serwami

→ Info o stanie baterii/power bank

→ Jeśli będzie 9 DOF i go zakupię to pokuszę się o przedstawienie tego na głównym lub innym ekranie w postaci no jak dla jednostek latających, będę miał Pitch/Yaw/Roll/Wysokość i prędkość z GPS'ami, więc będzie można. Albo na głównym tylko prędkość, wysokość, nachylenie terenu i tyle.

2 Ekran (po wybraniu opcji na action barze "GPS):

→ No wyświetlą się dane z GPS'u, w postaci położenia na mapach Google Maps

3 Ekran (prezentacja danych z czujników pogodowych):

→ Mam DHT11 temperaturę/wilgotność do tego dojdzie barometr mogę muszę to ładnie zaprezentować w podobny sposób jak w aplikacjach pogodowych

4 Ekran (ustawienia):

-> No wiadomo ustawienia jakie jednostki temperatury, prędkości silników/ serw, adres mac bluetooth itd.

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.