สารบัญ:

Fast Hartley Transform Spectral Stethoscope: 22 ขั้นตอน
Fast Hartley Transform Spectral Stethoscope: 22 ขั้นตอน

วีดีโอ: Fast Hartley Transform Spectral Stethoscope: 22 ขั้นตอน

วีดีโอ: Fast Hartley Transform Spectral Stethoscope: 22 ขั้นตอน
วีดีโอ: The Discrete Fourier Transform: Most Important Algorithm Ever? 2024, กรกฎาคม
Anonim
Fast Hartley Transform Spectral Stethoscope
Fast Hartley Transform Spectral Stethoscope

ในคำแนะนำนี้ คุณจะได้เรียนรู้วิธีสร้างเครื่องตรวจฟังเสียงแบบสเปกตรัมโดยใช้การแปลงฮาร์ทลี่ย์อย่างรวดเร็ว สามารถใช้เพื่อให้เห็นภาพเสียงของหัวใจและปอด

ขั้นตอนที่ 1: วัสดุ

หน้าจอ LCD 1.8” ($ 7.50 ใน Amazon)

Arduino Uno หรือเทียบเท่า ($7.00 บน Gearbest)

Electret Amplifier ($ 6.95 สำหรับ Adafruit)

ตัวเก็บประจุ 100 µF (0.79 ดอลลาร์)

ลวดและจัมเปอร์ ($4.00)

แจ็คสเตอริโอ 3.5 มม. ($ 1.50)

โพเทนชิโอมิเตอร์ 10kOhm ($2.00)

สวิตช์ชั่วขณะ ($1.50)

ขั้นตอนที่ 2: เครื่องมือ

หัวแร้ง

ปืนกาวร้อน

เครื่องพิมพ์ 3 มิติ…หรือเพื่อนที่ใช้เครื่องพิมพ์ 3 มิติ (สามารถทำด้วยกระดาษแข็งได้เช่นกัน)

เครื่องตัดลวด

เขียงหั่นขนม

ขั้นตอนที่ 3: การพิมพ์ 3 มิติ

อย่างแรกคือการพิมพ์ 3 มิติไฟล์.stl ที่แนบมากับขั้นตอนนี้ ฉันพิมพ์ทั้งสองไฟล์โดยใช้วัสดุ/การตั้งค่าต่อไปนี้:

วัสดุ: PLA

ความสูงของชั้น: 0.1mm

ผนัง/บน/ล่างความหนา: 0.8mm

อุณหภูมิการพิมพ์: 200⁰C

อุณหภูมิเตียง: 60⁰C

เปิดใช้งานการสนับสนุน @ 10%

ขั้นตอนที่ 4: สร้างวงจร

ใช้ส่วนประกอบในส่วนวัสดุสร้างวงจร ฉันมักจะประกอบวงจรไว้บนเขียงหั่นขนมก่อนเพื่อให้แน่ใจว่ามันทำงานอย่างถูกต้องก่อนที่จะสัมผัสหัวแร้ง

ขั้นตอนที่ 5: การเดินสาย LCD

สายไฟ LCD
สายไฟ LCD

ใช้รูปที่แนบมากับขั้นตอนนี้ บัดกรีสายไฟกับหมุดเจ็ดในแปดตัวบนหน้าจอ LCD สายไฟเหล่านี้จะต้องมีความยาวประมาณ 3 ฟุต ยกเว้นสายกราวด์และพิน +5V (ขนาดเพียง 2-3 นิ้วเท่านั้น)

ขั้นตอนที่ 6: การเดินสายไมค์/เครื่องขยายเสียง

การเดินสายไมค์/เครื่องขยายเสียง
การเดินสายไมค์/เครื่องขยายเสียง

การใช้รูปที่แนบมากับขั้นตอนนี้ประสานสายไฟสามเส้นเข้ากับหมุด +5V, Ground และ Out บนไมโครโฟน/เครื่องขยายสัญญาณ Adafruit ต้องมีความยาวประมาณ 2-3 นิ้วเท่านั้น

ขั้นตอนที่ 7: การเดินสายสวิตช์ชั่วขณะ

ต่อสายขนาด 2-3 นิ้วหนึ่งเส้นเข้ากับตัวเชื่อมสองตัวบนสวิตช์ชั่วขณะ

ขั้นตอนที่ 8: การเดินสายโพเทนชิออมิเตอร์

ใช้รูปในขั้นตอนที่ 6 บัดกรีสายไฟสามเส้นที่มีความยาวประมาณ 2-3 นิ้วกับข้อต่อทั้งสามของโพเทนชิออมิเตอร์

