Sommario:

Stetoscopio spettrale di Hartley Transform veloce: 22 passaggi
Stetoscopio spettrale di Hartley Transform veloce: 22 passaggi

Video: Stetoscopio spettrale di Hartley Transform veloce: 22 passaggi

Video: Stetoscopio spettrale di Hartley Transform veloce: 22 passaggi
Video: The Unspeakable Things That Happened To The Titanic's Third-Class Passengers 2024, Dicembre
Anonim
Stetoscopio spettrale Fast Hartley Transform
Stetoscopio spettrale Fast Hartley Transform

In questo tutorial imparerai come creare uno stetoscopio spettrale usando la trasformata veloce di Hartley. Questo può essere usato per visualizzare i suoni cardiaci e polmonari.

Passaggio 1: materiali

Schermo LCD da 1,8 ($ 7,50 su Amazon)

Arduino Uno o equivalente ($ 7,00 su Gearbest)

Amplificatore Electret ($ 6,95 su Adafruit)

Condensatore da 100 µF ($ 0,79)

Filo e ponticelli ($ 4,00)

Jack stereo da 3,5 mm ($ 1,50)

Potenziometro 10kOhm ($2.00)

Interruttore momentaneo ($ 1,50)

Passaggio 2: strumenti

Saldatore

Pistola per colla a caldo

Stampante 3D…o un amico con una stampante 3D (Possibile fare anche con il cartone)

Tronchese

tagliere

Passaggio 3: stampa 3D

Il primo è stampare in 3D i file.stl allegati a questo passaggio. Ho stampato entrambi i file utilizzando il seguente materiale/impostazioni:

Materiale: PLA

Altezza strato: 0,1 mm

Spessore parete/superiore/inferiore: 0,8 mm

Temperatura di stampa: 200⁰C

Temperatura del letto: 60⁰C

Supporto abilitato @ 10%

Passaggio 4: costruire il circuito

Usando i componenti nella sezione dei materiali, costruisci il circuito. Ho sempre messo insieme il circuito su una breadboard per assicurarmi che funzioni correttamente prima di toccare il saldatore.

Passaggio 5: cablaggio LCD

Cablaggio LCD
Cablaggio LCD

Utilizzando la figura allegata a questo passaggio, saldare i fili a sette degli otto pin sullo schermo LCD. Questi cavi dovranno essere lunghi circa 3 piedi, ad eccezione dei pin di terra e +5V (questi devono essere solo 2-3 pollici)

Passaggio 6: cablaggio microfono/amplificatore

Cablaggio microfono/amplificatore
Cablaggio microfono/amplificatore

Usando la figura allegata a questo passaggio, saldare tre fili ai pin +5V, Ground e Out sul microfono/amplificatore Adafruit. Questi devono solo essere lunghi circa 2-3 pollici.

Passaggio 7: cablaggio dell'interruttore momentaneo

Collegare un filo da 2-3 pollici a ciascuna delle due alette sull'interruttore momentaneo.

Passaggio 8: cablaggio del potenziometro

Usando la figura al punto 6, saldare tre fili di circa 2-3 pollici di lunghezza alle tre alette del potenziometro.

Passaggio 9: cablaggio del jack per cuffie

Saldare tre fili all'anello, alla punta e alle alette del manicotto del jack per cuffie. Ho usato un jack di un metronomo che era già cablato. Se non sai cosa sono l'anello, la punta e le alette del manicotto, cercalo su Google ci sono molte buone immagini sul cablaggio dei jack stereo.

Passaggio 10: uscita microfono/amplificatore

Dopo aver saldato i fili del microfono/amplificatore, del potenziometro e del jack per le cuffie, saldare un filo lungo circa tre piedi al filo "fuori" dell'amplificatore del microfono. Questo filo verrà successivamente collegato al pin A0 dell'arduino.

Passaggio 11: uscita microfono/amplificatore continua

Saldare un secondo filo al filo "out" del microfono/amplificatore. Questo filo deve essere saldato a un condensatore da 100 microFarad. Se stai usando un condensatore elettrolitico, assicurati che il lato positivo sia collegato a questo filo.

Passaggio 12: componenti nell'involucro

Componenti in custodia
Componenti in custodia
Componenti in custodia
Componenti in custodia

Dopo che tutti i fili sono stati saldati sui componenti, posizionare i componenti nei rispettivi punti seguendo le figure allegate a questo passaggio. Ho usato la colla a caldo per fissare il microfono e il jack per le cuffie in posizione.

Passaggio 13: Saldatura all'interno dell'involucro

Dopo che tutti i componenti sono stati fissati nella custodia, saldare insieme tutti i fili di terra. Dovrebbe essercene uno dall'LCD, uno dal microfono/amplificatore e uno dal manicotto del jack per le cuffie. Salda anche i fili +5V insieme e un filo dall'interruttore momentaneo. Anche in questo caso dovrebbe esserci uno dall'LCD, uno dal microfono/amplificatore e uno sull'interruttore momentaneo.

Passaggio 14: cavi estesi +5V, GND

Ora taglia due pezzi di filo di circa 3 piedi di lunghezza. Saldare uno al gruppo di fili di terra e saldare l'altro al filo aperto sull'interruttore momentaneo.

Passaggio 15: infilare i fili lunghi attraverso il foro della custodia

Infilare i fili lunghi attraverso il foro della custodia
Infilare i fili lunghi attraverso il foro della custodia

Ora dovresti avere un totale di otto fili di circa 3 piedi di lunghezza. Posizionali attraverso il foro non riempito nel recinto. Vedere la figura allegata a questo passaggio

Passaggio 16: termoretraibile

Dopo che tutte le saldature sono state completate, assicurati che i fili scoperti siano coperti. Ho usato un tubo termoretraibile, ma va bene anche il nastro isolante.

Passaggio 17: sigillare l'involucro

Sigillo di chiusura
Sigillo di chiusura
Sigillo di chiusura
Sigillo di chiusura

Prendi la metà della custodia contenente lo schermo LCD e infilala sull'altra metà della custodia contenente gli altri componenti. Mentre spingi insieme i due pezzi, incollali a caldo per fissare insieme la custodia.

Passaggio 18: connettersi ad Arduino

Gli otto, lunghi, fili rimanenti sono collegati direttamente ai rispettivi pin Arduino delineati negli schemi del circuito. Assicurati che ogni volta che saldi uno di quei fili lunghi 3 piedi nel circuito, metti un pezzo di nastro adesivo sull'altra estremità che indica a quale pin Arduino va!

Passaggio 19: Arduino IDE/Librerie

Dovrai scaricare l'IDE di Arduino. Per questo schizzo ho utilizzato tre diverse librerie: FHT.h, SPI.h e TFT.h. Se non sai come scaricare le librerie Arduino, consulta https://www.arduino.cc/en/Guide/Libraries. La libreria FHT.h è stata scaricata da openmusiclabs.com. Gli altri due sono stati scaricati su GitHub.

Passaggio 20: schizzo Arduino

Il codice utilizza la Fast Hartley Transform (FHT) per modificare il dominio del tempo in un dominio della frequenza. Questo può essere fatto anche usando la Fast Fourier Transform (FFT), ma la FHT è molto più veloce. FFT e FHT sono idee fondamentali nell'elaborazione del segnale e molto divertenti da imparare. Ti suggerisco di leggere tu stesso, se sei interessato, vedi. Il codice di esempio FHT che ho copiato dal sito Web di Open Music Labs inizialmente emetteva l'ampiezza di ciascun bin di frequenza come output logaritmico o decibel. L'ho modificato per emettere i bin di frequenza su una scala lineare. Questo perché la scala lineare è una migliore rappresentazione visiva di come gli umani sentono il suono. Il ciclo for() alla fine serve per disegnare l'ampiezza di ogni bin di frequenza sullo schermo LCD. Lo spettro FHT completo comprenderebbe tutti i bin di frequenza da i=0 a i<128. Noterai che il mio ciclo for() va da i=5 a i<40, questo perché le frequenze importanti per la diagnosi delle condizioni polmonari sono tipicamente comprese tra 150Hz e 3.5khz, ho deciso di salire a circa 4kHz. Questo può essere regolato se vuoi mostrare l'intero spettro di frequenze.

[codice]

//Codice Stetoscopio Digitale

// Libreria Fast Hartley Transform scaricata da openmusiclabs

#define LIN_OUT 1 //imposta FHT per produrre un output lineare

#define LOG_OUT 0 //disattiva l'uscita logaritmica FHT

#define FHT_N 256 //Numero campione FHT

#include //include la libreria FHT

#include //include libreria TFT

#include //include libreria SPI

#define cs 10 //imposta il pin lcd cs sul pin arduino 10

#define dc 9 //imposta il pin dc lcd sul pin arduino 9

#define rst 8 //imposta il pin di ripristino lcd sul pin arduino 8

TFT myScreen = TFT(cs, dc, rst);//dichiara il nome dello schermo TFT

void setup() {

//Serial.begin(9600);//imposta la frequenza di campionamento

myScreen.begin();//inizializza lo schermo TFT

myScreen.background(0, 0, 0);//imposta lo sfondo su nero

ADCSRA=0xe5;//imposta adc in modalità di esecuzione libera

ADMUX=0x40;//usa adc0

}

ciclo vuoto() {

while(1){ // riduce il jitter cli(); // L'interruzione UDRE rallenta in questo modo su arduino1.0

for (int i = 0; i < FHT_N; i++) { // salva 256 campioni

while(!(ADCSRA & 0x10)); // attendo che adc sia pronto

ADCSRA = 0xf5; // riavvia adc byte

m = ADCL; // recupera il byte di dati adc

j = ADCH; int k = (j << 8) | m; // forma in un int

k-= 0x0200; // forma in un int firmato

k<<= 6; // forma in un 16b firmato int

fht_input = k; // inserisco i dati reali nei contenitori

}

fht_window(); // finestra i dati per una migliore risposta in frequenza

fht_reorder(); // riordina i dati prima di fare il fht

fht_run(); // processa i dati in fht

fht_mag_lin(); // prende l'output di fht

sei();

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

miaSchermata.stroke(255, 255, 255);

miaSchermata.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);

}

mioSchermo.sfondo(0, 0, 0);

}

}

[/codice]

Passaggio 21: provalo

Provalo!
Provalo!

Ho usato un generatore di suoni online (https://www.szynalski.com/tone-generator/) per confermare che il codice funzionava correttamente. Dopo aver verificato che funziona, premi la campana dello stetoscopio fino al petto, fai un respiro profondo e guarda quali frequenze sono presenti!!

Passaggio 22: lavoro futuro

**Nota: sono un chimico, non un ingegnere o un informatico**. Ci saranno probabilmente errori e miglioramenti al design e al codice. Detto questo, penso che sia un buon inizio per qualcosa che può finire per essere molto utile ed economico. I seguenti punti sono miglioramenti futuri che vorrei apportare e spero che anche alcuni di voi provino a migliorarlo!

· Rendere mobile il dispositivo. Non ho una vasta esperienza con CPU o altri microcontrollori, ma avrebbe bisogno di memoria sufficiente per memorizzare l'intera libreria FHT, o forse Bluetooth.

· Introdurre nel codice alcuni calcoli di analisi statistica. Ad esempio, tipicamente un respiro sibilante ha una frequenza fondamentale uguale o maggiore di 400 Hz e dura almeno 250 ms. I ronchi si verificano a una frequenza fondamentale di circa 200 Hz o meno e durano per almeno 250 ms. Molti altri suoni polmonari sono definiti e indicativi di condizioni di salute (https://commongiant.github.io/iSonea-Physicians/assets/publications/7_ISN-charbonneau-Euro-resp-Jour-1995-1942-full.pdf). Penso che sia qualcosa che può essere verificato nel codice confrontando il segnale dei bin di frequenza dopo un certo numero di cicli attraverso l'FHT e quindi eseguendo la funzione millis() per vedere per quanto tempo era presente, quindi confrontandolo al rumore di fondo del calcolo FHT. Sono sicuro che queste cose possono essere fatte!

Spero che vi siate divertiti tutti con questo progetto e se avete domande commentate e risponderò il prima possibile! Aspetto di vedere i commenti.

Consigliato: