kunio.lol
Home
Studenci
Mama
Narzędzia
▼
Notatnik
Skróć link
Chmura
Twitch Miner
Studia
▼
Magisterskie
Semestr 1
▶
IoT: Lab 3
Inżynierskie
Semestr 7
▶
Oceny 7sem
Paczka
MiSSE: Lab1
MiSSE: Lab2
MiSSE: Lab3
MiSSE: Lab5
Semestr 3
▶
ISD: Filmy
EE: Filmy
AKiSO: Kalkulator
AKiSO: Lab 5
PT: Wejściówka
PT: Lab 6
Semestr 2
▶
OiS: Test 6
OiS: Test 12
Zaloguj
Notatnik
Wszystkie zmiany są zapisywane automatycznie...
3. Opis zrealizowanego układu Program oparty jest na głównej pętli While Loop, wykonywanej w sposób ciągły aż do naciśnięcia przycisku „Zatrzymanie X”. Logika działania zrealizowana jest w postaci maszyny stanów (struktura Case sterowana wartością typu Enum), co pozwala jednoznacznie rozróżnić pojedyncze klaśnięcie, podwójne klaśnięcie oraz dwa klaśnięcia wolne. Pamięć programu między kolejnymi obiegami pętli zapewniają trzy rejestry przesuwne (shift registers): • Rejestr 1 – stan programu (Enum): „Czekaj na 1 klaśnięcie”, „Czas martwy”, „Czekaj na 2 klaśnięcie”, „Czas martwy 2”. Wartość początkowa: „Czekaj na 1 klaśnięcie”. • Rejestr 2 – czas znacznika (liczba): zapamiętany czas z zegara systemowego (Tick Count w ms), względem którego mierzone są odstępy. Wartość początkowa: 0. • Rejestr 3 – stan diody (Boolean): wartość początkowa False, czyli na starcie dioda jest zgaszona. Rys. 2. Schemat blokowy programu – akwizycja sygnału i detekcja progu. (wstaw zrzut) 3.1. Akwizycja i ocena głośności dźwięku Sygnał z mikrofonu pobierany jest w czasie rzeczywistym przez moduł DAQ Assistant (Analog Input, Voltage). Ustawienia akwizycji: tryb Continuous Samples, częstotliwość próbkowania 10 kHz, 100 próbek na odczyt. Oznacza to, że jeden obieg pętli trwa około 10 ms. Dzięki temu program reaguje wystarczająco szybko, aby mierzyć odstępy czasu rzędu setek milisekund. Tryb ciągły eliminuje utratę próbek pomiędzy odczytami, która występowałaby przy cyklicznym uruchamianiu i zatrzymywaniu zadania. Rys. 3. Okno konfiguracyjne modułu DAQ Assistant. (wstaw zrzut) Następnie blok Amplitude and Level Measurements wyznacza z każdego bloku próbek wartość szczytową dodatnią (Positive Peak). Zmierzona wartość jest porównywana (komparator „Greater?”) z progiem ustawionym na suwaku Slide. Jeśli amplituda przekracza próg, komparator zwraca True, co oznacza „wykryto klaśnięcie w tym obiegu pętli”. Na zarejestrowanym przebiegu klaśnięcia mają amplitudę ok. 60–150 mV, a szum poniżej 5 mV, dlatego próg ustawiono na około 0,03–0,04 V. W pętli znajduje się także blok Tick Count (ms) dostarczający aktualny czas systemowy oraz Wait (ms) o wartości 10. 3.2. Maszyna stanów – wykrywanie klaśnięć Wybór aktywnego przypadku struktury Case zależy od Rejestru 1. Każdy stan opisano poniżej. Stan 1: „Czekaj na 1 klaśnięcie”. Program nasłuchuje. Jeżeli sygnał z komparatora jest True, to stan zmienia się na „Czas martwy”, a do Rejestru 2 zapisywany jest aktualny Tick Count. W przeciwnym razie stan i znacznik czasu pozostają bez zmian. Realizują to dwa bloki Select sterowane sygnałem klaśnięcia. Stan 2: „Czas martwy”. Przez 120 ms program ignoruje sygnał z mikrofonu. Klaśnięcie powoduje echo i drgania sygnału trwające krótką chwilę, więc bez tego stanu jedno klaśnięcie zostałoby zliczone wielokrotnie. Gdy różnica (Tick Count − znacznik) przekroczy 120 ms, następuje przejście do stanu „Czekaj na 2 klaśnięcie”. Do tego czasu stan pozostaje bez zmian. Stan 3: „Czekaj na 2 klaśnięcie”. Jest to okno czasowe do 600 ms od pierwszego klaśnięcia. Wewnątrz zagnieżdżona jest druga struktura Case, sterowana sygnałem klaśnięcia: • Przypadek True (usłyszano 2 klaśnięcie): jest to podwójne klaśnięcie. Dioda zostaje zgaszona (False), znacznik czasu aktualizowany jest do bieżącego Tick Count, a stan zmienia się na „Czas martwy 2”. • Przypadek False (jest cicho): program sprawdza, czy minęło 600 ms (komparator porównujący różnicę czasu z wartością 600). Jeśli tak, było to tylko pojedyncze klaśnięcie, więc dioda zostaje zapalona (True), a stan wraca do „Czekaj na 1 klaśnięcie”. Jeśli nie, stan pozostaje „Czekaj na 2 klaśnięcie”. Stan 4: „Czas martwy 2”. Po podwójnym klaśnięciu program przez 120 ms ignoruje echo drugiego klaśnięcia. Następnie wraca do stanu „Czekaj na 1 klaśnięcie”. Rys. 4–7. Przypadki struktury Case: „Czekaj na 1 klaśnięcie”, „Czas martwy”, „Czekaj na 2 klaśnięcie” (True i False), „Czas martwy 2”. (wstaw zrzuty) 3.3. Rozróżnienie klaśnięcia szybkiego i wolnego Kluczowe jest okno 600 ms w stanie 3: • Dwa szybkie klaśnięcia (odstęp krótszy niż 600 ms): drugie klaśnięcie pojawia się, gdy program jest jeszcze w stanie „Czekaj na 2 klaśnięcie”. Dioda gaśnie. • Dwa wolne klaśnięcia (odstęp dłuższy niż 600 ms): po upływie 600 ms program zapala diodę i wraca do stanu 1. Drugie klaśnięcie jest wtedy traktowane jako nowe pierwsze klaśnięcie. Dioda pozostaje zapalona, co jest zgodne z założeniem. • Jedno klaśnięcie: dioda zapala się z opóźnieniem około 0,6 s, ponieważ program musi odczekać, czy nie nadejdzie drugie klaśnięcie. Jest to cecha wynikająca z samej idei wykrywania podwójnego klaśnięcia. 3.4. Sterowanie diodą Stan diody (Rejestr 3) przekazywany jest na wskaźnik Boolean na panelu czołowym. Opcjonalnie sygnał ten można wyprowadzić na fizyczną diodę LED za pomocą drugiego bloku DAQ Assistant (Digital Output, np. port0/line0). Dioda łączona jest szeregowo z rezystorem ok. 330 Ω do wyjścia cyfrowego karty i masy.