ขั้นตอนที่ 9: การเดินสายแจ็คหูฟัง

บัดกรีสายไฟสามเส้นเข้ากับวงแหวน ปลาย และปลอกของแจ็คหูฟัง ฉันใช้แม่แรงจากเครื่องเมตรอนอมที่ต่อสายไว้แล้ว หากคุณไม่รู้ว่าแหวน ปลาย และปลอกหุ้มคืออะไร แค่ google ก็มีรูปภาพดีๆ มากมายเกี่ยวกับการเดินสายแจ็คสเตอริโอ

ขั้นตอนที่ 10: เอาต์พุตไมโครโฟน/เครื่องขยายเสียง

หลังจากบัดกรีสายไฟบนไมโครโฟน/แอมป์ โพเทนชิออมิเตอร์ และแจ็คหูฟังแล้ว ให้บัดกรีสายไฟหนึ่งเส้นที่มีความยาวประมาณ 3 ฟุตกับสาย "ออก" ของเครื่องขยายเสียงไมโครโฟน สายนี้จะเชื่อมต่อกับพิน A0 ของ Arduino ในภายหลัง

ขั้นตอนที่ 11: เอาต์พุตไมโครโฟน/เครื่องขยายเสียงดำเนินการต่อ

บัดกรีสายที่สองเข้ากับสาย "ออก" ของไมโครโฟน/เครื่องขยายเสียง ลวดนี้ต้องบัดกรีกับตัวเก็บประจุขนาด 100 microFarad หากคุณกำลังใช้ตัวเก็บประจุด้วยไฟฟ้า ตรวจสอบให้แน่ใจว่าด้านบวกเชื่อมต่อกับสายนี้แล้ว

ขั้นตอนที่ 12: ส่วนประกอบในเอกสารแนบ

ส่วนประกอบในเอกสารแนบ
ส่วนประกอบในเอกสารแนบ
ส่วนประกอบในเอกสารแนบ
ส่วนประกอบในเอกสารแนบ

หลังจากบัดกรีสายไฟทั้งหมดบนส่วนประกอบแล้ว ให้วางส่วนประกอบในตำแหน่งที่เกี่ยวข้องตามภาพที่แนบมาในขั้นตอนนี้ ฉันใช้กาวร้อนเพื่อยึดไมโครโฟนและแจ็คหูฟังให้เข้าที่

ขั้นตอนที่ 13: In-Enclosure-Soldering

หลังจากที่ส่วนประกอบทั้งหมดถูกยึดเข้ากับตัวเครื่องแล้ว ให้บัดกรีสายกราวด์ทั้งหมดเข้าด้วยกัน ควรมีหนึ่งอันจาก LCD หนึ่งอันจากไมโครโฟน / แอมป์และอีกอันจากปลอกของแจ็คหูฟัง ยังประสานสาย +5V เข้าด้วยกันและหนึ่งสายจากสวิตช์ชั่วขณะ ควรมีอีกครั้งหนึ่งจาก LCD หนึ่งอันจากไมโครโฟน / เครื่องขยายเสียงและอีกอันบนสวิตช์ชั่วขณะ

ขั้นตอนที่ 14: +5V, GND Extended Wires

ตอนนี้ตัดลวดสองเส้นยาวประมาณ 3 ฟุต ประสานหนึ่งเข้ากับคลัสเตอร์ของสายกราวด์และประสานอีกอันกับลวดเปิดบนสวิตช์ชั่วขณะ

ขั้นตอนที่ 15: สลิปสายยาวผ่านรูตู้

สลิปสายยาวผ่านรูตู้
สลิปสายยาวผ่านรูตู้

ตอนนี้ คุณควรมีสายไฟทั้งหมดแปดเส้น ยาวประมาณ 3 ฟุต วางสิ่งเหล่านี้ผ่านรูที่ยังไม่ได้บรรจุในกล่องหุ้ม ดูรูปที่แนบมาในขั้นตอนนี้

ขั้นตอนที่ 16: การหดตัวด้วยความร้อน

หลังจากการบัดกรีทั้งหมดเสร็จสิ้น ตรวจสอบให้แน่ใจว่าได้ปิดสายไฟที่สัมผัสไว้ ฉันใช้ท่อหดแบบใช้ความร้อน แต่เทปไฟฟ้าก็ใช้ได้ดีเช่นกัน

ขั้นตอนที่ 17: ปิดผนึกสิ่งที่แนบมา

ตู้ซีล
ตู้ซีล
ตู้ซีล
ตู้ซีล

นำครึ่งหนึ่งของกล่องหุ้มที่มีหน้าจอ LCD มาวางทับอีกครึ่งหนึ่งของกล่องหุ้มที่มีส่วนประกอบอื่นๆ ขณะดันชิ้นส่วนทั้งสองเข้าด้วยกัน ให้กาวร้อนเพื่อยึดกล่องหุ้มเข้าด้วยกัน

ขั้นตอนที่ 18: เชื่อมต่อกับ Arduino

สายไฟยาวแปดเส้นที่เหลือเชื่อมต่อโดยตรงกับหมุด Arduino ตามลำดับที่ระบุไว้ในแผนผังวงจร ตรวจสอบให้แน่ใจว่าทุกครั้งที่คุณบัดกรีสายไฟยาว 3 ฟุตเส้นใดเส้นหนึ่งเข้ากับวงจรที่คุณติดเทปไว้ที่ปลายอีกด้านเพื่อระบุว่าขา Arduino นั้นจะไปที่ใด!

ขั้นตอนที่ 19: Arduino IDE/ไลบรารี่

คุณจะต้องดาวน์โหลด Arduino IDE สำหรับการสเก็ตช์นี้ ฉันใช้ไลบรารีที่แตกต่างกันสามไลบรารี: FHT.h, SPI.h และ TFT.h หากคุณไม่ทราบวิธีดาวน์โหลดไลบรารี Arduino โปรดดูที่ https://www.arduino.cc/en/Guide/Libraries ดาวน์โหลดไลบรารี FHT.h จาก openmusiclabs.com อีกสองรายการถูกดาวน์โหลดบน GitHub

ขั้นตอนที่ 20: Arduino Sketch

รหัสนี้ใช้ Fast Hartley Transform (FHT) เพื่อเปลี่ยนโดเมนเวลาเป็นโดเมนความถี่ สิ่งนี้สามารถทำได้โดยใช้ Fast Fourier Transform (FFT) แต่ FHT นั้นเร็วกว่ามาก FFT และ FHT เป็นแนวคิดพื้นฐานในการประมวลผลสัญญาณและสนุกมากที่จะเรียนรู้ ฉันขอแนะนำให้อ่านตัวเองถ้าคุณสนใจดู โค้ดตัวอย่าง FHT ที่ฉันคัดลอกมาจากเว็บไซต์ Open Music Labs เริ่มแรกแสดงแอมพลิจูดของช่องความถี่แต่ละช่องเป็นเอาต์พุตแบบลอการิทึมหรือเดซิเบล ฉันเปลี่ยนสิ่งนี้เพื่อส่งออกช่องความถี่ในระดับเชิงเส้น เนื่องจากสเกลเชิงเส้นแสดงภาพได้ดีกว่าว่ามนุษย์ได้ยินเสียงอย่างไร ลูป for() ที่ส่วนท้ายใช้สำหรับวาดแอมพลิจูดของแต่ละช่องความถี่บนหน้าจอ LCD สเปกตรัม FHT แบบเต็มจะรวมช่องความถี่ทั้งหมดตั้งแต่ i=0 ถึง i<128 คุณจะสังเกตเห็นว่าลูป for() ของฉันมาจาก i=5 ถึง i<40 นี่เป็นเพราะความถี่ที่สำคัญสำหรับการวินิจฉัยโรคปอดมักจะอยู่ระหว่าง 150Hz ถึง 3.5khz ฉันตัดสินใจเพิ่มเป็น 4kHz ที่สามารถปรับได้หากต้องการแสดงคลื่นความถี่เต็ม

[รหัส]

//รหัสหูฟังดิจิตอล

//ห้องสมุด Fast Hartley Transform ที่ดาวน์โหลดจาก 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 pin เป็น arduino pin 10

#define dc 9 // ตั้งค่า lcd dc pin เป็น arduino pin 9

#define rst 8 // ตั้งค่าพินรีเซ็ต lcd เป็น arduino pin 8

TFT myScreen = TFT(cs, dc, rst);//ประกาศชื่อหน้าจอ TFT

การตั้งค่าเป็นโมฆะ () {

//Serial.begin(9600);//กำหนดอัตราการสุ่มตัวอย่าง

myScreen.begin();//เริ่มต้นหน้าจอ TFT

myScreen.background(0, 0, 0); // ตั้งค่าพื้นหลังเป็นสีดำ

ADCSRA=0xe5;//ตั้งค่า adc เป็นโหมดทำงานอิสระ

ADMUX=0x40;//ใช้adc0

}

วงเป็นโมฆะ () {

while(1){ // ลดความกระวนกระวายใจ cli(); // UDRE ขัดจังหวะช้าลงบน arduino1.0

สำหรับ (int i = 0; i < FHT_N; i++) { // บันทึก 256 ตัวอย่าง

ในขณะที่(!(ADCSRA & 0x10)); // รอ adc พร้อมครับ

ADCSRA = 0xf5; // รีสตาร์ท adc byte

ม. = ADCL; // ดึงข้อมูล ADC byte

เจ = ADCH; int k = (j << 8) | NS; // สร้างเป็น int

k -= 0x0200; // ฟอร์มเป็น int ที่ลงชื่อเข้าใช้

k <<= 6; // สร้างเป็น 16b ลงนาม int

fht_input = k; // ใส่ข้อมูลจริงลงในถังขยะ

}

fht_window(); // หน้าต่างข้อมูลเพื่อการตอบสนองความถี่ที่ดีขึ้น

fht_reorder(); // เรียงลำดับข้อมูลใหม่ก่อนทำ fht

fht_run(); // ประมวลผลข้อมูลใน fht

fht_mag_lin(); // รับผลลัพธ์ของ fht

เส ();

สำหรับ (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);

}

}

[/รหัส]

ขั้นตอนที่ 21: ทดสอบเลย

ทดสอบออก!
ทดสอบออก!

ฉันใช้เครื่องสร้างโทนเสียงออนไลน์ (https://www.szynalski.com/tone-generator/) เพื่อยืนยันว่าโค้ดทำงานอย่างถูกต้อง หลังจากยืนยันการทำงานแล้ว ให้กดกริ่งของหูฟังขึ้นไปที่หน้าอก หายใจเข้าลึกๆ แล้วดูว่ามีความถี่ใดบ้าง!!

ขั้นตอนที่ 22: งานในอนาคต

**หมายเหตุ: ฉันเป็นนักเคมี ไม่ใช่วิศวกรหรือนักวิทยาศาสตร์คอมพิวเตอร์** อาจมีข้อผิดพลาดและการปรับปรุงการออกแบบและโค้ด อย่างที่บอกไป ฉันคิดว่ามันเป็นการเริ่มต้นที่ดีที่จะมีประโยชน์และราคาไม่แพง หัวข้อย่อยต่อไปนี้เป็นการปรับปรุงในอนาคตที่ฉันอยากจะทำ และฉันหวังว่าพวกคุณบางคนจะพยายามปรับปรุงมันด้วย!

· ทำให้อุปกรณ์เคลื่อนที่ ฉันไม่มีประสบการณ์มากมายเกี่ยวกับ CPU หรือไมโครคอนโทรลเลอร์อื่นๆ แต่จะต้องมีหน่วยความจำเพียงพอที่จะจัดเก็บไลบรารี FHT ทั้งหมด หรืออาจเป็นบลูทูธ

· แนะนำการคำนวณการวิเคราะห์ทางสถิติบางส่วนลงในโค้ด ตัวอย่างเช่น โดยทั่วไปแล้วเสียงฮืด ๆ จะมีความถี่พื้นฐานเท่ากับหรือมากกว่า 400 Hz และกินเวลาอย่างน้อย 250 ms Rhonchi เกิดขึ้นที่ความถี่พื้นฐานประมาณ 200 Hz หรือน้อยกว่าและกินเวลาอย่างน้อย 250 ms เสียงปอดอื่นๆ ถูกกำหนดและบ่งบอกถึงภาวะสุขภาพ ฉันคิดว่านั่นเป็นสิ่งที่สามารถตรวจสอบได้ในโค้ดโดยการเปรียบเทียบสัญญาณของช่องเก็บความถี่หลังจากผ่าน FHT จำนวนหนึ่งแล้วจึงเรียกใช้ฟังก์ชัน millis() เพื่อดูว่ามีสัญญาณอยู่นานแค่ไหน จากนั้นจึงเปรียบเทียบ ไปที่ระดับเสียงของการคำนวณ FHT ฉันมั่นใจว่าสิ่งเหล่านี้สามารถทำได้!

ฉันหวังว่าทุกคนจะสนุกกับโครงการนี้และหากคุณมีคำถามใด ๆ โปรดแสดงความคิดเห็นและฉันจะตอบกลับโดยเร็วที่สุด! ฉันหวังว่าจะได้เห็นความคิดเห็น

แนะนำ: