Witam! Z powodu braku wiedzy na temat bazprzewodowych pomiarów chciałbym zapytać się doświadczonych kolegów w jaki sposób oraz przy względnie niskich kosztach wykonać projekt zdalnego/bezprzewodowego pomiaru różnych parametrów i wielkości fizycznych w pojeździe , a dokładniej w gokardzie napędzanym silnikiem DC. Chciałbym wykonać projekt takiego czegoś bo jest to dość interesujące i mogłoby być dla mnie dobrym tematyem na prace dyplomową. Pomiary miałby dotyczyć np. prędkości , zużycia i stanu naładowania akumulatora, momentu silnika itp. Rzecz tylko w tym , że nie wiem jak się za to zabrać i jakie rozwiązanie byłoby najlepsze. Czytałem już na forum o: modułach GSM/GPRS , o radiomodułach FM, ale nie wiem co lepsze , a resztą chciałbym się dowiedzieć czy oprócz samego kupna gotowych modułów(zwłaszcza GSM- dość drogi) dałbym radę zrobić to przy wykorzystaniu samych nadajników/odbiorników GSM lub FM wraz z połączeniem mikrokontrolera do nich. Projekt zakłada pomiar i wizualizacje na komputerze PC wszystkich parametrów w czasie rzeczywistym(z niewielkim opóźnieniem) oraz to żeby móc odczytywać pomiary z odległości około 200-300m . Nie znalazłem nic podobnego w archiwalnych postach , dlatego też proszę o jakieś wskazówki i porady, może literaturę w jaki sposów mógłbym coś takiego wykonać.
Ma to być układ jednostronny?
tzn. gokart ma tylko nadawać raport o stanie czy jeszcze coś odbierać?
Jeśli tylko jednostronne na odległość zaledwie 300metrów to GSM jest zbędny, drogi i wykonanie sterowników do modułów GSM jest trochę pracochłonne.
Układ jednostronny jest w zasadzie prosty.
W gokardzie stosujesz np. Atmegę32 (z racji ilości pinów) podpinasz sobie np. czujnik prądu, pomiar napięć, temperaturę, liczysz impulsy z koła (prędkość) i co tam jeszcze chcesz. Potem "gotowe" dane formujesz w paczkę i wysyłasz przez UART linią TX. Do linii TX podpinasz prosty nadajnik na 433,92MHz (gotowe moduły dostępne na allegro) tylko jakąś wersję silniejszą i podpinasz prawdziwą antenę stworzoną na 433,92MHz (nie kawałek drutu...)
Przy kompie stosujesz odbiornik na 433,92MHz i przejściówkę USB/UART TTL 5V.
Moduły odbiornika też dostępne na allegro.
Odbiornik oczywiście podpinasz pod linię RX przejściówki.
Program na kompa trzeba napisać tak aby dosłownie filtrował ewentualne śmieci które odbiornik będzie łapał pomiędzy kolejnymi paczkami danych a czasem nawet w trakcie.
Odebrane dane sobie dekodujesz i wyświetlasz jak chcesz.
Najważniejsze jest aby ładnie zrobić paczkę w nadajniku i prawidłowo wykonać programowy filtr w PC bo będzie wyświetlać głupoty.
Ja stosuję podobne rozwiązanie i działa świetnie.
Wadą jest to, że nie uzyskuje się jakiś super prędkości - w moim przypadku jest to max 1200bps ale generalnie jest to w zupełności wystarczające.
Dzięki za odpowiedzi !
Mam pytanie do kolegi dec1234 odnośnie owej prędkości przesyłu danych 1200bps tzn. jakie rzeczywiste/realne opóźnienie może wystąpić , bo nie orientuję się czy dla takich pomiarów które chce przeprowadzić to duża czy mała prędkość?? Oczywiście układ ma być jednostronny . Dwustronny to raczej już wyższy poziom i możliwość wystąpienia konfliktów na trasie transmisji danych. Na razie chce się zająć raczej prostszą wersją ,choć jestem jeszcze nieobeznany w temacie , w zasadzie to dopiero zaczynam(ewentualnie to jeszcze fajnie by było zrobić komunikację głosową z kierowcą samochodu,ale to kiedy indziej może ).
I miałbym prośbę do dec1234: Czy kolega ma może jakiś przykładowy projekt/program czy realizację takiej telemetrii , bo napewno byłoby mi łatwiej gdybym prześledził rozwiązanie programowe bo te tworzenie "paczek" UART jakimiś liniami,tworzenie przejściówek czy też filtrów to nieznane mi rzeczy- byłbym wdzięczny za coś takiego.
I jeszcze jedno pytanie : Czy mając nadajnik /odbiornik na 433,92MHz może się zdarzyć sytuacja, że podczas jazdy kierowca oddali się dalej niż 300 metrów nap. na 2 x tyle =600 m to czy transmisja może zostać w jakiś sposób przerwana , albo czy pomiary będą sfałszowane lub utracone. Czy może jednak da radę wytrzymać większe odległości ??
Mam pytanie do kolegi dec1234 odnośnie owej prędkości przesyłu danych 1200bps tzn. jakie rzeczywiste/realne opóźnienie może wystąpić
To zależy ile danych i w jakiej formie będziesz chciał wysłać. Przyjmijmy prędkość 1200bps za umowną. Skrót "bps" to bit per second czyli bity na sekundę.
Jeden znak z tabeli ASCI jest zakodowany w 8 bitach + bit parzystości + 2 bity stopu. Czyli chcąc wysłać jakiś znak np. literę "A" wysyłamy 11 bitów. Czyli w przybliżeniu 1200 / 11 = 109 znaków na 1 sekundę.
Quote:
ewentualnie to jeszcze fajnie by było zrobić komunikację głosową z kierowcą samochodu,ale to kiedy indziej może Smile
To jest najprostsze co może z tego wszystkiego być bo wystarczą dwie krótkofalówki PMR i zestaw słuchawkowy dla kierowcy. Zasięg nawet kilka Km
Quote:
I miałbym prośbę do dec1234: Czy kolega ma może jakiś przykładowy projekt/program czy realizację takiej telemetrii , bo napewno byłoby mi łatwiej gdybym prześledził rozwiązanie programowe bo te tworzenie "paczek" UART jakimiś liniami,tworzenie przejściówek czy też filtrów to nieznane mi rzeczy- byłbym wdzięczny za coś takiego.
Schematów połączeń modułów nad/odb na 433,92 MHz jest sporo w internecie po za tym ich podłączenie jest proste jak budowa młotka. Prawie wszystkie moduły mają piny plus, minus, sygnał (data). Jeśli chodzi o program to nie wiem w jakim języku programujesz uC ani na PC. Mojego projektu nie ma sensu zamieszczać bo program na PC jest niedopracowany troszku jeśli chodzi o pracę z przejściówkami USB a nadajnik Atmega realizuje dość skomplikowany program w urządzeniu pomiarowym.
Jeśli chodzi o paczkowanie----filtrowanie----wyświetlanie to ja to robię tak:
Zbieram dane z 6 czujników ADC. Przy czym w moim przypadku są to zawsze liczby 3 cyfrowe od 100-999 (ADC może dać wynik od 0-1023)
Dla uproszczenia dla twoich potrzeb zrobimy tak, że dane wysyłane będą dane tylko z czujników bez obliczeń żeby atmegi nie zawalać robotą - niech to zrobi PC.
Robimy sobie paczkę danych która musi zawierać jakiś znak lub ciąg startowy tzn. żeby program wiedział w którym dokładnie miejscu zaczyna się paczka danych. Powiedzmy, że naszym ciągiem startowym będzie "@#$" za ciągiem ustawiamy kolejno dane z czujników jakie mamy np. 156,233,659,588,792,546.
Na koniec używamy jakiegoś znaku zakończenia paczki może to być enter albo dowolny inny znak który nie jest żadnym ze znaków startu paczki. Weźmy sobie znak "&"
Czyli paczka będzie wyglądała w prostym przypadku tak "@#$156233659588792546&" czyli 22 znaki po 11 bitów to daje 242bity które zostaną w przybliżeniu wysłane w ciągu około 210ms (jeśli dobrze policzyłem).
I tutaj mamy do czynienia ze stałym rozmiarem paczki.
Jeśli chciał byś wysłać pełny zakres ADC to liczy będą od jedno cyfrowej do czterocyfrowych. Wtedy trzeba ciąg startowy, liczby i zakończenie rozdzielić np. przecinkami. Np. @#$,3,55,1005,334,278,9,& wtedy taka paczka może zawierać od 10 do nawet 28 znaków co przekłada się za zmienny czas przesyłu - opóźnienie. Dodatkowo trzeba program napisać tak żeby wiedział, że między przecinkami znajdują dane które mogą mieć 1-4 liczb.
Ale to komplikuje trochu program.
Dlatego narazie polegamy na paczce która ma stałą wielkość.
Odbieramy dane które zostaną odebrane prawie na pewno ze śmieciami przed paczką i po paczce załóżmy: "vv43vvv356jsdhjjjj@#$156233659588792546&fgbhdfhbjdrrr6599"
Program odbiorczy musi mieć uruchomiony bufor (taki zbiornik na dane).
Do bufora zostanie załadowane śmietnik + paczka danych + śmietnik.
Program piszemy tak aby brał z bufora znak po znaku i porównywał.
Jeśli znajdzie znak @ to niech sprawdzi czy kolejne znaki to # oraz $ jeśli tak to niech kolejne 18 znaków zapisze do jakiejś zmiennej w programie. Na koniec niech sprawdzi czy 19 znak to &. Jeśli tak jest to potwierdzenie, że paczka nie ma w sobie dodatkowych śmieci. Jeśli znak 19 nie będzie & to odrzucamy paczkę.
Teraz sobie bierzemy tą zmienną zawierającą 18 liczb i rozkładamy na potrójne liczby. Wiemy że pierwsze 3 liczby pochodzą z pierwszego ADC kolejne 3 liczby z drugiego ADC itd. Zapisujemy do zmiennych i robimy z nimi co chcemy dalej w programie.
To tak w uproszczeniu
Quote:
Czy mając nadajnik /odbiornik na 433,92MHz może się zdarzyć sytuacja, że podczas jazdy kierowca oddali się dalej niż 300 metrów nap. na 2 x tyle =600 m to czy transmisja może zostać w jakiś sposób przerwana , albo czy pomiary będą sfałszowane lub utracone. Czy może jednak da radę wytrzymać większe odległości ??
Transmisja może zostać przerwana w przypadku gdy zastosujesz słaby nadajnik i paskudną antenę nadawczą i odbiorczą oraz odbiornik kiepskiej jakości.
Zakłócenia mogą pochodzić od np. pilotów od alarmów aut lub innego zdalnego sterowania. Dlatego stosujemy filtr programowy który musi być aby odfiltrować naszą paczkę od śmietnika który zbiera odbiornik.
Na płaskim terenie w przypadku gdy anteny w zasadzie się "widzą" to zasięg przy lepszych nadajnikach może wynieść nawet 1-2km.
Przed rozpoczęciem projektu radzę sobie poczytać o komunikacji UART/RS232 i potrenować na biurku.