สารบัญ:

ตัวถอดรหัสไบนารีทรีมอร์ส: 7 ขั้นตอน (พร้อมรูปภาพ)
ตัวถอดรหัสไบนารีทรีมอร์ส: 7 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: ตัวถอดรหัสไบนารีทรีมอร์ส: 7 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: ตัวถอดรหัสไบนารีทรีมอร์ส: 7 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: วิธีใช้งาน กระปุกเซฟ 2024, พฤศจิกายน
Anonim
Image
Image
แผนภูมิวงจรรวม
แผนภูมิวงจรรวม

คำแนะนำนี้จะอธิบายวิธีถอดรหัสรหัสมอร์สโดยใช้ Arduino Uno R3

ตัวถอดรหัสซึ่งปรับตามความเร็วในการส่งโดยอัตโนมัติ สามารถถอดรหัสมอร์สได้อย่างน้อย 80 คำต่อนาที

รหัสขาเข้าจะแสดงเป็นข้อความบน Arduino Serial Monitor ของคุณ (หรือหน้าจอ TFT หากติดตั้งไว้)

มีการรวมโทนออสซิลเลเตอร์หากคุณต้องการฝึกส่งมอร์ส

คุณสมบัติของตัวถอดรหัส:

  • โมดูลแสดงผล 320 x 240 TFT [1]
  • ตัวกรองแบนด์พาสแบบดิจิตอล Goertzel สำหรับแยกสัญญาณที่ไม่ต้องการ
  • “ต้นไม้ไบนารี่มอร์ส” สำหรับถอดรหัสสัญญาณ
  • ติดตามความเร็วอัตโนมัติ
  • เอาต์พุตเสียงเมื่อฝึกมอร์ส
  • แสดงข้อความทั้งขาเข้าและขาออก

อักขระและสัญลักษณ์ต่อไปนี้ได้รับการยอมรับ:

  • [A.. Z]
  • [0..9]
  • [., ? ' ! / () &:; = + - _ " @]

ค่าใช้จ่ายโดยประมาณของตัวถอดรหัสมอร์สซึ่งน้อยกว่าจอแสดงผล TFT คือ 25 เหรียญ [1]

รูปภาพ

  • ภาพหน้าปกแสดงให้เห็นหน่วยที่ประกอบอย่างเต็มที่
  • วิดีโอแสดงการทำงานของตัวถอดรหัส

หมายเหตุ

[1]

  • โมดูลแสดงผล TFT เป็นทางเลือก เนื่องจากข้อความทั้งหมดจะถูกส่งไปยัง Arduino “Serial Monitor” ของคุณ
  • โมดูล TFT อธิบายไว้ในคำสั่งของฉัน

ขั้นตอนที่ 1: รายการชิ้นส่วน

ส่วนต่อไปนี้ได้มาจากhttps://www.aliexpress.com/

1 ตัวต้นแบบเท่านั้นสำหรับ Arduino UNO R3, 2.54mm Pitch

ได้รับชิ้นส่วนต่อไปนี้ในท้องถิ่น:

  • 1 เท่านั้น LM358 dual opamp
  • 1 เท่านั้น LED สีเขียว
  • 1 เท่านั้น LED คลิป
  • 1 แคปซูลไมโครโฟนอิเล็กเตรตเท่านั้น
  • 1 เฉพาะปุ่มกดเปิดตามปกติ
  • 1 ซ็อกเก็ต DIP 8 พินเท่านั้น
  • ตัวต้านทาน 330 โอห์ม 2 ตัวเท่านั้น
  • 2 ตัวต้านทาน 2K2 เท่านั้น
  • 5 ตัวต้านทาน 10K โอห์มเท่านั้น
  • ตัวต้านทาน 56K โอห์ม 2 ตัวเท่านั้น
  • 2 เพียง 1uF ตัวเก็บประจุ
  • 1 เพียง 10uF ตัวเก็บประจุ

ส่วนต่อไปนี้เป็นตัวเลือก:

  • 1 เพียง 2.2 นิ้ว TFT SPI โมดูลจอแสดงผล LCD 240*320 ILI9341 พร้อมช่องเสียบการ์ด SD สำหรับ Arduino Raspberry Pi 51/AVR/STM32/ARM/PIC [1]
  • ปุ่มมอร์ส / ปุ่มกด
  • 1 เท่านั้น BC548 NPN ทรานซิสเตอร์
  • 1 เพียง 1 นิ้วลำโพง
  • 1 ตัวต้านทาน 33K โอห์มเท่านั้น
  • 1 ปลั๊กโมโน 3.5 มม. เท่านั้น (สำหรับคีย์มอร์ส)
  • 1 ซ็อกเก็ตโมโน 3.5 มม. เท่านั้น (สำหรับคีย์มอร์ส)
  • 3 เพียง 9 มม. M3 สเปเซอร์ไนลอนต๊าปเกลียว
  • 1 กล่องพลาสติก ABS ขนาด 130 x 68 x 44 มม. เท่านั้น
  • ขั้วต่อมุมขวาแบบ 2 ขาเพียง 5 ตัว

ค่าใช้จ่ายโดยประมาณของตัวถอดรหัสมอร์สซึ่งน้อยกว่าจอแสดงผล TFT ที่เป็นอุปกรณ์เสริมคือ 25 เหรียญ [1]

หมายเหตุ

[1]

รายการชิ้นส่วนสำหรับโมดูลแสดงผล 320 x 240 TFT เสริมมีอยู่ในคำแนะนำของฉัน

[2]

ต้องใช้คีย์มอร์สหรือปุ่มกดแบบทนทานหากต้องการใช้เครื่องส่ง

ขั้นตอนที่ 2: แผนภาพวงจร

แผนภูมิวงจรรวม
แผนภูมิวงจรรวม
แผนภูมิวงจรรวม
แผนภูมิวงจรรวม
แผนภูมิวงจรรวม
แผนภูมิวงจรรวม

รูปภาพ

ภาพที่ 1 แสดงแผนภาพวงจรสำหรับตัวถอดรหัสมอร์ส ตัวต้านทาน 330 โอห์มในซีรีส์ที่มีคีย์มอร์สจำกัดกระแสเอาต์พุต D4 ในกรณีที่ไฟฟ้าลัดวงจรลงกราวด์โดยไม่ได้ตั้งใจ … การเพิ่มค่าจะทำให้เอาต์พุตเสียงจากลำโพงลดลง ด้วยเหตุผลนี้ ฉันไม่ได้เพิ่มมันลงในโล่ แต่ติดมันเข้ากับแจ็คมอร์สคีย์โดยตรง เพื่อความสะดวกในการปรับ

ภาพที่ 2 แสดงโล่ที่ตรงกัน โล่มาจาก https://www.instructables.com/id/Arduino-TFT-Grap ที่สั่งได้… ซึ่งฉันได้เพิ่มเครื่องขยายเสียงไมโครโฟนและโทนออสซิลเลเตอร์ [1]

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

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

ภาพที่ 5 แสดงหน้าจอ TFT ติดเทปไฟฟ้าสีดำที่ขอบจอแสดงผล … เทปนี้ป้องกันแสงรั่วและปิดบังการไม่ตรงแนวระหว่างจอแสดงผลกับช่องเปิดในฝา

สำคัญ

[1]

Arduinos ที่มีขั้วต่อ USB ขนาดใหญ่จำเป็นต้องมีชั้นเทปไฟฟ้าระหว่างขั้วต่อ USB และแผงป้องกัน Arduino คุณสามารถสวมกางเกงขาสั้นโดยไม่ตั้งใจได้โดยไม่ต้องใช้เทป เนื่องจากช่องว่างมีขนาดเล็ก ไม่จำเป็นต้องใช้เทปสำหรับ Arduinos ที่มีขั้วต่อขนาดเล็ก

ขั้นตอนที่ 3: ทฤษฎี

ทฤษฎี
ทฤษฎี
ทฤษฎี
ทฤษฎี
ทฤษฎี
ทฤษฎี

ตัวอักษรรหัสมอร์สแต่ละตัวประกอบด้วยชุดของเสียงที่มีระยะเวลาสั้นและยาวที่เรียกว่า “จุด” และ “เส้นประ”

  • จุด (.) มีความยาว 1 หน่วย
  • เส้นประ (_) มีความยาว 3 หน่วย
  • ช่องว่างระหว่างองค์ประกอบตัวอักษรคือ 1 หน่วย
  • ช่องว่างระหว่างตัวอักษรคือ 3 หน่วย
  • ช่องว่างระหว่างคำคือ 7 หน่วย

เราสามารถระบุได้ว่าโทนเสียงที่เข้ามาเป็นจุดหรือเส้นประโดยการเปรียบเทียบระยะเวลากับโทนเสียงอ้างอิงที่มีความยาว 2 หน่วย

  • จุดน้อยกว่า 2 หน่วย
  • เส้นประมากกว่า 2 หน่วย

มีสองวิธีที่แตกต่างกันอย่างชัดเจนในการถอดรหัสรูปแบบจุดและเส้นประที่เข้ามา:

  • ค้นหาเชิงเส้น
  • ต้นไม้ไบนารี (เรียกอีกอย่างว่าการค้นหาแบบ dichotomic)

ค้นหาเชิงเส้น

วิธีทั่วไปวิธีหนึ่งคือการสร้างอาร์เรย์ของอักขระและรูปแบบมอร์สที่ตรงกัน ตัวอย่างเช่น อักขระแต่ละตัวต่อไปนี้จะถูกบันทึกเป็น:

  • NS. _
  • NS _…
  • ค _. _.
  • 0 _ _ _ _ _
  • 1. _ _ _ _
  • 2.. _ _ _

ตัวอักษรแต่ละตัวต้องมี 6 เซลล์ … 1 สำหรับตัวอักษรและ 5 สำหรับ (.) และ (_) เพื่อที่จะทำสิ่งนี้ เราจำเป็นต้องมีตัวอักษร[36][6] อาร์เรย์อักขระที่มีทั้งหมด 216 เซลล์ โดยปกติเซลล์ที่ไม่ได้ใช้จะถูกเติมด้วยศูนย์หรือช่องว่าง

ในการถอดรหัสจุดและขีดกลางที่เข้ามา เราต้องเปรียบเทียบรูปแบบจุด/เส้นประของตัวอักษรที่เข้ามาแต่ละตัวกับรูปแบบอักขระอ้างอิงของเรา

แม้ว่าวิธีนี้จะได้ผล แต่ก็ช้ามาก

สมมติว่าเรามีตัวอักษร 26 ตัว ('A',..' Z') และตัวเลข ('0', … '9') ที่จัดเก็บไว้ในอาร์เรย์ จากนั้นเราจะต้องดำเนินการค้นหา 36 รายการ โดยแต่ละรายการมีการค้นหาย่อยสูงสุด 5 รายการ ซึ่งเป็นจำนวนการค้นหาทั้งหมด 36*5=180 ครั้งเพื่อถอดรหัสตัวเลข '9'

ต้นไม้ไบนารี

การค้นหาแบบไบนารีนั้นเร็วกว่ามากเนื่องจากไม่จำเป็นต้องทำการค้นหา

ต่างจากการค้นหาเชิงเส้นตรงที่ต้องการเก็บทั้งอักขระและรูปแบบมอร์ส ต้นไม้ไบนารีจะเก็บเฉพาะอักขระเท่านั้น ซึ่งหมายความว่าขนาดอาร์เรย์จะเล็กกว่า

ฉันได้แบ่งไบนารีทรีของฉัน (ภาพถ่าย1) ออกเป็นสองส่วน (รูปภาพ 2 และ 3) เพื่อให้อ่านง่ายขึ้น

ในการค้นหาตัวละคร เราจะเลื่อนตัวชี้ไปทางซ้ายทุกครั้งที่เราได้ยินจุดหนึ่งและเลื่อนตัวชี้ไปทางขวาทุกครั้งที่เราได้ยินเส้นประ หลังจากย้ายแต่ละครั้ง เราจะลดระยะตัวชี้ลงครึ่งหนึ่งสำหรับการย้ายครั้งต่อไป … จึงเป็นที่มาของชื่อไบนารีทรี

ในการถอดรหัสตัวอักษร '9' (เส้นประ, เส้นประ, เส้นประ, เส้นประ, จุด) ต้องใช้ 5 การเคลื่อนไหว … 4 ไปทางขวาและ 1 ไปทางซ้ายซึ่งจะทำให้ตัวชี้อยู่เหนือ '9' โดยตรง

การเคลื่อนไหวห้าครั้งเร็วกว่าการค้นหา 180 ครั้งอย่างมาก !!!!!

อาร์เรย์อักขระไบนารียังเล็กกว่า … 26 ตัวอักษรและ 10 ตัวเลขต้องการเพียงแถวเรียง 64 x 1 เท่านั้น ฉันเลือกสร้างอาร์เรย์ 128 อักขระเพื่อถอดรหัสเครื่องหมายวรรคตอน

ขั้นตอนที่ 4: บันทึกการออกแบบ

บันทึกการออกแบบ
บันทึกการออกแบบ
บันทึกการออกแบบ
บันทึกการออกแบบ
บันทึกการออกแบบ
บันทึกการออกแบบ
บันทึกการออกแบบ
บันทึกการออกแบบ

มอร์สถอดรหัสได้ยากเมื่อมีสัญญาณรบกวน สัญญาณที่ไม่ต้องการจะต้องถูกปฏิเสธ … ซึ่งต้องใช้ตัวกรองบางประเภท

มีความเป็นไปได้มากมาย:

  1. เฟสล็อกลูป
  2. ตัวเหนี่ยวนำ-ตัวเก็บประจุตัวกรอง
  3. ตัวต้านทาน-ตัวเก็บประจุที่ใช้งานตัวกรอง
  4. การประมวลผลสัญญาณดิจิตอล เช่น Fast Fourier Transform หรือตัวกรอง Goertzel

วิธีที่ 1, 2, 3 ต้องการส่วนประกอบภายนอกที่เทอะทะ

วิธีที่ 4 ไม่ต้องการส่วนประกอบภายนอก … ความถี่ถูกตรวจจับโดยใช้อัลกอริธึมทางคณิตศาสตร์

การแปลงฟูริเยร์อย่างรวดเร็ว (FFT)

วิธีหนึ่งในการตรวจจับการมีอยู่ของโทนเสียงในรูปคลื่นที่ซับซ้อนคือการใช้ Fast Fourier Transform

ภาพที่ 1 แสดงให้เห็นว่า FFT (Fast Fourier Transform) แบ่งสเปกตรัมเสียงออกเป็น “ถังขยะ” อย่างไร

ภาพที่ 2 แสดงให้เห็นว่า FFT “ถังขยะ” ตอบสนองต่อสัญญาณอย่างไร … ในกรณีนี้คือ 800Hz หากมีสัญญาณที่สองที่บอกว่า 1500Hz เราจะเห็นการตอบสนองสองครั้ง … หนึ่งครั้งที่ 800Hz และอีกสัญญาณหนึ่งที่ 1500Hz

ตามทฤษฎีแล้ว ตัวถอดรหัสรหัสมอร์สสามารถทำได้โดยการตรวจสอบระดับเอาต์พุตของช่องความถี่ FFT โดยเฉพาะ … จำนวนมากแสดงถึงการมีอยู่ของจุดหรือเส้นประ … ตัวเลขขนาดเล็กหมายถึงไม่มีสัญญาณ

ตัวถอดรหัสรหัสมอร์สดังกล่าวสามารถทำได้โดยการตรวจสอบ "bin 6" ในรูปภาพที่ 2 แต่วิธีนี้มีข้อผิดพลาดหลายประการ:

  • เราต้องการเพียงหนึ่งช่องความถี่ … ส่วนที่เหลือเป็นการคำนวณที่สูญเปล่า
  • ช่องความถี่อาจไม่ปรากฏบนความถี่ที่น่าสนใจอย่างแน่นอน
  • มันค่อนข้างช้า (20mS ต่อ Arduino loop()

อีกวิธีหนึ่งคือการใช้ตัวกรอง Goertzel

ตัวกรอง Goertzel

ตัวกรอง Goertzel คล้ายกับ FFT แต่มีถังความถี่เดียว

ภาพที่ 3 แสดงการตอบสนองความถี่ของตัวกรอง Goertzel เพื่อแยกขั้นตอนเสียง

ภาพที่ 4 เป็นการกวาดตัวกรองเดียวกันในช่วงความถี่เดียวกัน

ฉันตัดสินใจ "ไป" ด้วยอัลกอริทึม Goertzel เป็น:

  • เวลาวนรอบ Arduino () โดยใช้อัลกอริทึม Goertzel คือ 14mS (มิลลิวินาที) เทียบกับ 20mS (มิลลิวินาที) สำหรับโซลูชัน FFT โดยใช้ไลบรารี Arduino "fix_FFT"
  • ตั้งค่าความถี่กลางของตัวกรองแบนด์พาส Goertzel ได้ง่าย
  • แบนด์วิดธ์อยู่ที่ประมาณ 190Hz

ภาพที่ 5 แสดงเอาต์พุตตัวเลขจากตัวกรอง 900Hz Goertzel เมื่อตรวจพบเสียง ฉันได้ตั้งค่าเกณฑ์โทนเสียงของฉันเป็นค่า 4000 … ค่าที่สูงกว่า 4000 หมายถึงโทนเสียง

ตามทฤษฎีแล้ว คุณเพียงแค่ต้องปรับตัวกรองของคุณให้มีความถี่ในการฟังที่สบาย น่าเสียดายที่เอาต์พุตเสียงจากลำโพงมอนิเตอร์ขนาด 1 นิ้วของฉันลดลงอย่างรวดเร็วต่ำกว่า 900Hz เพื่อหลีกเลี่ยงปัญหาใด ๆ ฉันจึงใช้ความถี่ตัวกรอง 950Hz พบสูตรที่จำเป็นสำหรับการคำนวณความถี่ตัวกรองสำรองในส่วนหัวของโค้ด

ถอดรหัส

การถอดรหัสจุดและขีดกลางนั้นไม่ง่ายอย่างที่คิด

มอร์สที่สมบูรณ์แบบถูกกำหนดเป็น:

  • จุด = 1 หน่วย
  • ช่องว่างภายในตัวอักษร = 1 หน่วย
  • dash = 3 หน่วย
  • ช่องว่างระหว่างตัวอักษร = 3 หน่วย
  • ช่องว่างระหว่างคำ = 7 หน่วย

ในการถอดรหัสมอร์สที่สมบูรณ์แบบ เราต้องการระยะเวลาเสียงอ้างอิง 2 หน่วย

  • จุด < 2 หน่วย
  • พื้นที่องค์ประกอบ < 2 หน่วย
  • dash > 2 หน่วย
  • ตัวอักษร _space > 2 หน่วย
  • word_space > 6 หน่วย (เช่น 3 x หน่วยอ้างอิง)

ใช้งานได้กับเครื่องมอร์ส แต่ใน "โลกแห่งความเป็นจริง":

  • ความเร็วในการส่งแตกต่างกันไป
  • ระยะเวลาของแต่ละจุดแตกต่างกันไป
  • ระยะเวลาของเส้นประแต่ละเส้นจะแตกต่างกันไป
  • ตัวอักษร E, I, S, H, 5 มีเฉพาะจุดที่เฉลี่ยถึงระยะเวลาของจุด
  • ตัวอักษร T, M, O, 0 มีเฉพาะขีดกลางซึ่งเฉลี่ยระยะเวลาของเส้นประ
  • ช่องว่างของคำอาจไม่มาถึง
  • การซีดจางทำให้เกิดข้อผิดพลาดซึ่งตัวถอดรหัสต้องกู้คืน
  • สัญญาณเสียหายเนื่องจากการรบกวน

ตัวอักษรที่มีเฉพาะจุดและขีดกลางจะได้รับการแก้ไขบางส่วนหาก:

เราประเมินระยะเวลาอ้างอิงจนกว่าเราจะได้รับจุดที่ถูกต้องและเส้นประที่ถูกต้อง ฉันใช้ 200 มิลลิวินาทีซึ่งถูกต้องหากความเร็วในการส่งอยู่ระหว่าง 6 WPM (คำต่อนาที) ถึง 17 WPM คุณอาจต้องเพิ่มค่านี้หากคุณกำลังเรียนรู้มอร์ส ตารางความเร็วรวมอยู่ในซอฟต์แวร์

การเปลี่ยนแปลงความเร็วจะได้รับการแก้ไขหาก:

  • เราทำค่าเฉลี่ยกลิ้งในแต่ละจุดและแต่ละเส้นประและ
  • คำนวณระยะเวลาอ้างอิงใหม่หลังจากได้รับสัญลักษณ์แต่ละอัน

ช่องว่างของคำและช่องว่างของคำที่ไม่ถึงจะได้รับการแก้ไขหากเรา:

  • จำเวลาของการเปลี่ยนขอบท้าย (โทนเป็นไม่มีโทน) ครั้งสุดท้าย
  • รีสตาร์ทอัลกอริทึมหลังจากแต่ละตัวอักษร
  • คำนวณเวลาที่ผ่านไปในขณะที่รอการเปลี่ยนแนวหน้าถัดไป (ไม่มีโทนเสียง) และ
  • ใส่ช่องว่างถ้าเกิน 6 หน่วยเวลา

มอร์สออสซิลเลเตอร์

ตอนแรกฉันลองใช้ Piezo buzzers แต่พบว่า:

  • ความถี่ได้รับการแก้ไข
  • ความถี่เอาต์พุตสูงเกินไปสำหรับการฟังเป็นเวลานาน
  • Piezos มักจะลอยออกจาก Goertzel passband

จากนั้นฉันก็ลองขับตัวแปลงสัญญาณอะคูสติกด้วยคลื่นสี่เหลี่ยม 750Hz แต่พบว่ามีเสียงสะท้อนที่กรองฮาร์โมนิกที่ 1 และ 3 ออก ภาพที่ 6 แสดงเอาต์พุตของเครื่องขยายเสียงไมโครโฟนเป็นคลื่นสี่เหลี่ยม 750Hz … เราเห็นฮาร์โมนิกที่ 5 !!!

จากนั้นฉันก็หันไปใช้ลำโพงขนาดเล็ก ภาพที่ 7 แสดงเอาต์พุตของไมโครโฟนเป็นคลื่นสี่เหลี่ยม 750Hz ที่ส่งไปยังลำโพงขนาดเล็ก … คราวนี้เราเห็นพื้นฐาน … ไม่ใช่ฮาร์มอนิกที่ 5 ตัวกรอง Goertzel ละเว้นฮาร์โมนิกใดๆ

หมายเหตุ

[1]

th.wikipedia.org/wiki/Goertzel_algorithm

www.embedded.com/the-goertzel-algorithm/

ขั้นตอนที่ 5: ซอฟต์แวร์

ซอฟต์แวร์
ซอฟต์แวร์
ซอฟต์แวร์
ซอฟต์แวร์
ซอฟต์แวร์
ซอฟต์แวร์

การติดตั้ง

  • ดาวน์โหลดไฟล์แนบ MorseCodeDecoder.ino [1]
  • คัดลอกเนื้อหาของไฟล์นี้ไปยังร่าง Arduino ใหม่
  • บันทึกภาพร่างเป็น "MorseCodeDecoder" (ไม่มีเครื่องหมายคำพูด)
  • รวบรวมและอัปโหลดภาพร่างไปยัง Arduino. ของคุณ

อัพเดตซอฟต์แวร์ 23 กรกฎาคม 2563

เพิ่มคุณสมบัติต่อไปนี้ในไฟล์แนบ "MorseCodeDecoder6.ino"

  • หน้าต่าง "ที่แน่นอนแบล็คแมน" [2]
  • "Noise_blanker"

การปรับ:

  • เพิ่มระดับเสียงของเครื่องรับจนกว่าไฟ LED จะเริ่มกะพริบแล้วดับลง
  • ตอนนี้ปรับเครื่องรับของคุณจนกว่า LED จะกะพริบตามขั้นตอนพร้อมกับมอร์สที่เข้ามา
  • Noise_blanker ได้รับการตั้งค่าให้ละเว้นเสียงระเบิดสูงสุด 8mS (หนึ่งรอบ)
  • เกณฑ์เสียงรบกวนสามารถปรับได้โดยการตั้งค่า Debug=true และดู Serial Plotter. ของคุณ

บันทึก

[1]

ตั้งค่า Arduino Serial Monitor ของคุณเป็น 115200 บอด หากคุณต้องการดูข้อความด้วย

[2]

  • ภาพที่ 1 … หน้าต่าง Blackman ที่แน่นอน
  • ภาพที่ 2 … ตัวกรอง Goertzel ที่ไม่มีหน้าต่าง Blackman ที่แน่นอน
  • รูปภาพ 3,,, ตัวกรอง Goertzel พร้อมใช้หน้าต่าง Blackman ที่แน่นอน

ขั้นตอนที่ 6: การทำงาน

ตัวถอดรหัส

วางเครื่องไว้ข้างลำโพงของคุณเมื่อฟังมอร์ส

  • แคปซูลไมโครโฟนอิเล็กเตรตรับสัญญาณมอร์สจากลำโพงของคุณ
  • เอาต์พุตของไมโครโฟนอิเล็กเตรตจะถูกขยาย 647 ครั้ง (56dB) ก่อนที่จะถูกส่งไปยัง Arduino เพื่อประมวลผล
  • ตัวกรองแบนด์พาสแบบดิจิตอลของ Goertzel จะแยกสัญญาณมอร์สออกจากสัญญาณรบกวน
  • การถอดรหัสทำได้โดยใช้ไบนารีทรี
  • เอาต์พุตตัวถอดรหัสจะแสดงเป็นข้อความบนจอแสดงผล TFT 320 x 240 พิกเซล นอกจากนี้ยังถูกส่งไปยัง Arduino “Serial Monitor” หากคุณไม่ต้องการใช้จอแสดงผล

ผู้ส่งมอร์ส

รวมผู้ส่งมอร์สด้วย ทำให้คุณสามารถฝึกส่งมอร์สและทำงานดังนี้:

  • โทนเสียงที่ได้ยินคงที่ถูกสร้างขึ้นบนขา Arduino 4
  • เราได้ยินเสียงนี้ผ่านลำโพงของตัวถอดรหัสทุกครั้งที่เรากดปุ่มมอร์ส
  • โทนเสียงถูกตั้งค่าเป็นความถี่เดียวกับตัวกรอง Goertzel ซึ่งหลอกให้ตัวถอดรหัสคิดว่ามันฟังมอร์สจริง … สิ่งที่คุณส่งจะปรากฏเป็นข้อความที่พิมพ์บนจอแสดงผล

การส่งของคุณจะดีขึ้นเมื่อตัวถอดรหัสหยิบข้อผิดพลาดทั่วไป เช่น:

  • ช่องว่างระหว่างสัญลักษณ์มากเกินไป (ตัวอย่าง: Q ถูกตรึงเป็น MA)
  • ช่องว่างระหว่างตัวอักษรมากเกินไป (ตัวอย่าง: NOW พิมพ์ว่า NO W)
  • รหัสไม่ถูกต้อง

ขั้นตอนที่ 7: สรุป

ตัวถอดรหัส

คำแนะนำนี้อธิบายวิธีการสร้างตัวถอดรหัสมอร์สที่แปลงรหัสมอร์สเป็นข้อความที่พิมพ์

  • ตัวถอดรหัสสามารถถอดรหัสมอร์สได้อย่างน้อย 80 WPM (คำต่อนาที)
  • ตัวถอดรหัสจะติดตามรูปแบบต่างๆ ของความเร็วในการส่งที่ได้รับโดยอัตโนมัติ
  • ข้อความจะแสดงบน Serial Monitor ของคุณ (หรือบนโมดูลการแสดงผล 320 x 240 TFT หากติดตั้งไว้) [1]

ผู้ส่ง

รวมผู้ส่งมอร์สด้วย

  • ผู้ส่งจะช่วยคุณปรับปรุงคุณภาพการส่งมอร์สของคุณ
  • ตัวถอดรหัสยืนยันว่าสิ่งที่คุณส่งไปนั้นถูกต้อง

ค่าอะไหล่

ค่าใช้จ่ายโดยประมาณของตัวถอดรหัสมอร์สซึ่งน้อยกว่าจอแสดงผล TFT ที่เป็นอุปกรณ์เสริมคือ 25 เหรียญ

คลิกที่นี่เพื่อดูคำแนะนำอื่น ๆ ของฉัน

ความท้าทายด้านเสียง 2020
ความท้าทายด้านเสียง 2020
ความท้าทายด้านเสียง 2020
ความท้าทายด้านเสียง 2020

รางวัลรองชนะเลิศในการประกวด Audio Challenge 2020

แนะนำ: