วันอาทิตย์, 27 เมษายน 2568

รถกระป๋อง สายพันธุ์ใหม่

15 ก.ย. 2002
8

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

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

TAMIYA ชื่อนี้อาจจะคุ้นหูของน้องๆ บ้างหรือเปล่า บ้างก็คุ้นชื่อในส่วนของวงจรวิทยุบังคับ หรือ จำพวกของเด็กเล่น แต่ในอีกมุมหนึ่งทาง TAMIYA ได้ขายชุดฝึก การเรียนรู้วิธีการขับมอเตอร์และการทดรอบมอเตอร์ในรูปแบบชุดคิด เมื่อทำการเปิดกล่องดู ก็รู้สึกที่จะสนุก และอยากกลับเป็นเด็กอีกครั้ง โดยภายในกล่องจะมีมอเตอร์ เฟือง แกนเหล็ก น้ำมันหล่อลื่น วิธีการประกอบแบบต่างๆอย่างละเอียด โดยในงานนี้ผมได้ใช้ชุดคิดมอเตอร์ที่ชื่อว่า TWIN-MOTOR GEARBOX และใช้ล้อแบบ OFF-ROAD TIRES ตามรูปที่ 1

หลังจากที่เราได้ซื้อชุดคิดชุดมอเตอร์และล้อมาแล้วนะครับ ก็ให้ทำการประกอบชุดเฟืองตามคู่มือที่ให้มา ในชุดคิดชุดมอเตอร์นี้สามารถออกแบบการทดรอบได้ 3 แบบโดยในแบบที่ 1 และ2 จะมีอัตราทดที่ 58:1 แต่เมื่อประกอบเสร็จจะไม่สามารถนำมาใช้กับโครงงานได้ เพราะการหมุนของแขนที่ผ่านการทดรอบทั้ง2ไม่เป็นอิสระต่อกัน แต่ในโครงงานนี้เราจะใช้ในแบบที่ 3 โดยจะมีอัตราทดที่ 203:1แขนทั้ง 2 ที่ผ่านการทดรอบแล้วจะเป็นอิสระต่อกัน และเมื่อประกอบเสร็จให้ทำการใส่น้ำมันหล่อลื่น (อยู่ภายในกล่อง) ให้ทั่วทุกจุดที่มีการสัมผัสของเฟืองกับเฟือง ในส่วนต่อไป ก็อยู่ที่ส่วนอิเล็กทรอนิกส์แล้วละครับ ว่าจะสร้างสรรค์อย่างไรให้โครงงานของเรามีความสมบูรณ์ที่สุดครับ

โหมดการควบคุมหุ่นยนต์

ก่อนที่เราจะเริ่มสร้างสรรค์ผลงาน ผมจะขอกล่าวถึงในส่วนของการทำงานของโครงงานนี้เสียก่อน โดยเริ่มจากการทำงานจะมีอยู่ 2 โหมดคือ

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

การเล่นในโหมดที่ 1 เมื่อทำการเปิดสวิตช์ ตัวรถจะวิ่งไปด้านหน้าทันที ถ้าสวิตช์ SW2 หรือ SW3 เกิดการชน ตัวรถจะมีลักษณะการเคลื่อนที่ดังรูปที่ 2
การเล่นในโหมด2 จะเป็นโหมดการบังคับรถตามการบังคับจากเครื่องส่ง แต่มีลักษณะพิเศษคือสามารถเคลื่อนที่ได้คล่องตัวและเลี้ยวแบบมุมกว้างหรือมุมแคบๆได้ โดยมีลักษณะการทำงานดังรูปที่ 3

ในวิธีการเล่นที่ผมได้กล่าวมาเป็นวิธีการเล่นที่ผมกำหนดขึ้นมาเอง ซึ่งทำเป็นตัวอย่าง และก็สามารถนำมาใช้งานได้จริง แต่ถ้าน้องๆ อยากจะสร้างสรรค์การทำงานของตัวรถในรูปแบบความคิดของน้องๆเองละก็ เข้ามาในโลกของไมโครคอนโทรเลอร์ตระกูล ST7 ซิครับ

หลักการทำงานของวงจร

ในวงจรการทำงานนี้อาศัยไมโครคอนโทรเลอร์ ST7FLITE09b เป็นหัวใจหลักในการรับค่าข้อมูล สั่งการทำงาน และประมวลผล การทำงานภายในวงจรทั้งหมด วงจรนี้เมื่อพิจารณาแล้วจะมีส่วนที่สำคัญหลักๆ อยู่ 5 ส่วนโดยในแต่ละส่วนจะมีความสำคัญและการทำงานแตกต่างกันไป
ส่วนที่1 จะเป็นส่วนที่ใช้เป็นแหล่งจ่ายพลังงานให้กับระบบทั้งหมด ในโครงงานนี้ใช้ถ่านไฟฉาย1.5โวลท์ขนาด AA 2 ก้อน
ส่วนที่2 เป็นวงจรขับมอเตอร์ได้สองทิศทาง จำนวน 2 ชุด โดยมีลักษณะการทำงาน 4 รูปแบบดังนี้

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

ในรูปแบบที่2 แรงดันทางด้านอินพุท Q3 เป็นลอจิกสูงและแรงดันทางด้านอินพุท Q4 เป็นลอจิกต่ำ ในลักษณะการทำงานนี้จะทำให้ Q3 ทำงาน และส่งผลให้ Q2 ,Q5 ทำงาน กระแสจะไหลผ่าน Q2 มอเตอร์ และ Q5 ลงกราวด์ทำให้มอเตอร์หมุนในทิศทางตามเข็มนาฬิกา

ในรูปแบบที่3 แรงดันทางด้านอินพุท Q3 เป็นลอจิกต่ำและแรงดันทางด้านอินพุท Q4 เป็นลอจิกสูง ในลักษณะการทำงานนี้จะทำให้ Q4 ทำงาน และส่งผลให้ Q1 ,Q6 ทำงาน กระแสจะไหลผ่าน Q1 มอเตอร์ และ Q6 ลงกราวด์ทำให้มอเตอร์หมุนในทิศทางทวนเข็มนาฬิกา

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

ส่วนที่ 3 เป็นส่วนการแสดงผล มีแอลอีดีขนาด 3 มิลลิเมตร 2 ตัว และตัวกำเนิดเสียง 1 ตัว
ส่วนที่ 4 เป็นส่วนที่เรียกง่ายๆ ว่าวงจรปั๊มแรงดันจากแรงดันจากถ่านไฟฉาย 3 โวลท์ เป็นแรงดันไฟขนาด 3.3 โวลท์ใช้เลี้ยงตัวไมโครคอนโทรเลอร์ซึ่งวงจรนี้เป็นวงจรที่สำคัญมากช่วยให้ตัวไมโครคอนโทรเลอร์ทำงานไม่ผิดพลาดอันเนื่องมาจาก การดึงกระแสไฟของมอเตอร์ดีซีทั้ง 2 ตัวในช่วงการทำงาน

ซึ่งลักษณะการทำงานของวงจร โดยขณะเริ่มจ่ายไฟให้กับวงจร R2 จะเป็นทำหน้าที่เป็นแหล่งจ่ายกระแสให้กับขาเบส(B)ของ TR1 ทำให้ TR1 ทำงานและส่งผลให้ TR2 ทำงาน ในส่วนของ TR2 จะทำงานในโหมดของการสวิตช์ ซึ่งจะทำให้กระแสถูกเก็บสะสมเพิ่มขึ้นที่ L แรงดันที่เกิดขึ้น ที่ขาคอเรคเตอร์(C)ของ TR2 จะส่งผลทำให้แรงดันเพิ่มขึ้นที่ขาเบส(B)ของ TR1 (ผ่าน C1) และทำให้ TR1 หยุดการทำงาน ซึ่งก็เป็นผลให้ TR2 หยุดการทำงานด้วย สนามแม่เหล็กที่ L จะยุบตัวลง ทำให้แรงดันที่เกิดขึ้นมีค่าสูงกว่าแหล่งจ่ายพลังงาน ส่งผ่าน D1 และเก็บไว้ที่ C2 เหตุการณ์ที่เกิดขึ้นนี้จะถูกกระทำซ้ำไปมาอย่างต่อเนื่อง โดยแรงดันสะสมนี้จะถูกส่งผ่าน R3 ผ่านซีเนอร์ไดโอด D2 ซึ่งทำหน้าที่ชั้นเรกูเลเตอร์รักษาระดับแรงดันให้คงที่ 3.3 โวลท์

ในรูปที่6 เป็นกราฟที่แสดงการทดสอบแรงดันอินพุทที่ 2 – 5โวลท์ เปรียบเทียบกับแรงดันที่ได้ทางเอาท์พุทที่จุด C2 และ D2 โดยที่จุด C2 จะเป็นจุดที่ได้แรงดันสูงกว่าอินพุท ซึ่งจะเป็นแรงดันที่เกิดจากวงจรทวีแรงดัน และในจุด D2 จะเป็นจุดที่ถูกรักษาแรงดันโดยวงจรชั้นเรกูเลเตอร์

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

การประกอบวงจร

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

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

วิธีการบอร์ดวงจรเข้ากับชุดมอเตอร์

ในการประกอบวงจรเข้ากับชุดมอเตอร์แบ่งออกได้ 3 ส่วนคือ

ส่วนที่ 1 เป็นส่วนการประกอบตัวบอร์ดวงจรเข้ากับชุดมอเตอร์ ในชุดคิดชุดมอเตอร์นี้ทางผู้ผลิตได้มีการออกแบบ มาให้มีการประกอบกับอุปกรณ์อื่นๆได้โดยง่าย เตรียมน๊อตขนาด 3 มิลลิเมตร ยาว 2.5 เซนติเมตร 2 ตัว(ตัวผู้,ตัวเมีย) และฐานรองปริ้นแบบสั้น 4 ตัวนำมาประกอบดังรูปที่8

ส่วนที่ 2 เป็นส่วนการประกอบรังถ่านเข้ากับชุดมอเตอร์และเดินสายไฟเข้าบอร์ดทดลองโดยให้ประกอบดังรูปที่ 9

ส่วนที่ 3 เป็นส่วนการเดินสายไฟของวงจรขับมอเตอร์ทั้ง 2 ชุดเข้าสู่มอเตอร์ ซึ่งสามารถประกอบได้ดังรูปที่10

      เมื่อทำครบทั้ง 3 ส่วนนี้แล้ว ถ้าเรามีตัวไอซีST7FLITE09b ที่โปรแกรมแล้วสามารถนำมาทดสอบการทำงานได้ทันทีเลยครับ หรือถ้าน้องๆ คนใดยังไม่ได้โปรแกรมหรือจะศึกษาตัวโปรแกรมก่อนก็ดูต่อไปในส่วนของการเขียนโปรแกรมไปพร้อมๆ กันเลยครับ

เสริมการทำงานด้วยวงจรวิทยุรับส่งรถกระป๋อง

ในส่วนนี้จะเป็นการใส่เครื่องมือเพื่อใช้ในการเสริมการทำงานของบอร์ดวงจร ซึ่งผมได้เตรียมไว้สำหรับรับอินพุตจากภายนอก โดยพิจารณาจากวงจรรูปที่ 3 ที่จุด J1 จะมีพอร์ตที่เหลือเอาไว้ต่อใช้งานกับอุปกรณ์อื่นๆจากภายนอก โดยสามารถใช้งานได้ 5 ขาคือ PB0,PB1,PA0,PA1,PA2 ซึ่งขาแต่ละขานอกจากจะใช้งานเป็นอินพุตเอาท์พุตแล้ว บางขาจะมีฟังชั่นพิเศษอื่นๆเอาไว้ใช้งานได้อีกด้วย เช่นขา PB0 เป็นขาที่ใช้รับสัญญาณอนาล็อก และรับสัญญาณอินเตอร์รัพท์ แต่ในตัวอย่างการใช้งานนี้เราได้นำวงจรวิทยุรับส่งของรถกระป๋องมาดัดแปลง ขาที่ใช้งานจึงถูกใช้งานเป็นอินพุทเท่านั้น โดยทำการต่อวงจรและดัดแปลงตามรูปที่ 11

เพิ่มเติม ในวงจรภาครับวิทยุในสภาวะปกติหลังจากจ่ายไฟเข้าระบบถ้าไม่มีการกดสวิตช์ที่ภาคส่ง เอาท์พุทที่ขา 6,7,11 และ ขา10 จะมีเอาท์พุทเป็นลอจิกต่ำ แต่ถ้ามีการกดปุ่มจากภาคส่ง เช่นกด ปุ่มเดินหน้า ทางภาครับขา 11 ซึ่งรับสัญญาณเดินหน้าจะเปลี่ยนแปลงเป็นลอจิกสูง ซึ่งเราจะเขียนโปรแกรมจับสัญญาณจากส่วนนี้

ลักษณะการทำงานของตัวไมโครคอนโทรเลอร์

ในการสั่งงาน รับข้อมูล ประมวลผล ตัวไมโครคอนโทรเลอร์จะทำงานทั้งหมด ดังนั้นหลังจากที่เราได้ประกอบในส่วนของวงจรและประกอบตัวหุ่นเสร็จแล้ว ก็จะมาเข้าศึกษาในส่วนของตัวโปรแกรมและการเขียนโปรแกรม จากที่กล่าวมาข้างต้นการที่เราใช้วงจรบูสแรงดันขึ้นนั้น เมื่อนำมาต่อใช้งานกับตัวไมโครคอนโทรเลอร์และทำการเขียนโปรแกรมสั่งงานปรกตินั้นไม่สามารถที่ทำได้เพราะ ในขณะที่มอเตอร์ทำงานพร้อมๆ กันทั้ง 2 ตัวจะเกิดการกินกระแสที่มากจน วงจรบูสแรงดันไม่อาจที่จะรักษาระดับแรงดันให้คงที่ได้ เกิดเหตุการณ์แรงดันที่จ่ายให้ตัวไมโครคอนโทรเลอร์ตก จนถึงจุดที่วงจรตรวจสอบแรงดันภายในตัวไมโครคอนโทรเลอร์(LVD) ตรวจจับแรงดันได้และทำการรีเซตตัวเองทันที แต่ในแรงดันที่ตกนี้ ยังสามารถให้ตัวไมโครคอนโทรเลอร์ทำงานได้ เราจึงต้องทำการปิดการทำงานของวงจรตรวจจับแรงดัน(LVD) และต้องเพิ่มเติมวงจรที่เรียกว่าWatchdogเข้าไปเพื่อทำการรีเซตตัวไมโครคอนโทรเลอร์เมื่อเกิดการแฮง หรือ การปิดและเปิดเครื่องใหม่ ซึ่งวงจรWatchdogที่ใช้นี้เป็นคุณสมบัติพิเศษอย่างหนึ่งของตัวไมโครคอนโทรเลอร์เบอร์นี้ โดยวงจรWatchdogที่อยู่ภายในตัวไมโครคอนโทรเลอร์นี้สามารถมีวิธีการใช้ ได้ 2 แบบคือในแบบ ที่เรียกการทำงานจากภายในโปรแกรม และแบบที่เรียกการทำงานโดยฮาร์แวร์ ในวงจรนี้เราจะใช้วงจรWatchdogที่ทำงานจากฮาร์แวร์ โดยทำการเซตจาก Option Byte ดังรูปที่12

 เมื่อทำการเซตตามรูปที่12 แล้วผลที่เกิดขึ้นตามมา เราจะสามารถทำการโปรแกรมข้อมูลลงในไอซีในโหมดดีบัคโปรแกรมได้เพียงครั้งเดียวเท่านั้น ดังนั้นวิธีการแก้ไขปัญหา ต้องมีการเซตโปรแกรมเพิ่มเติมอีกนิดหน่อย โดยทำการเซตภายในโปรแกรม และทำการเซตลวดจั้มในบอร์ดทดลอง(Hobby 140) ก่อนโปรแกรม ดังรูปที่13

ในรูปที่ 14 จะแสดงโฟลว์ชาร์ตการทำงานแบบคร่าวๆ เพื่อใช้ศึกษาควบคู่กับการเขียนโปรแกรม ในส่วนการเลี้ยวขวา การเลี้ยวซ้าย ซึ่งอยู่ในโหมดการทำงานที่1 และส่วนสั่งงานให้เดินหน้า ส่วนสั่งงานให้ถอยหลัง ซึ่งอยู่ในโหมดการทำงานที่2 นั้นจะมีโปรแกรมย่อยๆ ลึกลงไปอีก ซึ่งไม่ได้แสดงไว้ในโฟลว์ชาร์ต ให้ทำการศึกษาจากภายในตัวโปรแกรมครับ

โปรแกรมการทำงาน

st7/ ;ส่วนหัวโปรแกรม
TITLE “robot.ASM”
MOTOROLA
#INCLUDE “ST72FLT0.INC” ; ST72FLITE0 registers and memory mapping file
;*******************************************************************************
; Program entry
;*******************************************************************************
.R0 EQU $80 ;
.R1 EQU $81 ;
.R2 EQU $82 ;
.R3 EQU $83 ;
.R4 EQU $84 ;
WORDS
segment ‘rom’
.MAIN
CALL INIT ;กำหนดค่าเบื้องต้นของพอร์ตต่างๆ
BSET PADR,#2 ;ปิดเสียง
CALL TDELAY ;โปรแกรมย่อยหน่วงเวลา
;************เริ่มโปรแกรมการทำงาน
.START ;เซตการเริ่มต้นการทำงานของโปรแกรม
CALL RESSYS ;เรียกโปรแกรมย่อยในการเซตค่าเริ่มต้นของระบบ
BTJT PBDR,#0,RUNRF ;ตรวจสอบการกดปุ่มเดินหน้าจากรีโมท
BTJT PBDR,#1,RUNRF ;ตรวจสอบการกดปุ่มถอยหลังจากรีโมท
BTJT PADR,#0,RUNRF ;ตรวจสอบการกดปุ่มเลี้ยวซ้ายจากรีโมท
BTJT PADR,#1,RUNRF ;ตรวจสอบการกดปุ่มเลี้ยวขวาจากรีโมท
JP RUNCAR ;ถ้าไม่มีการกดปุ่มใดๆเลยจะเข้าสู่การทำงานโหมด1
;*********************
.RUNRF JP RUNRF1 ;ข้ามไปทำงานในโหมด2
;*********************เริ่มการทำงานของโปรแกรมโหมด1
.RUNCAR ;เริ่มต้นการทำงานของโปรแกรม
CALL MOTORFOR ;เรียกโปรแกรมย่อยสั่งงานให้มอเตอร์ทั้ง 2 ตัวเดินหน้า
BTJF PBDR,#2,RIGHT ;ถ้ามีการชนหรือกด SW2 จะกระโดดไปทำโหมดเลี้ยวขวา
BTJF PADR,#5,LEFT ; ถ้ามีการชนหรือกด SW3 จะกระโดดไปทำโหมดเลี้ยวซ้าย
JP RUNCAR ;ถ้าไม่การการชนหรือกดสวิตช์ใดๆ กระโดดไปจุดเริ่มต้นของโปรแกรมโหมด1
;*************โปรแกรมย่อยโหมด1เลี้ยวขวา
.RIGHT ;โปรแกรมการสั่งงานให้มีการเลี้ยวขวา
CALL RESMOTOR ;โปรแกรมย่อยหยุดการทำงานมอเตอร์
CALL BUSZ ;โปรแกรมย่อยสร้างเสียง
CALL MOTORBACK ;โปรแกรมย่อยให้มอเตอร์ทำงานถอยหลังทั้ง 2 ตัว
CALL TDELAY ;โปรแกรมย่อยหน่วงเวลา
CALL RESMOTOR ;โปรแกรมย่อยหยุดการทำงานมอเตอร์
BRES PADR,#3 ;สั่งการทำงานให้LED ทางขวา ON
CALL BUSZ ;โปรแกรมย่อยสร้างเสียง
CALL RMOTOR ;โปรแกรมย่อยหมุนตัวหุ่น360องศาไปทางขวา
CALL TDELAY ;โปรแกรมย่อยหน่วงเวลา
CALL RESMOTOR ;โปรแกรมย่อยหยุดการทำงานมอเตอร์
CALL BUSZ ;โปรแกรมย่อยสร้างเสียง
BSET PADR,#3 ;สั่งการทำงานให้LED ทางขวา OFF
JP RUNCAR ;กลับสู่การเริ่มต้นโปรแกรมโหมด1

;**************โปรแกรมย่อยโหมด1เลี้ยวซ้าย
.LEFT ;โปรแกรมการสั่งงานให้มีการเลี้ยวซ้าย
CALL RESMOTOR ;โปรแกรมย่อยหยุดการทำงานมอเตอร์
CALL BUSZ ;โปรแกรมย่อยสร้างเสียง
CALL MOTORBACK ;โปรแกรมย่อยให้มอเตอร์ทำงานถอยหลังทั้ง 2 ตัว
CALL TDELAY ;โปรแกรมย่อยหน่วงเวลา
CALL RESMOTOR ;โปรแกรมย่อยหยุดการทำงานมอเตอร์
BRES PADR,#4 ;สั่งการทำงานให้LED ทางซ้าย ON
CALL BUSZ ;โปรแกรมย่อยสร้างเสียง
CALL LMOTOR ;โปรแกรมย่อยหมุนตัวหุ่น360องศาไปทางซ้าย
CALL TDELAY ;โปรแกรมย่อยหน่วงเวลา
CALL RESMOTOR ;โปรแกรมย่อยหยุดการทำงานมอเตอร์
CALL BUSZ ;โปรแกรมย่อยสร้างเสียง
BSET PADR,#4 ;สั่งการทำงานให้LED ทางซ้าย OFF
JP RUNCAR ;กลับสู่การเริ่มต้นโปรแกรมโหมด1
;*************จบโปรแกรมในโหมด1
;************************************************
;****************************เริ่มการทำงานของโปรแกรมโหมด2
.RUNRF1 ;เริ่มต้นการทำงานของโปรแกรม
CALL RESMOTOR ;โปรแกรมย่อยหยุดการทำงานมอเตอร์
BTJT PBDR,#0,FORW1 ;ตรวจสอบการกดปุ่มเดินหน้าจากรีโมท
BTJT PBDR,#1,BACK1 ;ตรวจสอบการกดปุ่มถอยหลังจากรีโมท
BTJT PADR,#0,LEFTRF1 ;ตรวจสอบการกดปุ่มเลี้ยวซ้ายจากรีโมท
BTJT PADR,#1,RIGHTRF1 ;ตรวจสอบการกดปุ่มเลี้ยวขวาจากรีโมท
JP RUNRF;ถ้าไม่การกดสวิตช์ใดๆจากรรีโมท กระโดดไปจุดเริ่มต้นของโปรแกรมโหมด2
;*************โปรแกรมย่อยโหมด2 เดินหน้า
.FORW1
CALL MOTORFOR ;เรียกโปรแกรมย่อยสั่งงานให้มอเตอร์ทั้ง 2 ตัวเดินหน้า
CALL DELAY ;โปรแกรมย่อยหน่วงเวลา
CALL ALEFT ;โปรแกรมย่อยตรวจสอบการกดสวิตช์เลี้ยวซ้าย ในโหมดเดินหน้า
CALL ARIGHT ;โปรแกรมย่อยตรวจสอบการกดสวิตช์เลี้ยวขวา ในโหมดเดินหน้า
BTJT PBDR,#0,FORW1 ;ถ้าสวิตช์เดินหน้ายังมีการกดอยู่ให้ไปที่ FORW1
JP RUNRF1 ;กลับสู่จุดเริ่มต้นการทำงานของโปรแกรมโหมด2
;************โปรแกรมย่อยโหมด2 ถอยหลัง
.BACK1
CALL MOTORBACK ;เรียกโปรแกรมย่อยสั่งงานให้มอเตอร์ทั้ง 2 ตัวถอยหลัง
CALL DELAY ;โปรแกรมย่อยหน่วงเวลา
CALL BALEFT ;โปรแกรมย่อยตรวจสอบการกดสวิตช์เลี้ยวซ้าย ในโหมดถอยหลัง
CALL BARIGHT ;โปรแกรมย่อยตรวจสอบการกดสวิตช์เลี้ยวขวา ในโหมดถอยหลัง
BTJT PBDR,#1,BACK1 ;ถ้าสวิตช์ถอยหลังยังมีการกดอยู่ให้ไปที่ BACK1
JP RUNRF1 ;กลับสู่จุดเริ่มต้นการทำงานของโปรแกรมโหมด2
;****************โปรแกรมย่อยโหมด2 เลี้ยวซ้าย
.LEFTRF1
CALL LMOTOR ;โปรแกรมย่อยหมุนตัวหุ่น360องศาไปทางซ้าย
CALL DELAY ;โปรแกรมย่อยหน่วงเวลา
BTJT PADR,#0,LEFTRF1 ;ถ้าสวิตช์เลี้ยวซ้ายยังมีการกดอยู่ให้ไปที่ LEFTRF1
JP RUNRF1 ;กลับสู่จุดเริ่มต้นการทำงานของโปรแกรมโหมด2

;***************โปรแกรมย่อยโหมด2 เลี้ยวขวา
.RIGHTRF1
CALL RMOTOR ;โปรแกรมย่อยหมุนตัวหุ่น360องศาไปทางขวา
CALL DELAY ;โปรแกรมย่อยหน่วงเวลา
BTJT PADR,#1,RIGHTRF1 ;ถ้าสวิตช์เลี้ยวขวายังมีการกดอยู่ให้ไปที่ RIGHTRF1
JP RUNRF1 ;กลับสู่จุดเริ่มต้นการทำงานของโปรแกรมโหมด2
;******************โปรแกรมย่อยตรวจสอบการกดสวิตช์เลี้ยวซ้าย ในโหมดเดินหน้า
.ALEFT BTJF PADR,#0,ENDLEFT ;ถ้าไม่มีการกดปุ่มเลี้ยวซ้ายให้ออกสู่โปรแกรมเดินหน้า
CALL RM1SM2 ;เรียกโปรแกรมย่อยเลี้ยวซ้าย(โหมดเดินหน้า)
.WAITLEFT BTJT PADR,#0,WAITLEFT ;ถ้ายังมีการกดปุ่มเลี้ยวซ้ายอยู่ให้เลี้ยวต่อไป
.ENDLEFT RET ;กลับสู่โปรแกรมโหมดเดินหน้า
;****************** โปรแกรมย่อยตรวจสอบการกดสวิตช์เลี้ยวขวา ในโหมดเดินหน้า
.ARIGHT BTJF PADR,#1,ENDRIG ;ถ้าไม่มีการกดปุ่มเลี้ยวขวาให้ออกสู่โปรแกรมเดินหน้า
CALL SM1RM2 ;เรียกโปรแกรมย่อยเลี้ยวขวา(โหมดเดินหน้า)
.WAITRIG BTJT PADR,#1,WAITRIG ;ถ้ายังมีการกดปุ่มเลี้ยวขวาอยู่ให้เลี้ยวต่อไป
.ENDRIG RET ;กลับสู่โปรแกรมโหมดเดินหน้า
;***************โปรแกรมย่อยตรวจสอบการกดสวิตช์เลี้ยวซ้าย ในโหมดถอยหลัง
.BALEFT BTJF PADR,#0,BENDLEFT ;ถ้าไม่มีการกดปุ่มเลี้ยวซ้ายให้ออกสู่โปรแกรมถอยหลัง
CALL BRM1SM2 ;เรียกโปรแกรมย่อยเลี้ยวซ้าย(โหมดถอยหลัง)
.BWAITLEFT BTJT PADR,#0,BWAITLEFT ;ถ้ายังมีการกดปุ่มเลี้ยวซ้ายอยู่ให้เลี้ยวต่อไป
.BENDLEFT RET ;กลับสู่โปรแกรมโหมดถอยหลัง
;*****************โปรแกรมย่อยตรวจสอบการกดสวิตช์เลี้ยวขวา ในโหมดถอยหลัง
.BARIGHT BTJF PADR,#1,BENDRIG ;ถ้าไม่มีการกดปุ่มเลี้ยวขวาให้ออกสู่โปรแกรมถอยหลัง
CALL BSM1RM2 ;เรียกโปรแกรมย่อยเลี้ยวขวา(โหมดถอยหลัง)
.BWAITRIG BTJT PADR,#1,BWAITRIG ;ถ้ายังมีการกดปุ่มเลี้ยวขวาอยู่ให้เลี้ยวต่อไป
.BENDRIG RET ;กลับสู่โปรแกรมโหมดถอยหลัง
;*************************จบโปรแกรมในโหมด2
;***************โปรแกรมย่อยที่ใช้ในโปรแกรมหลัก
.BUSZ BRES PADR,#2 ;เปิดเสียง
CALL DELAY ;เรียกโปรแกรมย่อยหน่วงเวลา
BSET PADR,#2 ;ปิดเสียง
CALL DELAY ;เรียกโปรแกรมย่อยหน่วงเวลา
BRES PADR,#2 ;เปิดเสียง
CALL DELAY ;เรียกโปรแกรมย่อยหน่วงเวลา
BSET PADR,#2 ;ปิดเสียง
CALL DELAY ;เรียกโปรแกรมย่อยหน่วงเวลา
BRES PADR,#2 ;เปิดเสียง
CALL DELAY ;เรียกโปรแกรมย่อยหน่วงเวลา
BSET PADR,#2 ;ปิดเสียง
CALL DELAY ;เรียกโปรแกรมย่อยหน่วงเวลา
RET ;กลับสู่โปรแกรมหลัก
; *************เรียกโปรแกรมย่อยในการเซตค่าเริ่มต้นของระบบ
.RESSYS
BRES PADR,#6 ; หยุดการทำงานของมอเตอร์ M2
BRES PADR,#7 ; หยุดการทำงานของมอเตอร์ M2
BRES PBDR,#3 ; หยุดการทำงานของมอเตอร์ M1
BRES PBDR,#4 ; หยุดการทำงานของมอเตอร์ M1
BSET PADR,#4 ;ปิดหลอดLED ด้านขวา
BSET PADR,#3 ;ปิดหลอดLED ด้านซ้าย
BSET PADR,#2 ;ปิดเสียง
RET ;กลับสู่โปรแกรมหลัก

;********************โปรแกรมย่อยหยุดการทำงานมอเตอร์
.RESMOTOR
BRES PADR,#6 ; หยุดการทำงานของมอเตอร์ M2
BRES PADR,#7 ; หยุดการทำงานของมอเตอร์ M2
BRES PBDR,#3 ; หยุดการทำงานของมอเตอร์ M1
BRES PBDR,#4 ; หยุดการทำงานของมอเตอร์ M1
RET ;กลับสู่โปรแกรมหลัก
;************โปรแกรมย่อยสั่งงานให้มอเตอร์ทั้ง 2 ตัวเดินหน้า
.MOTORFOR
BSET PADR,#6 ;สั่งให้มอเตอร์ M2ทำงานเดินหน้า
BRES PADR,#7 ;สั่งให้มอเตอร์ M2ทำงานเดินหน้า
BSET PBDR,#3 ;สั่งให้มอเตอร์ M1ทำงานเดินหน้า
BRES PBDR,#4 ;สั่งให้มอเตอร์ M1ทำงานเดินหน้า
RET ;กลับสู่โปรแกรมหลัก
;***********โปรแกรมย่อยให้มอเตอร์ทำงานถอยหลังทั้ง 2 ตัว
.MOTORBACK
BRES PADR,#6 ;สั่งให้มอเตอร์ M2ทำงานถอยหลัง
BSET PADR,#7 ;สั่งให้มอเตอร์ M2ทำงานถอยหลัง
BRES PBDR,#3 ;สั่งให้มอเตอร์ M1ทำงานถอยหลัง
BSET PBDR,#4 ;สั่งให้มอเตอร์ M1ทำงานถอยหลัง
RET ;กลับสู่โปรแกรมหลัก
;************ โปรแกรมย่อยหมุนตัวหุ่น360องศาไปทางซ้าย
.LMOTOR
BRES PADR,#6 ;สั่งให้มอเตอร์ M2ทำงานถอยหลัง
BSET PADR,#7 ;สั่งให้มอเตอร์ M2ทำงานถอยหลัง
BSET PBDR,#3 ;สั่งให้มอเตอร์ M1ทำงานเดินหน้า
BRES PBDR,#4 ;สั่งให้มอเตอร์ M1ทำงานเดินหน้า
RET ;กลับสู่โปรแกรมหลัก
;************โปรแกรมย่อยหมุนตัวหุ่น360องศาไปทางขวา
.RMOTOR
BSET PADR,#6 ;สั่งให้มอเตอร์ M2ทำงานเดินหน้า
BRES PADR,#7 ;สั่งให้มอเตอร์ M2ทำงานเดินหน้า
BRES PBDR,#3 ;สั่งให้มอเตอร์ M1ทำงานถอยหลัง
BSET PBDR,#4 ;สั่งให้มอเตอร์ M1ทำงานถอยหลัง
RET ;กลับสู่โปรแกรมหลัก
;**********มอเตอร์1หยุด มอเตอร์2ทำงาน (เลี้ยวขวา)
.SM1RM2
BSET PADR,#6 ;สั่งให้มอเตอร์ M2ทำงานเดินหน้า
BRES PADR,#7 ;สั่งให้มอเตอร์ M2ทำงานเดินหน้า
BRES PBDR,#3 ; หยุดการทำงานของมอเตอร์ M1
BRES PBDR,#4 ; หยุดการทำงานของมอเตอร์ M1
RET ;กลับสู่โปรแกรมหลัก
;**********มอเตอร์1 ทำงาน มอเตอร์2หยุด (เลี้ยวซ้าย)
.RM1SM2
BRES PADR,#6 ; หยุดการทำงานของมอเตอร์ M2
BRES PADR,#7 ; หยุดการทำงานของมอเตอร์ M2
BSET PBDR,#3 ;สั่งให้มอเตอร์ M1ทำงานเดินหน้า
BRES PBDR,#4 ;สั่งให้มอเตอร์ M1ทำงานเดินหน้า
RET ;กลับสู่โปรแกรมหลัก

;*********** มอเตอร์1ถอยหลัง มอเตอร์2 หยุด (ซ้าย)
.BRM1SM2
BRES PADR,#6 ; หยุดการทำงานของมอเตอร์ M2
BRES PADR,#7 ; หยุดการทำงานของมอเตอร์ M2
BRES PBDR,#3 ;สั่งให้มอเตอร์ M1ทำงานถอยหลัง
BSET PBDR,#4 ;สั่งให้มอเตอร์ M1ทำงานถอยหลัง
RET ;กลับสู่โปรแกรมหลัก
;**********มอเตอร์1หยุด มอเตอร์2ทำงานถอยหลัง (ขวา)
.BSM1RM2
BRES PADR,#6 ;สั่งให้มอเตอร์ M2ทำงานถอยหลัง
BSET PADR,#7 ;สั่งให้มอเตอร์ M2ทำงานถอยหลัง
BRES PBDR,#3 ; หยุดการทำงานของมอเตอร์ M1
BRES PBDR,#4 ; หยุดการทำงานของมอเตอร์ M1
RET ; กลับสู่โปรแกรมหลัก
;**************โปรแกรมย่อยหน่วงเวลา
.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,#$01 ;00
LD R4,A
.DELA1
LD A,#$01 ;00
.DELA2
INC A
CP A,#$0FF
jrne DELA2
ld A,R4
inc A
ld R4,A
cp a,#$0FF
jrne DELA1
RET

.INIT ;โปรแกรมย่อยในการตั้งเริ่มต้น
RIM ;เปิดให้มีการอินเตอรัพท์
BRES LTCSR,#2
BSET LTCSR,#0 ;เซตไม่ให้ Watchdog ทำการรีเซต
BSET LTCSR,#4 ; เปิดให้มีการอินเตอร์รัพฐานเวลา
LD A,#$0DC ;1101 1100 บิต7-0
LD PADDR,A ;เซต BIT7-out 6-out 5-in 4-out 3-out 2-out 1-in 0-in
LD A,#$0FC ;1111 1100
LD PAOR,A ;ดูในส่วนการเซต Option Register
LD A,#$18 ;xxx1 1000
LD PBDDR,A ;เซต 4-out 3-out 2-in 1-in 0-in
LD A,#$0FC ;1111 1100
LD PBOR, A ;ดูในส่วนการเซต Option Register
RET ;กลับสู่โปรแกรมหลัก
.RETWAG ;เมื่อมีการอินเตอร์รัพท์ของวอตดอก
BSET LTCSR,#0 ;เซตไม่ให้ Watchdog ทำการรีเซต
IRET ;ออกจากการอินเตอร์รัพท์

;*******************************************************************************
.DUMRET IRET
segment ‘vectit’
DC.W DUMRET ; FFE0-FFE1h
DC.W DUMRET ; FFE2-FFE3h
DC.W RETWAG ; 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 ;จบโปรแกรมครับ

รายการอุปกรณ์

ความต้านทานขนาด1/4วัตต์
R1 4.3K 1ตัว
R2 1M 1ตัว
R3,R7,R8,R11,R12 10โอห์ม 5 ตัว
R4,R5 3K 2 ตัว
R6,R9,R10,R13 1K 4 ตัว
ตัวเก็บประจุ
C1 0.001uf 1ตัว โพลีเอสเตอร์
C2 10uf/50v 1ตัว อิเล็กทรอไลต์
C3 100uf/16v 1ตัว อิเล็กทรอไลต์
C4 0.039uf 1ตัว โพลีเอสเตอร์
C5,C6,C7,C8,C9 0.0uf 5ตัว โพลีเอสเตอร์
ตัวเหนี่ยวนำ
L … 1ตัว

อุปกรณ์สารกึ่งตัวนำ
D1 ไดโอดเบอร์ 1N4001 1ตัว
D2 ซีเนอร์ไดโอด BZX3.3V 1ตัว
TR1 ทรานซีสเตอร์เบอร์ 2SA1015 1ตัว
TR2,TR5,TR6,TR11,TR12 ทรานซีสเตอร์เบอร์ 2SC1815 5ตัว
TR3,TR4,TR9,TR10 ทรานซีสเตอร์เบอร์ S8550 4ตัว
TR7,TR8,TR13,TR14 ทรานซีสเตอร์เบอร์ S8050 4ตัว
LED1,LED2 สีเขียวขนาด 3 มิลลิเมตร 2ตัว
IC1 ไอซีเบอร์ ST7FLITE09b 1ตัว
อุปกรณ์อื่นๆ
แผงวงจรภาครับส่งวิทยุกระป๋อง 1 ชุด
Socket 16 ขา 1 ตัว
ลิมิตสวิตช์ตามรูป 2 ตัว
สวิตช์ ON/OFF ตามรูป 1 ตัว
ขั่วไฟ 1 ตัว
รังถ่าน 2 ก้อน 1ตัว
บัสเซอร์ 3 โวลท์ 1ตัว
ชุดมอเตอร์ TWIN-MOTOR GEARBOX 1ชุด
ล้อ OFF-ROAD TIRES 1 ชุด
Pinทองแดง 1แถว
แผ่นPCB ขนาดเท่าแบบ 1 แผ่น
สั่งซื้อไอซีที่โปรแกรมแล้วราคาตัวละ150 บาทครับ(รวมค่าส่ง)

สรุปและแนวทางแก้ไข

ในการสร้างตัวรถกระป๋องสายพันธุ์ใหม่นี้ ถ้าเราต้องใช้ความละเอียดรอบคอบและพิถีพิถันในการประกอบ เพราะเราต้องสร้างทั้งในส่วนของระบบกลไกมอเตอร์ วงจรอิเล็กทรอนิกส์ การเขียนและการโปรแกรมตัวไมโครคอนโทรเลอร์ เราต้องค่อยๆประกอบทีละส่วนอย่างใจเย็น เมื่อประกอบทุกอย่างเสร็จแล้วควรทำการดาวน์โหลดตัวโปรแกรม(ดาวน์โหลดได้ที่http://electrinics.se-ed.com หรือ http://www.basiclite.com) โดยไฟล์จะมีชื่อว่า robotcar.zip มาทำการทดสอบเสียก่อนเพื่อทดสอบว่าระบบทุกอย่างทำงานได้อย่างถูกต้อง และค่อยๆหัดเขียนหรือแก้ไขตัวโปรแกรม ถ้าน้องๆ เกิดปัญหาในการประกอบก็สามารถสอบถามปัญหาได้ทางอีเมล์ครับ