Innholdsfortegnelse:

Fast Hartley Transform Spectral Stethoscope: 22 trinn
Fast Hartley Transform Spectral Stethoscope: 22 trinn

Video: Fast Hartley Transform Spectral Stethoscope: 22 trinn

Video: Fast Hartley Transform Spectral Stethoscope: 22 trinn
Video: The Discrete Fourier Transform: Most Important Algorithm Ever? 2024, November
Anonim
Fast Hartley Transform Spectral Stethoscope
Fast Hartley Transform Spectral Stethoscope

I denne instruktøren lærer du hvordan du lager et spektralstetoskop ved hjelp av den raske hartley -transformasjonen. Dette kan brukes til å visualisere hjerte- og lungelyder.

Trinn 1: Materialer

1,8”LCD -skjerm (7,50 dollar på Amazon)

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

Electret Forsterker ($ 6,95 på Adafruit)

100 µF kondensator ($ 0,79)

Wire and Jumpers ($ 4,00)

3,5 mm stereokontakt ($ 1,50)

10kOhm potensiometer ($ 2,00)

Momentary Switch ($ 1,50)

Trinn 2: Verktøy

Loddejern

Varm limpistol

3D -skriver … eller en venn med en 3D -skriver (mulig å lage med papp også)

Wire Cutter

Brødbrett

Trinn 3: 3D -utskrift

Den første er å 3D -skrive ut.stl -filene som er vedlagt dette trinnet. Jeg skrev ut begge filene med følgende materiale/innstillinger:

Materiale: PLA

Laghøyde: 0,1 mm

Vegg/topp/bunntykkelse: 0,8 mm

Utskriftstemperatur: 200⁰C

Sengetemperatur: 60⁰C

Støtte aktivert @ 10%

Trinn 4: Konstruer krets

Bygg kretsen ved å bruke komponentene i materialdelen. Jeg setter alltid kretsen sammen på et brødbrett først for å sikre at den fungerer som den skal før jeg berører loddejernet.

Trinn 5: LCD -ledninger

LCD -ledninger
LCD -ledninger

Ved hjelp av figuren som er vedlagt dette trinnet, loddes loddetrådene til syv av de åtte pinnene på LCD -skjermen. Disse ledningene må være omtrent 3 fot lange, bortsett fra bakken og +5V pinner (disse trenger bare å være 2-3 tommer)

Trinn 6: Mikrofon-/forsterkerledninger

Mikrofon/forsterkerledninger
Mikrofon/forsterkerledninger

Ved å bruke figuren som er festet til dette trinnet, loddes tre ledninger til +5V, Ground og Out pins på Adafruit mikrofon/forsterker. Disse trenger bare å være omtrent 2-3 tommer lange.

Trinn 7: Momentary Switch Wiring

Koble en 2-3 tommer ledning til hver av de to tappene på den midlertidige bryteren.

Trinn 8: Potensiometerledninger

Ved å bruke figuren i trinn 6, loddes tre ledninger på omtrent 2-3 tommer i lengden til de tre tappene på potensiometeret.

Trinn 9: Kabling av hodetelefonkontakt

Lodd tre ledninger til ringen, spissen og hylsen på hodetelefonkontakten. Jeg brukte en jack ut av en metronom som allerede var kablet. Hvis du ikke vet hva ringen, spissen og hylsene er, bare google det, det er mange gode bilder om kabling av stereokontakter.

Trinn 10: Mikrofon/forsterkerutgang

Etter lodding av ledningene på mikrofonen/forsterkeren, potensiometeret og hodetelefonkontakten, loddes en ledning omtrent tre fot lang til "ut" -ledningen til mikrofonforsterkeren. Denne ledningen vil senere bli koblet til A0 -pinnen på arduinoen.

Trinn 11: Mikrofon/forsterkerutgang fortsetter

Lod en annen ledning til "ut" ledningen til mikrofonen/forsterkeren. Denne ledningen må loddes til en 100 microFarad kondensator. Hvis du bruker en elektrolytisk kondensator, må du kontrollere at den positive siden er koblet til denne ledningen.

Trinn 12: Komponenter i vedlegg

Komponenter i vedlegg
Komponenter i vedlegg
Komponenter i vedlegg
Komponenter i vedlegg

Etter at alle ledningene er loddet på komponentene, plasserer du komponentene på de respektive stedene etter figurene som er vedlagt dette trinnet. Jeg brukte varmt lim for å feste mikrofonen og hodetelefonkontakten på plass.

Trinn 13: In-Enclosure-Lodding

Etter at alle komponentene er festet i kabinettet, loddes alle jordledningene sammen. Det skal være en fra LCD -skjermen, en fra mikrofonen/forsterkeren, og en fra ermet på hodetelefonkontakten. Lodd også +5V -ledningene sammen og en ledning fra den øyeblikkelige bryteren. Igjen bør det være en fra LCD -en, en fra mikrofonen/forsterkeren, og en på den øyeblikkelige bryteren.

Trinn 14: +5V, GND Extended Wires

Klipp nå to stykker wire omtrent 3 fot i lengden. Lodd den ene til klyngen av jordledninger og lodd den andre til den åpne ledningen på momentbryteren.

Trinn 15: Slipp lange ledninger gjennom hullet

Slip lange ledninger gjennom kabinetthullet
Slip lange ledninger gjennom kabinetthullet

Nå bør du ha totalt åtte ledninger på omtrent 3 fot i lengde. Plasser disse gjennom det ufylte hullet i skapet. Se figuren vedlagt dette trinnet

Trinn 16: Varmekrymping

Etter at all lodding er fullført, må du sørge for at de synlige ledningene er dekket til. Jeg brukte varmekrympeslanger, men elektrisk tape fungerer også fint.

Trinn 17: Tetningslager

Tetningslager
Tetningslager
Tetningslager
Tetningslager

Ta halvparten av kabinettet som inneholder LCD -skjermen, og før den over den andre halvdelen av kabinettet som inneholder de andre komponentene. Mens du skyver de to delene sammen, limer du dem varmt for å feste kabinettet.

Trinn 18: Koble til Arduino

De åtte lange ledningene som er igjen, er koblet direkte til sine respektive Arduino -pinner som er skissert i kretsskjemaene. Sørg for at du hver gang du lodder en av de lange 3ft ledningene inn i kretsen, legger et stykke tape i den andre enden som angir hvilken Arduino -pinne den går til!

Trinn 19: Arduino IDE/biblioteker

Du må laste ned Arduino IDE. For denne skissen brukte jeg tre forskjellige biblioteker: FHT.h, SPI.h og TFT.h. Hvis du ikke vet hvordan du laster ned Arduino -biblioteker, kan du se https://www.arduino.cc/en/Guide/Libraries. FHT.h -biblioteket ble lastet ned fra openmusiclabs.com. De to andre ble lastet ned på GitHub.

Trinn 20: Arduino Sketch

Koden bruker Fast Hartley Transform (FHT) til å endre tidsdomenet til et frekvensdomene. Dette kan også gjøres ved hjelp av Fast Fourier Transform (FFT), men FHT er mye raskere. FFT og FHT er veldig grunnleggende ideer innen signalbehandling og veldig morsomme å lære om. Jeg foreslår at du leser litt selv, hvis du er interessert. FHT -eksempelkoden jeg kopierte fra Open Music Labs -nettstedet, sendte opprinnelig amplituden til hver frekvensbeholder som en logaritmisk eller desibel utgang. Jeg endret dette for å sende ut frekvensbeholderne på en lineær skala. Dette er fordi den lineære skalaen er en bedre visuell fremstilling av hvordan mennesker hører lyd. For () -sløyfen på slutten er for å tegne amplituden til hver frekvensbeholder på LCD -skjermen. Hele FHT -spekteret vil omfatte alle frekvensbeholdere fra i = 0 til i <128. Du vil legge merke til at min for () loop er fra i = 5 til i <40, dette er fordi frekvensene som er viktige for å diagnostisere lungesykdommer vanligvis er mellom 150Hz og 3,5khz, jeg bestemte meg for å gå opp til ca 4kHz. Det kan justeres hvis du vil vise hele frekvensspekteret.

[kode]

// Digital stetoskopkode

// Fast Hartley Transform -bibliotek lastet ned fra openmusiclabs

#define LIN_OUT 1 // sett FHT for å produsere lineær utgang

#define LOG_OUT 0 // slå av FHT logaritmisk utgang

#define FHT_N 256 // FHT eksempelnummer

#include // inkluderer FHT -bibliotek

#include // inkluderer TFT -bibliotek

#include // inkluderer SPI -bibliotek

#define cs 10 // sett lcd cs pin til arduino pin 10

#define dc 9 // sett lcd dc pin til arduino pin 9

#define rst 8 // sett lcd reset -pin til arduino pin 8

TFT myScreen = TFT (cs, dc, rst); // erklær navnet på TFT -skjermen

ugyldig oppsett () {

//Serial.begin(9600);//satt samplingsfrekvens

myScreen.begin (); // initialisere TFT -skjerm

myScreen.background (0, 0, 0); // sett bakgrunnen til svart

ADCSRA = 0xe5; // sett adc til gratis løpemodus

ADMUX = 0x40; // bruk adc0

}

void loop () {

mens (1) {// reduserer jitter cli (); // UDRE interrupt bremser denne veien ned på arduino1.0

for (int i = 0; i <FHT_N; i ++) {// lagre 256 prøver

mens (! (ADCSRA & 0x10)); // vent på at adc er klar

ADCSRA = 0xf5; // start adc byte på nytt

m = ADCL; // hente adc data byte

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

k -= 0x0200; // form til en signert int

k << = 6; // form til en 16b signert int

fht_input = k; // legg ekte data i binger

}

fht_window (); // vindu dataene for bedre frekvensrespons

fht_reorder (); // endre rekkefølgen på dataene før du gjør fht

fht_run (); // behandle dataene i fht

fht_mag_lin (); // ta utdataene fra fht

sei ();

for (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);

}

}

[/kode]

Trinn 21: Test det ut

Test det ut!
Test det ut!

Jeg brukte en online tonegenerator (https://www.szynalski.com/tone-generator/) for å bekrefte at koden fungerte som den skulle. Etter å ha bekreftet at det fungerer, trykk stetoskopets bjelle opp til brystet, pust dypt og se hvilke frekvenser som er tilstede !!

Trinn 22: Fremtidig arbeid

** Merk: Jeg er en kjemiker, ikke en ingeniør eller datavitenskapsmann **. Det vil sannsynligvis være feil og forbedringer av design og kode. Når det er sagt, tror jeg det er en god start på noe som kan ende opp med å bli veldig nyttig og billig. Følgende kuler er fremtidige forbedringer jeg vil gjøre, og jeg håper noen av dere også prøver å forbedre det!

· Gjør enheten mobil. Jeg har ikke lang erfaring med CPUer eller andre mikrokontrollere, men det må ha nok minne til å lagre hele FHT -biblioteket på, eller muligens Bluetooth.

· Innfør noen statistiske analyseberegninger i koden. For eksempel har en hvesenhet vanligvis en grunnfrekvens som er lik eller større enn 400 Hz og varer i minst 250 ms. Rhonchi forekommer med en grunnfrekvens på omtrent 200 Hz eller mindre og varer i minst 250 ms. Mange andre lungelyder er definert og indikerer helsemessige forhold (https://commongiant.github.io/iSonea-Physicians/assets/publications/7_ISN-charbonneau-Euro-resp-Jour-1995-1942-full.pdf). Jeg tror det er noe som kan kontrolleres for i koden ved å sammenligne signalet til frekvensbeholderne etter et visst antall sykluser gjennom FHT og deretter kjøre millis () -funksjonen for å se hvor lenge den var tilstede, og deretter sammenligne den til støygulvet i FHT -beregningen. Jeg er overbevist om at disse tingene kan gjøres!

Jeg håper dere alle hadde det gøy med dette prosjektet, og hvis du har spørsmål, vennligst kommenter, så svarer jeg så snart jeg kan! Jeg gleder meg til å se kommentarer.

Anbefalt: