Оглавление:

Спектральный стетоскоп с быстрым преобразованием Хартли: 22 шага
Спектральный стетоскоп с быстрым преобразованием Хартли: 22 шага

Видео: Спектральный стетоскоп с быстрым преобразованием Хартли: 22 шага

Видео: Спектральный стетоскоп с быстрым преобразованием Хартли: 22 шага
Видео: Основы ЦОС: 18. Преобразование Фурье (ссылки на скачивание скриптов в описании) 2024, Ноябрь
Anonim
Спектральный стетоскоп с быстрым преобразованием Хартли
Спектральный стетоскоп с быстрым преобразованием Хартли

Из этого руководства вы узнаете, как создать спектральный стетоскоп с помощью быстрого преобразования Хартли. Это можно использовать для визуализации звуков сердца и легких.

Шаг 1: материалы

1,8-дюймовый ЖК-экран (7,50 долларов на Amazon)

Arduino Uno или эквивалент (7 долларов США на Gearbest)

Электретный усилитель (6,95 доллара на Adafruit)

Конденсатор 100 мкФ (0,79 $)

Проволока и перемычки (4 доллара США)

Стереоразъем 3,5 мм (1,50 доллара США)

Потенциометр 10 кОм (2,00 доллара США)

Мгновенный переключатель (1,50 доллара США)

Шаг 2: Инструменты

Паяльник

Пистолет для горячего клея

3D-принтер… или друг с 3D-принтером (можно сделать и из картона)

Кусачки

Макетная плата

Шаг 3: 3D-печать

Первый - это 3D-печать файлов.stl, прикрепленных к этому шагу. Я распечатал оба файла, используя следующие материалы / настройки:

Материал: PLA

Высота слоя: 0,1 мм

Толщина стенки / верха / низа: 0,8 мм

Температура печати: 200⁰C

Температура кровати: 60⁰C

Поддержка включена @ 10%

Шаг 4: построить схему

Используя компоненты из раздела материалов, постройте схему. Я всегда сначала собираю схему на макетной плате, чтобы убедиться, что она работает правильно, прежде чем прикасаться к паяльнику.

Шаг 5: Подключение ЖК-дисплея

ЖК-проводка
ЖК-проводка

Используя рисунок, прикрепленный к этому шагу, припаяйте провода к семи из восьми контактов на ЖК-экране. Эти провода должны быть около 3 футов в длину, за исключением заземления и контактов + 5 В (они должны быть только 2-3 дюйма).

Шаг 6: Подключение микрофона / усилителя

Подключение микрофона / усилителя
Подключение микрофона / усилителя

Используя рисунок, прикрепленный к этому шагу, припаяйте три провода к контактам + 5V, Ground и Out на микрофоне / усилителе Adafruit. Они должны быть всего около 2-3 дюймов в длину.

Шаг 7: Подключение переключателя мгновенного действия

Подсоедините по одному проводу длиной 2–3 дюйма к каждому из двух выступов переключателя без фиксации.

Шаг 8: Подключение потенциометра

Используя рисунок из шага 6, припаяйте три провода длиной около 2-3 дюймов к трем ушкам потенциометра.

Шаг 9: Подключение разъема для наушников

Припаяйте три провода к кольцу, наконечнику и наконечникам разъема для наушников. Я использовал разъем от метронома, который уже был подключен. Если вы не знаете, что такое кольцо, наконечник и наконечники гильзы, просто погуглите, там есть много хороших изображений о подключении стереоразъемов.

Шаг 10: Выход микрофона / усилителя

Припаяв провода к микрофону / усилителю, потенциометру и разъему для наушников, припаяйте один провод длиной около трех футов к выходному проводу микрофонного усилителя. Этот провод позже будет подключен к выводу A0 Arduino.

Шаг 11: выход микрофона / усилителя (продолжение)

Припаяйте второй провод к проводу «out» микрофона / усилителя. Этот провод нужно припаять к конденсатору 100 мкФ. Если вы используете электролитический конденсатор, убедитесь, что положительная сторона подключена к этому проводу.

Шаг 12: Компоненты в корпусе

Компоненты в корпусе
Компоненты в корпусе
Компоненты в корпусе
Компоненты в корпусе

После того, как все провода припаяны к компонентам, поместите компоненты в соответствующие места, как показано на рисунках, приложенных к этому шагу. Я использовал горячий клей, чтобы закрепить разъем для микрофона и наушников на месте.

Шаг 13: пайка в корпусе

После того, как все компоненты будут закреплены в корпусе, спаяйте все заземляющие провода вместе. Один должен быть от ЖК-дисплея, один от микрофона / усилителя и один от гнезда для наушников. Также спаяйте вместе провода + 5V и один провод от выключателя без фиксации. Опять же, должен быть один от ЖК-дисплея, один от микрофона / усилителя и один на переключателе мгновенного действия.

Шаг 14: +5 В, удлиненные провода GND

Теперь отрежьте два куска проволоки длиной около 3 футов. Припаяйте один к группе проводов заземления, а другой припаяйте к разомкнутому проводу на переключателе без фиксации.

Шаг 15: пропустите длинные провода через отверстие в корпусе

Пропустите длинные провода через отверстие в корпусе
Пропустите длинные провода через отверстие в корпусе

Теперь у вас должно получиться восемь проводов длиной около 3 футов. Вставьте их через незаполненное отверстие в корпусе. См. Рисунок, прикрепленный к этому шагу.

Шаг 16: термоусадка

После завершения пайки убедитесь, что оголенные провода закрыты. Я использовал термоусадочную трубку, но изолента тоже подойдет.

Шаг 17: опломбируйте корпус

Корпус уплотнения
Корпус уплотнения
Корпус уплотнения
Корпус уплотнения

Возьмите половину корпуса, содержащую ЖК-экран, и наденьте ее на другую половину корпуса, содержащую другие компоненты. Сдвигая две части вместе, склейте их горячим клеем, чтобы скрепить корпус вместе.

Шаг 18: подключитесь к Arduino

Остальные восемь длинных проводов подключаются непосредственно к соответствующим контактам Arduino, указанным на принципиальной схеме. Убедитесь, что каждый раз, когда вы впаиваете один из этих длинных 3-футовых проводов в схему, вы кладете кусок ленты на другой конец, указывая, к какому контакту Arduino он идет!

Шаг 19: IDE / библиотеки Arduino

Вам нужно будет загрузить Arduino IDE. Для этого скетча я использовал три разные библиотеки: FHT.h, SPI.h и TFT.h. Если вы не знаете, как загружать библиотеки Arduino, см. Https://www.arduino.cc/en/Guide/Libraries. Библиотека FHT.h была загружена с openmusiclabs.com. Два других были загружены на GitHub.

Шаг 20: эскиз Arduino

Код использует быстрое преобразование Хартли (FHT) для изменения временной области на частотную. Это также можно сделать с помощью быстрого преобразования Фурье (БПФ), но БПХ намного быстрее. БПФ и БПЧ - очень фундаментальные идеи в обработке сигналов, и их очень интересно изучать. Я предлагаю почитать самому, если вам интересно, посмотрите. Код примера FHT, который я скопировал с веб-сайта Open Music Labs, изначально выводил амплитуду каждого частотного бина в логарифмическом или децибельном формате. Я изменил это, чтобы выводить элементы разрешения по частоте в линейном масштабе. Это потому, что линейная шкала лучше визуально отображает то, как люди слышат звук. Цикл for () в конце предназначен для рисования амплитуды каждого частотного бина на ЖК-экране. Полный спектр БПА будет охватывать все элементы разрешения по частоте от i = 0 до i <128. Вы заметите, что мой цикл for () находится в диапазоне от i = 5 до i <40, это связано с тем, что частоты, важные для диагностики состояний легких, обычно находятся в диапазоне от 150 Гц до 3,5 кГц, я решил увеличить примерно до 4 кГц. Это можно отрегулировать, если вы хотите показать полный частотный спектр.

[код]

// Код цифрового стетоскопа

// Библиотека быстрого преобразования Хартли, загруженная с openmusiclabs

#define LIN_OUT 1 // установить FHT для линейного вывода

#define LOG_OUT 0 // выключить логарифмический вывод FHT

#define FHT_N 256 // Номер выборки FHT

#include // включить библиотеку FHT

#include // включить библиотеку TFT

#include // включить библиотеку SPI

#define cs 10 // установить вывод lcd cs на вывод 10 Arduino

#define dc 9 // установить вывод lcd dc на вывод 9 Arduino

#define rst 8 // установить вывод сброса ЖК-дисплея на вывод 8 Arduino

TFT myScreen = TFT (cs, dc, rst); // объявляем имя экрана TFT

void setup () {

//Serial.begin(9600);// установить частоту дискретизации

myScreen.begin (); // инициализируем экран TFT

myScreen.background (0, 0, 0); // установить черный фон

ADCSRA = 0xe5; // переводим adc в автономный режим

ADMUX = 0x40; // используем adc0

}

void loop () {

while (1) {// уменьшает дрожание cli (); // Прерывание UDRE замедляется таким образом на arduino1.0

for (int i = 0; i <FHT_N; i ++) {// сохраняем 256 сэмплов

в то время как (! (ADCSRA & 0x10)); // ждем, пока adc будет готов

ADCSRA = 0xf5; // перезапускаем байт adc

m = ADCL; // получаем байт данных ADC

j = ADCH; int k = (j << 8) | м; // преобразовать в int

k - = 0x0200; // преобразовать в подписанный int

k << = 6; // преобразовать в 16-битное целое число со знаком

fht_input = k; // помещаем реальные данные в бункеры

}

fht_window (); // окно данных для лучшей частотной характеристики

fht_reorder (); // переупорядочиваем данные перед выполнением fht

fht_run (); // обрабатываем данные в fht

fht_mag_lin (); // берем вывод fht

sei ();

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

myScreen.stroke (255, 255, 255);

myScreen.fill (255, 255, 255);

int drawHeight = карта (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);

}

}

[/код]

Шаг 21: Проверьте это

Проверьте это!
Проверьте это!

Я использовал онлайн-генератор тонов (https://www.szynalski.com/tone-generator/), чтобы убедиться, что код работает правильно. Убедившись, что это работает, прижмите колокольчик стетоскопа к груди, сделайте глубокий вдох и посмотрите, какие частоты присутствуют !!

Шаг 22: Дальнейшая работа

** Примечание: я химик, а не инженер или компьютерный ученый **. Вероятно, будут ошибки и улучшения в дизайне и коде. При этом я думаю, что это хорошее начало для чего-то, что может оказаться очень полезным и недорогим. Следующие пункты - это будущие улучшения, которые я хотел бы внести, и я надеюсь, что некоторые из вас также попытаются улучшить это!

· Сделайте устройство мобильным. У меня нет большого опыта работы с процессорами или другими микроконтроллерами, но для хранения всей библиотеки FHT или, возможно, Bluetooth потребуется достаточно памяти.

· Ввести в код некоторые расчеты статистического анализа. Например, обычно хрип имеет основную частоту, равную или превышающую 400 Гц, и длится не менее 250 мс. Хрипы возникают на основной частоте около 200 Гц или меньше и длится не менее 250 мс. Многие другие легочные шумы определяются и указывают на состояние здоровья (https://commongiant.github.io/iSonea-PhysICAL/assets/publications/7_ISN-charbonneau-Euro-resp-Jour-1995-1942-full.pdf). Я думаю, что это то, что можно проверить в коде, сравнив сигнал частотных бинов после определенного количества циклов через FHT, а затем запустив функцию millis (), чтобы увидеть, как долго он присутствовал, а затем сравнив его. к минимальному уровню шума при расчете БПА. Я уверен, что это возможно!

Я надеюсь, что вам всем понравился этот проект, и если у вас есть какие-либо вопросы, прокомментируйте, и я отвечу, как только смогу! Жду комментариев.

Рекомендуемые: