สารบัญ:

Arduino Morse Code Writer: 7 ขั้นตอน (พร้อมรูปภาพ)
Arduino Morse Code Writer: 7 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Arduino Morse Code Writer: 7 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Arduino Morse Code Writer: 7 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: Transmit Morse Code with Arduino 2024, พฤศจิกายน
Anonim
Image
Image
Arduino Morse Code Writer
Arduino Morse Code Writer

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

เสบียง

Arduino Uno board Stepper motor Micro servo SG90ULN2003 stepper motor driver module โมดูลแหล่งจ่ายไฟ เขียงหั่นขนม4× สายจัมเปอร์6× สายดูปองท์หญิงกับชาย9V1A อะแดปเตอร์ สายเคเบิล USB กระดาษแข็ง 2× หมุดไม้ 2× ฟางสปริง กระดาษสีขาว เลโก้ซุปเปอร์ กาว ปืนกาวร้อน แถบยางยืด ที่ใส่ปากกา)กรรไกรตัดเล็บ

ขั้นตอนที่ 1: สร้างฐาน

การสร้างฐาน
การสร้างฐาน
การสร้างฐาน
การสร้างฐาน
การสร้างฐาน
การสร้างฐาน

เริ่มต้นด้วยการสร้างฐาน เหมืองกว้าง 4 กระดุมและยาว 20 เม็ด หลังจากสร้างชั้นหนึ่งด้วยความยาวเหล่านั้น ฉันสร้างกระดานชนวนกว้างหนึ่งตัวรอบๆ เหมือง โดยเหลือช่องว่างไว้ด้านหนึ่งเพื่อให้มีที่ว่างสำหรับสเต็ปเปอร์มอเตอร์ จากนั้นฉันก็เพิ่ม ชิ้นส่วนกระเบื้องถึงส่วนตรงกลางที่จะเป็นแถบกระดาษ การใช้เลโก้ทำให้แข็งแรงและปรับเปลี่ยนได้ง่าย ในการทำม้วนกระดาษ ฉันตัดแถบกระดาษ A4 กว้าง 1.2 ซม. (ฉันเลือกความกว้างนี้เพราะมันกว้างเท่ากับล้อเลโก้ที่ฉันใช้ คุณสามารถทำให้ใหญ่ขึ้นหรือเล็กลงได้ขึ้นอยู่กับล้อของคุณ) และติดปลายมันเข้าด้วยกัน เพื่อสร้างแถบยาวมาก ๆ จากนั้นฉันก็พันไว้รอบวงล้อ

ขั้นตอนที่ 2: ชิ้นส่วนเซอร์โว

เซอร์โว พีซ
เซอร์โว พีซ
ชิ้นส่วนเซอร์โว
ชิ้นส่วนเซอร์โว
เซอร์โว พีซ
เซอร์โว พีซ

สำหรับขั้นตอนนี้คุณต้อง:

  • เดือยไม้ 2 อัน ยาว 4 ซม.
  • สองสปริงยาว 2 ซม.
  • ฟางหนึ่งอันตัดเป็นสองท่อนยาว 2 ซม
  • กระดาษแข็งขนาด 12 ซม. คูณ 4 ซม. หนึ่งแผ่น
  • กระดาษแข็งขนาด 4 ซม. คูณ 1.5 ซม. สองแผ่น
  • กระดาษแข็งขนาด 4 ซม. คูณ 2 ซม. หนึ่งแผ่น

ขั้นแรก ติดเดือยกับหนึ่งในชิ้นขนาด 4 คูณ 1.5 จากนั้นใส่สปริงและหลอดเข้าไปในเดือย จากนั้นติดกระดาษแข็งอีกชิ้นที่อีกด้านหนึ่งเพื่อยึดทุกอย่างเข้าที่

ประการที่สอง กาวชิ้น 4 ซม. คูณ 2 ซม. ที่ด้านบนของหลอด

ประการที่สาม พลิกทั้งชิ้นและกาวเดือยเล็ก ๆ ที่ด้านหลัง ไม่ใช่ตรงกลาง แต่ไปทางซ้ายเล็กน้อย (ลืมใส่เดือยเล็กๆในรูปแรก)

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

ฉันลงเอยด้วยการตัดจากส่วนล่างของชิ้นส่วนขนาด 12 ซม. คูณ 4 ซม. ประมาณ 3 ซม. และติดชิ้นอีก 4 ซม. คูณ 1.5 ซม. อีกสองชิ้น จากนั้นปิดด้วยกระดาษแข็งขนาด 5.5 ซม. คูณ 4 ซม. และเพื่อถือปากกามาร์คเกอร์ ฉันทำชิ้นเล็ก ห่วงยางยืดแล้วติดบนกระดาษแข็งชิ้นเล็ก ๆ จากนั้นฉันก็ติดกาวนั้นกับชิ้นส่วนขนาด 4 ซม. คูณ 2 ซม. ซึ่งจะเลื่อนลงเมื่อเซอร์โวเริ่มทำงาน ส่วนเพิ่มเติมเหล่านี้หยุดเครื่องหมายไม่ให้เคลื่อนที่จากด้านหนึ่งไปอีกด้านหนึ่งเมื่อสปริงกลับมา

ขั้นตอนที่ 3: การเพิ่มเซอร์โวมอเตอร์และม้วนกระดาษไปที่ฐาน

การเพิ่มเซอร์โวมอเตอร์และม้วนกระดาษไปที่ฐาน
การเพิ่มเซอร์โวมอเตอร์และม้วนกระดาษไปที่ฐาน
การเพิ่มเซอร์โวมอเตอร์และม้วนกระดาษไปที่ฐาน
การเพิ่มเซอร์โวมอเตอร์และม้วนกระดาษไปที่ฐาน

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

ขั้นตอนที่ 4: การสร้างเฟรมสเต็ปเปอร์มอเตอร์

การสร้างโครงสเต็ปเปอร์มอเตอร์
การสร้างโครงสเต็ปเปอร์มอเตอร์
การสร้างโครงสเต็ปเปอร์มอเตอร์
การสร้างโครงสเต็ปเปอร์มอเตอร์
การสร้างโครงสเต็ปเปอร์มอเตอร์
การสร้างโครงสเต็ปเปอร์มอเตอร์

ขั้นตอนนี้ค่อนข้างท้าทาย เนื่องจากมอเตอร์ไม่ได้ถูกสร้างมาเพื่อให้เข้ากับเลโก้ได้อย่างสมบูรณ์แบบ อย่างไรก็ตาม ฉันทำได้โดยใช้รูสองรูในมอเตอร์เพื่อยึดให้เข้าที่ ต่อไป ฉันติดล้อเลโก้ที่ส่วนปลายของมอเตอร์ แล้ววางมันไว้ข้างๆ ฐานด้านข้างที่เปิดทิ้งไว้ในขั้นตอนที่ 1

ขั้นตอนที่ 5: เสร็จสิ้นการสัมผัส

สัมผัสสุดท้าย
สัมผัสสุดท้าย
สัมผัสสุดท้าย
สัมผัสสุดท้าย
สัมผัสสุดท้าย
สัมผัสสุดท้าย
สัมผัสสุดท้าย
สัมผัสสุดท้าย

ฉันเพิ่มส่วนโค้งสองชิ้นเพื่อปิดล้อเพื่อยึดกระดาษเข้าที่ และฉันได้เพิ่มส่วนโค้งเล็กๆ สองชิ้น ชิ้นหนึ่งเพื่อยึดสายไฟของสเต็ปเปอร์มอเตอร์ และอีกชิ้นสำหรับยึดกระดาษ สุดท้ายนี้ ฉันเปลี่ยนสเต็ปเปอร์มอเตอร์ล้อให้ใหญ่ขึ้นเล็กน้อยซึ่งย้ายกระดาษได้ดีกว่าล้อเก่า

ขั้นตอนที่ 6: อุปกรณ์อิเล็กทรอนิกส์

อิเล็กทรอนิกส์
อิเล็กทรอนิกส์
อิเล็กทรอนิกส์
อิเล็กทรอนิกส์

สุดท้าย คุณต้องเชื่อมต่อมอเตอร์กับ Arduino และอัปโหลดโค้ด

เราจะเริ่มต้นด้วยเซอร์โวมอเตอร์ ต่อสายสีน้ำตาล (สายกราวด์) เข้ากับพิน GND จากนั้นต่อสายสีแดง (สายไฟ) เข้ากับพิน 5V และสายสีส้ม (สายสัญญาณ) เข้ากับ Dig #5 เข็มหมุด. ต่อไป สเต็ปเปอร์มอเตอร์ ต่อ 1N1 กับ Dig #11, 1N2 กับ Dig #10, 1N3 ถึง Dig #9, 1N4 ถึง Dig #8, 5V ไปทางด้านบวกของเขียงหั่นขนมและหมุดกราวด์กับด้านลบของ เขียงหั่นขนม และอย่าลืมเชื่อมต่อโมดูลแหล่งจ่ายไฟเข้ากับเขียงหั่นขนมเพื่อให้แน่ใจว่าด้านบวกและด้านลบจัดตำแหน่งอย่างถูกต้องกับด้านที่ตรงกันบนเขียงหั่นขนม หากคุณลืมทำเช่นนั้น คุณจะย้อนกลับพลังของโครงการของคุณ และคุณไม่ต้องการที่จะทำเช่นนั้น

สำหรับรหัสนั้น ฉันเขียนสี่วิธี วิธีหนึ่งสำหรับเขียนจุด หนึ่งวิธีเขียนเส้นประ และอีกสองวิธีเพื่อเว้นช่องว่างระหว่างตัวอักษรแต่ละตัวกับแต่ละคำ ด้วยวิธีนี้ ฉันสามารถเรียกวิธีการเหล่านี้เมื่อต้องการ แทนที่จะต้องเขียนใหม่ทุกตัวอักษร จากนั้นฉันก็เขียน for loop ที่อ่านแต่ละตัวอักษรของข้อความแล้วเขียน ข้างในนั้น ฉันเขียน if statement สำหรับแต่ละตัวอักษร แต่คุณสามารถเขียนมันในคำสั่ง switch ได้หากต้องการ แน่นอนคุณสามารถเพิ่มรหัสเพื่อให้โปรแกรมอ่านตัวเลขได้ เมื่อการเดินสายทั้งหมดพร้อม เพียงคัดลอกและวางโค้ดลงใน IDE ของคุณ อย่าลืมติดตั้งไลบรารีสเต็ปเซอร์โวและสตริง หลังจากนั้นคุณก็ไปได้ดี

มันทำงานอย่างไร

เมื่อ Arduino เริ่มโปรแกรมจะดูที่ตัวอักษรตัวแรกของข้อความ และเรียกใช้ฟังก์ชันที่เขียนด้วยรหัสมอร์สทั้งนี้ขึ้นอยู่กับว่าเป็นตัวใด ตัวอย่างเช่น เมื่อเรียกใช้ฟังก์ชันจุด เซอร์โวมอเตอร์จะถูกตั้งค่าเป็น 160 ซึ่งจะเลื่อนปากกาลง จากนั้นจะตั้งค่ากลับเป็น 90 ซึ่งจะทำให้สปริงกลับมาเคลื่อนปากกาตามไปด้วย และหากเรียกใช้ฟังก์ชัน dash เซอร์โวจะเลื่อนปากกาลง จากนั้นสเต็ปเปอร์มอเตอร์จะหมุนวงล้อซึ่งดึงกระดาษทำให้ปากกาเขียนเส้นประ และถ้าฟังก์ชันช่องว่างอย่างใดอย่างหนึ่งเรียกว่าสเต็ปเปอร์มอเตอร์หมุน แต่ด้วยปากกาขึ้นจึงดึงกระดาษทำให้มีช่องว่างระหว่างตัวอักษรหรือคำ เมื่อเสร็จแล้วจะไปที่ตัวอักษรถัดไปและทำซ้ำขั้นตอนเดียวกัน ฉันหวังว่าคุณจะชอบมัน;)

รหัส

#รวม

#include #include #include const int stepsPerRevolution = 150; // นี่คือตัวแปรสำหรับสเต็ปปิ้งมอเตอร์ ประโยคสตริง = "*สวัสดี"; //เปลี่ยนตัวแปรนี้ให้เขียนคำต่างกันแต่เขียนด้วยตัวอักษรขนาดเล็กและขึ้นต้นคำด้วย "*" Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11); เซอร์โว myServo; // นี่คือวิธีการที่ทำให้หุ่นยนต์เขียน dot void dot() { Serial.println("dot start"); myServo.write (160); ล่าช้า (1000); myServo.write(90); ล่าช้า (1000); myStepper.step(stepsPerRevolution); ล่าช้า (1000); Serial.println("ทำจุดเสร็จแล้ว"); } // นี่คือวิธีการที่ทำให้หุ่นยนต์เขียน dash void dash() { Serial.println("dash start"); myServo.write (160); ล่าช้า (1000); myStepper.step(stepsPerRevolution); ล่าช้า (1000); myServo.write(90); ล่าช้า (1000); myStepper.step(stepsPerRevolution); ล่าช้า (1000); Serial.println("แดชเสร็จแล้ว"); } // นี่คือวิธีการที่ทำให้หุ่นยนต์เว้นช่องว่างระหว่างแต่ละตัวอักษร void space() { Serial.println("space start"); myServo.write(90); ล่าช้า (1000); myStepper.step(200); ล่าช้า (1000); Serial.println("เว้นวรรคเสร็จแล้ว"); } // นี่คือวิธีการที่ทำให้หุ่นยนต์เว้นช่องว่างระหว่างแต่ละคำ void bigSpace() { myServo.write(90); myStepper.step(250); ล่าช้า (1000); } การตั้งค่าเป็นโมฆะ () { // ใส่รหัสการตั้งค่าของคุณที่นี่ เพื่อเรียกใช้ครั้งเดียว: Serial.begin(9600); myStepper.setSpeed(100); myServo.attach(5); int first = ประโยค.indexOf('*'); // นี่สำหรับลูปผ่านตัวอักษรแต่ละตัวของสตริงแล้วเรียกวิธีการที่ถูกต้องในการเขียนลงไป (int i = 0; i < sentence.length(); i++) { if (sentence.charAt(first + i) == 'a') { Serial.print (".- "); จุด (); เส้นประ (); ช่องว่าง(); } else if (sentence.charAt(first + i) == 'b') { Serial.print("-… "); เส้นประ (); จุด (); จุด (); จุด (); ช่องว่าง(); } else if (sentence.charAt(first + i) == 'c') { Serial.print("-.-. "); เส้นประ (); จุด (); เส้นประ (); จุด (); ช่องว่าง(); } else if (sentence.charAt(first + i) == 'd') { Serial.print("-.. "); เส้นประ (); จุด (); จุด (); ช่องว่าง(); } else if (sentence.charAt(first + i) == 'e') { Serial.print(". "); จุด (); ช่องว่าง(); } else if (sentence.charAt(first + i) == 'f') { Serial.print("..-. "); จุด (); จุด (); เส้นประ (); จุด (); ช่องว่าง(); } else if (sentence.charAt(first + i) == 'g') { Serial.print("--. "); เส้นประ (); เส้นประ (); จุด (); ช่องว่าง(); } else if (sentence.charAt(first + i) == 'h') { Serial.print("…. "); จุด (); จุด (); จุด (); จุด (); ช่องว่าง(); } อื่น if (sentence.charAt(first + i) == 'i') { Serial.print(".. "); จุด (); จุด (); ช่องว่าง(); } else if (sentence.charAt(first + i) == 'j') { Serial.print(".--- "); จุด (); เส้นประ (); เส้นประ (); เส้นประ (); ช่องว่าง(); } else if (sentence.charAt(first + i) == 'k') { Serial.print("-.- "); เส้นประ (); จุด (); เส้นประ (); ช่องว่าง(); } อื่น if (sentence.charAt(first + i) == 'l') { Serial.print(".-.. "); จุด (); เส้นประ (); จุด (); จุด (); ช่องว่าง(); } else if (sentence.charAt(first + i) == 'm') { Serial.print("-- "); เส้นประ (); เส้นประ (); ช่องว่าง(); } else if (sentence.charAt(first + i) == 'n') { Serial.print("-. "); เส้นประ (); จุด (); ช่องว่าง(); } else if (sentence.charAt(first + i) == 'o') { Serial.print("--- "); เส้นประ (); เส้นประ (); เส้นประ (); ช่องว่าง(); } else if (sentence.charAt(first + i) == 'p') { Serial.print(".--. "); จุด (); เส้นประ (); เส้นประ (); จุด (); ช่องว่าง(); } else if (sentence.charAt(first + i) == 'q') { Serial.print("--.- "); เส้นประ (); เส้นประ (); จุด (); เส้นประ (); ช่องว่าง(); } else if (sentence.charAt(first + i) == 'r') { Serial.print(".-. "); จุด (); เส้นประ (); จุด (); ช่องว่าง(); } else if (sentence.charAt(first + i) == 's') { Serial.print("… "); จุด (); จุด (); จุด (); ช่องว่าง(); } else if (sentence.charAt(first + i) == 't') { Serial.print("- "); เส้นประ (); ช่องว่าง(); } อื่น if (sentence.charAt(first + i) == 'u') { Serial.print("..- "); จุด (); จุด (); เส้นประ (); ช่องว่าง(); } else if (sentence.charAt(first + i) == 'v') { Serial.print("…- "); จุด (); จุด (); จุด (); เส้นประ (); ช่องว่าง(); } อื่น if (sentence.charAt(first + i) == 'w') { Serial.print(".-- "); จุด (); เส้นประ (); เส้นประ (); ช่องว่าง(); } else if (sentence.charAt(first + i) == 'x') { Serial.print("-..- "); เส้นประ (); จุด (); จุด (); เส้นประ (); ช่องว่าง(); } อื่น if (sentence.charAt(first + i) == 'y') { Serial.print("-.-- "); เส้นประ (); จุด (); เส้นประ (); เส้นประ (); ช่องว่าง(); } else if (sentence.charAt(first + i) == 'z') { Serial.print("--.. "); เส้นประ (); เส้นประ (); จุด (); จุด (); ช่องว่าง(); } else if (sentence.charAt(first + i) == ' ') { Serial.print("/ "); บิ๊กสเปซ(); } } } void loop() { //อย่าเขียนอะไรที่นี่ }

ขั้นตอนที่ 7: การแก้ไขปัญหา

ล้อไม่หมุน

ล้อกับกระดาษอาจมีการเสียดสีมากเกินไป ลองยกล้อขึ้นเล็กน้อยหรือเปลี่ยนล้อ

วงล้อดึงกระดาษแล้วหมุนต่อไปโดยไม่ต้องดึงกระดาษ

ตรวจสอบให้แน่ใจว่าคุณติดล้อที่กึ่งกลางของสเต็ปเปอร์มอเตอร์

จุดและขีดคั่นเชื่อมต่อกัน

ตรวจสอบว่าเขียนฟังก์ชัน dot, dash และ space ถูกต้องหรือไม่ ควรมีลักษณะดังนี้:

// นี่คือวิธีการที่ทำให้หุ่นยนต์เขียน dotvoid dot() { Serial.println("dot start"); myServo.write (160); ล่าช้า (1000); myServo.write(90); ล่าช้า (1000); myStepper.step(stepsPerRevolution); ล่าช้า (1000); Serial.println("ทำจุดเสร็จแล้ว"); }

// นี่คือวิธีการที่ทำให้หุ่นยนต์เขียนเส้นประ

void dash() { Serial.println("dash start"); myServo.write (160); ล่าช้า (1000); myStepper.step(stepsPerRevolution); ล่าช้า (1000); myServo.write(90); ล่าช้า (1000); myStepper.step(stepsPerRevolution); ล่าช้า (1000); Serial.println("แดชเสร็จแล้ว"); }

// เป็นวิธีการที่ทำให้หุ่นยนต์เว้นวรรคระหว่างตัวอักษรแต่ละตัว

ช่องว่าง () { Serial.println ("ช่องว่างเริ่มต้น"); myServo.write(90); ล่าช้า (1000); myStepper.step(200); ล่าช้า (1000); Serial.println("เว้นวรรคเสร็จแล้ว"); }

แนะนำ: