filtr pasmowoprzepustowy na arduino

0 głosów
61 wizyt
pytanie zadane 13 czerwca 2017 przez użytkownika wierzba (9)
edycja 14 czerwca 2017 przez użytkownika wierzba

Witam.

Mam parę pytań odnośnie arduino.

1. Czy ktoś z was próbował zrobić filtr pasmowoprzepustowy na arduino? Pierwsza moja koncepcja tego wygląda tak: W krótkofalówce do głośnika lutuje 2 przewody. Jeden przewód podłączam do wejścia analogowego w arduino drugi do masy. Na arduino wgrywam program odpowiedzialny za filtracje (program ma za zadanie wykrycie odpowiedniej częstotliwości (np 5kHz) i jeżeli taką zarejestruje podaje stan wysoki (bliżej nie określony czasowo impuls) na pin cyfrowy). Na wyjścia cyfrowe wpinam drugie arduino. Druga krótkofalówka nadaje jakieś bliżej nie określone dźwięki a ja czekam kiedy drugie arduino wykryje ten impuls z pierwszego arduino i wykona odpowiednie procedury. Ogólnie rzecz ujmując chodzi mi o zrobienie zdalnego, kilkukanałowego sterowania arduino przez krótkofalówki.

Jest to w ogóle możliwe? A jeśli tak to z jakich rozwiązań korzystać podczas pisania programu na to pierwsze arduino aby go nie zwolnic za bardzo i żeby jego praca była płynna?

2. Jaki najkrótszy impuls może wykryć arduino?

2 odpowiedzi

0 głosów
odpowiedź 19 czerwca 2017 przez użytkownika hamer_ (447)
procek ma 16Mhz to napewno nie krótszy wejście cyfrowe i komenda pulseIn  np. czas1 = pulseIn(ch1,HIGH); gdzie ch1 odpowiada danemu pinowi a czas1 to nasza zmienna
komentarz 29 czerwca 2017 przez użytkownika wierzba (9)
"procek ma 16Mhz to napewno nie krótszy" - to to na pewno. Trzeba wziąć pod uwagę ile operacji musi wykonać procesor żeby zrobić jeden mały pomiar.

Co do funkcji pulseIn. Trochę skrytykowałem ten pomysł w komentarzu poniżej, jednak po dłuższym zastanowieniu muszę przyznać, że może być ona bardzo przydatna, lub nawet być trzonem całego programu. Wszystko jednak zależy od tego jaka jest transmitancja (tak to się chyba nazywa - stosunek sygnału wejściowego do sygnału wyjściowego) układu dwóch połączonych ze sobą krótkofalówek. Dzięki za podpowiedź.
0 głosów
odpowiedź 20 czerwca 2017 przez użytkownika Tomaszr (41)
Czy możesz wskazać taki kod na Arduino, który jest takim filtrem, o którym piszesz. Kod, który wykrywa daną częstotliwość.
komentarz 20 czerwca 2017 przez użytkownika wierzba (9)
Bardzo słabo znam biblioteki arduino, a jeszcze słabiej funkcje w nich zawarte, wiec raczej próbował bym samemu taki kod napisać. Funkcja pulseIn jest ok w przypadku gdy w danym czasie mamy tylko jeden sygnał o danej częstotliwości przebieg jest podobny do prostokąta (np: przez 1 ms podaje 10kHz, przez kolejna 1ms podaje 20kHz), jednak przy takim rozwiązaniu nie potrzebuje funkcji pulseIn, gdyż mogę to zrobić w formie przedziałów czasowych. Polegało by to na tym, że wysłał bym sygnał synchronizacyjny miedzy krótkofalówkami, a następnie co każdą np 1 ms wysyłał bym 0 lub 1. Arduino przyporządkowało by odpowiednie stany wysokie/niskie do zmiennych, bo wiedziało by kiedy jakiego sygnału ma się spodziewać. To rozwiązanie wcale nie jest złe, jednak przy wymianie większej ilości danych staje się powolne i nie wszędzie można by było to zastosować. Skłaniał bym się do czegoś w stylu "zupy z częstotliwości". Krótkofalówka nr 1 wyśle kilka sygnałów nałożonych na siebie (mamy nałożone sygnały, każdy o innej częstotliwości, wiec wysyłamy więcej danych w tym samym czasie). Krótkofalówka nr 2 odbiera i podaje do arduino. No i tutaj chyba potrzebne by było coś co można nazwać mapą częstotliwości (w tablicy były by zapisane czasy pomiędzy stanami wysokimi/niskimi). Arduino by przez jakis czas analizowało sygnał wejściowy i porównywało z tablica.
komentarz 20 czerwca 2017 przez użytkownika Tomaszr (41)
Spróbowałbym skorzystać z tego przykładu:
https://www.arduino.cc/en/Tutorial/SimpleAudioFrequencyMeter
komentarz 20 czerwca 2017 przez użytkownika Tomaszr (41)
Wiele częstotliwości na raz wymaga analizy FFT. Z tego co widziałem do tego też są biblioteki na Arduino. Zapewniam, że łatwiej użyć bibliotekę niż napisać analizę fouriera od 0.

Pierwszy wariant z pojedynczym częstotliwościami łatwiejszy do realizacji. Tam możesz również użyć wielu częstotliwości dla różnych wartości, np od 1 do 16. A po temu łączyć to w paczki danych 8 bitowych. Pamiętać jednak należy, że krótkofalówka ma dość wąskie pasmo przenoszonych częstotliwości, do tego dochodzą zniekształcenia, szumy. Nigdy nie będzie to czysty sygnał. Warto poeksperymentować.
komentarz 20 czerwca 2017 przez użytkownika Tomaszr (41)
Dlaczego upierasz się na krótkofalówki skoro są gotowe, sprawdzone moduły do takiej komunikacji radiowej, z korekcją błędów, które są szeroko opisywane i działają z Arduino.
komentarz 29 czerwca 2017 przez użytkownika wierzba (9)
Tak. Są gotowe moduły radiowe do arduino, ale zakładając ten temat jeszcze o tym nie wiedziałem. Juz mam taki jeden moduł. Mam tylko problem z wgraniem bootloadera na Atmege 328 i czekam aż będę miał takie z już wgranym. Mimo wszystko temat uważam za dosyć ciekawy i warty przeprowadzenia eksperymentów, które może kiedyś przeprowadzę, jeśli będę miał wolny czas i lepszy dostęp do oscyloskopu. Dzięki za odpowiedzi i poświęcony czas.
...