
สวัสดีครับ ดุ๊ก ดิ๊ก กระดุกกระดิก เป็นโครงงานหุ่นยนต์แมลง 4 ขา พร้อมการบังคับด้วยวิทยุรับส่ง เป็นการเรียนรู้ลักษณะการเดิน การควบคุม การออกแบบ การวิเคราะห์ การทำงานของเจ้าตัวแมลง 4 ขา เป็นโครงงานต้อนรับปิดเทอมสำหรับ น้องๆที่ต้องการ การใช้เวลาว่างให้เป็นประโยชน์
ลักษณะการทำงานของตัวหุ่นยนต์
ในลักษณะการทำงานของหุ่นยนต์แมลงตัวนี้ ผมขอกล่าวโดยรวมเสียก่อนครับ เพื่อจะได้รู้หลักการคร่าวๆ ของการออกแบบ เจ้าตัว ดุ๊ก ดิ๊ก กระดุกกระดิกตัวนี้ครับ
ก่อนการตัดสินใจในการสร้างเจ้าตัวหุ่นยนต์ตัวนี้ ลองมาดูลักษณะการทำงานคร่าวๆเสียก่อน โดยมีลักษณะการทำงานดังนี้
1. สามารถบังคับให้เดินหน้า
2. สามารถบังคับในการเลี้ยวซ้าย
3. สามารถบังคับในการเลี้ยวขวา
4. มีการแสดงผลการรับสัญญาณวิทยุ
5. มีการแสดงผลการเลี้ยวซ้าย
6. มีการแสดงผลการเลี้ยวขวา
ในรูปที่ 1 เป็นบล็อกการแสดงการทำงานโดยรวมของระบบหุ่นยนต์ โดยสามารถอธิบายได้ดังนี้โดยต้องเริ่มจาก วงจรรับสัญญาณวิทยุ ในวงจรส่วนนี้ผมไม่ได้ทำการออกแบบเอง เพื่อความง่ายผมได้นำมาจากวงจรรถกระป๋องที่ไม่ได้ใช้แล้วมาทำการดัดแปลง ในวงจรรถกระป๋องที่นำมาใช้งานในบทความนี้ สามารถหาอ่านอย่างละเอียดได้ใน หนังสือ Hobby Electronic ฉบับที่ 116 สัญญาณที่เกิดขึ้นจากวิทยุรับส่งเราจะนำมาใช้งานอยู่ 3 เส้น คือ สัญญาณเดินหน้า สัญญาณเลี้ยวซ้าย สัญญาณเลี้ยวขวา ส่วนสัญญาณถอยหลังเราไม่นำมาใช้เพราะโครงสร้างของตัวหุ่นยนต์ไม่ได้ออกแบบมาให้มีการถอยหลังได้ สัญญาณทั้ง 3 เส้นจะวิ่งเข้าสู่บล็อกหน่วยการควบคุมหลัก
ในบล็อกการทำงานหน่วยการควบคุมหลักนี้ มีความสำคัญในระดับที่สูงมากเพราะถูกใช้เป็นวงจรที่ใช้ประมวลผลและควบคุมระบบทั้งหมด โดยในบล็อกนี้จะใช้ตัวไมโครคอนโทรเลอร์เบอร์ ST7FLITE09B ซึ่งการโปรแกรม การสร้างเครื่องโปรแกรมและการเรียนรู้สามารถหาอ่านได้จาก Hobby Electronic ฉบับที่ 139 ,140
ในบล็อกการแสดงผล จะใช้ในการบอกลักษณะของทำงานของหุ่นยนต์ทั้งในการรับสัญญาณวิทยุ การเลี้ยวซ้าย การเลี้ยวขวา ในส่วนนี้จะประกอบโดยหลอด แอลอีดี สีแดงขนาด 3 มิลลิเมตรจำนวน 2 ตัว ในบล็อกการทำงานการตรวจจับสัญญาณอินพุท ในบล็อกนี้เป็นสัญญาณที่เกิดขึ้นจากสวิตช์ที่ติดอยู่ที่บริเวณขาของตัวหุ่นยนต์ ในตัวหุ่นยนต์ตัวนี้ไม่ได้ใช้เชอร์โวมอเตอร์ แต่ใช้มอเตอร์ดีซีแบบทดรอบ จึงไม่สามารถควบคุมตำแหน่งที่แน่นอนได้ สวิทช์ที่ใช้ติดบริเวณขาของตัวหุ่นยนต์ก็จะใช้ในการตรวจสอบตำแหน่งของขาหุ่นยนต์ให้มีความถูกต้องในการเดิน
ในบล็อกวงจรขับมอเตอร์นี้เป็นวงจรที่เราได้ใช้ ไอซีสำเร็จรูปเบอร์ L293B ของบริษัท ST ซึ่งเป็นไอซีที่สามารถควบคุมมอเตอร์ได้อย่างอิสระและกลับทิศทางได้พร้อมกัน 2 ตัว ซึ่งเหมาะมากกับวงจรที่ต้องการน้ำหนักที่เบาและขนาดเล็ก ในการควบคุมทิศทางของมอเตอร์จะถูกควบคุมจากหน่วยควบคุมหลักผ่านวงจรขับมอเตอร์นี้ครับ
ในบล็อกภาคจ่ายไฟ เป็นส่วนการทำงานที่ใช้เป็นพลังงานของระบบขับเคลื่อนตัวหุ่นยนต์โดยจะใช้ไฟกระแสตรง (ดีซี) ในย่าน 12- 18 โวลท์โดยเราจะนำ ไฟที่ได้มาแบ่งออกเป็นสองส่วนคือส่วนที่ 1 จะเป็นส่วนของภาคควบคุม จะใช้กำลังไฟ 4.5 โวลท์ และส่วนที่ 2 จะเป็นส่วนขับมอเตอร์ซึ่งจะใช้ไฟ 12 – 18 โวลท์
ลักษณะการเดินของหุ่นยนต์
ในลักษณะการเดินของหุ่นยนต์ดังรูปที่ 2 นั้นได้มีลักษณะการเดินแบ่งได้ 3รูปแบบ
รูปแบบที่ 1 เป็นลักษณะการเดินไปด้านหน้าเมื่อได้รับสัญญาณการเดินหน้าจากวิทยุรับส่ง ตัวประมวลผลจะทำการสั่งการทำงานผ่านชุดควบคุมมอเตอร์ โดยให้มอเตอร์หลังเริ่มทำงานโดยยกขาซ้ายหลังขึ้นจนสำผัสตัวสวิตช์S3 ในจังหวะต่อไปมอเตอร์หน้าทำงานโดยหมุนขาขวาหน้าไปสำผัสสวิตช์S2ในขณะนี้ตัวของหุ่นยนต์จะเอนตัวไปทางซ้ายเล็กน้อย เมื่อขาขวาหน้าไปสำผัสสวิตช์ S2 แล้ว มอเตอร์หลังจะยกขาขวาหลังขึ้นไปจนสำผัสสวิตช์S4 และในจังหวะสุดท้ายนั้น มอเตอร์หน้าจะทำการหมุนขาซ้ายหน้าไปสำผัสสวิทช์ S1ลำตัวของหุ่นยนต์จะเอนไปทางขวาเล็กน้อย และกระบวนการดังกล่าวนี้จะกระทำอย่างต่อเนื่องเมื่อมีการกดเดินหน้าที่วิทยุรับส่งครับ
รูปแบบที่ 2 เป็นลักษณะการเดินแบบเลี้ยวขวา เริ่มจากมอเตอร์หลังจะทำการยกขาซ้ายหลังขึ้นจนสำผัสสวิทช์S3 และมอเตอร์หน้าจะทำการหมุนขาขวาหน้าจะสำผัสสวิตช์S2 ต่อจากนั้นขาขวาหลังจะถูกหมุนขึ้นจนสำผัสสวิทช์S4 และกระบวนการดังกล่าวนี้จะกระทำอย่างต่อเนื่องเมื่อมีการกดเลี้ยวขวาที่วิทยุรับส่งครับ
รูปแบบที่ 3 เป็นลักษณะการเดินแบบเลี้ยวซ้าย เริ่มจากมอเตอร์หลังจะทำการยกขาขวาหลังขึ้นจนสำผัสสวิทช์S4 และมอเตอร์หน้าจะทำการหมุนขาซ้ายหน้าจะสำผัสสวิตช์S1 ต่อจากนั้นขาซ้ายหลังจะถูกหมุนขึ้นจนสำผัสสวิทช์S3 และกระบวนการดังกล่าวนี้จะกระทำอย่างต่อเนื่องเมื่อมีการกดเลี้ยวซ้ายที่วิทยุรับส่งครับ




การประกอบโครงสร้างของตัวหุ่นยนต์
ในส่วนของโครงสร้างของตัวหุ่นยนต์เป็นโครงสร้างที่ง่ายๆ การสร้างหุ่นยนต์ตัวนี้ต้องมีการเริ่มหาอุปกรณ์ให้ครบเสียก่อนดังนี้ครับ
1. ลวดทองแดงขนาดเส้นผ่านศูนย์กลาง 2.5 มิลลิเมตร (หาซื้อได้จากร้านก่อสร้างครับ)
2. มอเตอร์ทดรอบขนาด 12 โวลท์ 2 ตัวเลือกหาขนาดที่เหมาะสม แรงบิดยิ่งมากยิ่งดีเพราะการเดินของตัวหุ่นยนต์ต้องอาศัยมอเตอร์ที่มีแรงบิดมากๆ และต้องคำนึ่งถึงน้ำหนักที่ตัวมอเตอร์รับได้ด้วยครับ
3. น๊อตขนาดเส้นผ่านศูนย์กลาง 3 มิลลิเมตร จำนวน 8 คู่ ความยาว ประมาณ 8 มิลลิเมตร
4. ไมโครสวิตช์ตามรูปต้นแบบหรือใกล้เคียงจำนวน 4 ตัว
5. เศษแผ่นพลาสติกใสขนาด 6 มิลลิเมตร (ซื้อแบบแผ่นเล็กๆเพราะใช้ไม่มาก)
6. ดอกสว่านขนาด 2.5 มิลลิเมตร (ใช้ในการเจาะรูเพื่อตาปเกลียวในการยึดติดขาของหุ่นยนต์กับมอเตอร์)
7. ดอกตาปเกลียวละเอียด 3 มิลลิเมตร
8. ใส้ไก่จักรยาน(ใช้ติดตั้งที่ขาหลังของหุ่นยนต์เพื่อให้เกิดความหนืด)
เมื่อเราได้อุปกรณ์ครบแล้วตามรายการแล้ว ขั้นตอนต่อไปจะเข้าสู่การประกอบกันแล้วนะครับ
ขั้นตอนที่ 1 ทำการตัดลวดทองแดงดังรูปที่ 4
ในรูปที่ 4 ทำการตัดลวดทองแดงจำนวน 4 เส้น ตามรูป(ใช้คีมปากจิ้งจกในการตัดและดัดตัวลวดทองแดง) ในเส้นที่ 1 และ 2 จะตัดในขนาดเดียวกันเพื่อใช้ดัดเป็นส่วนลำตัว โดยจะทำการตัดขนาด 10 เซนติเมตร ในเส้นที่ 3 จะตัดในขนาด 13เซนติเมตร เพื่อใช้ดัดในส่วนการทำขาหลัง เส้นที่ 4 จะตัดในขนาด 19 เซนติเมตรเพื่อใช้ดัดในส่วนของขาหน้า
ขั้นตอนที่ 2 ทำการตัดแผ่นพลาสติกใส ตามรูปที่ 5
ในรูปที่ 5 แสดงการตัดพลาสติกจำนวน 2 แผ่นเพื่อทำตัวยึดระหว่างแกนมอเตอร์กับขาลวดทองแดงที่ใช้ทำขาหน้าและขาหลัง ในที่นี้ผมใช้มอเตอร์แกน 3 มิลลิเมตร จึงทำการเจาะรูที่แผ่นพลาสติกใสขนาด 3 มิลลิเมตรและทำการตาปเกลียวขนาด 3 มิลลิเมตรเพื่อยึดแกนมอเตอร์กับแผ่นพลาสติก ก่อนทำการตาปเกลียวให้ใช้ดอกสว่านขนาด 2.5 มิลลิเมตรเจาะนำก่อนนะครับ ส่วนต่อไปต้องทำการเจาะรูเพื่อใส่ขาของหุ่นยนต์ ให้ใช้ดอกขนาด 2.5 มิลลิเมตรเจาะ แล้วจะได้รูขนาดที่พอดีกับลวดทองแดงที่เราเตรียมมาและทำการเจาะรูและตาปเกลียวขนาด 3 มิลลิเมตรเพื่อใส่น๊อตยึดให้ขาของหุ่นยนต์ยึดติดกับแกนเหล็กของมอเตอร์ตามรูปที่ 5
ข้อสังเกตุ :เมื่อต่อได้ถูกต้องแกนมอเตอร์จะยึดติดกับขาของหุ่นยนต์อย่างแน่นหนา



ขั้นตอนที่ 3 ทำการใส่ลวดทั้ง 2 เส้นบนแผ่นพลาสติกทั้ง 2แผ่นและทำการดัดลวดดังรูปที่ 6
ในรูปที่ 6 จะแสดงการดัดลวดทั้ง 4 เส้นโดยลวดทองแดงเส้นที่ 1 และ 2 ที่ใช้ทำลำตัวจะดัดทำมุม 120 องศาตามรูป ในเส้นที่ 3 จะเป็นการดัดส่วนขาของหุ่นยนต์โดยทำการวัดจากปลายของเส้นลวดทั้งสองด้าน เข้าข้างละ 4 เซนติเมตร แล้วใช้คีมดัดทำมุม 120 องศาดังรูป ในเส้นที่ 4 จะเป็นการดัดเส้นลวดเพื่อทำขาหน้าของหุ่นยนต์ ขอให้ดูรูปต้นแบบประกอบการดัด ในเส้นที่ 3 และเส้นที่ 4 ก่อนทำการดัดต้องมีการใสเข้าไปในแผ่นพลาสติกที่เตรียมไว้ในขั้นตอนที่ 2 เสียก่อนไม่เช่นนั้น เมื่อเราทำการดัดจนเสร็จแล้วจะไม่สามารถนำมาใส่เข้าได้เลยครับ
ขั้นตอนที่ 4 ทำการนำขาของอุปกรณ์และแกนเหล็กของมอเตอร์มาประกอบบนแผ่นพลาสติกที่เตรียมไว้ดังรูปที่ 7
ในการประกอบดังรูปที่ 7 นี้ต้อง ล็อกน๊อตขนาด 3 มิลลิเมตรลงบนแกนมอเตอร์และลวดทองแดง อย่างแน่นหนาเพื่อไม่ให้เวลาทำงานเกิดความผิดพลาดจากแกนหลุด หรือขาลวดอ่อน
ขั้นตอนที่ 5 ทำการประกอบลำตัวกับมอเตอร์ดังรูปที่ 8
ในรูปที่ 8 จะนำเส้นลวดเส้นที่ 1 และ 2 มาทำการประกอบเป็นลำตัวหุ่นยนต์โดยเชื่อมต่อมอเตอร์กับเส้นลวดโดยใช้น๊อต 3 มิลลิเมตรและทำการตัดลวดขนาด 7 มิลลิเมตรเพื่อใช้เสริมเพื่อให้น๊อตวางได้พอดีตามรูปนะครับ
ขั้นตอนที่ 6 ทำการตัดแผ่นพลาสติกขนาดประมาณ กว้าง 8 มิลลิเมตรและยาว 20 มิลลิเมตรเพื่อใช้ติดตั้งสวิทช์ S1-S4 ตามรูปที่ 9
ในรูปที่ 9 เป็นการประกอบตัวสวิทช์เข้ากับตัวหุ่นยนต์โดยให้แผ่นพลาสติกชิดกับมอเตอร์เลยหรือเราอาจจะหาช่วงที่พอดีในการใช้มอเตอร์ที่แตกต่างกัน เพราะตัวสวิตช์ที่ติดตั้งนี้จะเป็นจุดที่เราจะอนุญาติให้มอเตอร์ขับขาของหุ่นยนต์ให้เคลื่อนที่ได้มากหรือน้อย ครับ
ลักษณะการทำงานของบอร์ดวิทยุรับส่ง
ในการใช้งานในบทความนี้เราจะใช้สัญญาณที่ทำการถอดรหัสออกมาเพียง 3 สัญญาณเท่านั้น คือ เดินหน้า เลี้ยวซ้าย เลี้ยวขวา ตามหมายเลข1,2 และ3 โดยถ้าดูในวงจรต้องทำการนำค่าความต้านทาน 1 K ทั้ง 3 ตำแหน่งตามรูปที่ 10 ออก แล้วนำสัญญาณจากไอซีรถกระป๋องเข้าสู่ภาคประมวลผลโดยตรงได้เลย การทำงานของไอซีรถกระป๋อง ในสถานะปรกติไม่มีการกดปุ่มใดๆที่ภาคส่ง สถานะที่ขาสัญญาณจะมีค่าเทียบเท่าศูนย์โวลท์ ถ้ามีการกดปุ่มที่ภาคส่งของรถกระป๋องสถานะที่ขาสัญญาณที่ต้องการใช้งานเช่น ขาเดินหน้า ของไอซีภาครับนั้นจะมีไฟประมาณ 3.3 โวลท์หรือเทียบเท่าสถานะ1 เช่นถ้ามีการกดปุ่มเดินหน้าที่ภาคส่ง ที่ขา 11 หรือขาสัญญาณเดินหน้าของไอซีภาครับจะมีค่าเป็น 3.3 โวลท์หรือเทียบเท่า 1 ทันทีครับ เพื่อไม่ให้เราทำการเปลี่ยนแปลงวงจรพลาดให้ดูที่รูปจริงๆเลย


ลักษณะการทำงานของบอร์ดควบคุม
ในส่วนวงจรการทำงานก็จะแบ่งเป็นบล็อกๆดังรูปที่ 12 โดยในแต่ละบล็อกก็จะมีความสำคัญดังที่กล่าวไว้ในข้างต้นแล้ว แต่ในตอนเราจะกล่าวลึกลงมาถึงการทำงานของวงจรที่เป็นส่วนอิเล็กทรอนิกส์ โดยผมจะเริ่มจาก ภาคจ่ายไฟในภาคนี้สามารถต่อจากหม้อแปลงไฟดีซี หรือเลือกใช้จากเบตเตอรี่ ให้เลือกเอาหนึ่งอย่างไม่ควรต่อพร้อมกัน D1เป็นไดโอดที่ใช้ในการป้องกันการใส่ไฟผิดขั้ว ไอซีเบอร์LM317 เป็นไอซีแปลงแรงดันไฟในช่วงดีซี 12-18 โวลท์ ให้เหลือประมาณ 4.5 โวลท์เพื่อใช้เป็นภาคจ่ายไฟให้กับวงจรรับสัญญาณวิทยุและบอร์ดควบคุม โดยแรงดันไฟที่ได้คำนวณหาได้จากสูตร
แรงดันเอาท์พุท = 1.25(1+R2/R1) …. ( นำมาจากข้อมูลของตัวไอซี)
= 1.25(1+630/240)
แรงดันเอาท์พุท = 4.53โวลท์
ในภาครับสัญญาณวิทยุเราจะนำสัญญาณที่ได้มา 3 จุดโดยนำมาจากที่ ขา6 ขา 7 และ ขา11 ของไอซีภายในบอร์ดรับสัญญาณวิทยุ โดยมีการเรียงของขาคือ เลี้ยวขวา ,เลี้ยวซ้าย และเดินหน้า ตามลำดับ สายสัญญาณที่ได้รับมาจะนำมาเข้าที่ขา 4 ขา5 และขา6 ของไอซี1ภายในภาคควบคุม
ในภาคตรวจสอบสัญญาณอินพุท จะทำการเชื่อมต่อสายไฟจากสวิตช์เข้าสู่ตัวภาคควบคุม การรับข้อมูลจากสวิทช์ S1 –S4 เข้าสู่ภาคควบคุม โดยจะรอรับสัญญาณหนึ่ง เพื่อใช้เป็นอินพุทให้กับวงจร
ส่วนในภาคแสดงผลเราได้มีการใช้แอลอีดี จำนวน 2 ตัวซึ่งจะติดที่ส่วนหน้าทั้งสอง ในด้านซ้ายและขวา เพื่อใช้ในการแสดงการเลี้ยวซ้าย หรือเลี้ยวขวา และยังมีหน้าที่อีกอย่างหนึ่งคือใช้แสดงสถานะการตอบรับสัญญาณวิทยุของเครื่องส่ง
ส่วนในภาควงจรขับมอเตอร์เราจะใช้ไอซีเบอร์ L293B ทำหน้าที่รับสัญญาณควบคุมจากภาคควบคุม เพื่อใช้ในการสั่งมอเตอร์ให้ทำงาน โดยที่ความสามารถพิเศษของไอซีนี้คือสามารถกลับทิศทางของมอเตอร์ และควบคุมมอเตอร์ได้พร้อมกัน 2 ตัว อย่างอิสระ สัญญาณที่ส่งออกมาจากขา 10 และขา9 บอร์ดควบคุมใช้ควบคุมมอเตอร์ขาหน้าให้ทำงานโดยผ่านขา10 และขา 15ของไอซี L293 และเช่นเดียวกัน สัญญาณที่ส่งออกมาจากขา 7 และขา8 บอร์ดควบคุมใช้ควบคุมมอเตอร์ขาหลังให้ทำงานโดยผ่านขา7 และขา 2ของไอซี L293 ในการสั่งให้ไอซีเบอร์ L293 ทำงานขับมอเตอร์สามารถสั่งให้เกิดการทำงานได้ดังตารางที่ 1


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



การเชื่อมต่อบอร์ดหุ่นยนต์กับโครงสร้างตัวหุ่นยนต์
มาถึงจุดนี้เรามาได้ครึ่งทางแล้วครับ ต่อไปเราจะนำตัวบอร์ดควบคุมหุ่นยนต์มาติดตั้งเข้ากับโครงสร้างของตัวหุ่นยนต์ที่ได้ทำขึ้นมาในตอนต้น ในการประกอบไม่ยากเลยครับ โดยเริ่มจากการเชื่อมต่อสายไฟตามจุดต่างๆ ระหว่างบอร์ดควบคุมหุ่นยนต์ บอร์ดภาครับวิทยุ มอเตอร์ สวิตช์ S1 – S4 ตัวแอลอีดี เข้าด้วยกันตามรูปที่ 14
เมื่อเราทำการเชื่อมต่อดังรูปที่ 14 แล้วในส่วนต่อไปเราจะมาทำการประกอบตัวบอร์ดทั้งหมดเข้ากับตัวโครงหุ่นยนต์ ในที่นี้เนื่องจากตัวโครงหุ่นยนต์เป็นเหล็กซึ่งเป็นสื่อนำไฟฟ้า เราไม่สามารถนำวงจรวางลงไปบนลวดได้โดยตรงดังนั้นเราต้องติดฐานรองปรินท์แบบสั้น เพื่อใช้เป็นฐาน การติดระหว่างฐานรองปรินท์กับลวดทองแดงต้องใช้กาวตราช้างติด เมื่อรอจนกาวแห้งสนิทแล้ว นำกาว 2 หน้ามาติดที่ ส่วนหัวของตัวฐานรองปรินท์เพื่อใช้ในการติดบอร์ดควบคุมหุ่นยนต์ เมื่อทำการติดบอร์ดควบคุมหุ่นยนต์กับฐานรองปรินท์แล้ว ให้สังเกตุในส่วนแผ่นยระบายความร้อนและตัวเก็บประจุจะมีขนาดใกล้เคียงกัน ในส่วนนี้เราจะทำการติดเทปกาวสองหน้าลงไปเพื่อใช้ในการติดบอร์ดควบคุมหุ่นยนต์กับแผงวงจรวิทยุรับส่ง การประกอบทั้งหมดสามารถดูได้จากรูปที่ 15
การศึกษาโปรแกรมการสั่งการทำงานของหุ่นยนต์
ก่อนเริ่มต้นการศึกษาให้ทำการดาวโหลดไฟล์ที่บรรจุโปรแกรมที่ทำไว้ทั้งหมดมาก่อน โดยไฟล์มีชื่อว่า robot.zip พอได้ไฟล์มาแล้วทำการขยายไฟล์จะได้ไฟล์ทั้งหมดอยู่ 18 ไฟล์ อยู่ในไดเร็กทรอรี่ robot แต่ไฟล์ที่เราจะทำการสนใจจะใช้เพียงส่วนหนึ่งเท่านั้น ทำการเปิดโปรแกรมที่มีชื่อว่า indart-st7 ในส่วนนี้วิธีการดาวโหลดสามารถดูได้จาก Hobby Electronic ฉบับที่ 140 เมื่อทำการเปิดโปรแกรมเสร็จแล้วให้นำเครื่องโปรแกรมและชุดทดลองที่เราทำใน Hobby Electronic ฉบับที่ 139-140 มาต่อเข้ากับคอมพิวเตอร์ดังรูปที่ 16




ในขณะนี้เครื่องโปรแกรมยังไม่ได้ติดต่อกับบอร์ดทดลองเพียงแต่เป็นการเชื่อมสายต่อถึงกันเท่านั้นครับ ทำการเปิดไฟล์ที่เราทำการดาวโหลดมาโดย ใช้เมาท์คลิกที่ File>open Workspace..
และเลือกไฟล์ที่ชื่อว่า robot.wsp ตามรูปที่ 17
เมื่อเรากระทำตามรูปที่ 17 แล้วจะเป็นการเปิดโปรเจคขึ้นมา (จะเป็นไฟล์ที่ใช้เก็บรวบรวมเนื้อหาการทำงานทั้งหมด) ต่อไปเราจะทำการเปิดไฟล์ที่ใช้ในการเขียนโปรแกรมมีชื่อว่า robot.asmโดยทำการเปิดตามรูปที่ 18
เมื่อเราทำการเปิดไฟล์ robot.asm ขึ้นมาแล้ว เราสามารถทำการแก้ไขโปรแกรมที่เราเขียนขึ้นมาได้ทั้งหมดแต่ในที่นี้เราจะข้ามขั้นตอนการแก้ไขโปรแกรมโดยเราเข้าสู่การโปรแกรม ข้อมูลที่เราเขียนขึ้นลงในตัวไมโครคอนโทรเลอร์ ST7FLITE09B กันเลยนะครับ ก่อนที่เราจะเข้าสู่โหมดการดีบัคและโปรแกรมต้องมีการเซตค่าเริ่มต้นของตัวไมโครคอนโทรเลอร์ก่อนโดยสามารถทำตามได้ดังรูป19 ครับ


เนื่องจากโปรแกรมตัวนี้ทางผู้ผลิตได้ออกแบบเอาไว้ใช้กับหลายผลิตภัณท์ จึงต้องมีการเลือกผลิตภัณท์ให้ตรงกับที่ทำการใช้งานอยู่ในที่นี้เราใช้ ผลิตภัณทที่มีชื่อว่า INDART-ST7FLITE(LPT) และตัวไมโครคอนโทรเลอร์ใช้เบอร์ST0FLITE09B ภายในตัวไมโครคอนโทรเลอร์ต้องการการเซตค่าเริ่มต้นให้กับ โดยการคลิกเมาท์ที่ Set Option Bytes ตัวมันเสียก่อนโดยจะไม่เหมือนตัวไมโครคอนโทรเลอร์ตระกูลอื่นๆ จุดนี้เป็นข้อดีข้อหนึ่งของตัวไมโครคอนโทรเลอร์เบอร์นี้ซึ่งยืดหยุ่นในการใช้งานอย่างมาก โดยการเซตค่าต่างๆมีรายละเอียดดังนี้
FLASH Write Protection: เป็นการป้องกันการเขียนข้อมูลลงบนตัวไมโครคอนโทรเลอร์ถ้าเซตจุดนี้ไว้แล้วทำการโปรแกรมตัวไมโครคอนโทรเลอร์จะไม่สามารถนำมาใช้โปรแกรมได้อีกเลยครับ
Read Out Protection: เป็นการป้องกันการอ่านข้อมูลจากตัวไมโครคอนโทรเลอร์ถ้าเซตจุดนี้ไว้ก็จะเหมือนการป้องกันการคัดลอกโปรแกรมที่เราเขียนขึ้นจากผู้อื่น
Sector 0 Size Definition: ในตัวของไมโครคอนโทรเลอร์นี้ได้แบ่งการเขียนข้อมูลออกเป็นช่วงๆโดยเราสามารถทำการเลือกการเขียนได้
Watchdog and Halt mode และ Watchdog Activation เป็นการรีเซตที่เกี่ยวกับระบบการจัดการเสถียรภาพของระบบเมื่อ ตัวไมโครคอนโทรเลอร์เกิดขัดข้อง
Low Voltage Detection Selection : เป็นการเลือกระบบการตรวจจับระดับแรงดังไฟเลี้ยงของตัวไมโครคอนโทรเลอร์ในเบอร์นี้สามารถตรวจจับแรงดันไฟเลี้ยงได้ 3 ระดับคือ
ช่วงขาขึ้นของระดับไฟเลี้ยง ที่ 25 องศาเซลเซียส
High Threshold = 4.2 volt
Med. Threshold = 3.6 volt
Low Threshold = 2.9 volt
ช่วงขาลงของระดับไฟเลี้ยง ที่ 25 องศาเซลเซียส
High Threshold = 4.0 volt
Med. Threshold = 3.4 volt
Low Threshold = 2.7 volt
RC Oscillator Selection :เป็นการเลือกที่จะใช้วงจรออสซิเลเตอร์ภายในตัวไมโครคอนโทรเลอร์
PLL: เป็นการเลือกการใช้วงจร Phase Locked Loop เพื่อที่จะเป็นตัวคูณความถี่ให้มากขึ้นจากการที่ใช้วงจร RC OSC ภายในตัวไมโครคอนโทรเลอร์
PLL Factor Selection : เป็นการเลือกให้วงจร Phase Locked Loop ทำการคูณ 4 หรือ 8 จากค่า ความถี่ที่ได้จากวงจร RC OSC
ในไฟล์ที่ทำการโปรแกรมลงไป จะเป็นไฟล์ที่เราผ่านการคอมพายแล้ว (การแปลงข้อมูลจากภาษาที่เราเข้าใจสู่ภาษารูปแบบของตัวไมโครคอนโทรเลอร์) ไฟล์ที่ผ่านการคอมพายแล้วจะอยู่ในรูป robot.s19 แต่ในโปรแกรม indart-st7 นี้จะไม่แสดงไฟล์ตัวนี้ทางหน้าเครื่อง ภายในตัวโปรแกรม indart-st7 จะทำการนำ ไฟล์ข้อมูล robot.s19 มาโปรแกรมให้เองเมื่อเข้าเข้าสู่โหมดการโปรแกรมข้อมูลเข้าในตัวไมโครคอนโทรเลอร์ ในการโปรแกรมให้ทำตามรูปที่ 20
ในโหมดนี้เป็นการเข้าสู่การโปรแกรมข้อมูล และโหมดการดีบัคโปรแกรม(ใช้เมื่อเราต้องการเรียนรู้การทำงานของโปรแกรม การทำงานของงานที่เราออกแบบ) ในส่วนนี้เราจะข้ามการดีบัคโปรแกรม และเข้าสู่การโปรแกรมไอซีดังรูปที่ 20



ในรูปที่ 20เป็นการเข้าสู่โหมดการโปรแกรมข้อมูลเข้าสู่ตัวไมโครคอนโทรเลอร์โดยในเมนูโปรแกรมจะมีการเซตค่าต่างๆในการโปรแกรมดังนี้
clear Read-out Protection: เป็นการล้างบิตที่ป้องกันการอ่านข้อมูลเอาไว้
Erase Device: ทำการลบข้อมูลที่อยู่ในหน่วยความจำทั้งหมด
Program FLASH Memory: ทำการโปรแกรมข้อมูลเข้าในหน่วยความจำของตัวไมโครคอนโทรเลอร์
Set Read-out Protection: ทำการเซตการป้องกันการอ่านข้อมูลจากภายนอก
Run: หลังจากการโปรแกรมจะรีเซตตัวไมโครคอนโทรเลอร์และให้ทำงานตามโปรแกรมต่อไป



เมื่อเรามาเลือกลักษณะการโปรแกรมแล้วให้ทำการคลิกที่ปุ่ม START โปรแกรม indrat-st7 จะทำการโปรแกรมข้อมูลลงในตัวไมโครคอนโทรเลอร์ตามขั้นตอนที่เราเซตไว้เมื่อทำทุกขั้นตอนเสร็จสิ้นแล้วจะมีข้อความแสดงออกมาดังรูปที่ 22 เราสามารถนำไอซีออกจากบอร์ดทดลองและนำไปใช้งานได้เลยครับ และก่อนออกจากโปรแกรม indart-st7 ให้ทำการหยุดการดีบัคโปรแกรมก่อนนะครับโดยทำตามรูปที่ 23
ในส่วนที่กล่าวมาข้างต้นผู้อ่านก็สามารถมองเห็นภาพโดยรวมของระบบทั้งหมดแต่ในส่วนรายละเอียดปลีกย่อยอื่นๆ ผมจะขอค่อยๆ กล่าวไปในตอนต่อๆไป จากข้อมูลข้างต้นเราสามารถที่จะทำการโปรแกรมข้อมูลงบนตัวไมโครคอนโทรเลอร์และนำตัวไมโครคอนโทรเลอร์ที่ได้รับการโปรแกรมมาใช้งานคู่กับโครงงานได้อย่างสมบูรณ์แล้วละครับ
ในโปรแกรมที่ผมได้เขียนขึ้นมานั้นเป็นการเขียนโปรแกรมแบบง่ายๆ ไม่ซับซ้อนท่านผู้อ่านบางท่านอาจคิดว่าถ้าเราต้องการให้ตัวหุ่นยนต์มีการทำงานอย่างมีชีวิตซีวามากกว่านี้ละ จะทำได้ไหม คำตอบคือได้เลยครับแต่เราต้องมาดูตัวโปรแกรมเสียก่อนว่าจะทำการเปลี่ยนแปลงแก้ไขได้อย่างไร และก่อนที่เราจะมาดูในตัวโปรแกรมผมขออธิบายคำสั่งที่ใช้ในโปรแกรมอย่างคร่าวๆ ก่อนเพื่อที่จะได้ไปในทางเดียวกันครับ
คำสั่งที่ 1 BSET d,b เช่น
BSET PADR,#6 เป็นคำสั่งที่สั่งให้บิตที่ 6 ของรีจีสเตอร์ที่ควบคุมพอร์ตA มีแรงดันเป็นลอจิกหนึ่ง ถ้านำเอาหลอดแอลอีดีมาต่อก็จะสว่างครับ
คำสั่งที่ 2 BRES d,b เช่น
BRES PADR,#6 เป็นคำสั่งที่สั่งให้บิตที่ 6 ของรีจีสเตอร์ที่ควบคุมพอร์ตA มีแรงดันเป็นลอจิกศูนย์ ถ้านำเอาหลอดแอลอีดีมาต่อก็จะดับครับ
คำสั่งที่ 3 CALL d
เป็นการเรียกโปรแกรมย่อย หลังจากมีการเรียกโปรแกรมย่อยโดยคำสั่ง CALL การสิ้นสุดการทำงานของโปรแกรมย่อยต้องตามด้วยคำสั่ง RET เพื่อกลับสู่คำสั่งที่ตามหลัง CALL
คำสังที่ 4 JP d
เป็นการกระโดดไปนะตำแหน่งที่เราต้องการโดยไม่มีเงื่อนไขใดๆ
คำสั่งที่ 5 BTJT d,b,rel เช่น
BTJT PADR,#2,AFORW
เป็นคำสั่งการกระโดดไปอย่างมีเงื่อนไข สามารถอธิบายได้ว่าถ้าบิตที่ 2 ของรีจีสเตอร์ที่ควบคุมพอร์ตA มีค่าเป็นลอจิกหนึ่ง จะทำการกระโดดไปที่ ตำแหน่งที่ชื่อว่า AFORW แต่ถ้าบิตที่ 2 ของรีจีสเตอร์ที่ควบคุมพอร์ตA มีค่าเป็นลอจิกศูนย์ โปรแกรมจะทำงานคำสั่งต่อไปครับ

คำสั่งที่ 6 LD d,s เช่น
LD A,#$18 เป็นการโหลดค่า 18 ฐาน16มาเก็บไว้ที่ตัวรีจีสเตอร์ A
LD A,#$0CB เป็นการโหลดค่า CB ฐาน 16 มาเก็บไว้ที่รีจีสเตอร์ A โดยที่ในเลขฐาน 16 จะมีตัวอักษร A-F แทนค่าเลข 10 – 15 ดังนั้นการเขียนโปรแกรมถ้ามีตัวอักษรอยู่ด้านหน้าสุดจะต้องมีเลข 0 อยู่ด้านหน้าตัวอักษรเหล่านี้เพื่อบอกโปรแกรมว่าเป็นค่าตัวเลข
คำสั่งที่ 7 INC d เช่น
INC A เป็นการเพื่อค่าในรีสจีสเตอร์ A ขึ้น 1คือถ้าขณะนั้น ถ้า A=1 เมื่อใช้คำสั่ง INC A ค่าที่ได้จาก A=2
เมื่อเราได้คำสั่งที่ใช้งานโปรแกรมเบื้องต้นแล้วต่อไปเรามาดูตัวโฟชาร์จ และตัวโปรแกรมกันเลยครับ
ในส่วนตัวโปรแกรมจะมีสิ่งที่แตกต่างจากตัวไมโครคอนโทรเลอร์ตระกูลอื่น แต่จะเป็นความยืดหยุ่นในการใช้งานของตัวไมโครคอนโทรเลอร์ตระกูล ST คือการที่สามารถกำหนดพอร์ตให้มีการทำงานได้หลายลักษณะครับ การกำหนดพอร์ตสามารถกำหนดได้ 4 ลักษณะโดยในแต่ละลักษณะสามารถกำหนดได้จากรีจีสเตอร์
1. PxDDR (Data Direction Registers) เป็นรีจีสเตอร์ที่ใช้กำหนดให้พอร์ต เป็นอินพุทหรือเอาท์พุท และสามารถกำหนดได้ในระดับบิต เช่น
LD A,#$0F ; (ฐาน16) ค่าในเลขฐาน2 : 0000 1111 บิต7 – บิต0
LD PADDR,A ; นำค่า 0F ฐาน16มาไว้ในรีจีสเตอร์ PADDR(พอร์ตA)

2. PxOR (Option Register) เป็นรีจีสเตอร์ที่ใช้กำหนดให้พอร์ต เป็นอินพุทหรือเอาท์พุทในลักษณะใด
LD A,#$0F
LD PADDR,A
LD A,#$0AA ;ค่าในเลขฐาน 2 : 1010 1010
LD PAOR,A ;นำค่า AA ฐาน16มาไว้ที่ PAOR

บิต 7 เป็นอินพุทแบบมีการPull-Up
บิต 6 เป็นอินพุทแบบ Floating
บิต 5 เป็นอินพุทแบบมีการPull-Up
บิต 4 เป็นอินพุทแบบ Floating
บิต 3 เป็นเอาท์พุทรPush-pull
บิต 2 เป็นเอาท์พุทแบบ Open-drain
บิต 1 เป็นเอาท์พุทร Push-pull
บิต 0 เป็นเอาท์พุทแบบ Open-drain
สรุปการทำงานของการกำหนดหน้าที่การทำงานของพอร์ตได้ดังรูปที่26


โปรแกรมการทำงาน
st7/ ;เป็นส่วนหัวโปรแกรมกำหนดว่ากำลังทำงานกับไมโครคอนโทรเลอร์เบอร์ ST7
TITLE “robot.ASM” ;การเขียนโปรแกรมลงบนไฟล์ชื่อ robot.asm
MOTOROLA ;การคอมพายใช้มาตฐานของMotorola
#INCLUDE “ST72FLT0.INC” ;เรียกใช้งานการกำหนดค่าต่างของหน่วยความจำบนST7
;******** เริ่มการเขียนโปรแกรม
.R0 EQU $80 ;กำหนดค่าตัวแปรให้เป็นตัวเก็บข้อมูล Ram
.R1 EQU $81 ;
.R2 EQU $82 ;
.R3 EQU $83 ;
.R4 EQU $84 ;
WORDS
segment ‘rom’ ;กำหนดตำแหน่งการเขียนข้อมูลในหน่วยความจำ
.MAIN CALL INIT ;กำหนดการทำงานต่างๆของพอร์ต
;*************************START PROGRAM
CALL TDELAY ; หน่วงเวลา
.START ;เริ่มการต้นการทำงาน หน้าหลัก
BRES PADR,#6 ;หยุดการทำงานมอเตอร์
BRES PADR,#7 ;หยุดการทำงานมอเตอร์
BRES PBDR,#3 ;หยุดการทำงานมอเตอร์
BRES PBDR,#4 ;หยุดการทำงานมอเตอร์
BRES PADR,#0 ;ให้LED 1 หยุดการทำงาน ดับ
BRES PADR,#1 ;ให้LED 2 หยุดการทำงาน ดับ
BTJT PBDR,#2,AFORW ;ตรวจสอบการกดปุ่มเดินหน้าที่เครื่องส่ง
BTJT PBDR,#0,ALEFT ; ตรวจสอบการกดปุ่มเลี้ยวขวาที่เครื่องส่ง
BTJT PBDR,#1,ARIGHT ; ตรวจสอบการกดปุ่มเลี้ยวซ้ายที่เครื่องส่ง
JP START ;ถ้าไม่มีการกดปุ่มใดๆ ให้กระโดดไปจุดเริ่มต้นการทำงาน
.AFORW JP FORW ;มีการกดปุ่มเดินหน้ากระโดดไปในโปรแกรมเดินหน้า
.ALEFT JP LEFT ;มีการกดปุ่มเลี้ยวขวากระโดดไปในโปรแกรมเดินหน้า
.ARIGHT JP RIGHT ;มีการกดปุ่มเลี้ยวซ้ายกระโดดไปในโปรแกรมเดินหน้า
;********************************************
.FORW ;โปรแกรมย่อย เดินหน้า
CALL DELAY
.FOR1
BSET PBDR,#3 ;เซตให้มอเตอร์หลังหมุนตามเข็มนาฬิกา
BRES PBDR,#4 ;เซตให้มอเตอร์หลังหมุนตามเข็มนาฬิกา
BTJT PADR,#3,FOR1 ;ขาซ้ายหลังแตะสวิตช์ S3 หรือไม่ ถ้าไม่กระโดดไปที่ for1
BRES PBDR,#3 ;หยุดการทำงานของมอเตอร์
BRES PBDR,#4 ;หยุดการทำงานของมอเตอร์
CALL DELAY ;หน่วงเวลา
.FOR2
BRES PADR,#6 ;
BSET PADR,#7
BSET PADR,#0 ; LED1 ON
BRES PADR,#1 ; LED2 OFF
BTJT PADR,#4,FOR2
BRES PADR,#6 ;
BRES PADR,#7 ;
CALL DELAY
.FOR3
BRES PBDR,#3 ; R
BSET PBDR,#4 ; R
BTJT PADR,#2,FOR3
BRES PBDR,#3 ; STOP R
BRES PBDR,#4 ; STOP R
CALL DELAY
.FOR4
BSET PADR,#6 ;
BRES PADR,#7 ;
BRES PADR,#0 ; LED1 OFF
BSET PADR,#1 ; LED2 ON
BTJT PADR,#5,FOR4
BRES PADR,#6 ;
BRES PADR,#7 ;
CALL DELAY
BTJT PBDR,#2,FORW
JP START
;************************************
.LEFT
CALL DELAY
.LEFT1
BSET PBDR,#3
BRES PBDR,#4
BTJT PADR,#3,LEFT1
BRES PBDR,#3
BRES PBDR,#4
CALL DELAY
.LEFT2
BRES PADR,#6 ;
BSET PADR,#7 ;
BRES PADR,#0 ; LED1 ON
BSET PADR,#1 ; LED2 OFF
BTJT PADR,#4,LEFT2
BRES PADR,#6 ;
BRES PADR,#7 ;
CALL DELAY
.LEFT3
BRES PBDR,#3
BSET PBDR,#4
BTJT PADR,#2,LEFT3
BRES PBDR,#3
BRES PBDR,#4
CALL DELAY
BTJT PBDR,#0,LEFT
JP START
;************************************
.RIGHT
CALL DELAY
.RIGHT1
BRES PBDR,#3
BSET PBDR,#4
BTJT PADR,#2,RIGHT1
BRES PBDR,#3
BRES PBDR,#4
CALL DELAY
.RIGHT2
BSET PADR,#6 ;
BRES PADR,#7 ;
BSET PADR,#0 ; LED1 OFF
BRES PADR,#1 ; LED2 ON
BTJT PADR,#5,RIGHT2
BRES PADR,#6 ;
BRES PADR,#7 ;
CALL DELAY
.RIGHT3
BSET PBDR,#3
BRES PBDR,#4
BTJT PADR,#3,RIGHT3
BRES PBDR,#3
BRES PBDR,#4
CALL DELAY
BTJT PBDR,#1,RIGHT
JP START
;***************************
.TDELAY LD A,#$01
LD R2,A
.ATDELAY LD A,#$01
LD R1,A
.WAIT2
LD A,#$00
.WAIT1 INC A
NOP
CP A,#$05
JRNE WAIT1
LD A,R1
INC A
LD R1,A
CP A,#$0FF
JRNE WAIT2
LD A,R2
INC A
LD R2,A
CP A,#$0FF
JRNE ATDELAY
RET
;*************************
.DELAY
LD A,#$0D0 ;00
LD R4,A
.DELA1
LD A,#$0B0 ;00
.DELA2
INC A
CP A,#$0FF
jrne DELA2
ld A,R4
inc A
ld R4,A
cp a,#$0FF
jrne DELA1
RET
;****************************
; Port initialization
;****************************
.INIT
LD A,#$0C3
LD PADDR,A
LD A,#$0FF
LD PAOR, A
LD A,#$18
LD PBDDR,A
LD A,#$0FF
LD PBOR, A
RET
;***********************************
.DUMRET IRET
segment ‘vectit’
DC.W DUMRET ; FFE0-FFE1h
DC.W DUMRET ; FFE2-FFE3h
DC.W DUMRET ; FFE4-FFE5h
DC.W DUMRET ; FFE6-FFE7h
DC.W DUMRET ; FFE8-FFE9h
DC.W DUMRET ; FFEA-FFEBh
DC.W DUMRET ; FFEC-FFEDh
DC.W DUMRET ; FFEE-FFEFh
DC.W DUMRET ; FFF0-FFF1h
DC.W DUMRET ; FFF2-FFF3h
DC.W DUMRET ; FFF4-FFF5h
DC.W DUMRET ; FFF6-FFF7h
DC.W DUMRET ; FFF8-FFF9h
DC.W DUMRET ; FFFA-FFFBh
DC.W DUMRET ; FFFC-FFFDh
DC.W MAIN ; FFFE-FFFFh
END