Spisu treści:

Stetoskop spektralny z szybką transformacją Hartleya: 22 kroki
Stetoskop spektralny z szybką transformacją Hartleya: 22 kroki

Wideo: Stetoskop spektralny z szybką transformacją Hartleya: 22 kroki

Wideo: Stetoskop spektralny z szybką transformacją Hartleya: 22 kroki
Wideo: Ultraprobe 15000 – Ultradźwiękowy detektor dla programów Niezawodności i Predykcyjnego UR 2024, Lipiec
Anonim
Stetoskop spektralny z szybką transformacją Hartleya
Stetoskop spektralny z szybką transformacją Hartleya

W tej instrukcji dowiesz się, jak zrobić stetoskop spektralny za pomocą szybkiej transformacji Hartleya. Można to wykorzystać do wizualizacji dźwięków serca i płuc.

Krok 1: Materiały

1,8-calowy ekran LCD (7,50 USD na Amazon)

Arduino Uno lub odpowiednik (7,00 USD na Gearbest)

Wzmacniacz elektretowy (6,95 USD na Adafruit)

Kondensator 100 µF (0,79 USD)

Drut i zworki (4,00 USD)

Gniazdo stereo 3,5 mm (1,50 USD)

Potencjometr 10kOhm (2,00 USD)

Przełącznik chwilowy (1,50 USD)

Krok 2: Narzędzia

Lutownica

Pistolet na gorący klej

Drukarka 3D…lub znajomy z drukarką 3D (możliwość wykonania również z kartonu)

Przecinak do drutu

Deska do krojenia chleba

Krok 3: Drukowanie 3D

Pierwszym z nich jest wydrukowanie w 3D plików.stl dołączonych do tego kroku. Wydrukowałem oba pliki przy użyciu następujących materiałów/ustawień:

Materiał: PLA

Wysokość warstwy: 0,1 mm

Grubość ściany / góry / dołu: 0,8 mm

Temperatura drukowania: 200⁰C

Temperatura łóżka: 60⁰C

Wsparcie włączone @ 10%

Krok 4: Zbuduj obwód

Używając komponentów w sekcji materiałów, zbuduj obwód. Zawsze układam obwód na płytce stykowej, aby upewnić się, że działa prawidłowo, zanim dotknę lutownicy.

Krok 5: Okablowanie LCD

Okablowanie LCD
Okablowanie LCD

Korzystając z rysunku dołączonego do tego kroku, przylutuj przewody do siedmiu z ośmiu styków na ekranie LCD. Te przewody będą musiały mieć około 3 stopy długości, z wyjątkiem uziemienia i pinów +5 V (wystarczą tylko 2-3 cale)

Krok 6: Okablowanie mikrofonu/wzmacniacza

Okablowanie mikrofonu/wzmacniacza
Okablowanie mikrofonu/wzmacniacza

Korzystając z rysunku dołączonego do tego kroku, przylutuj trzy przewody do pinów +5V, uziemienia i wyjścia mikrofonu/wzmacniacza Adafruit. Muszą mieć tylko około 2-3 cali długości.

Krok 7: Okablowanie przełącznika chwilowego

Podłącz jeden 2-3 calowy przewód do każdego z dwóch występów na przełączniku chwilowym.

Krok 8: Okablowanie potencjometru

Korzystając z rysunku w kroku 6, przylutuj trzy przewody o długości około 2-3 cali do trzech końcówek potencjometru.

Krok 9: Okablowanie gniazda słuchawkowego

Przylutuj trzy przewody do pierścienia, końcówki i końcówek tulei gniazda słuchawkowego. Użyłem wtyczki z metronomu, który był już podłączony. Jeśli nie wiesz, co to jest pierścień, końcówka i końcówki tulei, po prostu wygoogluj to, jest wiele dobrych obrazów na temat okablowania gniazd stereo.

Krok 10: Wyjście mikrofonu/wzmacniacza

Po przylutowaniu przewodów mikrofonu/wzmacniacza, potencjometru i gniazda słuchawkowego, przylutuj jeden przewód o długości około trzech stóp do przewodu wyjściowego wzmacniacza mikrofonowego. Ten przewód zostanie później podłączony do pinu A0 arduino.

Krok 11: Wyjście mikrofonu/wzmacniacza ciąg dalszy

Przylutuj drugi przewód do przewodu wyjściowego mikrofonu/wzmacniacza. Ten przewód należy przylutować do kondensatora 100 mikrofaradów. Jeśli używasz kondensatora elektrolitycznego, upewnij się, że dodatnia strona jest podłączona do tego przewodu.

Krok 12: Elementy w obudowie

Komponenty w obudowie
Komponenty w obudowie
Komponenty w obudowie
Komponenty w obudowie

Po przylutowaniu wszystkich przewodów do elementów, umieść elementy w odpowiednich miejscach zgodnie z rysunkami dołączonymi do tego kroku. Użyłem gorącego kleju, aby zabezpieczyć mikrofon i gniazdo słuchawkowe na miejscu.

Krok 13: Lutowanie w obudowie

Po zabezpieczeniu wszystkich elementów w obudowie, zlutuj wszystkie przewody uziemiające. Powinien być jeden z wyświetlacza LCD, jeden z mikrofonu/wzmacniacza i jeden z rękawa gniazda słuchawkowego. Przylutuj również przewody +5V razem i jeden przewód z przełącznika chwilowego. Znowu powinien być jeden z wyświetlacza LCD, jeden z mikrofonu/wzmacniacza i jeden na chwilowym przełączniku.

Krok 14: Przedłużone przewody +5 V, GND

Teraz wytnij dwa kawałki drutu o długości około 3 stóp. Przylutuj jeden do wiązki przewodów uziemiających, a drugi do otwartego przewodu na przełączniku chwilowym.

Krok 15: Wsuń długie przewody przez otwór obudowy

Przesuń długie przewody przez otwór obudowy
Przesuń długie przewody przez otwór obudowy

Teraz powinieneś mieć w sumie osiem przewodów o długości około 3 stóp. Umieść je przez niewypełniony otwór w obudowie. Zobacz rysunek dołączony do tego kroku

Krok 16: Termokurczliwość

Po zakończeniu lutowania upewnij się, że odsłonięte przewody są zakryte. Użyłem rurki termokurczliwej, ale taśma elektryczna również działa dobrze.

Krok 17: Uszczelnij obudowę

Uszczelnienie obudowy
Uszczelnienie obudowy
Uszczelnienie obudowy
Uszczelnienie obudowy

Weź połowę obudowy zawierającej ekran LCD i wsuń ją na drugą połowę obudowy zawierającej inne elementy. Dociskając oba elementy do siebie, sklej je na gorąco, aby połączyć obudowę.

Krok 18: Połącz się z Arduino

Pozostałe osiem długich przewodów jest podłączonych bezpośrednio do odpowiednich pinów Arduino przedstawionych na schemacie obwodu. Upewnij się, że za każdym razem, gdy lutujesz jeden z tych długich 3-metrowych przewodów do obwodu, na drugim końcu umieszczasz kawałek taśmy, wskazując, do którego pinu Arduino idzie!

Krok 19: Arduino IDE/Biblioteki

Będziesz musiał pobrać Arduino IDE. Do tego szkicu użyłem trzech różnych bibliotek: FHT.h, SPI.h i TFT.h. Jeśli nie wiesz, jak pobrać biblioteki Arduino, odwiedź https://www.arduino.cc/en/Guide/Libraries. Biblioteka FHT.h została pobrana z openmusiclabs.com. Pozostałe dwa zostały pobrane na GitHub.

Krok 20: Szkic Arduino

Kod wykorzystuje szybką transformację Hartleya (FHT) do zmiany domeny czasu na domenę częstotliwości. Można to również zrobić za pomocą szybkiej transformacji Fouriera (FFT), ale FHT jest znacznie szybsza. FFT i FHT to bardzo podstawowe idee w przetwarzaniu sygnałów i bardzo fajnie się ich uczy. Proponuję sam poczytać, jeśli jesteś zainteresowany, zobacz. Przykładowy kod FHT, który skopiowałem ze strony Open Music Labs, początkowo wyprowadzał amplitudę każdego przedziału częstotliwości jako wynik logarytmiczny lub decybelowy. Zmieniłem to, aby wyprowadzać pojemniki częstotliwości w skali liniowej. Dzieje się tak, ponieważ skala liniowa jest lepszą wizualną reprezentacją tego, jak ludzie słyszą dźwięk. Pętla for() na końcu służy do rysowania amplitudy każdego przedziału częstotliwości na ekranie LCD. Pełne widmo FHT obejmowałoby wszystkie przedziały częstotliwości od i=0 do i<128. Zauważysz, że moja pętla for() ma wartość od i=5 do i<40, ponieważ częstotliwości ważne dla diagnozowania chorób płuc są zazwyczaj pomiędzy 150Hz a 3,5kHz, zdecydowałem się podnieść do około 4kHz. Można to dostosować, jeśli chcesz pokazać pełne spektrum częstotliwości.

[kod]

//Kod stetoskopu cyfrowego

//Biblioteka Fast Hartley Transform pobrana z openmusiclabs

#define LIN_OUT 1 //ustaw FHT do produkcji liniowej

#define LOG_OUT 0 //wyłącz wyjście logarytmiczne FHT

#zdefiniuj FHT_N 256 //Numer próbki FHT

#include //include bibliotekę FHT

#dołącz //dołącz bibliotekę TFT

#include //include bibliotekę SPI

#define cs 10 //ustaw lcd cs pin na pin arduino 10

#define dc 9 //ustaw pin lcd dc na pin arduino 9

#define rst 8 //ustaw pin resetowania lcd na pin arduino 8

TFT myScreen = TFT(cs, dc, rst);//deklaruj nazwę ekranu TFT

pusta konfiguracja () {

//Serial.begin(9600);//ustaw częstotliwość próbkowania

myScreen.begin();//zainicjuj ekran TFT

myScreen.background(0, 0, 0);//ustaw tło na czarne

ADCSRA=0xe5;//ustaw adc na tryb swobodnego biegu

ADMUX=0x40;//użyj adc0

}

pusta pętla () {

while(1){ // zmniejsza jitter cli(); // Przerwanie UDRE spowalnia w ten sposób na arduino1.0

for (int i = 0; i < FHT_N; i++) { // zachowaj 256 próbek

while(!(ADCSRA & 0x10)); // poczekaj, aż adc będzie gotowy

ADCSRA = 0xf5; // zrestartuj bajt adc

m = ADCL; // pobierz bajt danych adc

j = ADCH; int k = (j << 8) | m; // formować w int

k -= 0x0200; // forma w podpisany int

k <<= 6; // forma w 16b podpisany int

fht_input = k; // włóż prawdziwe dane do pojemników

}

okno_fht(); // okno danych dla lepszej odpowiedzi częstotliwościowej

fht_reorder(); // zmień kolejność danych przed wykonaniem fht

fht_run(); // przetwarzaj dane w fht

fht_mag_lin(); // weź wyjście fht

sei();

dla (int i=5;i<40;i++){

mojeEkran.stroke(255, 255, 255);

mojeEkran.wypełnij(255, 255, 255);

int drawHeight=map(fht_lin_out, 10, 255, 10, myScreen.height());

int ypos=mojEkran.height()-drawHeight-8; myScreen.rect((4*i)+8, ypos, 3, drawHeight);

}

mojeEkran.tło(0, 0, 0);

}

}

[/kod]

Krok 21: Przetestuj to

Przetestuj to!
Przetestuj to!

Użyłem generatora tonów online (https://www.szynalski.com/tone-generator/), aby potwierdzić, że kod działa poprawnie. Po potwierdzeniu, że działa, przyciśnij dzwonek stetoskopu do klatki piersiowej, weź głęboki oddech i zobacz, jakie częstotliwości są obecne!!

Krok 22: Przyszła praca

**Uwaga: jestem chemikiem, a nie inżynierem czy informatykiem**. Prawdopodobnie pojawią się błędy i ulepszenia projektu i kodu. Biorąc to pod uwagę, myślę, że to dobry początek czegoś, co może okazać się bardzo przydatne i niedrogie. Poniższe punkty to przyszłe ulepszenia, które chciałbym wprowadzić i mam nadzieję, że niektórzy z was również spróbują je ulepszyć!

· Spraw, aby urządzenie było mobilne. Nie mam dużego doświadczenia z procesorami lub innymi mikrokontrolerami, ale musiałby mieć wystarczająco dużo pamięci, aby przechowywać całą bibliotekę FHT lub ewentualnie Bluetooth.

· Wprowadzić do kodu kilka obliczeń analizy statystycznej. Na przykład, zazwyczaj świszczący oddech ma częstotliwość podstawową równą lub większą niż 400 Hz i trwa co najmniej 250 ms. Rhonchi występują przy częstotliwości podstawowej około 200 Hz lub mniejszej i trwają co najmniej 250 ms. Zdefiniowano wiele innych dźwięków płucnych wskazujących na stan zdrowia (https://commongiant.github.io/iSonea-Physicians/assets/publications/7_ISN-charbonneau-Euro-resp-Jour-1995-1942-full.pdf). Myślę, że jest to coś, co można sprawdzić w kodzie, porównując sygnał z pojemników częstotliwości po określonej liczbie cykli przez FHT, a następnie uruchamiając funkcję millis(), aby zobaczyć, jak długo był obecny, a następnie porównując do poziomu szumów obliczeń FHT. Jestem przekonany, że te rzeczy da się zrobić!

Mam nadzieję, że wszyscy dobrze się bawiliście przy tym projekcie i jeśli macie jakieś pytania, proszę o komentarz, a ja odpowiem tak szybko, jak będę mógł! Czekam na komentarze.

Zalecana: