Spisu treści:
- Krok 1: Zestawienie materiałów
- Krok 2: Narzędzia/Maszyny/Wymagania dotyczące oprogramowania
- Krok 3: Sprzęt Telltale
- Krok 4: Oprogramowanie Telltale
- Krok 5: Montaż Telltale
- Krok 6: Sprzęt głośnikowy
- Krok 7: Oprogramowanie głośnika
- Krok 8: Montaż głośnika
- Krok 9: Konfiguracja/Montaż
- Krok 10: Rozwiązywanie problemów
- Krok 11: Możliwe następne kroki
Wideo: Sygnały dźwiękowe do żeglowania: 11 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:30
Telltales to kawałki sznurka używane w żeglarstwie, które wskazują, czy na żaglu występuje przepływ turbulentny czy laminarny. Jednak różnokolorowe kawałki przędzy przymocowane do każdej strony żagla są czysto wizualnymi wskaźnikami. Te słyszalne wskaźniki są urządzeniem pomocniczym, które ma na celu przekazywanie informacji wizualnych w formie słuchowej zarówno dla żeglarzy widzących, jak i niedowidzących, takich jak Pauline.
Urządzenie składa się z systemu wejściowego, który odczytuje ruch wskaźnika, oraz systemu wyjściowego, który emituje serię sygnałów dźwiękowych przekazujących informacje o przepływie powietrza.
Do wykonania tego urządzenia wymagany jest dostęp do sprzętu lutowniczego i drukarki 3D.
Krok 1: Zestawienie materiałów
BOM z linkami i cenami
Uwaga: będziesz potrzebować 2 zestawów wszystkich poniższych.
System wejściowy
- Arduino Nano
- Adafruit perma-proto połówkowa płytka stykowa PCB
- Bezprzewodowy moduł nadawczo-odbiorczy nRF24L01
- Przerywacz zdjęć
- Sparkfun Photo Interrupter Breakout Board
- Akumulator 9V kompatybilny z Arduino
- Bateria 9V
- Kilka długości drutu 22 Gauge
- Przędza
- Magnesy neodymowe
- epoksydowe
System wyjściowy
- Arduino Nano
- Adafruit perma-proto połówkowa płytka stykowa PCB
- Bezprzewodowy moduł nadawczo-odbiorczy nRF24L01
- Akumulator 9V kompatybilny z Arduino
- Potencjometr 1K Ohm
- Rezystor 120 Ohm
- Tranzystor 2N3904
- Kondensator 0,1 uF
- Głośnik kompatybilny z Arduino
Pliki GitHub
- Cały kod i pliki STL potrzebne do skonstruowania tych wskaźników można znaleźć w tym repozytorium GitHub.
- Potrzebne będą dwa zestawy obudów i jeden z obudów głośników.
Krok 2: Narzędzia/Maszyny/Wymagania dotyczące oprogramowania
Aby zaprogramować Arduino, musisz pobrać Arduino IDE. Link do pobrania można znaleźć tutaj.
Aby zaprogramować moduł nRF24L01, musisz pobrać jego bibliotekę przez Arduino IDE. Narzędzia > Zarządzaj bibliotekami… > zainstaluj bibliotekę RF24
Do montażu elementów elektronicznych wymagany jest dostęp do podstawowych narzędzi lutowniczych. Przydatna może być również pompa rozlutowująca, ale nie jest to konieczne.
Aby skonstruować ramkę ostrzegawczą i obudowę głośnika, potrzebujesz dostępu do drukarki 3D.
Krok 3: Sprzęt Telltale
Zmontuj obwód zgodnie z powyższymi schematami. Arduino Nano powinien być wyrównany z górną częścią płyty prototypowej. Dzięki temu masz dostęp do portu USB nawet po podłączeniu całej elektroniki.
Aby uniknąć zwarcia elektroniki, upewnij się, że wycięto ślady płyty prototypowej w rzędach, które zajmie nRF24, jak pokazano na powyższym obrazku.
W przeciwnym razie będziesz potrzebować kabli połączeniowych, aby podłączyć nRF24 do płyty prototypowej.
Połączenie rezystora, GND i przewody 5V do fotoprzerywacza nie są pokazane. Podłącz fotoprzerywacz, jak wskazano na jego tablicy zaciskowej. Dołączono obraz tablicy sygnalizacyjnej.
Obwody wskaźników kontrolnych prawego i lewego są dokładnie takie same.
Krok 4: Oprogramowanie Telltale
Oto kod wskaźnika właściwego. Podłącz nano wskaźnik Right telltale do komputera, otwórz Arduino IDE, skopiuj i wklej do niego ten kod i prześlij go na płytkę.
/** Program wykorzystujący fotokomórkę do badania wskaźnika ostrzegawczego
*/ #include #include #include #include RF24 radio(9, 10); // CE, stały adres bajtowy CSN[6] = "00010"; //---program consts--- //time const int string_check_time = 1; const int flow_check_time = 30; const int base_delay = 5; const int flow_check_delay = 0; const int GATE_PIN = 6; const int GATE_PIN_2 = 7; const int max_when_testing = flow_check_time * 0.6; //ustaw powyższą zmienną na podstawie własnych prób eksperymentalnych const int max_in_flow = min(max_when_testing, int(flow_check_time/string_check_time)); const int msg_max_val = 9; //const int string_thresh = 20; #define STRING_THRESH 0.2 //---program vars--- int num_string_seen = 0; int liczba_pętli = 0; void setup() { //while(!Serial); // dla flory //delay(500); liczba_widocznych_łańcuchów = 0; liczba_pętli = 0; pinMode(BRAMKA_PIN, WEJŚCIE); pinMode(BRAMKA_PIN_2, WEJŚCIE); Serial.początek(115200); // do debugowania radio.begin(); radio.openWritingPipe(adres); radio.setPALevel(RF24_PA_MIN); radio.stopSłuchanie(); } void loop() { //wstaw tutaj swój główny kod, aby działał wielokrotnie: if(num_loops % string_check_time == 0){ //sprawdź stan ciągu check_string(); } if(num_loops == flow_check_time){ //zbadaj przepływ //Serial.println(num_string_seen); int numer_przepływu = badanie_przepływu(); //wyślij wartości send_out(flow_num); //resetuj vars num_string_seen = 0; liczba_pętli = 0; opóźnienie(flow_check_delay); } liczba_pętli++; opóźnienie(baza_opóźnienia); } /* *Sposób sprawdzenia, czy ciąg przekracza bramkę */ void check_string(){ int string_state = digitalRead(GATE_PIN); //Serial.println(string_state); if (string_state == 0){ num_string_seen++; //Serial.println("Piła łańcuch!"); }
int bot_state = digitalRead(GATE_PIN_2);
if (stan_bota == 0){ num_string_seen--; //Serial.println("ciąg na dole!"); } //Serial.print("Liczenie ciągów ciągów: "); //Serial.println(num_string_seen); powrót; } /* * Metoda analizy, jaki ułamek czasu ciąg znaków pokrył bramkę */ int exam_flow(){ double percent_seen = double(num_string_seen)/max_in_flow; Serial.print("Procent pokrycia: "); printDouble(percent_seen, 100); //skaluj wartość do skali komunikacji int scaled_flow = int(percent_seen * msg_max_val); if(skalowany_przepływ > msg_max_val){ skalowany_flow = msg_max_val; } if(scaled_flow = 0) frac = (val - int(val)) * precyzja; w przeciwnym razie frac = (int(val)- val) * precyzja; Serial.println(frac, DEC); }
Oto kod lewego wskaźnika ostrzegawczego. Wykonaj te same czynności, co powyżej dla lewego wskaźnika ostrzegawczego. Jak widać, jedyną różnicą jest adres, na który wskaźnik wysyła swoje wyniki.
/** Program wykorzystujący fotokomórkę do badania wskaźnika ostrzegawczego
*/ #include #include #include #include RF24 radio(9, 10); // CE, stały adres bajtowy CSN[6] = "00001"; //---program consts--- //time const int string_check_time = 1; const int flow_check_time = 30; const int base_delay = 5; const int flow_check_delay = 0; const int GATE_PIN = 6; const int GATE_PIN_2 = 7; const int max_when_testing = flow_check_time * 0.6; //ustaw powyższą zmienną na podstawie własnych prób eksperymentalnych const int max_in_flow = min(max_when_testing, int(flow_check_time/string_check_time)); const int msg_max_val = 9; //const int string_thresh = 20; #define STRING_THRESH 0.2 //---program vars--- int num_string_seen = 0; int liczba_pętli = 0; void setup() { //while(!Serial); // dla flory //delay(500); liczba_widocznych_łańcuchów = 0; liczba_pętli = 0;
pinMode(BRAMKA_PIN, WEJŚCIE);
pinMode(BRAMKA_PIN_2, WEJŚCIE); Serial.początek(115200); // do debugowania radio.begin(); radio.openWritingPipe(adres); radio.setPALevel(RF24_PA_MIN); radio.stopSłuchanie(); }void loop() { // wstaw tutaj swój główny kod, aby działał wielokrotnie: if(num_loops % string_check_time == 0){ //sprawdź stan ciągu check_string(); } if(num_loops == flow_check_time){ //zbadaj przepływ //Serial.println(num_string_seen); int numer_przepływu = badanie_przepływu(); //wyślij wartości send_out(flow_num); //resetuj vars num_string_seen = 0; liczba_pętli = 0; opóźnienie(flow_check_delay); } liczba_pętli++; opóźnienie(baza_opóźnienia); } /* *Sposób sprawdzenia, czy ciąg przekracza bramkę */ void check_string(){ int string_state = digitalRead(GATE_PIN); //Serial.println(string_state); if (string_state == 0){ num_string_seen++; //Serial.println("Piła łańcuch!"); }
int bot_state = digitalRead(GATE_PIN_2);
if (stan_bota == 0){ num_string_seen--; //Serial.println("ciąg na dole!"); } //Serial.print("Liczenie ciągów ciągów: "); //Serial.println(num_string_seen); powrót; } /* * Metoda analizy, jaki ułamek czasu pokrył bramkę string */ int exam_flow(){ double percent_seen = double(num_string_seen)/max_in_flow; Serial.print("Procent pokrycia: "); printDouble(percent_seen, 100); //skaluj wartość do skali komunikacji int scaled_flow = int(percent_seen * msg_max_val); if(skalowany_przepływ > msg_max_val){ skalowany_flow = msg_max_val; } if(scaled_flow = 0) frac = (val - int(val)) * precyzja; w przeciwnym razie frac = (int(val)- val) * precyzja; Serial.println(frac, DEC); }
Krok 5: Montaż Telltale
Poszczególne części
- Ramka Telltale
- Przędza
- Zbudowany obwód ostrzegawczy
- Paczka baterii
- Taśma elektryczna
- Epoksyd lub klej
STL do drukowania 3D charakterystycznych komponentów
- STL dla ramki ostrzegawczej: lewy, prawy
- STL do skrzynki na elektronikę: góra, dół
Instrukcje składania
- Umieść magnesy sztabkowe w szczelinach drukowanej w 3D ramki ostrzegawczej. Upewnij się, że magnesy są prawidłowo ułożone między prawą ramą a lewą ramą, a następnie użyj żywicy epoksydowej (lub kleju), aby przymocować magnesy do ramy. Pozostaw żywicę epoksydową (lub klej) do całkowitego związania.
- Umieść przerywacze zdjęć w górnej i dolnej szczelinie z tyłu ramki. Ostrożnie zaimpregnuj (lub przyklej) płyty przerywacza zdjęć do ramy. Poczekaj, aż żywica epoksydowa (lub klej) całkowicie zwiąże
- Wytnij ~7 kawałka włóczki. Zawiąż jeden koniec przędzy w nacięciu pierwszego pionowego paska. Odetnij mały kawałek taśmy elektrycznej i owiń taśmą elektryczną odcinek przędzy, który będzie w obszarze fotoprzerywaczy. Przeciągnij przędzę przez ramkę, tak aby przechodziła przez szczelinę bramki przerywacza zdjęć.
- Umieść magnesy sztabkowe w szczelinach dna pudełka z elektroniką wydrukowaną w 3D. Upewnij się, że magnesy są prawidłowo ułożone między prawym pudełkiem a lewym pudełkiem, a następnie użyj żywicy epoksydowej (lub kleju), aby przymocować magnesy do ramy. Pozostaw żywicę epoksydową (lub klej) do całkowitego związania.
- Umieść skonstruowany obwód kontrolny w pudełku z elektroniką, dopasowując różne komponenty do ich gniazd. Zamknij pudełko za pomocą wydrukowanego w 3D blatu z elektroniką. Epoksydową (lub przyklejoną) baterię do górnej części pudełka tak, aby przełącznik był odsłonięty.
Krok 6: Sprzęt głośnikowy
System wyjściowy składa się z dwóch obwodów głośnikowych, po jednym dla każdego wskaźnika, wyposażonych w komunikację bezprzewodową i pokrętło regulacji głośności. Najpierw przygotuj płyty prototypowe do użycia z modułami nRF24L01, tak jak zrobiliśmy to w przypadku obwodów ostrzegawczych, przecinając przewody oddzielające dwa rzędy pinów, w których zostanie umieszczona płytka.
Następnie zmontuj obwód, jak pokazano na powyższym schemacie, odwołując się do zdjęć wykonanych obwodów.
Instrukcja montażu płyty
Aby ułożyć płytki w obudowie głośnika, główne elementy muszą być umieszczone w określonych obszarach płytki. W poniższych instrukcjach będę odnosić się do układu współrzędnych używanego do oznaczania wierszy i kolumn na płycie prototypowej Adafruit:
- Arduino Nano musi być umieszczone na środku górnej krawędzi płytki tak, aby pin Vin znajdował się w pozycji G16. Umożliwi to łatwe przeprogramowanie Arduino Nano po zmontowaniu obwodu.
- Płytka nRF24L01 musi być umieszczona w prawym dolnym rogu planszy w ośmiu pozycjach od C1 do D5. Dzięki temu nRF24L01 będzie zwisał z płyty prototypowej, aby umożliwić lepszą komunikację bezprzewodową.
- Akumulator do systemu głośnikowego zasila obie płyty prototypowe, więc upewnij się, że podłączyłeś dwie szyny/piny GND Arduino Nano i piny Vin do zasilacza.
-
W przypadku obwodu „dolnego” potencjometr należy umieścić na górze płytki skierowanej na zewnątrz, tak aby jego piny znalazły się w pozycjach J2, J4 i J6
- J2 ↔ Wyjście Arduino Nano z cyfrowego pinu 3 (D3)
- J4 (pin podstawowy tranzystora 2N3904)
- J6 (niepodłączony)
-
W przypadku obwodu „górnego” potencjometr należy umieścić na spodzie płytki skierowanej na zewnątrz, tak aby jego piny znalazły się w pozycjach J9, J11 i J13
- J13 ↔ Wyjście Arduino Nano z cyfrowego pinu 3 (D3)
- J11 (pin podstawowy tranzystora 2N3904)
- J9 ↔niepodłączony
Krok 7: Oprogramowanie głośnika
Oto kod dla głośnika komunikującego się z lewą wskazówką. Podłącz Arduino Nano na płycie głośnika dolnego do komputera, otwórz Arduino IDE, skopiuj i wklej do niego ten kod i prześlij go na płytę.
#włączać
#include #include RF24 radio (7, 8); // CE, CSN //lewy wskaźnik ostrzegawczy, płyta głośnika górnego const byte address[6] = "00001"; const int skok = 2000; const int pitch_duration = 200; const int mówca = 3; const int delay_gain = 100; stan int = 0; int cur_delay = 0; odczytanie znaków[2]; void setup() { pinMode(głośnik, WYJŚCIE); Serial.początek(115200); Serial.println("Uruchamianie komunikacji bezprzewodowej…"); radio.początek(); radio.openReadingPipe(0, adres); radio.setPALevel(RF24_PA_MIN); radio.startNasłuch(); } void loop() { if(radio.available()) { radio.read(&read, sizeof(read)); status = (int)(odczyt[0]-'0'); Serial.print("Otrzymano: "); Serial.println(stan); cur_delay = opóźnienie_wzmocnienia*stan; } if (cur_delay) { ton (głośnik, wysokość tonu, czas trwania tonu); delay(cur_delay + pitch_duration); Serial.println("Brzęczyk!"); } }
Oto kod dla mówcy komunikującego się z odpowiednim wskaźnikiem. Podłącz Arduino Nano na górnej płycie głośnika do komputera, otwórz Arduino IDE, skopiuj i wklej do niego ten kod i prześlij go na płytę.
#włączać
#include #include RF24 radio (7, 8); // CE, CSN //właściwy wskaźnik ostrzegawczy, dolny głośnik płyty const byte address[6] = "00010"; const int skok = 1500; const int pitch_duration = 200; const int mówca = 3; const int delay_gain = 100; stan int = 0; int cur_delay = 0; odczytanie znaków[2]; void setup() { pinMode(głośnik, WYJŚCIE); Serial.początek(115200); Serial.println("Uruchamianie komunikacji bezprzewodowej…"); radio.początek(); radio.openReadingPipe(0, adres); radio.setPALevel(RF24_PA_MIN); radio.startNasłuch(); } void loop() { if (radio.available()) { radio.read(&read, sizeof(read)); status = (int)(odczyt[0]-'0'); Serial.print("Otrzymano: "); Serial.println(stan); cur_delay = opóźnienie_wzmocnienia*stan; } if (cur_delay) { ton (głośnik, wysokość tonu, czas trwania tonu); opóźnienie(cur_delay+pitch_duration); Serial.println("Brzęczyk!"); } }
Krok 8: Montaż głośnika
Poszczególne części
- 2 skonstruowane obwody głośnikowe
- 2 głośniki
- 1 akumulator
STL do druku 3D
- Górna część pudełka
- Dno pudełka
Fizyczne instrukcje montażu
- Ostrożnie umieść obwody głośnikowe w dolnej części pudełka, jedna płytka na drugiej, tak aby pokrętła głośności znajdowały się obok siebie i wsuwały się w otwory. Chipy komunikacyjne powinny być odsłonięte z tyłu pudełka.
- Umieść głośniki po lewej i prawej stronie płytki drukowanej, upewniając się, że głośniki odpowiadają właściwym bokom. Dopasuj głośniki do szczelin po bokach pudełka.
- Przeprowadź przewody akumulatora przez mały otwór z tyłu pudełka. Żywić (lub przykleić) akumulator z tyłu pudełka tak, aby przełącznik był odsłonięty.
- Umieść wydrukowany w 3D wierzch pudełka na dnie pudełka, aby pomieścić wszystko.
Krok 9: Konfiguracja/Montaż
- Włącz kontrolki, przestawiając przełączniki na zestawach baterii do pozycji „ON”. Zrób to samo dla zespołu głośników, aby włączyć system wyjściowy.
- Montaż sygnalizatorów dźwiękowych najłatwiej wykonać w dwie osoby, ale można to zrobić z jedną. W przypadku montowania na fokarze bez rolera, przyrządy kontrolne najłatwiej byłoby założyć przed podniesieniem żagla.
- Aby upewnić się, że ramka ostrzegawcza jest prawidłowo zorientowana, spójrz na wycięcie na jednym z pionowych pasków. Trzymając ramę pionowo, wycięcie powinno być skierowane do góry. Strona ramy z tym drążkiem powinna być również skierowana w stronę przodu łodzi.
- Umieść jeden z pilotów na żądanej wysokości i pozycji na żaglu. Powinien być umieszczony tak, aby przędza znajdowała się w tym samym miejscu, w którym byłaby, gdyby była częścią tradycyjnej opowieści.
- Gdy już masz jedną opowieść w żądanej pozycji. Umieść drugie urządzenie ostrzegawcze po drugiej stronie żagla, dokładnie naprzeciwko pierwszego, który umieściłeś, tak aby magnesy były ustawione w jednej linii. Gdy magnesy połączą się, powinny pewnie trzymać ramę na żaglu. Wyrównaj magnesy obudów elektroniki, dla każdego elementu ostrzegawczego po obu stronach żagla, tak aby również się ze sobą łączyły.
- Jeśli zauważysz, że gdy sznurek płynie prosto do tyłu, nie przechodzi przed górną bramką, obróć ramkę urządzenia ostrzegawczego tak, aby tylna połowa ramki była skierowana w dół. Obracaj ramkę, aż sznurek przejdzie przez górny przerywacz zdjęć, gdy przędza spływa prosto z powrotem.
Krok 10: Rozwiązywanie problemów
Wszystkie fragmenty kodu zawierają instrukcje drukowania debugowania, które wskazują, że wysyłają, odbierają i przetwarzają dane. Otwarcie portu COM za pomocą Arduino IDE z jednym z podsystemów Arduino Nano wpiętym do komputera, umożliwi podgląd tych komunikatów o stanie.
Jeśli system nie działa prawidłowo, przełącz przełączniki na wszystkich komponentach.
Krok 11: Możliwe następne kroki
- Hydroizolacja
- Komunikacja o większym zasięgu. Wi-Fi będzie obiecującą opcją.
- Nasza obecna konfiguracja wykorzystuje obecnie 2 przerywacze zdjęć na wskaźnik. Dodanie do systemu większej liczby przerywaczy zdjęć może być interesujące.
Zalecana:
Zobacz fale dźwiękowe przy użyciu kolorowego światła (LED RGB): 10 kroków (ze zdjęciami)
Zobacz fale dźwiękowe przy użyciu kolorowego światła (LED RGB): Tutaj możesz zobaczyć fale dźwiękowe i obserwować wzorce interferencyjne wytwarzane przez dwa lub więcej przetworników, ponieważ odstępy między nimi są zróżnicowane. (Skrajnie po lewej, wzór interferencji z dwoma mikrofonami przy 40 000 cykli na sekundę; u góry po prawej, pojedynczy mikrofon
Zmierz małe sygnały ukryte w szumie na oscyloskopie (wykrywanie fazowe): 3 kroki
Mierz na oscyloskopie małe sygnały zakopane w szumie (wykrywanie z uwzględnieniem fazy): Wyobraź sobie, że chcesz zmierzyć niewielki sygnał zakopany w szumie, który jest znacznie silniejszy. Obejrzyj wideo, aby szybko dowiedzieć się, jak to zrobić, lub kontynuuj czytanie, aby poznać szczegóły
Sukienka monitora - Podłącz sygnały serca do IoT: 18 kroków (ze zdjęciami)
Sukienka monitora – podłącz sygnały serca do Internetu Rzeczy: Sukienka monitora to eksperyment polegający na badaniu różnych sposobów cyfryzacji aktywności serca użytkownika, a także przetwarzania danych. Trzy elektrody wewnątrz sukienki mierzą sygnały elektryczne przechodzące przez użytkownika bod
Jak uruchomić podstawowe operacje dźwiękowe w sercu Junction: 8 kroków
Jak uruchomić podstawowe operacje dźwiękowe w Heart of Junction: Ten Instruktaż jest przeznaczony dla każdego, kto wykonuje operacje dźwiękowe / komputerowe w Heart of Junction w Grand Junction, Kolorado, kiedy ja, główny dźwiękowiec / technik, muszę odejść na jakiś czas powód lub inny. Przepraszam, jeśli to długo, ale spróbuję
Zmieniona antena satelitarna przechwytuje sygnały Wi-Fi i telefony komórkowe: 4 kroki
Zmieniona antena satelitarna przechwytuje sygnały Wi-Fi i telefonów komórkowych: Kiedy przeprowadziłem się z San Antonio z powrotem do wiejskiej Karoliny Północnej, zupełnie nie mogłem uzyskać sygnału Wi-Fi lub telefonu komórkowego w miejscu, w którym mieszkałem. Jedynym sposobem, aby w ogóle uzyskać sygnał z komórki, było przejechanie ponad milę w dowolnym kierunku, z którego