สารบัญ:
- ขั้นตอนที่ 1: วัสดุ
- ขั้นตอนที่ 2: ภูมิหลังทางสรีรวิทยาและความต้องการวงจร
- ขั้นตอนที่ 3: การประมวลผลสัญญาณ: ทำไมและอย่างไร
- ขั้นตอนที่ 4: วิธีการทำงานของวงจร
- ขั้นตอนที่ 5: การเลือกส่วนประกอบและค่านิยม
- ขั้นตอนที่ 6: สร้างวงจร
- ขั้นตอนที่ 7: ทดสอบวงจรกับมนุษย์
- ขั้นตอนที่ 8: รหัส Arduino
- ขั้นตอนที่ 9: ขั้นตอนในอนาคต
วีดีโอ: การควบคุมแสงด้วยตาของคุณ: 9 ขั้นตอน (พร้อมรูปภาพ)
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:03
เทอมนี้ที่วิทยาลัย ฉันได้เรียนวิชาที่ชื่อว่า Instrumentation in Biomedicine ซึ่งฉันได้เรียนรู้พื้นฐานของการประมวลผลสัญญาณสำหรับการใช้งานทางการแพทย์ สำหรับโครงงานสุดท้ายของชั้นเรียน ทีมงานของฉันทำงานเกี่ยวกับเทคโนโลยี EOG (electrooculography) โดยพื้นฐานแล้ว อิเล็กโทรดที่ติดอยู่กับขมับของใครบางคนจะส่งความต่างศักย์ (ขึ้นอยู่กับไดโพล corneo-retinal) ไปยังวงจรที่ออกแบบมาเพื่อกรองและขยายสัญญาณ สัญญาณถูกส่งไปยัง ADC (ตัวแปลงแอนะล็อกเป็นดิจิทัล - ในกรณีของฉันคือ ADC ของ Arduino Uno) และใช้เพื่อเปลี่ยนสีของอัญมณีนีโอพิกเซล
บทช่วยสอนนี้เป็นวิธีบันทึกสิ่งที่ฉันได้เรียนรู้ และแชร์กับผู้อ่านทั่วไปด้วยว่าสัญญาณต่างๆ ถูกแยกออกจากร่างกายมนุษย์อย่างไร (ขอเตือนไว้ก่อน: มีรายละเอียดมากเป็นพิเศษ!) วงจรนี้สามารถใช้ได้จริง โดยมีการเปลี่ยนแปลงเล็กน้อยเล็กน้อย เพื่อกระตุ้นไฟฟ้าของหัวใจมอเตอร์เป็นรูปคลื่น EKG และอีกมากมาย! แม้ว่าจะไม่มีทางก้าวหน้าและสมบูรณ์แบบเท่ากับเครื่องจักรที่คุณพบในโรงพยาบาลอย่างแน่นอน แต่หลอดไฟที่ควบคุมตำแหน่งด้วยตานี้เหมาะสำหรับการทำความเข้าใจเบื้องต้นและเหลือบมอง
หมายเหตุ: ฉันไม่ใช่ผู้เชี่ยวชาญในการประมวลผลสัญญาณ ดังนั้นหากมีข้อผิดพลาดหรือมีข้อเสนอแนะสำหรับการปรับปรุง โปรดแจ้งให้เราทราบ! ฉันยังมีอะไรให้เรียนรู้อีกมาก ดังนั้นการวิจารณ์จึงเป็นที่ชื่นชม นอกจากนี้ เอกสารจำนวนมากที่ฉันอ้างอิงในลิงก์ตลอดบทช่วยสอนนี้จำเป็นต้องมีการเข้าถึงทางวิชาการซึ่งฉันได้รับความอนุเคราะห์จากมหาวิทยาลัยของฉัน ขออภัยล่วงหน้าสำหรับผู้ที่จะไม่สามารถเข้าถึงได้
ขั้นตอนที่ 1: วัสดุ
- โปรโตบอร์ด
- ตัวต้านทาน (100, 1k, 10k, 33k, 1M + 0.5M)
- ตัวเก็บประจุ (0.1uF)
- แอมป์เครื่องมือวัด (INA111 ในกรณีของฉัน แต่มีสองสามตัวที่น่าจะใช้งานได้ค่อนข้างดี)
- op amp (อะไรก็ได้ - ฉันมี LM324N)
- neopixel (งานอะไรก็ได้ แต่ฉันใช้อัญมณี)
- แบตเตอรี่ 9V x2
- หัวต่อแบตเตอรี่ 9V x2
- อิเล็กโทรดเจลแข็ง (การเลือกอิเล็กโทรดจะกล่าวถึงในขั้นตอนที่ 5)
- โพเทนชิออมิเตอร์
- ลวดหุ้มฉนวน
- เครื่องปอกสายไฟ
- หัวแร้ง + หัวแร้ง
- คลิปจระเข้ (พร้อมสายไฟ - บัดกรีบางส่วนหากจำเป็น)
- กาวร้อน (เพื่อรักษาเสถียรภาพของสายไฟที่จะงอไปมา)
- Arduino (ใช้งานได้แทบทุกอย่าง แต่ฉันใช้ Arduino Uno)
ขอแนะนำอย่างยิ่ง: ออสซิลโลสโคป มัลติมิเตอร์ และเครื่องกำเนิดฟังก์ชัน สำรวจเอาต์พุตของคุณแทนที่จะใช้ค่าตัวต้านทานของฉัน!
ขั้นตอนที่ 2: ภูมิหลังทางสรีรวิทยาและความต้องการวงจร
ข้อจำกัดความรับผิดชอบโดยย่อ: ฉันไม่เคยเป็นผู้เชี่ยวชาญทางการแพทย์ในสาขานี้เลย แต่ฉันได้รวบรวมและทำให้สิ่งที่ฉันได้เรียนรู้ในชั้นเรียน/จาก Googling ด้านล่างนี้ง่ายขึ้น พร้อมลิงก์สำหรับอ่านเพิ่มเติมหากคุณต้องการ นอกจากนี้ ลิงก์นี้เป็นภาพรวมที่ดีที่สุดของหัวข้อที่ฉันพบ รวมถึงเทคนิคทางเลือกด้วย
EOG (electro-oculography) ทำงานบนไดโพลกระจกตาและเรตินา กระจกตา (ด้านหน้าของดวงตา) มีประจุบวกเล็กน้อย และเรตินา (หลังตา) มีประจุลบเล็กน้อย เมื่อคุณใส่อิเล็กโทรดที่ขมับและต่อวงจรไว้ที่หน้าผากของคุณ (ช่วยให้การอ่านของคุณมีความเสถียรและกำจัดสัญญาณรบกวน 60Hz) คุณสามารถวัดความแตกต่างของแรงดันไฟฟ้าประมาณ 1-10mV สำหรับการเคลื่อนไหวของดวงตาในแนวนอน (ดูภาพด้านบน) สำหรับการเคลื่อนไหวของดวงตาในแนวตั้ง ให้วางอิเล็กโทรดไว้เหนือและใต้ตาของคุณแทน ดูบทความนี้เพื่ออ่านบทความดีๆ เกี่ยวกับวิธีที่ร่างกายโต้ตอบกับกระแสไฟฟ้า -- ข้อมูลดีๆ เกี่ยวกับอิมพีแดนซ์ของผิวหนัง ฯลฯ โดยปกติแล้ว EOG จะใช้ในการวินิจฉัยโรคทางตา เช่น ต้อกระจก ข้อผิดพลาดในการหักเหของแสง หรือจอประสาทตาเสื่อม นอกจากนี้ยังมีการใช้งานในหุ่นยนต์ควบคุมด้วยตา ซึ่งงานง่ายๆ สามารถทำได้ด้วยการสะบัด..
ในการอ่านสัญญาณเหล่านี้ เช่น คำนวณความต่างศักย์ระหว่างอิเล็กโทรด เราได้รวมชิปสำคัญที่เรียกว่าเครื่องขยายสัญญาณเครื่องมือวัดเข้ากับวงจรของเรา แอมป์เครื่องมือวัดนี้ประกอบด้วยผู้ติดตามแรงดันไฟฟ้า แอมป์ที่ไม่กลับด้าน และแอมป์ส่วนต่าง หากคุณไม่ค่อยมีความรู้เกี่ยวกับ op amps มากนัก โปรดอ่านบทเรียนนี้เพื่อดูหลักสูตรที่เกิดปัญหา - โดยพื้นฐานแล้ว จะใช้แรงดันไฟฟ้าขาเข้า ปรับขนาด และส่งออกแรงดันไฟฟ้าที่เป็นผลลัพธ์โดยใช้รางจ่ายไฟ การรวมตัวต้านทานทั้งหมดระหว่างแต่ละขั้นตอนช่วยให้เกิดข้อผิดพลาดด้านความทนทาน: โดยปกติตัวต้านทานจะมีค่าความคลาดเคลื่อน 5-10% และวงจรปกติ (ไม่ได้ผสานรวมอย่างสมบูรณ์ในแอมป์เครื่องมือวัด) จะต้องอาศัยความแม่นยำอย่างมากสำหรับ CMMR ที่ดี (ดูขั้นตอนถัดไป). ผู้ติดตามแรงดันไฟฟ้ามีไว้สำหรับอิมพีแดนซ์อินพุตสูง (อธิบายไว้ในย่อหน้าด้านบน - หลักในการป้องกันอันตรายต่อผู้ป่วย) แอมป์ที่ไม่กลับด้านคือเพื่อให้แน่ใจว่าได้รับสัญญาณสูง (เพิ่มเติมเกี่ยวกับการขยายเสียงในขั้นตอนต่อไป) และแอมป์ที่แตกต่างกันใช้ความแตกต่าง ระหว่างอินพุต (ลบค่าออกจากอิเล็กโทรด) สิ่งเหล่านี้ได้รับการออกแบบมาเพื่อขจัดสัญญาณรบกวน/การรบกวนของโหมดทั่วไปให้มากที่สุด (สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการประมวลผลสัญญาณ โปรดดูขั้นตอนถัดไป) สำหรับสัญญาณชีวการแพทย์ ซึ่งเต็มไปด้วยสิ่งประดิษฐ์ที่ไม่เกี่ยวข้อง
อิเล็กโทรดต้องเผชิญกับอิมพีแดนซ์ของผิวหนังเนื่องจากเนื้อเยื่อและไขมันของผิวหนังขัดขวางการวัดแรงดันไฟฟ้าโดยตรง ส่งผลให้ต้องขยายสัญญาณและกรองสัญญาณ ที่นี่ ที่นี่ และนี่คือบทความบางส่วนที่นักวิจัยพยายามหาค่าอิมพีแดนซ์นี้ ปริมาณทางสรีรวิทยานี้มักถูกจำลองเป็นตัวต้านทาน 51kOhm ควบคู่ไปกับตัวเก็บประจุ 47nF แม้ว่าจะมีรูปแบบและชุดค่าผสมมากมาย ผิวหนังในตำแหน่งต่างๆ อาจมีอิมพีแดนซ์ต่างกัน โดยเฉพาะอย่างยิ่งเมื่อคุณพิจารณาความหนาและปริมาณของกล้ามเนื้อข้างเคียงที่ต่างกัน อิมพีแดนซ์ยังเปลี่ยนแปลงไปตามความพร้อมของผิวของคุณสำหรับอิเล็กโทรด: โดยทั่วไป แนะนำให้ทำความสะอาดอย่างทั่วถึงด้วยสบู่และน้ำเพื่อให้แน่ใจว่ามีการยึดเกาะที่ดีเยี่ยมและความสม่ำเสมอ และยังมีเจลพิเศษสำหรับอิเล็กโทรดหากคุณต้องการความสมบูรณ์แบบจริงๆ ข้อสังเกตสำคัญประการหนึ่งคือ อิมพีแดนซ์เปลี่ยนแปลงตามความถี่ (ลักษณะของตัวเก็บประจุ) ดังนั้นคุณจำเป็นต้องทราบแบนด์วิดท์ของสัญญาณเพื่อคาดการณ์อิมพีแดนซ์ และใช่ การประมาณค่าอิมพีแดนซ์เป็นสิ่งสำคัญสำหรับการจับคู่สัญญาณรบกวน โปรดดูข้อมูลเพิ่มเติมในขั้นตอนต่อไป
ขั้นตอนที่ 3: การประมวลผลสัญญาณ: ทำไมและอย่างไร
เหตุใดคุณจึงใช้ความแตกต่างของแรงดันไฟฟ้า 1-10mV เป็นเอาต์พุตทันทีเพื่อควบคุม LED ไม่ได้ มีเหตุผลมากมายในการกรองและขยายสัญญาณ:
-
ADC จำนวนมาก (ตัวแปลงแอนะล็อกเป็นดิจิทัล - ใช้อินพุตแบบอะนาล็อกของคุณและแปลงเป็นดิจิทัลสำหรับการอ่านและจัดเก็บข้อมูลบนคอมพิวเตอร์) จะไม่สามารถตรวจพบการเปลี่ยนแปลงเล็กๆ น้อยๆ ดังกล่าวได้ ตัวอย่างเช่น ADC ของ Arduino Uno เป็น ADC 10 บิตโดยเฉพาะที่มีเอาต์พุต 5V ซึ่งหมายความว่าจะจับคู่แรงดันไฟฟ้าอินพุต 0-5V (ค่าที่อยู่นอกช่วงจะเป็น "ราง" หมายความว่าค่าที่ต่ำกว่าจะถูกอ่านเป็น 0V และค่าที่สูงกว่าอ่าน เป็น 5V) เป็นค่าจำนวนเต็มระหว่าง 0 ถึง 1023 10mV นั้นเล็กมากในช่วง 5V นั้น ดังนั้นหากคุณสามารถขยายสัญญาณของคุณให้เต็มช่วง 5V การเปลี่ยนแปลงเล็กน้อยจะตรวจจับได้ง่ายกว่าเพราะจะสะท้อนให้เห็นโดยการเปลี่ยนแปลงเชิงปริมาณที่มากขึ้น (5mV เปลี่ยนเป็น 10mV เมื่อเทียบกับ 2V เปลี่ยนเป็น 4V) คิดว่ามันเหมือนภาพเล็กๆ ในคอมพิวเตอร์ของคุณ: รายละเอียดอาจถูกกำหนดโดยพิกเซลของคุณอย่างสมบูรณ์ แต่คุณจะไม่สามารถแยกแยะรูปร่างได้เว้นแต่คุณจะขยายภาพ
โปรดทราบว่าการมีบิตเพิ่มเติมสำหรับ ADC ของคุณจะดีกว่า เนื่องจากคุณสามารถลดสัญญาณรบกวนในการวัดปริมาณให้เหลือน้อยที่สุดจากการเปลี่ยนสัญญาณต่อเนื่องของคุณเป็นค่าดิจิทัลที่ไม่ต่อเนื่อง ในการคำนวณจำนวนบิตที่คุณต้องการสำหรับการเก็บรักษา SNR ของอินพุต ~96% ให้ใช้ N = SNR(เป็น dB)/6 เป็นหลัก คุณต้องคำนึงถึงกระเป๋าเงินของคุณด้วยว่า: หากคุณต้องการบิตมากขึ้น คุณต้องเต็มใจที่จะจ่ายเงินเพิ่ม
-
สัญญาณรบกวนและการรบกวน (สัญญาณรบกวน = สิ่งแปลกปลอมแบบสุ่มที่ทำให้สัญญาณของคุณขรุขระแทนที่จะเป็นสัญญาณรบกวน เทียบกับ สัญญาณรบกวน = ไม่สุ่ม สัญญาณรบกวนจากสัญญาณที่อยู่ติดกันจากคลื่นวิทยุ ฯลฯ) ทำลายสัญญาณทั้งหมดที่วัดจากชีวิตประจำวัน
- สิ่งที่มีชื่อเสียงที่สุดคือสัญญาณรบกวน 60Hz (50Hz ถ้าคุณอยู่ในยุโรปและไม่มีใครในรัสเซียเพราะใช้ DC แทน AC สำหรับเต้ารับ…) ซึ่งเรียกว่าความถี่ยูทิลิตี้จากสนามแม่เหล็กไฟฟ้ากระแสสลับของเต้ารับไฟฟ้า สายไฟส่งไฟฟ้าแรงสูงกระแสสลับจากเครื่องกำเนิดไฟฟ้าไปยังพื้นที่อยู่อาศัย โดยที่หม้อแปลงลดระดับแรงดันไฟฟ้าลงเป็นมาตรฐาน ~120V ในปลั๊กไฟของอเมริกา แรงดันไฟฟ้าสลับนำไปสู่การรบกวน 60Hz อย่างต่อเนื่องในสภาพแวดล้อมของเรา ซึ่งรบกวนสัญญาณทุกประเภทและจำเป็นต้องกรองออก
-
การรบกวน 60Hz มักเรียกว่าการรบกวนโหมดทั่วไป เนื่องจากจะปรากฏในอินพุตทั้งสองของคุณ (+ และ -) ถึง op amp ตอนนี้ op amps มีบางอย่างที่เรียกว่าอัตราส่วนการปฏิเสธโหมดทั่วไป (CMRR) เพื่อลดสิ่งประดิษฐ์ของโหมดทั่วไป แต่ (แก้ไขฉันถ้าฉันผิด!) สิ่งนี้ดีสำหรับเสียงโหมดทั่วไปเป็นหลัก (สุ่ม: สัญญาณรบกวนแทนที่จะเป็นการรบกวนแบบสุ่ม). ในการกำจัด 60Hz คุณสามารถใช้ตัวกรองแบนด์สต็อปเพื่อเลือกเอาออกจากสเปกตรัมความถี่ได้ แต่คุณก็เสี่ยงต่อการลบข้อมูลจริงด้วยเช่นกัน ในกรณีที่ดีที่สุด คุณสามารถใช้ตัวกรองความถี่ต่ำเพื่อให้ช่วงความถี่ต่ำกว่า 60Hz เท่านั้น ดังนั้นทุกอย่างที่มีความถี่สูงจะถูกกรองออก นั่นคือสิ่งที่ฉันทำสำหรับ EOG: แบนด์วิดท์ที่คาดไว้ของสัญญาณของฉันคือ 0-10Hz (ละเลยการเคลื่อนไหวของดวงตาอย่างรวดเร็ว - ไม่ต้องการจัดการกับมันในเวอร์ชันที่ง่ายขึ้นของเรา) ดังนั้นฉันจึงลบความถี่ที่มากกว่า 10Hz ด้วยตัวกรองความถี่ต่ำ.
- 60Hz สามารถทำให้สัญญาณของเราเสียหายผ่านการคัปปลิ้งแบบคาปาซิทีฟและคัปปลิ้งอุปนัย การมีเพศสัมพันธ์แบบ Capacitive (อ่านค่าตัวเก็บประจุที่นี่) เกิดขึ้นเมื่ออากาศทำหน้าที่เป็นไดอิเล็กตริกสำหรับสัญญาณ AC ที่จะดำเนินการระหว่างวงจรที่อยู่ติดกัน คัปปลิ้งอุปนัยมาจากกฎของฟาราเดย์เมื่อคุณใช้กระแสในสนามแม่เหล็ก มีเทคนิคมากมายที่จะเอาชนะการมีเพศสัมพันธ์: คุณสามารถใช้เกราะป้องกันที่มีสายดินเป็นกรงฟาราเดย์เป็นต้น การบิดลวด/การถักเปียเมื่อเป็นไปได้จะลดพื้นที่สำหรับคัปปลิ้งอุปนัยที่จะรบกวน การย่อสายและลดขนาดโดยรวมของวงจรของคุณก็มีผลเช่นเดียวกันด้วยเหตุผลเดียวกัน การใช้พลังงานจากแบตเตอรี่สำหรับราง op amp เมื่อเทียบกับการเสียบปลั๊กไฟก็ช่วยได้เช่นกันเพราะแบตเตอรี่ให้แหล่งจ่ายกระแสตรงโดยไม่มีการสั่นของไซน์ อ่านเพิ่มเติมได้ที่นี่!
-
ตัวกรองสัญญาณความถี่ต่ำยังกำจัดสัญญาณรบกวนจำนวนมาก เนื่องจากสัญญาณรบกวนแบบสุ่มจะแสดงด้วยความถี่สูง เสียงรบกวนจำนวนมากเป็นสัญญาณรบกวนสีขาว หมายความว่ามีสัญญาณรบกวนในทุกความถี่ ดังนั้นการจำกัดแบนด์วิดท์ของสัญญาณให้มากที่สุดจะช่วยจำกัดจำนวนสัญญาณรบกวนที่มีอยู่ในสัญญาณของคุณ
ตัวกรองความถี่ต่ำบางตัวเรียกว่าตัวกรองป้องกันรอยหยักเนื่องจากป้องกันไม่ให้เกิดรอยหยัก: เมื่อไซนัสอยู่ภายใต้การสุ่มตัวอย่าง ตัวกรองเหล่านี้อาจถูกตรวจพบว่าเป็นความถี่ที่แตกต่างจากที่เป็นจริง คุณควรจำไว้เสมอว่าให้ทำตามทฤษฎีบทการสุ่มตัวอย่างของ Nyquist (สัญญาณตัวอย่างที่ความถี่สูงกว่า 2 เท่า: ต้องการความถี่สุ่มตัวอย่าง >2Hz สำหรับคลื่นไซน์ 1Hz ที่คาดไว้ ฯลฯ) ในกรณี EOG นี้ ฉันไม่ต้องกังวลเกี่ยวกับ Nyquist เพราะสัญญาณของฉันคาดว่าจะอยู่ในช่วง 10Hz เป็นหลัก และตัวอย่าง Arduino ADC ของฉันที่ 10kHz ซึ่งเร็วเกินพอที่จะจับทุกอย่างได้
- นอกจากนี้ยังมีเทคนิคเล็กๆ น้อยๆ ในการกำจัดเสียงรบกวนอีกด้วย หนึ่งคือการใช้กราวด์ดาวเพื่อให้ทุกส่วนของวงจรของคุณมีการอ้างอิงเหมือนกันทุกประการ มิฉะนั้น สิ่งที่ส่วนหนึ่งเรียกว่า "กราวด์" อาจแตกต่างจากส่วนอื่นเนื่องจากมีความต้านทานเล็กน้อยในสายไฟ ซึ่งรวมกันเป็นความไม่สอดคล้องกัน การบัดกรีบนโปรโตบอร์ดแทนที่จะยึดติดกับเขียงหั่นขนมยังช่วยลดเสียงรบกวนและสร้างการเชื่อมต่อที่ปลอดภัยที่คุณเชื่อถือได้เมื่อเทียบกับการใส่แบบกดพอดี
มีหลายวิธีในการระงับเสียงรบกวนและการรบกวน (ดูที่นี่และที่นี่) แต่คุณสามารถเรียนในชั้นเรียนนั้นหรือ Google สำหรับข้อมูลเพิ่มเติม: ไปที่วงจรจริงกันเถอะ!
ขั้นตอนที่ 4: วิธีการทำงานของวงจร
อย่าถูกข่มขู่โดยแผนภาพวงจร นี่คือรายละเอียดคร่าวๆ เกี่ยวกับวิธีการทำงานของทุกอย่าง: (โปรดย้อนกลับไปที่ขั้นตอนก่อนหน้าสำหรับคำอธิบายบางส่วนด้วย)
- ด้านซ้ายสุดมีอิเล็กโทรด อันหนึ่งติดอยู่ที่ขมับด้านซ้าย อีกอันติดอยู่ที่ขมับขวา และอิเล็กโทรดที่สามติดอยู่ที่หน้าผาก การต่อสายดินนี้ทำให้สัญญาณมีเสถียรภาพ จึงมีการเคลื่อนตัวน้อยลง และยังกำจัดสัญญาณรบกวน 60Hz บางส่วนอีกด้วย
- ถัดมาเป็นเครื่องขยายสัญญาณ ย้อนกลับไปสองขั้นตอนเพื่ออธิบายว่าการดำเนินการนี้ใช้ทำอะไรเพื่อสร้างความต่างศักย์ไฟฟ้า สมการสำหรับการเปลี่ยนเกนของแอมป์อยู่ในหน้า 7 ของแผ่นข้อมูล [G = 1+(50kOhm/Rg) โดยที่ Rg เชื่อมต่อกับพินของแอมป์ 1 และ 8] สำหรับวงจรของฉัน ฉันปรับเป็นเกน 500 โดยใช้ Rg = 100Ohm
- หลังจากที่แอมป์เครื่องมือวัดเอาท์พุตความต่างของแรงดันไฟฟ้าที่ขยาย 500x แล้ว จะมีตัวกรองความถี่ต่ำ RC ลำดับแรก ซึ่งประกอบด้วยตัวต้านทาน R_filter และตัวเก็บประจุ C_filter ตัวกรองสัญญาณความถี่ต่ำป้องกันการลบรอยหยัก (แต่ฉันไม่ต้องกังวลเพราะโดย Nyquist ฉันต้องสุ่มตัวอย่างอย่างน้อย 20Hz สำหรับแบนด์วิดท์ 10Hz ที่คาดหวัง และ Arduino ADC สุ่มตัวอย่างที่ 10kHz - มากเกินพอ) และยังตัดเสียงรบกวน ในทุกความถี่ที่ฉันไม่ต้องการ ระบบ RC ทำงานได้เนื่องจากตัวเก็บประจุยอมให้ความถี่สูงผ่านได้ง่ายแต่ขัดขวางความถี่ต่ำ (อิมพีแดนซ์ Z = 1/(2*pi*f)) และการสร้างตัวแบ่งแรงดันไฟที่มีแรงดันตกคร่อมตัวเก็บประจุส่งผลให้เกิดตัวกรองที่อนุญาตเฉพาะความถี่ต่ำ ผ่าน [จุดตัดสำหรับความเข้ม 3dB ถูกควบคุมโดยสูตร f_c = 1/(2*pi*RC)] ฉันปรับค่า R และ C ของตัวกรองเพื่อตัดสัญญาณที่สูงกว่า ~10Hz เนื่องจากคาดว่าสัญญาณชีวภาพสำหรับ EOG จะอยู่ในช่วงนั้น เดิมทีฉันตัดการเชื่อมต่อหลังจาก 20Hz แต่หลังจากการทดลอง 10Hz ก็ใช้งานได้เช่นกัน ดังนั้นฉันจึงเลือกใช้แบนด์วิดท์ที่เล็กกว่า (แบนด์วิดท์ที่เล็กลงจะดีกว่าที่จะตัดสิ่งที่ไม่จำเป็นออกไป
- ด้วยสัญญาณที่กรองนี้ ฉันวัดเอาต์พุตด้วยออสซิลโลสโคปเพื่อดูช่วงค่าของฉันจากการมองไปทางซ้ายและขวา (สองสุดขั้วของช่วงของฉัน) นั่นทำให้ฉันอยู่ที่ประมาณ 2-4V (เนื่องจากการเพิ่มแอมป์ของเครื่องมือวัดคือ 500x สำหรับช่วง ~4-8mV) เมื่อเป้าหมายของฉันคือ 5V (Arduino ADC เต็มรูปแบบ) ช่วงนี้มีความหลากหลายมาก (ขึ้นอยู่กับว่าบุคคลนั้นล้างผิวก่อนดีแค่ไหน ฯลฯ) ดังนั้นฉันจึงไม่ต้องการได้รับประโยชน์มากนักจากแอมป์ที่ไม่กลับด้านตัวที่สองของฉัน ฉันลงเอยด้วยการปรับให้มีเกนประมาณ 1.3 (ปรับ R1 และ R2 ในวงจรเพราะเกนของแอมป์ = 1+R2/R1) คุณจะต้องกำหนดขอบเขตเอาต์พุตของคุณเองและปรับจากที่นั่นเพื่อไม่ให้เกิน 5V! อย่าเพิ่งใช้ค่าความต้านทานของฉัน
- ขณะนี้สัญญาณนี้สามารถป้อนลงในพินอะนาล็อกของ Arduino เพื่ออ่านได้ แต่ Arduino ADC ไม่ยอมรับอินพุตเชิงลบ! คุณจะต้องเลื่อนสัญญาณขึ้นเพื่อให้ช่วงเป็น 0-5V เมื่อเทียบกับ -2.5V ถึง 2.5V วิธีหนึ่งในการแก้ไขปัญหานี้คือการติดตั้งกราวด์ของแผงวงจรของคุณเข้ากับพิน 3.3V ของ Arduino: สิ่งนี้จะเปลี่ยนสัญญาณของคุณขึ้น 3.3V (เหมาะสมที่สุดมากกว่า 2.5V แต่ใช้งานได้) พิสัยของฉันว่องไวมาก ดังนั้นฉันจึงออกแบบแรงดันไฟฟ้าออฟเซ็ตแบบแปรผัน ด้วยวิธีนี้ ฉันสามารถหมุนโพเทนชิออมิเตอร์เพื่อให้ช่วงศูนย์อยู่ที่ 0-5V ได้ โดยพื้นฐานแล้วมันคือตัวแบ่งแรงดันไฟฟ้าที่ใช้รางไฟ +/-9V เพื่อให้ฉันสามารถต่อกราวด์ของวงจรกับค่าใดก็ได้ตั้งแต่ -9 ถึง 9V และเปลี่ยนสัญญาณของฉันขึ้นหรือลง 9V
ขั้นตอนที่ 5: การเลือกส่วนประกอบและค่านิยม
เมื่ออธิบายวงจรแล้ว เราจะเลือกอันไหน (อิเล็กโทรด ออปแอมป์) ที่จะใช้?
-
ในฐานะที่เป็นเซ็นเซอร์ อิเล็กโทรดเจลแบบโซลิดมีอิมพีแดนซ์อินพุตสูงและอิมพีแดนซ์เอาต์พุตต่ำ: ความหมายหลักคือกระแสสามารถผ่านดาวน์สตรีมไปยังส่วนที่เหลือของวงจรได้อย่างง่ายดาย (อิมพีแดนซ์เอาต์พุตต่ำ) แต่จะมีปัญหาในการส่งต้นน้ำกลับไปยังขมับของคุณ (อิมพีแดนซ์อินพุตสูง) สิ่งนี้จะป้องกันไม่ให้ผู้ใช้ได้รับบาดเจ็บจากกระแสหรือแรงดันไฟฟ้าสูงในส่วนอื่นๆ ของวงจรของคุณ ในความเป็นจริง หลายระบบมีสิ่งที่เรียกว่าตัวต้านทานป้องกันผู้ป่วยสำหรับการป้องกันเพิ่มเติม ในกรณีนี้
-
มีอิเล็กโทรดหลายประเภท คนส่วนใหญ่แนะนำอิเล็กโทรดเจลแบบแข็ง Ag/AgCl สำหรับใช้ในแอปพลิเคชัน EKG/EOG/อื่นๆ เมื่อคำนึงถึงสิ่งนี้ คุณต้องค้นหาความต้านทานแหล่งกำเนิดของอิเล็กโทรดเหล่านี้ (ย้อนกลับไปสองก้าวเพื่อดูบันทึกของฉันเกี่ยวกับอิมพีแดนซ์ของผิวหนัง) และจับคู่กับความต้านทานสัญญาณรบกวน (แรงดันเสียงในหน่วย V/sqrt(Hz) หารด้วยกระแสรบกวนใน A/sqrt(Hz) -- ดูแผ่นข้อมูลของ op amps) ของ op amps ของคุณ -- นั่นคือวิธีที่คุณเลือกแอมป์เครื่องมือวัดที่ถูกต้องสำหรับอุปกรณ์ของคุณ สิ่งนี้เรียกว่าการจับคู่สัญญาณรบกวน และคำอธิบายว่าเหตุใดการต้านทานแหล่งที่มาที่ตรงกัน Rs กับการต้านทานสัญญาณรบกวน Rn สามารถพบได้ทางออนไลน์เช่นนี้ สำหรับ INA111 ของฉันที่ฉันเลือก สามารถคำนวณ Rn ได้โดยใช้แรงดันเสียงและกระแสรบกวนของแผ่นข้อมูล (ภาพหน้าจอด้านบน)
-
มีบทความมากมายที่ประเมินประสิทธิภาพของอิเล็กโทรด และไม่มีอิเล็กโทรดใดที่ดีที่สุดสำหรับวัตถุประสงค์ทั้งหมด: ลองที่นี่เป็นตัวอย่าง อิมพีแดนซ์ยังเปลี่ยนแปลงสำหรับแบนด์วิดท์ที่แตกต่างกันตามที่แสดงในแผ่นข้อมูล op amp (แผ่นข้อมูลบางแผ่นจะมีเส้นโค้งหรือตารางที่ความถี่ต่างกัน) ทำวิจัยของคุณ แต่อย่าลืมคำนึงถึงกระเป๋าเงินของคุณ เป็นเรื่องดีที่รู้ว่าอิเล็กโทรด/ออปแอมป์ตัวใดดีที่สุด แต่ก็ไม่มีประโยชน์หากคุณไม่มีเงินจ่าย คุณจะต้องมีอิเล็กโทรดประมาณ 50 ตัวเป็นอย่างน้อยสำหรับการทดสอบ ไม่ใช่เพียง 3 ตัวสำหรับการใช้งานครั้งเดียว
-
สำหรับการจับคู่เสียงที่เหมาะสม ไม่เพียงแต่ Rn ~= Rs เท่านั้น: คุณยังต้องการให้แรงดันเสียง * กระแสเสียง (Pn) ต่ำที่สุดเท่าที่จะเป็นไปได้ นี่ถือว่าสำคัญกว่าการทำ Rn ~= Rs เพราะคุณสามารถปรับ Rs และ Rn ได้โดยใช้หม้อแปลงถ้าจำเป็น
คำเตือนเกี่ยวกับหม้อแปลงไฟฟ้า (โปรดแก้ไขหากผิด): อาจค่อนข้างเทอะทะและไม่เหมาะสมสำหรับอุปกรณ์ที่ต้องมีขนาดเล็ก พวกเขายังสร้างความร้อนเพื่อให้จำเป็นต้องมีอ่างความร้อนหรือการระบายอากาศที่ดีเยี่ยม
- เสียงรบกวนตรงกับแอมป์เริ่มต้นตัวแรกของคุณเท่านั้น แอมป์ตัวที่ 2 ไม่ได้ส่งผลกระทบมากนัก ดังนั้น op amp ตัวไหนก็ทำได้
-
-
-
ขั้นตอนที่ 6: สร้างวงจร
ใช้แผนภาพด้านบนเพื่อสร้างวงจร (สำเนาที่สองระบุว่าแต่ละส่วนหมายถึงอะไรในแผนภาพวงจรจากขั้นตอนก่อนหน้า) หากคุณต้องการความช่วยเหลือในการระบุ LED ในไดอะแกรม ให้ใช้เครื่องคิดเลขรหัสสีตัวต้านทานนี้ แต่ Rg ของแอมป์เครื่องมือวัดคือ 100Ohm, R_filter คือ 1.5MOhm, C_filter คือ 0.1uF, R1 ของแอมป์ที่ไม่กลับด้านคือ 10kOhm R2 คือ 33kOhm และตัวต้านทานสำหรับโพเทนชิออมิเตอร์คือ 1kOhm (โพเทนชิออมิเตอร์แตกต่างกันไปตั้งแต่ 0 ถึง 20kOhm) อย่าลืมเปลี่ยนค่าตัวต้านทานตามความจำเป็นเพื่อปรับค่าเกน!
แก้ไข: มีข้อผิดพลาดในส่วนออฟเซ็ตกราวด์ ลบสายสีดำด้านซ้าย ตัวต้านทานควรเชื่อมต่อด้วยสายสีแดงกับรางจ่ายไฟตามที่แสดง แต่ยังรวมถึงพินที่สองด้วย ไม่ใช่อันดับแรก ของโพเทนชิออมิเตอร์ พินแรกของโพเทนชิออมิเตอร์ควรเชื่อมต่อกับพิน 5V ของ Arduino สายสีส้มที่เป็นออฟเซ็ตกราวด์ควรต่อกับพินที่สอง ไม่ใช่อันแรก
ฉันได้พูดถึง offset ground บ่อยมาก ในไดอะแกรมคุณจะเห็นว่ากราวด์ Arduino แสดงว่าเชื่อมต่อกับกราวด์ของเขียงหั่นขนม นั่นคือในสถานการณ์ที่คุณไม่จำเป็นต้องเปลี่ยนพื้น หากสัญญาณของคุณอยู่นอกระยะ และคุณจำเป็นต้องเปลี่ยนกราวด์ของคุณ ก่อนอื่นให้ลองเชื่อมต่อกราวด์ Arduino กับพิน 3.3V ของ Arduino และดูสัญญาณของคุณ มิฉะนั้น ลองต่อสายสีส้มในการตั้งค่าโพเทนชิออมิเตอร์ (ออฟเซ็ตกราวด์) กับพิน GND ของ Arduino
หมายเหตุด้านความปลอดภัย: ห้ามเก็บแบตเตอรี่ไว้ในขณะที่ทำการบัดกรี และห้ามใส่หรือบัดกรีแบตเตอรี่ไว้ด้านหลัง วงจรของคุณจะเริ่มมีควัน ตัวเก็บประจุจะระเบิด และเขียงหั่นขนมอาจได้รับความเสียหายเช่นกัน ตามหลักการทั่วไป ให้ใช้แบตเตอรี่เมื่อคุณต้องการใช้วงจรเท่านั้น มิฉะนั้น ให้ถอดออก (ควรเพิ่มสวิตช์พลิกเพื่อให้ถอดแบตเตอรี่ออกได้ง่ายด้วย)
โปรดทราบว่าคุณควรสร้างวงจรทีละชิ้น (ตรวจสอบแต่ละขั้นตอน!) และบนเขียงหั่นขนมก่อนที่จะบัดกรีกับโปรโตบอร์ด ขั้นตอนแรกในการตรวจสอบคือแอมป์เครื่องมือวัด: ติดรางทั้งหมด (บัดกรีในที่ใส่แบตเตอรี่), Rg ฯลฯ และใช้ออสซิลโลสโคปที่พินเอาต์พุต สำหรับผู้เริ่มต้น ให้ใช้ตัวสร้างฟังก์ชันที่มีคลื่นไซน์ 1Hz ที่มีแอมพลิจูด 5mV (หรือตัวกำเนิดของคุณจะต่ำที่สุด) นี่เป็นเพียงเพื่อตรวจสอบว่าแอมป์เครื่องมือวัดทำงานอย่างถูกต้อง และ Rg ของคุณให้กำไรตามเป้าหมายของคุณ
ถัดไป ตรวจสอบตัวกรองความถี่ต่ำของคุณ เพิ่มส่วนนั้นของวงจรและตรวจสอบรูปคลื่นของคุณ: ควรมีลักษณะเหมือนกันทุกประการ แต่มีสัญญาณรบกวนน้อยกว่า (ขรุขระ - ดูสองภาพสุดท้ายด้านบน) ลองสำรวจเอาต์พุตสุดท้ายของคุณด้วยออสซิลโลสโคปกับอิเล็กโทรดของคุณแทนเครื่องกำเนิดฟังก์ชันตอนนี้…
ขั้นตอนที่ 7: ทดสอบวงจรกับมนุษย์
อีกครั้ง ให้ใส่อิเล็กโทรดที่ขมับซ้ายและขวาของคุณ แล้วต่อสายกราวด์เข้ากับอิเล็กโทรดที่หน้าผากของคุณ หลังจากนั้นคุณควรเพิ่มแบตเตอรี่ - หากรู้สึกเสียวซ่าใด ๆ ให้ถอดออกทันทีและตรวจสอบการเชื่อมต่ออีกครั้ง !!! ตอนนี้ตรวจสอบช่วงของค่าของคุณเมื่อคุณมองซ้ายหรือขวาและปรับ R1/R2 ของแอมป์ที่ไม่กลับด้านดังที่อธิบายไว้เมื่อสองขั้นตอนที่แล้ว จำไว้ว่าเป้าหมายคือช่วง 5V! ดูภาพด้านบนสำหรับหมายเหตุเกี่ยวกับสิ่งที่ควรระวัง
เมื่อคุณพอใจกับค่าตัวต้านทานทั้งหมดแล้ว ให้บัดกรีทุกอย่างเข้ากับโปรโตบอร์ด การบัดกรีไม่จำเป็นอย่างยิ่ง แต่มันให้ความเสถียรมากกว่าข้อต่อแบบกดพอดีและขจัดความไม่แน่นอนของวงจรที่ไม่ทำงานเพียงเพราะคุณไม่ได้กดลงในเขียงหั่นขนมอย่างแรงพอ
ขั้นตอนที่ 8: รหัส Arduino
รหัสทั้งหมดที่แนบมาที่ด้านล่างของขั้นตอนนี้!
ตอนนี้คุณมีช่วง 5V แล้ว คุณต้องตรวจสอบให้แน่ใจว่าอยู่ในช่วง 0-5V แทนที่จะเป็น -1V ถึง 4V ฯลฯ ต่อกราวด์กับพิน 3.3V ของ Arduino หรือแนบแรงดันกราวด์ออฟเซ็ต (สายสีส้มด้านบน) กับรางกราวด์แล้วต่อสายจากรางกราวด์กับพิน GND ของ Arduino (เพื่อเลื่อนสัญญาณขึ้นหรือลงเพื่อให้คุณอยู่ในช่วง 0-5V) คุณจะต้องลองเล่นดู: อย่าลืมกำหนดขอบเขตผลลัพธ์ของคุณเมื่อไม่แน่ใจ!
ตอนนี้สำหรับการปรับเทียบ: คุณต้องการให้แสงเปลี่ยนสีสำหรับตำแหน่งดวงตาต่างๆ (มองซ้ายสุดเทียบกับไม่สุดทางซ้าย..) เพื่อที่คุณต้องการค่าและช่วง: เรียกใช้ EOG-calibration-numbers.ino ไปยัง Arduino โดยที่ทุกอย่างเชื่อมต่ออย่างถูกต้อง (ปิดการเชื่อมต่อกับ Arduino และ neopixel ตามแผนภาพ fritzing ของฉัน) ไม่จำเป็นอย่างยิ่ง แต่ยังเรียกใช้รหัส bioe.py ที่ฉันมีด้วย - สิ่งนี้จะส่งออกไฟล์ข้อความไปยังเดสก์ท็อปของคุณเพื่อให้คุณสามารถบันทึกค่าทั้งหมดเมื่อคุณมองไปทางซ้ายหรือขวา (รหัสหลามถูกดัดแปลงจากตัวอย่างนี้) ฉันทำสิ่งนี้ได้อย่างไรโดยมองไปทางซ้าย 8 ครั้ง จากนั้นไปทางขวา จากนั้นขึ้น ลงแล้วทำซ้ำเพื่อหาค่าเฉลี่ยในภายหลัง (ดู output_2.pdf สำหรับบันทึกหนึ่งที่ฉันเก็บไว้) กด ctrl+C เพื่อบังคับออกเมื่อคุณพอใจ เมื่อใช้ค่าเหล่านี้ คุณจะสามารถปรับช่วงของแอนิเมชันได้ในโค้ด BioE101_EOG-neopixel.ino ของฉัน สำหรับฉัน ฉันมีแอนิเมชั่นสีรุ้งเมื่อมองตรงไปข้างหน้า สีฟ้าคือด้านซ้ายสุด สีเขียวสำหรับด้านซ้ายเล็กน้อย สีม่วงสำหรับด้านขวาเล็กน้อย และสีแดงสำหรับด้านขวาสุด
ขั้นตอนที่ 9: ขั้นตอนในอนาคต
โวลา; สิ่งที่คุณสามารถควบคุมได้ด้วยตาของคุณ มีหลายสิ่งที่ต้องปรับให้เหมาะสมก่อนที่จะส่งโรงพยาบาล แต่สำหรับอีกวันหนึ่ง แนวคิดพื้นฐานอย่างน้อยก็เข้าใจง่ายขึ้นในตอนนี้ สิ่งหนึ่งที่ฉันต้องการจะกลับไปแก้ไขคือการปรับเกนของฉันเป็น 500 สำหรับแอมป์วัด: เมื่อมองย้อนกลับไป นั่นน่าจะเป็น 0 มากเพราะสัญญาณของฉันหลังจากนั้นคือ 2-4V แล้ว และฉันมีปัญหากับการใช้การไม่กลับด้าน แอมป์เพื่อปรับช่วงของฉันได้อย่างสมบูรณ์แบบ…
ยากที่จะได้รับความสม่ำเสมอเนื่องจากสัญญาณเปลี่ยนแปลงไปมากสำหรับเงื่อนไขต่างๆ:
- คนละคน
- สภาพแสง
- การเตรียมผิว (เจล การซัก ฯลฯ)
แต่ถึงอย่างนั้น ฉันค่อนข้างพอใจกับการพิสูจน์ประสิทธิภาพวิดีโอครั้งสุดท้าย (ถ่ายตอนตี 3 เพราะนั่นคือตอนที่ทุกอย่างเริ่มทำงานอย่างน่าอัศจรรย์)
ฉันรู้ว่าบทช่วยสอนนี้หลายๆ อย่างอาจดูสับสน (ใช่ เส้นโค้งการเรียนรู้ก็ยากสำหรับฉันเช่นกัน) ดังนั้นโปรดอย่าลังเลที่จะถามคำถามด้านล่าง และฉันจะพยายามตอบให้ดีที่สุด สนุก!
วิ่งขึ้นในความท้าทายที่ไม่มีใครแตะต้อง
แนะนำ:
DIY 37 Leds เกมรูเล็ต Arduino: 3 ขั้นตอน (พร้อมรูปภาพ)
DIY 37 Leds เกมรูเล็ต Arduino: รูเล็ตเป็นเกมคาสิโนที่ตั้งชื่อตามคำภาษาฝรั่งเศสหมายถึงวงล้อเล็ก
หมวกนิรภัย Covid ส่วนที่ 1: บทนำสู่ Tinkercad Circuits!: 20 ขั้นตอน (พร้อมรูปภาพ)
Covid Safety Helmet ตอนที่ 1: บทนำสู่ Tinkercad Circuits!: สวัสดีเพื่อน ๆ ในชุดสองตอนนี้ เราจะเรียนรู้วิธีใช้วงจรของ Tinkercad - เครื่องมือที่สนุก ทรงพลัง และให้ความรู้สำหรับการเรียนรู้เกี่ยวกับวิธีการทำงานของวงจร! หนึ่งในวิธีที่ดีที่สุดในการเรียนรู้คือการทำ ดังนั้น อันดับแรก เราจะออกแบบโครงการของเราเอง: th
Bolt - DIY Wireless Charging Night Clock (6 ขั้นตอน): 6 ขั้นตอน (พร้อมรูปภาพ)
Bolt - DIY Wireless Charging Night Clock (6 ขั้นตอน): การชาร์จแบบเหนี่ยวนำ (เรียกอีกอย่างว่าการชาร์จแบบไร้สายหรือการชาร์จแบบไร้สาย) เป็นการถ่ายโอนพลังงานแบบไร้สาย ใช้การเหนี่ยวนำแม่เหล็กไฟฟ้าเพื่อจ่ายกระแสไฟฟ้าให้กับอุปกรณ์พกพา แอปพลิเคชั่นที่พบบ่อยที่สุดคือ Qi Wireless Charging st
4 ขั้นตอน Digital Sequencer: 19 ขั้นตอน (พร้อมรูปภาพ)
4 ขั้นตอน Digital Sequencer: CPE 133, Cal Poly San Luis Obispo ผู้สร้างโปรเจ็กต์: Jayson Johnston และ Bjorn Nelson ในอุตสาหกรรมเพลงในปัจจุบัน ซึ่งเป็นหนึ่งใน “instruments” เป็นเครื่องสังเคราะห์เสียงดิจิตอล ดนตรีทุกประเภท ตั้งแต่ฮิปฮอป ป๊อป และอีฟ
ป้ายโฆษณาแบบพกพาราคาถูกเพียง 10 ขั้นตอน!!: 13 ขั้นตอน (พร้อมรูปภาพ)
ป้ายโฆษณาแบบพกพาราคาถูกเพียง 10 ขั้นตอน!!: ทำป้ายโฆษณาแบบพกพาราคาถูกด้วยตัวเอง ด้วยป้ายนี้ คุณสามารถแสดงข้อความหรือโลโก้ของคุณได้ทุกที่ทั่วทั้งเมือง คำแนะนำนี้เป็นการตอบสนองต่อ/ปรับปรุง/เปลี่ยนแปลงของ: https://www.instructables.com/id/Low-Cost-Illuminated-