- วัสดุที่จำเป็น
- Rotary Encoder ทำงานอย่างไร
- ประเภทของ Rotary Encoder
- KY-040 Rotary Encoder Pinout และคำอธิบาย
- แผนภาพวงจรเข้ารหัสโรตารี Arduino
- การเขียนโปรแกรม Arduino ของคุณสำหรับ Rotary Encoder
- การทำงานของ Rotary Encoder กับ Arduino
เข้ารหัสโรตารีเป็นอุปกรณ์ป้อนข้อมูลซึ่งจะช่วยให้ผู้ใช้สามารถโต้ตอบกับระบบ ดูเหมือนโพเทนชิออมิเตอร์วิทยุมากกว่า แต่จะส่งสัญญาณพัลส์ออกมาซึ่งทำให้แอปพลิเคชันไม่เหมือนใคร เมื่อหมุนลูกบิดของ Encoder จะหมุนในรูปแบบของขั้นตอนเล็ก ๆ ซึ่งจะช่วยให้ใช้สำหรับการควบคุมสเต็ปเปอร์ / เซอร์โวมอเตอร์นำทางตามลำดับของเมนูและการเพิ่ม / ลดค่าของตัวเลขและอื่น ๆ อีกมากมาย
ในบทความนี้เราจะได้เรียนรู้เกี่ยวกับความแตกต่างของโรตารีเข้ารหัสและวิธีการทำงานนอกจากนี้เรายังจะเชื่อมต่อกับ Arduinoและควบคุมค่าของจำนวนเต็มโดยการหมุนตัวเข้ารหัสและแสดงค่าบนหน้าจอ LCD 16 * 2 ในตอนท้ายของบทช่วยสอนนี้คุณจะรู้สึกสบายใจกับการใช้ Rotary Encoder สำหรับโครงการของคุณ มาเริ่มกันเลย…
วัสดุที่จำเป็น
- ตัวเข้ารหัสแบบหมุน (KY-040)
- Arduino UNO
- 16 * 2 LCD ตัวอักษรและตัวเลข
- โพเทนชิออมิเตอร์ 10k
- เขียงหั่นขนม
- การเชื่อมต่อสายไฟ
Rotary Encoder ทำงานอย่างไร
Rotary Encoder เป็นตัวแปลงสัญญาณไฟฟ้าซึ่งหมายความว่ามันจะแปลงการเคลื่อนไหวทางกลเป็นพัลส์อิเล็กทรอนิกส์ ประกอบด้วยลูกบิดซึ่งเมื่อหมุนจะเคลื่อนที่ไปทีละขั้นตอนและสร้างลำดับของพัลส์รถไฟที่มีความกว้างที่กำหนดไว้ล่วงหน้าสำหรับแต่ละขั้นตอน มีตัวเข้ารหัสหลายประเภทแต่ละตัวมีกลไกการทำงานของตัวเองเราจะเรียนรู้เกี่ยวกับประเภทต่างๆในภายหลัง แต่ตอนนี้ให้เรามุ่งเน้นไปที่KY040 Incremental Encoder เท่านั้นเนื่องจากเราใช้มันสำหรับการสอนของเรา
โครงสร้างทางกลภายในสำหรับ Encoder แสดงอยู่ด้านล่าง โดยพื้นฐานแล้วประกอบด้วยแผ่นวงกลม (สีเทา) พร้อมแผ่นนำไฟฟ้า (สีทองแดง) วางอยู่ด้านบนของแผ่นวงกลมนี้ แผ่นนำไฟฟ้าเหล่านี้วางในระยะห่างที่เท่ากันดังที่แสดงด้านล่าง พินเอาท์พุตได้รับการแก้ไขที่ด้านบนของแผ่นวงกลมนี้ในลักษณะที่เมื่อหมุนลูกบิดแผ่นนำไฟฟ้าจะสัมผัสกับพินเอาต์พุต ที่นี่มีขาเอาต์พุตสองขาคือเอาต์พุต A และเอาต์พุต B ดังแสดงในรูปด้านล่าง
รูปคลื่นเอาต์พุตที่ผลิตโดยขาเอาต์พุต A และเอาต์พุต B จะแสดงเป็นสีฟ้าและสีเขียวตามลำดับ เมื่อแผ่นนำไฟฟ้าอยู่ใต้พินโดยตรงมันจะสูงส่งผลให้ตรงเวลาและเมื่อแผ่นนำไฟฟ้าเคลื่อนออกไปขาจะต่ำส่งผลให้เวลาปิดของรูปคลื่นที่แสดงด้านบน ตอนนี้ถ้าเรานับจำนวนพัลส์เราจะสามารถระบุได้ว่าตัวเข้ารหัสถูกย้ายไปกี่ขั้นตอน
ตอนนี้อาจเกิดคำถามขึ้นว่าทำไมเราต้องมีสัญญาณพัลส์สองตัวในเมื่อหนึ่งเพียงพอที่จะนับจำนวนก้าวที่ดำเนินการในขณะที่หมุนลูกบิด นี่เป็นเพราะเราจำเป็นต้องระบุว่าลูกบิดถูกหมุนไปในทิศทางใด หากคุณดูที่สองพัลส์คุณจะสังเกตได้ว่าทั้งสองอยู่ห่างจากเฟส 90 ° ดังนั้นเมื่อหมุนลูกบิดตามเข็มนาฬิกาเอาต์พุต A จะสูงก่อนและเมื่อหมุนลูกบิดทวนเข็มนาฬิกาเอาต์พุต B จะสูงก่อน
ประเภทของ Rotary Encoder
มีหลายประเภทของตัวเข้ารหัสแบบหมุนในตลาดที่นักออกแบบสามารถเลือกได้ตามการใช้งานของเขา ประเภทที่พบบ่อยที่สุดมีดังต่อไปนี้
- ตัวเข้ารหัสที่เพิ่มขึ้น
- ตัวเข้ารหัสแบบสัมบูรณ์
- ตัวเข้ารหัสแม่เหล็ก
- ตัวเข้ารหัสแสง
- เครื่องเข้ารหัสเลเซอร์
ตัวเข้ารหัสเหล่านี้ถูกจัดประเภทตามสัญญาณเอาท์พุตและเทคโนโลยีการตรวจจับตัวเข้ารหัสแบบเพิ่มหน่วยและตัวเข้ารหัสแบบสัมบูรณ์ถูกจัดประเภทตามสัญญาณเอาท์พุตและตัวเข้ารหัสแม่เหล็กออปติคอลและเลเซอร์ถูกจัดประเภทตามเทคโนโลยีการตรวจจับ Encoder ใช้ที่นี่เป็นประเภท Encoder
KY-040 Rotary Encoder Pinout และคำอธิบาย
พินเอาต์ของตัวเข้ารหัสแบบโรตารี่ KY-040 Incremental แสดงอยู่ด้านล่าง
หมุดสองตัวแรก (กราวด์และ Vcc) ใช้เพื่อจ่ายไฟให้กับตัวเข้ารหัสโดยทั่วไปจะใช้แหล่งจ่ายไฟ + 5V นอกเหนือจากการหมุนปุ่มตามเข็มนาฬิกาและทิศทางทวนเข็มนาฬิกาแล้วตัวเข้ารหัสยังมีสวิตช์ (Active low) ซึ่งสามารถกดได้โดยกดปุ่มด้านใน สัญญาณจากสวิตช์นี้ได้มาจากขา 3 (สวิตช์) ในที่สุดก็มีขาออกสองขาซึ่งสร้างรูปคลื่นตามที่กล่าวไว้ข้างต้น ตอนนี้ให้เราเรียนรู้วิธีการเชื่อมต่อกับ Arduino
แผนภาพวงจรเข้ารหัสโรตารี Arduino
แผนภาพวงจรที่สมบูรณ์สำหรับInterfacing Rotary Encoder กับ Arduinoแสดงดังภาพด้านล่าง
Rotary Encoder มี 5 พินตามลำดับที่แสดงในฉลากด้านบน สองพินแรกคือกราวด์และ Vcc ซึ่งเชื่อมต่อกับกราวด์และพิน + 5V ของ Arduino สวิตช์ของตัวเข้ารหัสเชื่อมต่อกับพินดิจิทัล D10 และยังถูกดึงให้สูงแม้ว่าตัวต้านทาน 1k ขาออกสองขาเชื่อมต่อกับ D9 และ D8 ตามลำดับ
ในการแสดงค่าของตัวแปรซึ่งจะเพิ่มขึ้นหรือลดลงโดยการหมุนตัวเข้ารหัสแบบหมุนเราจำเป็นต้องมีโมดูลการแสดงผล แบบที่ใช้ในที่นี้มักมีให้ใช้งานทั่วไปจอ LCD ตัวเลข 16 * 2 Alpha เราได้เชื่อมต่อจอแสดงผลเพื่อใช้งานในโหมด 4 บิตและเปิดเครื่องโดยใช้ขา + 5V ของ Arduino โพเทนชิออมิเตอร์ใช้เพื่อปรับความคมชัดของจอ LCD หากคุณต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับการเชื่อมต่อจอ LCD กับ Arduino ตามลิงค์ วงจรที่สมบูรณ์สามารถสร้างขึ้นที่ด้านบนของเขียงหั่นขนมของฉันมีลักษณะดังนี้ด้านล่างเมื่อการเชื่อมต่อทั้งหมดเสร็จสิ้น
การเขียนโปรแกรม Arduino ของคุณสำหรับ Rotary Encoder
มันค่อนข้างง่ายและตรงไปตรงมาในการตั้งโปรแกรมบอร์ด Arduino สำหรับเชื่อมต่อกับ Rotary Encoder หากคุณเข้าใจหลักการทำงานของ Rotary Encoder เราต้องอ่านจำนวนพัลส์เพื่อกำหนดจำนวนรอบของตัวเข้ารหัสและตรวจสอบว่าพัลส์ใดสูงก่อนเพื่อดูว่าตัวเข้ารหัสหมุนไปในทิศทางใด ในบทช่วยสอนนี้เราจะแสดงจำนวนที่เพิ่มขึ้นหรือลดลงในแถวแรกของ LCD และทิศทางของตัวเข้ารหัสในบรรทัดที่สองโปรแกรมที่สมบูรณ์สำหรับการทำเช่นเดียวกันสามารถพบได้ที่ด้านล่างของหน้านี้ให้กับที่วิดีโอสาธิตก็ไม่จำเป็นต้องมีห้องสมุดใด ๆ ตอนนี้เรามาแยกโปรแกรมออกเป็นส่วนย่อย ๆ เพื่อทำความเข้าใจการทำงาน
เนื่องจากเราใช้จอแสดงผล LCD เราจึงรวมไลบรารีคริสตัลเหลวซึ่งเป็นค่าเริ่มต้นใน Arduino IDE จากนั้นเรากำหนดพินสำหรับการเชื่อมต่อกับจอแอลซีดี Arduino ในที่สุดเราก็เริ่มต้นการแสดงผล LCD บนหมุดเหล่านั้น
# รวม
ถัดไปในฟังก์ชั่น การตั้งค่า เราจะแสดงข้อความแนะนำตัวบนหน้าจอ LCDจากนั้นรอ 2 วินาทีเพื่อให้ผู้ใช้อ่านข้อความนั้นได้ เพื่อให้แน่ใจว่า LCD ทำงานอย่างถูกต้อง
lcd.print ("Rotary Encoder"); // Intro Message line 1 lcd.setCursor (0, 1); lcd.print ("ด้วย Arduino"); // Intro Message line 2 ล่าช้า (2000); lcd.clear ();
ตัวเข้ารหัสโรตารีมีพินเอาต์พุตสามพินซึ่งจะเป็นพิน INPUT สำหรับ Arduino หมุดทั้งสามนี้คือสวิตช์เอาต์พุต A และเอาต์พุต B ตามลำดับ สิ่งเหล่านี้ถูกประกาศเป็นอินพุตโดยใช้ฟังก์ชัน pinMode ดังที่แสดงด้านล่าง
// การประกาศโหมดพิน pinMode (Encoder_OuputA, INPUT); pinMode (Encoder_OuputB, INPUT); pinMode (Encoder_Switch, INPUT);
ภายในฟังก์ชัน การตั้งค่าโมฆะ เราจะอ่านสถานะของขาออก A เพื่อตรวจสอบสถานะสุดท้ายของพิน จากนั้นเราจะใช้ข้อมูลนี้เพื่อเปรียบเทียบกับค่าใหม่เพื่อตรวจสอบว่าขาใด (เอาต์พุต A หรือเอาต์พุต B) มีค่าสูง
Previous_Output = digitalRead (Encoder_OuputA); // อ่านค่า inital ของ Output A
ในที่สุดภายในฟังก์ชัน ลูป หลักเราต้องเปรียบเทียบค่าของเอาต์พุต A และเอาต์พุต B กับเอาต์พุตก่อนหน้าเพื่อตรวจสอบว่าอันใดสูงก่อน สามารถทำได้โดยการเปรียบเทียบค่าของเอาต์พุตปัจจุบันของ A และ B กับเอาต์พุตก่อนหน้าดังที่แสดงด้านล่าง
if (digitalRead (Encoder_OuputA)! = Previous_Output) { if (digitalRead (Encoder_OuputB)! = Previous_Output) { Encoder_Count ++; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("ตามเข็มนาฬิกา"); }
ในโค้ดข้างต้นที่สอง ถ้า สภาพได้รับการดำเนินถ้าเอาท์พุท B ได้เปลี่ยนจากการส่งออกก่อนหน้านี้ ในกรณีนั้นค่าของตัวแปรเอ็นโค้ดเดอร์จะเพิ่มขึ้นและจอ LCD จะแสดงว่าตัวเข้ารหัสถูกหมุนในทิศทาง ตามเข็มนาฬิกา ในทำนองเดียวกันว่า ถ้า สภาพล้มเหลวในภายหลัง อื่น สภาพเราพร่องตัวแปรและการแสดงผลที่เข้ารหัสจะหมุนใน ทิศทางทวนเข็ม ทิศทาง รหัสเดียวกันแสดงอยู่ด้านล่าง
อื่น ๆ { Encoder_Count--; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("ทวนเข็มนาฬิกา"); } }
สุดท้ายในตอนท้ายของ ลูป หลักเราต้องอัปเดตค่าเอาต์พุตก่อนหน้าด้วยค่าเอาต์พุตปัจจุบันเพื่อให้ลูปสามารถทำซ้ำได้ด้วยตรรกะเดียวกัน รหัสต่อไปนี้ไม่เหมือนกัน
Previous_Output = digitalRead (Encoder_OuputA);
อีกทางเลือกหนึ่งคือการตรวจสอบว่ามีการกดสวิตช์บนตัวเข้ารหัสหรือไม่ สามารถตรวจสอบได้โดยการตรวจสอบพินสวิตช์บนตัวเข้ารหัสแบบหมุน พินนี้เป็นพินที่ใช้งานได้ต่ำหมายความว่าพินนี้จะอยู่ต่ำเมื่อกดปุ่ม หากไม่ได้กดพินไว้สูงเรายังใช้ตัวต้านทานแบบดึงขึ้นเพื่อให้แน่ใจว่าจะอยู่สูงเมื่อไม่ได้กดสวิตช์เพื่อหลีกเลี่ยงสภาวะจุดลอย
ถ้า (digitalRead (Encoder_Switch) == 0) {lcd.clear (); lcd.setCursor (0, 1); lcd.print ("กดสวิตช์"); }
การทำงานของ Rotary Encoder กับ Arduino
เมื่อฮาร์ดแวร์และรหัสพร้อมแล้วเพียงแค่อัปโหลดรหัสไปยังบอร์ด Arduino และเปิดใช้งานบอร์ด Arduino คุณสามารถจ่ายไฟผ่านสาย USB หรือใช้อะแดปเตอร์ 12V เมื่อเปิดเครื่อง LCD ควรแสดงข้อความแนะนำจากนั้นจึงว่างเปล่า ตอนนี้หมุนตัวเข้ารหัสแบบหมุนแล้วคุณจะเห็นค่าเริ่มเพิ่มขึ้นหรือลดลงตามทิศทางที่คุณหมุน บรรทัดที่สองจะแสดงให้คุณเห็นว่ากำลังหมุนตัวเข้ารหัสในทิศทางตามเข็มนาฬิกาหรือทวนเข็มนาฬิกา ภาพด้านล่างแสดงให้เห็นเช่นเดียวกัน
นอกจากนี้เมื่อกดปุ่มบรรทัดที่สองจะแสดงว่ามีการกดปุ่ม การทำงานที่สมบูรณ์สามารถพบได้ในวิดีโอด้านล่าง นี่เป็นเพียงโปรแกรมตัวอย่างสำหรับเชื่อมต่อ Encoder กับ Arduino และตรวจสอบว่าทำงานได้ตามที่คาดไว้หรือไม่ เมื่อคุณมาถึงที่นี่คุณควรจะสามารถใช้ตัวเข้ารหัสสำหรับโปรเจ็กต์และโปรแกรมของคุณได้
หวังว่าคุณจะเข้าใจบทช่วยสอนและสิ่งต่างๆที่ได้ผลตามที่ควรจะเป็น หากคุณมีปัญหาใด ๆ ให้ใช้ส่วนความคิดเห็นหรือฟอรัมเพื่อขอความช่วยเหลือด้านเทคนิค