Innehållsförteckning:

Snabbt Hartley Transform Spectral Stetoskop: 22 steg
Snabbt Hartley Transform Spectral Stetoskop: 22 steg

Video: Snabbt Hartley Transform Spectral Stetoskop: 22 steg

Video: Snabbt Hartley Transform Spectral Stetoskop: 22 steg
Video: Test for my discrete Fourier/Hartley-like transform algorithm 2024, Juli
Anonim
Snabbt Hartley Transform Spectral Stetoskop
Snabbt Hartley Transform Spectral Stetoskop

I denna instruerbara lär du dig hur man gör ett spektralstetoskop med hjälp av den snabba hartley -transformen. Detta kan användas för att visualisera hjärt- och lungljud.

Steg 1: Material

1,8”LCD -skärm ($ 7,50 på Amazon)

Arduino Uno eller motsvarande ($ 7,00 på Gearbest)

Electret -förstärkare ($ 6,95 på Adafruit)

100 µF kondensator ($ 0,79)

Tråd och tröjor ($ 4,00)

3,5 mm stereokontakt ($ 1,50)

10kOhm potentiometer ($ 2,00)

Momentary Switch ($ 1,50)

Steg 2: Verktyg

Lödkolv

Lim pistol

3D -skrivare … eller en vän med en 3D -skrivare (går att göra med kartong också)

Avbitartång

Bakbord

Steg 3: 3D -utskrift

Den första är att 3D -skriva ut.stl -filerna som bifogas detta steg. Jag skrev ut båda filerna med följande material/inställningar:

Material: PLA

Lagerhöjd: 0,1 mm

Vägg/topp/botten Tjocklek: 0,8 mm

Utskriftstemperatur: 200⁰C

Sängtemperatur: 60⁰C

Support aktiverat @ 10%

Steg 4: Konstruera krets

Bygg kretsen med hjälp av komponenterna i materialavsnittet. Jag sätter alltid ihop kretsen på en brödbräda först för att se till att den fungerar som den ska innan jag rör vid lödkolven.

Steg 5: LCD -kabel

LCD -kablar
LCD -kablar

Med hjälp av figuren som bifogas detta steg lödtrådar till sju av de åtta stiften på LCD -skärmen. Dessa ledningar måste vara cirka 3 fot långa, förutom marken och +5V stift (dessa behöver bara vara 2-3 tum)

Steg 6: Mikrofon-/förstärkarkablar

Mikrofon/förstärkare
Mikrofon/förstärkare

Med hjälp av figuren som bifogas detta steg löds tre ledningar till +5V, Ground och Out -stiften på Adafruit -mikrofonen/förstärkaren. Dessa behöver bara vara cirka 2-3 tum långa.

Steg 7: Koppling av tillfällig strömbrytare

Anslut en 2-3 tums tråd till var och en av de två klackarna på den momentana omkopplaren.

Steg 8: Potentiometerkoppling

Med hjälp av figuren i steg 6, löd tre trådar cirka 2-3 tum i längd till potentiometerns tre klackar.

Steg 9: Anslutning av hörlursuttag

Löd tre ledningar till ringen, spetsen och hylsorna på hörlursuttaget. Jag använde ett uttag ur en metronom som redan var ansluten. Om du inte vet vad ringen, spetsen och hylsorna är, bara googla det, det finns många bra bilder om att ansluta stereokontakter.

Steg 10: Mikrofon/förstärkareutgång

Efter att ha lödt trådarna på mikrofonen/förstärkaren, potentiometern och hörlursuttaget, löd en tråd ungefär tre fot lång till mikrofonförstärkarens "ut" -tråd. Denna kabel kommer senare att anslutas till A0 -stiftet på arduinoen.

Steg 11: Mikrofon/förstärkarutgång fortsätter

Löd en andra ledning till mikrofonens/förstärkarens "ut" -tråd. Denna tråd måste lödas till en 100 microFarad kondensator. Om du använder en elektrolytkondensator, se till att den positiva sidan är ansluten till denna kabel.

Steg 12: Komponenter i kapsling

Komponenter i kapsling
Komponenter i kapsling
Komponenter i kapsling
Komponenter i kapsling

När alla trådar är lödda på komponenterna, placera komponenterna där respektive platser enligt figurerna som bifogas detta steg. Jag använde varmt lim för att säkra mikrofon- och hörlursuttaget på plats.

Steg 13: In-Enclosure-Lodning

När alla komponenter är fästa i höljet, löd alla jordkablarna tillsammans. Det ska finnas en från LCD -skärmen, en från mikrofonen/förstärkaren och en från hörlursuttaget. Löd också ihop +5V -kablarna och en ledning från den momentana omkopplaren. Återigen borde det finnas en från LCD -skärmen, en från mikrofonen/förstärkaren och en på den momentana omkopplaren.

Steg 14: +5V, GND Extended Wires

Klipp nu två bitar tråd ca 3 fot lång. Löd en till klustret av jordledningar och löd den andra till den öppna tråden på den tillfälliga omkopplaren.

Steg 15: Släpp långa trådar genom höljeshålet

Slip långa trådar genom höljeshålet
Slip långa trådar genom höljeshålet

Nu bör du ha totalt åtta ledningar med en längd på cirka 3 fot. Placera dessa genom det ofyllda hålet i höljet. Se figuren som bifogas detta steg

Steg 16: Värmekrympning

När all lödning är klar, se till att de exponerade trådarna är täckta. Jag använde värmekrympslang, men eltejp fungerar också bra.

Steg 17: Tätningslåda

Tätningslåda
Tätningslåda
Tätningslåda
Tätningslåda

Ta hälften av höljet som innehåller LCD -skärmen och skjut det över den andra halvan av höljet som innehåller de andra komponenterna. Medan du trycker ihop de två bitarna, hetlimma dem för att fästa höljet.

Steg 18: Anslut till Arduino

De åtta, långa, återstående ledningarna är anslutna direkt till sina respektive Arduino -stift som beskrivs i kretsschemat. Se till att du sätter en bit tejp i andra änden som anger vilken Arduino -stift den går till varje gång du lödder en av de långa 3ft trådarna i kretsen.

Steg 19: Arduino IDE/bibliotek

Du måste ladda ner Arduino IDE. För denna skiss använde jag tre olika bibliotek: FHT.h, SPI.h och TFT.h. Om du inte vet hur du laddar ner Arduino -bibliotek, se https://www.arduino.cc/en/Guide/Libraries. FHT.h -biblioteket laddades ner från openmusiclabs.com. De andra två laddades ner på GitHub.

Steg 20: Arduino Sketch

Koden använder Fast Hartley Transform (FHT) för att ändra tidsdomänen till en frekvensdomän. Detta kan också göras med hjälp av Fast Fourier Transform (FFT), men FHT är mycket snabbare. FFT och FHT är mycket grundläggande idéer inom signalbehandling och väldigt roliga att lära sig om. Jag föreslår att du läser lite själv, om du är intresserad se. FHT -exempelkoden som jag kopierade från Open Music Labs webbplats utmatade först amplituden för varje frekvensfack som en logaritmisk eller decibelutgång. Jag ändrade detta för att mata ut frekvensfacken på en linjär skala. Detta beror på att den linjära skalan är en bättre visuell representation av hur människor hör ljud. For () -slingan i slutet är för att rita amplituden för varje frekvensfack på LCD -skärmen. Hela FHT -spektrumet skulle omfatta alla frekvensfack från i = 0 till i <128. Du kommer att märka att min for () loop är från i = 5 till i <40, detta beror på att frekvenserna som är viktiga för att diagnostisera lungtillstånd är vanligtvis mellan 150Hz och 3,5khz, jag bestämde mig för att gå upp till ca 4kHz. Det kan justeras om du vill visa hela frekvensspektrumet.

[koda]

// Digital stetoskopskod

// Snabbt Hartley Transform -bibliotek nedladdat från openmusiclabs

#define LIN_OUT 1 // ställ in FHT för att producera linjär utmatning

#define LOG_OUT 0 // stäng av FHT logaritmisk utmatning

#define FHT_N 256 // FHT -provnummer

#inkludera // inkludera FHT -bibliotek

#inkludera // inkludera TFT -bibliotek

#inkludera // inkludera SPI -bibliotek

#define cs 10 // ställ in lcd cs pin till arduino pin 10

#define dc 9 // ställ in lcd dc pin till arduino pin 9

#define rst 8 // ställ in lcd -återställningsstift till arduino pin 8

TFT myScreen = TFT (cs, dc, rst); // deklarera namnet på TFT -skärmen

void setup () {

//Serial.begin(9600);//sätt samplingsfrekvens

myScreen.begin (); // initiera TFT -skärm

myScreen.background (0, 0, 0); // ställ in bakgrunden på svart

ADCSRA = 0xe5; // ställa in adc till fritt körläge

ADMUX = 0x40; // använd adc0

}

void loop () {

medan (1) {// minskar jitter cli (); // UDRE -avbrott saktar ner på detta sätt på arduino1.0

för (int i = 0; i <FHT_N; i ++) {// spara 256 prover

medan (! (ADCSRA & 0x10)); // vänta tills adc är klar

ADCSRA = 0xf5; // starta om adc byte

m = ADCL; // hämta adc -databyte

j = ADCH; int k = (j << 8) | m; // form till en int

k -= 0x0200; // form till en signerad int

k << = 6; // form till en 16b signerad int

fht_input = k; // lägga in verklig data i fack

}

fht_window (); // fönstret för bättre frekvenssvar

fht_reorder (); // ordna om data innan du gör fht

fht_run (); // bearbeta data i fht

fht_mag_lin (); // ta utmatningen av fht

sei ();

för (int i = 5; i <40; i ++) {

myScreen.stroke (255, 255, 255);

myScreen.fill (255, 255, 255);

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

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

}

myScreen.background (0, 0, 0);

}

}

[/koda]

Steg 21: Testa det

Testa det!
Testa det!

Jag använde en online-tongenerator (https://www.szynalski.com/tone-generator/) för att bekräfta att koden fungerade korrekt. När du har bekräftat att det fungerar, tryck stetoskopets klocka upp mot bröstet, andas djupt och se vilka frekvenser som finns !!

Steg 22: Framtidsarbete

** Obs! Jag är kemist, inte ingenjör eller datavetare **. Det kommer sannolikt att bli fel och förbättringar av design och kod. Med detta sagt tror jag att det är en bra början på något som kan bli mycket användbart och billigt. Följande kulor är framtida förbättringar jag skulle vilja göra och jag hoppas att några av er också försöker förbättra det!

· Gör enheten mobil. Jag har inte stor erfarenhet av processorer eller andra mikrokontroller, men det skulle behöva ha tillräckligt med minne för att lagra hela FHT -biblioteket på, eller möjligen Bluetooth.

· Införa några statistiska analysberäkningar i koden. Till exempel har en väsande andning normalt en grundfrekvens som är lika med eller större än 400 Hz och varar i minst 250 ms. Rhonchi förekommer vid en grundfrekvens på cirka 200 Hz eller mindre och varar i minst 250 ms. Många andra lungljud är definierade och indikerar hälsotillstånd (https://commongiant.github.io/iSonea-Physicians/assets/publications/7_ISN-charbonneau-Euro-resp-Jour-1995-1942-full.pdf). Jag tror att det är något som kan kontrolleras i koden genom att jämföra signalen från frekvensfacken efter ett visst antal cykler genom FHT och sedan köra millis () -funktionen för att se hur länge den var närvarande och sedan jämföra den till bullergolvet i FHT -beräkningen. Jag är övertygad om att dessa saker kan göras!

Jag hoppas att ni alla hade kul med det här projektet och om ni har några frågor vänligen kommentera så svarar jag så snart jag kan! Jag ser fram emot att se kommentarer.

Rekommenderad: