95 return t; //ส่งขอ้ มลู ของตัวแปร t ออกไป } จากคำสั่งที่ผ่านมาเป็นคำสั่งในการใช้งานควบคุมบอร์ดไมโครคอนโทรลเลอร์อาดุยโน่เบื้องต้น เทา่ นัน้ คำสั่งเหล่าน้ีสามารถเขยี นโปรแกรมเพ่ือเช่อื มโยงจากโปรแกรมทง่ี า่ ยไปจนถงึ โปรแกรมที่ซบั ซ้อนได้ 6.3 การเขยี นโปรแกรมควบคมุ การทำงานของห่นุ ยนต์ขนาดเลก็ การเขียนโปรแกรมจะนำคำสั่งที่เรียนรู้ข้างต้นมาเขียนเป็นโปรแกรม แต่จะต้องเรียนรู้ ส่วนประกอบของตัวโปรแกรมสำหรับการเขยี นคำสั่ง ซึ่งโปรแกรมเรียกว่า อาดุยโน่ ไอดีอี (Arduino IDE) โดยสามารถดาวนโ์ หลดได้จากล้ิงค์ https://www.arduino.cc/en/main/software โดยรายละเอียดของ ตวั โปรแกรมมดี ังต่อนี้ รูปที่ 6.12 หน้าตา่ งของโปรแกรมอาดุยโน่ ไอดอี ี
ส่วนประกอบของโปรแกรมที่สำคญั มดี ังนี้ 96 12 3 รูปที่ 6.13 แสดงรายละเอียดของโปรแกรมอาดุยโนไ่ อดอี ี จากรูปท่ี 6.13 หมายเลข 1 คือ ปุ่มสำหรบั การตรวจสอบคำส่ังในโปรแกรม หมายเลข 2 คือ ปมุ่ สำหรับการอัพโหลดโปรแกรม หมายเลข 3 คือ ป่มุ สำหรับการเปดิ จอมอนเิ ตอร์ในการสื่อสารในพอรต์ 1 3 2 รปู ที่ 6.14 การเลือกชนดิ ของบอร์ดไมโครคอนโทรลเลอรอ์ าดยุ โน่
97 1 23 รูปที่ 6.15 การเลือกพอรต์ ในการเช่อื มต่อบอร์ดไมโครคอนโทรลเลอรอ์ าดุยโน่ โดยการดพู อร์ตในการเช่อื มต่อสามารถดูไดจ้ ากรายละเอยี ดดังน้ี ใหค้ ลิกขวาที่ My Computer แลว้ เลอื ก Properties คลิกขวา คลิก รูปท่ี 6.16 การเลือก My Computer
98 หลังจากนนั้ ใหเ้ ลือก Device Manager คลกิ เลือก รปู ที่ 6.17 การเลือกที่ Device Manager จะเจอพอรต์ สำหรับเชื่อมต่อดังรูปที่ 6.18 จากรปู จะเป็นพอรต์ “COM3” พอรต์ รูปที่ 6.18 พอร์ตสำหรับเชื่อมต่อ
99 6.3.1 การเขียนโปรแกรมควบคมุ หลอดแอลอดี ี 1 ตวั อปุ กรณ์ 1 แผง 1 ดวง 1. บอร์ดไมโครคอนโทรลเลอรอ์ าดุยโน่ รุ่น UNO 1 ตวั 2. แผงต่อวงจร 3. หลอดแอลอีดี 4. ตวั ความตา้ นทานขนาด 220 โอห์ม 5. สายต่อวงจร 6. สายยเู อสบี การต่อวงจรใช้งาน รูปท่ี 6.19 การต่อวงจรควบคุมหลอดแอลอีดี โปรแกรม //ตั้งคา่ ให้ขา 13 เป็นเอาต์พุต void setup() { //สง่ คา่ ใหข้ า 13 เปน็ HIGH pinMode(13, OUTPUT); //หนว่ งเวลา 1 วินาที (1000 เทา่ กับ 1 วนิ าที) } //กำหนดให้ขา 13 เปน็ LOW void loop() { //หน่วงเวลา 1 วินาที (1000 เท่ากับ 1 วนิ าที) digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW); delay(1000); }
100 6.3.2 การเขียนโปรแกรมควบคุมเซ็นเซอรว์ ดั ระยะ(Distance Sensor) โมดูลวัดระยะทางทำงานดว้ ยอินฟาเรดจะสง่ แสงอนิ ฟาเรดจากตวั สง่ ไปยังวัตถุและสะทอ้ นกบั มายังตวั รับโดยจะมีโฟโต้ทรานซิสเตอร์เป็นตัวรบั แสง โดยโมดูลระยะทางดว้ ยอินฟาเรดแสดงดงั รปู ท่ี 6.20 รปู ที่ 6.20 แสดงโมดูลวดั ระยะทางแบบอนิ ฟาเรด ท่ีมา : https://inex.co.th อปุ กรณ์ 1. บอร์ดไมโครคอนโทรลเลอร์อาดุยโน่ รนุ่ UNO 1 ตวั 2. แผงตอ่ วงจร 1 แผง 3. เซ็นเซอรว์ ดั ระยะทางอินฟาเรด 1 ตวั 4. สายตอ่ วงจร 5. สายยูเอสบี การต่อวงจรใช้งาน รูปท่ี 6.21 การต่อวงจรร่วมกับเซ็นเซอร์วัดระยะทาง
101 โปรแกรม int distance = 0; //ประกาศตวั แปรชือ่ ”distance” โดยมคี า่ เทา่ กับ 0 void setup( ) { Serial.begin(9600); //ตั้งคา่ การสื่อสารด้วยความเรว็ 9600 บิตต่อ วนิ าที } void loop() { distance = analogRead(0); //สง่ั ใหต้ ัวแปร distance อา่ นคา่ สัญญาณแอ นะลอ็ ก Serial.println(distance); //สงั่ พิมพค์ ่าระยะทางออกทางมอนเิ ตอร์ } 6.3.3 การเขียนโปรแกรมควบคุมเซน็ เซอรค์ วามเข้มแสง(LDR) 1 ตวั อุปกรณ์ 1 ตวั 1. บอร์ดไมโครคอนโทรลเลอรอ์ าดยุ โน่ รุ่น UNO 1 ตวั 2. แอลดอี าร์ 3. ตวั ความต้านทานขนาด 4700 โอห์ม 4. สายต่อวงจร 5. สายยเู อสบี
102 การต่อวงจรใช้งาน รูปท่ี 6.22 วงจรการต่อกับแอลดีอาร์ โปรแกรม int sensorPin = A0; // การกำหนดตวั แปร “sensorPin”อ่านค่าจากขา A0 unsigned int sensorValue = 0; // ประกาศตัวแปรชอื่ ”sensorValue” เพื่อรบั คา่ void setup() { Serial.begin(9600); // ต้ังค่าการสื่อสารที่ 9600 บติ ต่อวนิ าที } void loop() { sensorValue = analogRead(sensorPin); //กำหนดใหต้ วั แปร sensorValue อ่านค่า จาก //แอลดีอาร์ Serial.print(sensorValue, DEC); //พมิ พ์ค่าทีอ่ า่ นไดจ้ ากแอลดอี าร์ไปยงั มอนเิ ตอร์ delay(500); //หนว่ งเวลา }
103 6.3.4 การเขยี นโปรแกรมควบคมุ มอเตอร์เซอรโ์ ว 1 ตวั อุปกรณ์ 1 ตวั 1. บอร์ดไมโครคอนโทรลเลอรอ์ าดุยโน่ ร่นุ UNO 1 แผง 2. มอเตอร์เซอร์โว 3. แผงต่อวงจร 4. สายตอ่ วงจร 5. สายยูเอสบี การต่อวงจรใช้งาน รูปที่ 6.23 การต่อใชง้ านกบั มอเตอร์เซอรโ์ ว ในการใช้งานมอเตอร์เซอร์โวจะต้องมีการติดตั้งไลบรารี่ที่เป็นส่วนในการเรียกใช้การควบคุม มอเตอร์เซอร์โวเสียก่อนโดยไลบรารี่ของมอเตอร์เซอร์โวสามารถดาวน์โหลดได้จากแหล่งที่ขายมอเตอร์ เซอร์โวในระบบออนไลน์ท่วั ไป การติดต้งั ไลบรารม่ี รี ายละเอยี ดดงั ตอ่ ไปนี้
104 การติดต้ังไลบรารี่(LIBRARY) 1. เปดิ โปรแกรมอาดยุ โน่ไอดอี ีแสดงดงั รปู ที่ 6.24 ทต่ี ิดตัง้ เป็นท่เี รียบร้อย รปู ที่ 6.24 โปรแกรมอาดยุ โนไ่ อดีอี 2. คลิกที่เมนู Sketch แล้วเลือกท่ี Include Library ดังรปู ท่ี 4.25 คลิก รูปที่ 6.25 การคลกิ เมนู Sketch Library
105 3. คลกิ ทีเ่ มนู Add .ZIP Library… เพือ่ เลอื กไฟล์ไลบราร่ี ดงั รูปที่ 6.26 คลิก รูปที่ 6.26 การคลิกเมนู Add .ZiP Library.. 4. ทำการเลอื กไฟลข์ องไลบราร่ีทีไ่ ดท้ ำการดาวน์โหลดมา แสดงดงั รูปท่ี 6.27 1 2 รปู ที่ 6.27 การเลือกไฟลไ์ ลบรารี่สำหรบั มอเตอร์เซอร์โว
106 5. เมอ่ื ติดตงั้ แลว้ จะมีไลบรารปี่ รากฏข้นึ มาท่ีตัวโปรแกรมอาดุยโนไ่ อดีอีดังแสดงในรปู ที่ 6.28 รปู ที่ 6.28 ไลบรารที่ ี่ติดตง้ั โปรแกรม //การเรยี กใชไ้ ลบราร่ี #include <Servo.h> //ประกาศตวั แปรชื่อ myservo Servo myservo; void setup() //ตรวจสอบการเช่อื มตอ่ ท่ีขา 10 หรอื ไม่ { myservo.attach(10); //สั่งให้มอเตอรเ์ ซอรโ์ วทำงาน } //หนว่ งเวลา 1 วนิ าที void loop() //สงั่ ให้มอเตอรเ์ ซอรโ์ วหมุนไป 90 องศา { myservo.write(0); //หนว่ งเวลา 1 วินาที delay(1000); //สง่ั ใหม้ อเตอรเ์ ซอรโ์ วหมุนไป 180 องศา myservo.write(90); delay(1000); myservo.write(180);
107 delay(1000); //หนว่ งเวลา 1 วนิ าที } 6.3.5 การเขียนโปรแกรมควบคุมมอเตอร์สเต็ป (Step Motor) 1 ตวั อุปกรณ์ 1 ตวั 1. บอรด์ ไมโครคอนโทรลเลอรอ์ าดุยโน่ รนุ่ UNO 1 ตวั 2. มอเตอร์แบบสเตป็ 4 สาย 1 แผง 3. บอรด์ ขบั มอเตอร์สเต๊ป EasyDriver 4. แผงต่อวงจร 5. สายต่อวงจร 6. สายยูเอสบี การต่อวงจรใช้งาน แหลง่ จ่ายมอเตอร์ รูปท่ี 6.29 การต่อร่วมกับมอเตอรส์ เต็ป
108 โปรแกรม #define DISTANCE 3200 //ประกาศให้ตวั แปร DISTANCE มีคา่ เทา่ กับ 3200 int StepCounter = 0; //ประกาศตวั แปร StepCounter เทา่ กับ 0 int Stepping = false; //ประกาศตัวแปร Stepping มคี า่ เป็น false void setup() { pinMode(8, OUTPUT); //ต้ังค่าใหข้ า 8 เปน็ เอาต์พุต pinMode(9, OUTPUT); //ตงั้ ค่าให้ขา 9 เปน็ เอาต์พตุ digitalWrite(8, LOW); //ส่งคา่ ให้ขา 8 มสี ถานะเปน็ LOW digitalWrite(9, LOW); //สง่ ค่าให้ขา 9 มสี ถานะเป็น LOW pinMode(3,INPUT); //ตง้ั คา่ ให้ขา 3 มคี า่ เป็นอินพุต } void loop() { if (digitalRead(3) == LOW && Stepping == false) //ตรวจสอบขา 3 มสี ถานะเป็น LOW หรอื //เปลา่ และตรวจสอบตวั แปร // Stepping มคี ่าเปน็ false หรือ เปล่า { Stepping = true; //ถา้ เปน็ ไปตามเง่ือนไขใหต้ วั แปร Stepping มีค่าเปน็ true (จริง) } if (Stepping == true) //ตรวจสอบตัวแปร Stepping มีค่าเท่ากับ true { digitalWrite(9, HIGH); //สง่ ค่าใหข้ า 9 มสี ถานะเปน็ HIGH delay(1); //หนว่ งเวลา 1 วินาที digitalWrite(9, LOW); //ส่งค่าใหข้ า 9 มีสถานะเป็น LOW delay(1); //หน่วงเวลา 1 วนิ าที StepCounter = StepCounter + 1; //เพิ่มค่าของตวั แปร StepCouter if (StepCounter == DISTANCE) //ตรวจสอบเง่ือนไขตัวแปร StepCounte เทา่ กับ //DISTANCE หรอื ไม่ { StepCounter = 0; //กำหนดใหต้ วั แปร StepCounter มีค่าเท่ากบั 0
109 Stepping = false; //กำหนดใหต้ ัวแปร Stepping ม่คี ่าเท่ากับ false } } } 6.3.6 การเขียนโปรแกรมควบคมุ ปุ่มกด(Button) 1 ตวั อุปกรณ์ 1 ตวั 1 ตวั 1. บอร์ดไมโครคอนโทรลเลอร์อาดยุ โน่ รุ่น UNO 1 แผง 2. ปมุ่ กด 3. ตวั ความต้านทานขนาด 1 กิโลโอหม์ 4. แผงตอ่ วงจร 5. สายต่อวงจร 6. สายยเู อสบี การต่อวงจรใช้งาน รูปที่ 6.30 การต่อวงจรร่วมกบั ปุ่มกด ในการต่อสวิตชแ์ บบปมุ่ กดจะมลี กั ษณะการตอ่ 2 แบบ คอื การตอ่ แบบ pull up เป็นลักษณะการเชอื่ มต่อกบั สัญญาณที่เปน็ ไฟบวก ตลอดเวลา แต่เม่อื มีการกดปุ่มสวติ ชจ์ ะเปลี่ยนเป็นสัญญาณไฟลบ การต่อแบบ pull down เปน็ ลักษณะการเช่อื มตอ่ กับสัญญาณที่เป็นไฟลบ ตลอดเวลา แตเ่ มอื่ มีการกดปุ่มสวติ ชจ์ ะเปลย่ี นเปน็ สัญญาณไฟบวก
110 VCC VCC R S MCU MCU S R GND GND Pull-Up Pull-Down รปู ท่ี 6.31 การต่อ pull –up และ pull –down โปรแกรม const int buttonPin = 1; // ประกาศตวั แปรชอื่ buttonPin ใหม้ คี ่าเท่ากบั 1 const int ledPin = 13; // ประกาศตัวแปรชือ่ ledPin ให้มีคา่ เทา่ กบั 13 int buttonState = 0; // ประกาศตวั แปรช่ือ buttonState ให้มคี ่าเท่ากับ 0 void setup() { pinMode(ledPin, OUTPUT); //ตัง้ คา่ ตวั แปร ledPin มีสถานะเป็น เอาต์พุต pinMode(buttonPin, INPUT); //ตงั้ คา่ ตวั แปร buttonPin มีสถานะเป็น อินพุต } void loop() { buttonState = digitalRead(buttonPin); //อ่านค่าสถานะจากตัวแปร buttonPin //มาเกบ็ ไวใ้ นตัวแปร buttonState if (buttonState == HIGH) //ตรวจสอบสถานะตวั แปร buttonState
111 { //มีสถานะเปน็ HIGH หรือไม่ digitalWrite(ledPin, HIGH); //สง่ ค่าใหต้ วั แปร ledPin มีสถานะเป็น HIGH //หรอื ไม่ } //สง่ ค่าให้ตัวแปร ledPin มีสถานะเป็น else { digitalWrite(ledPin, LOW); LOW } } 6.3.7 โปรแกรมควบคมุ รเี ลย์ (Relay Module) 1 ตวั อปุ กรณ์ 1 ตวั 1 แผง 1. บอรด์ ไมโครคอนโทรลเลอร์อาดยุ โน่ ร่นุ UNO 2. โมดูลรีเลย์แบบ 1 ช่อง 3. แผงตอ่ วงจร 4. สายตอ่ วงจร 5. สายยูเอสบี การตอ่ วงจรใช้งาน รปู ที่ 6.32 แสดงการรว่ มกบั โมดูลรเี ลย์ 1 ช่อง
112 โปรแกรม #define RELAY 13 //ประกาศให้ตวั แปร RELAY มีคา่ เทา่ กับ 13 void setup() { pinMode(RELAY,OUTPUT); // ตัง้ คา่ ตัวแปร RELAY มีสถานะเปน็ OUTPUT } void loop() { digitalWrite(RELAY,HIGH); //สง่ ค่าใหต้ ัวแปร RELAY มสี ถานะเป็น HIGH delay(1000); //หนว่ งเวลา 1 วนิ าที digitalWrite(RELAY,LOW); //ส่งคา่ ให้ตวั แปร RELAY มสี ถานะเปน็ LOW delay(1000); //หนว่ งเวลา 1 วนิ าที } 6.3.8 การควบคมุ หุ่นยนต์ดว้ ยมือแบบสวิตช์ การควบคุมหุ่นยนต์ด้วยมือแบบสวิตช์ จะใช้สวิตช์เป็นตัวสั่งการในการควบคุมทิศทางการหมุน ของมอเตอร์เพื่อให้หุ่นยนต์เคลื่อนที่ตามการกดสวิตช์ โดยลักษณะของการติดตั้งอุปกรณ์เป็นไปดังรูปท่ี 6.33 และ รูปที่ 6.34 รปู ที่ 6.33 การติดต้ังอุปกรณ์ด้านลา่ ง
113 รปู ที่ 6.34 การติดตง้ั อุปกรณ์ด้านบน วงจรควบคุมสามารถตอ่ ไดด้ งั รปู ที่ 6.35 ซึ่งวงจรดังกล่าวจะเป็นการควบคุมการเดนิ หน้าและถอย หลังโดยใช้สวิตช์ 2 ตัว โดยวงจรจะได้รับแรงดันไฟฟ้าจากแหล่งจ่ายเป็นถ่านขนาดแรงดันไฟฟ้า 6 โวลต์ หลักการทำงานเมื่อกดสวิตช์เดินหน้าจะทำให้มอเตอร์หมุนแล้วหุ่นยนต์จะเคลื่อนที่ไปด้านหน้าและเม่ือ ปลอ่ ยมอื จากสวิตช์หุ่นยนต์กจ็ ะหยุดการเคล่ือนท่ี และในทางตรงกนั ข้ามถ้ากดสวิตช์ถอยหลังหุ่นยนต์ก็จะ เคลื่อนท่ไี ปด้านหลงั
114 รูปท่ี 6.35 การต่อวงจรควบคุมห่นุ ยนต์ 6.3.9 การควบคุมหุ่นยนตด์ ว้ ยมอื แบบจอยสต๊ิกพเี อสทู (PS2 Playstation) 1) การควบคุมห่นุ ยนต์ด้วยมือแบบจอยสติ๊กพีเอสทแู บบสาย การควบคุมห่นุ ยนต์ด้วยมือแบบจอยสตกิ๊ พเี อสทู จะมีลักษณะการทำงานคล้ายกับการควบคมุ ด้วย สวิตช์ แต่ในการเขียนโปรแกรมควบคมุ จะตอ้ งติดตงั้ ไลบราร่ขี องจอยสตกิ๊ พีเอสทูในโปรแกรมอาดยุ โน่ไอดีอี เพื่อใช้เพื่อสำหรับสื่อสารระหว่างบอร์ดไมโครคอนโทรลเลอร์อาดุยโน่กับจอยสติ๊กพีเอสทู เพื่อใช้ในการ ควบคมุ มอเตอรต์ อ่ ไป โดยลกั ษณะของจอยสตกิ๊ พีเอสทู จะมลี ักษณะตามรปู ท่ี 6.36 และการติดตง้ั อปุ กรณ์ ในห่นุ ยนตแ์ สดงดงั รปู ที่ 6.37 และรปู ท่ี 6.38
115 รปู ที่ 6.36 จอยสติ๊กพเี อสทู (PS2) แบบใช้สาย รปู ท่ี 6.37 การติดตง้ั อุปกรณ์ดา้ นลา่ ง
116 รปู ที่ 6.38 การติดต้งั อุปกรณ์ด้านบน โดยรายละเอยี ดของตำแหนง่ ขาในการใช้งานของจอยสต๊ิกพีเอสทูแสดงดงั รปู ท่ี 6.39 รปู ที่ 6.39 ตำแหน่งขาสำหรับใชง้ านของจอยสต๊ิกพีเอสทู ตำแหนง่ ท่ี 1 คือ ขา Data ตำแหนง่ ท่ี 2 คือ ขา Command ตำแหนง่ ท่ี 3 คือ ขา vibration motor power ตำแหนง่ ท่ี 4 คือ ขา ground ตำแหนง่ ที่ 5 คือ ขา power ตำแหนง่ ที่ 6 คือ ขา attention ตำแหน่งท่ี 7 คือ ขา clock ตำแหน่งที่ 8 คือ ขา unknown ตำแหนง่ ที่ 9 คือ ขา acknowledge
117 *** ในการต่อรวมกับบอร์ดไมโครคอนโทรลเลอร์อาดุยโน่จะต้องใช้โมดูลแปลงขาจึงจะใช้งานได้ *** การทดสอบการเชื่อมต่อระหว่างบอร์ดไมโครคอนโทรลเลอร์อาดุยโน่กับจอยสติ๊กพีเอสทู ให้ทำ การต่อวงจรตามรูปท่ี 6.40 โดยตอ่ ผ่านโมดูลแปลงขาสำหรบั ใช้งานกับบอรด์ อาดยุ โน่ แสดงดงั รูปท่ี 6.41 รปู ที่ 6.40 การต่อวงจรทดสอบการเช่ือมต่อ รูปท่ี 6.41 โมดลู แปลงขาสำหรับบอร์ดไมโครคอนโทรลเลอร์อาดยุ โน่ ที่มา : https://www.arduitronics.com
118 ใหท้ ำการเขยี นโปรแกรมดังต่อไปน้เี พ่อื ทดสอบการเช่ือมต่อ #include <PS2X_lib.h> //การเรียกใชไ้ ลบรารี่ PS2 PS2X ps2x; // สร้างการเช่อื มต่อจอยสต๊ิก PS2 ชอื่ ตัวแปร ps2x int error = 0; //ประกาศตัวแปรช่อื error ให้มคี ่าเท่ากับ 0 byte vibrate = 0; //ประกาศตวั แปรชอื่ vibrate ใหม้ คี า่ เท่ากบั 0 void setup() { Serial.begin(57600); error = ps2x.config_gamepad(13,11,10,12, true, true); //ตง้ั ค่าขาและค่าเร่มิ ต้นในการใชง้ าน } void loop() { ps2x.read_gamepad(false, vibrate); //กำหนดใหอ้ า่ นคา่ จากจอยสติ๊ก PS2 if(ps2x.Button(PSB_PAD_UP)) //กำหนดเงื่อนไขคา่ ท่ีอา่ นจากตัวแปร ps2x Serial.println(\"Up is pressed\"); //ถ้ามีการถกู กดให้แสดงข้อความ”Up is pressed” if(ps2x.Button(PSB_PAD_RIGHT)) //กำหนดเง่ือนไขค่าที่อ่านจากตวั แปร ps2x Serial.println(\"Right is pressed\"); //ถ้ามกี ารถูกกดใหแ้ สดงข้อความ”Right is pressed” if(ps2x.Button(PSB_PAD_LEFT)) //กำหนดเงื่อนไขคา่ ที่อ่านจากตวั แปร ps2x Serial.println(\"LEFT is pressed\"); //ถา้ มีการถกู กดใหแ้ สดงข้อความ”LEFT is pressed” if(ps2x.Button(PSB_PAD_DOWN)) //กำหนดเงื่อนไขค่าที่อ่านจากตัวแปร ps2x Serial.println(\"DOWN is pressed\"); //ถ้ามกี ารถกู กดให้แสดงข้อความ”DOWN is pressed” if(ps2x.Button(PSB_START)) //กำหนดเง่ือนไขคา่ ท่ีอ่านจากตวั แปร ps2x Serial.println(\"Start is pressed\"); //ถา้ มีการถูกกดให้แสดงข้อความ”Start is pressed” if(ps2x.Button(PSB_SELECT)) //กำหนดเงื่อนไขคา่ ท่ีอา่ นจากตวั แปร ps2x Serial.println(\"Select is pressed\"); //ถ้ามีการถกู กดใหแ้ สดงข้อความ”Select is pressed” if(ps2x.Button(PSB_GREEN)) //กำหนดเง่ือนไขค่าท่ีอา่ นจากตัวแปร ps2x
119 Serial.println(\"Triangle is pressed\"); //ถ้ามีการถูกกดให้แสดงข้อความ”Triangle is pressed” if(ps2x.Button(PSB_RED)) //กำหนดเง่ือนไขค่าท่ีอา่ นจากตัวแปร ps2x Serial.println(\"Circle is pressed\"); //ถ้ามกี ารถูกกดใหแ้ สดงข้อความ”Circle is pressed” if(ps2x.Button(PSB_PINK)) //กำหนดเง่ือนไขค่าท่ีอ่านจากตวั แปร ps2x Serial.println(\"Square is pressed\"); //ถา้ มกี ารถกู กดให้แสดงข้อความ”Square is pressed” if(ps2x.Button(PSB_BLUE)) //กำหนดเงื่อนไขคา่ ที่อา่ นจากตวั แปร ps2x Serial.println(\"X is pressed\"); //ถา้ มกี ารถกู กดใหแ้ สดงข้อความ”X is pressed” delay(50); } เมอื่ ทดลองกดป่มุ จะได้ข้อมูลทีจ่ อมอนเิ ตอรต์ ามรายละเอยี ดในตารางต่อไปนี้ ปุ่ม ข้อความ Triangle is pressed Circle is pressed X is pressed Square is pressed Start is pressed
120 Select is pressed Up is pressed DOWN is pressed LEFT is pressed RIGHT is pressed ในการต่อวงจรใช้งานจอยสติก๊ พีเอสทรู ว่ มกับบอร์ดไมโครคอนโทรลเลอรใ์ นการควบคุมมอเตอร์ 1 ตัวแสดงดังรูปที่ 6.42 โดยการควบคมุ จะใช้ปุ่มการเคลื่อนที่ แสดงดังรูปที่ 6.43 ในการควบคุมการทำงาน ของมอเตอร์
121 รูปท่ี 6.42 การต่อวงจรจอยสติก๊ พีเอสทคู วบคุมมอเตอร์ รูปที่ 6.43 แสดงปมุ่ สำหรบั การควบคมุ ทศิ ทางมอเตอร์
122 สามารถเขียนโปรแกรมควบคุมมอเตอร์ได้ดงั ต่อไปนี้ #include <PS2X_lib.h> PS2X ps2x; int error = 0; byte vibrate = 0; void setup() { pinMode(4,OUTPUT); pinMode(5,OUTPUT); Serial.begin(57600); error = ps2x.config_gamepad(13,11,10,12, true, true); } void loop() { ps2x.read_gamepad(false, vibrate); if(ps2x.Button(PSB_PAD_UP)) { Serial.print(\"Up is : \"); Serial.println(ps2x.Analog(PSAB_PAD_UP), DEC); digitalWrite(4,HIGH); digitalWrite(5,LOW); } if(ps2x.Button(PSB_PAD_DOWN)) { Serial.print(\"DOWN is : \"); Serial.println(ps2x.Analog(PSAB_PAD_DOWN), DEC); digitalWrite(4,LOW); digitalWrite(5,HIGH); } if( ps2x.Analog(PSAB_PAD_DOWN) == 0 && ps2x.Analog(PSAB_PAD_UP) == 0 ) { digitalWrite(4,LOW);
123 digitalWrite(5,LOW); } delay(50); } 2) การควบคุมหุ่นยนตด์ ้วยมอื แบบจอยสติก๊ พีเอสทแู บบไร้สาย ในการควบคุมหุ่นยนต์ด้วยมือแบบจอยสติ๊กพีเอสทูแบบไร้สายหรือไวเลส (Wireless) จะมสี ว่ นทีเ่ ปน็ อปุ กรณใ์ นการส่งสญั ญาณไวเลสเพิ่มเข้ามาโดยมีลักษณะตามรูปที่ 6.44 โดยลักษณะการต่อ สายและโปรแกรมการใชจ้ ะเหมือนกับจอยสติ๊กพีเอสทูแบบมสี าย แสดงตามรปู ท่ี 6.45 รปู ที่ 6.44 จอยสติ๊กพเี อสทแู บบไร้สาย(Wireless) ท่มี า : www.myarduino.net
124 รปู ที่ 6.45 การต่อสายกบั ตำแหน่งขาของจอยสต๊ิกพเี อสทูแบบไรส้ าย 3) การควบคุมหนุ่ ยนต์ด้วยมอื แบบโมดลู จอยสตก๊ิ การควบคมุ หุ่นยนต์ด้วยมอื แบบโมดลู จอยสติ๊ก ใชก้ ารควบคมุ คนั โยกท่ีจอยสติก๊ เพอ่ื ควบคุมทิศ ทางการเคล่อื นทข่ี องมอเตอร์ โดยลกั ษณะของโมดูลจอยสต๊กิ และรายละเอยี ดแสดงดงั รูปท่ี 6.46 รูปที่ 6.46 โมดลู จอยสติ๊ก ทม่ี า : www.arduinothai.com
125 1 2 3 4 5 รปู ท่ี 6.47 ตำแหน่งขาใช้งาน จากรปู ท่ี 6.47 อธบิ ายตำแหนง่ ของขาดงั น้ี ตำแหนง่ ที่ 1 เป็นขาสำหรับแหล่งจา่ ยขั้วลบ(ground) ตำแหน่งท่ี 2 เปน็ ขาสำหรบั แหล่งจา่ ยไฟขว้ั บวก 5 โวลต์ ตำแหน่งท่ี 3 เปน็ ขาสำหรบั อ่านคา่ ตำแหน่งของแกน X ตำแหน่งท่ี 4 เปน็ ขาสำหรบั อ่านค่าตำแหน่งของแกน Y ตำแหน่งท่ี 5 เป็นขาสวิตช์ ตำแหน่งทิศทางการเคลื่อนที่แสดงดังรูปที่ 6.48 และวงจรการต่อใช้งานควบคุมมอเตอร์แสดงดัง รปู ที่ 6.49 โดยการเคลอ่ื นที่จะนำทิศทางแกน X และแกน Y มาเปน็ ตัวกำหนดการควบคุมมอเตอร์ รปู ที่ 6.48 แสดงทิศทางระยะการเคลื่อนที่เป็นค่าสญั ญาณแอนะล็อก
126 รูปท่ี 6.49 วงจรการควบคุมมอเตอร์ด้วยโมดูลจอยสต๊ิก โดยการออกแบบโปรแกรมจะใช้การกำหนดตำแหนง่ ของแนวแกน X และ Y มาควบคมุ การ เคลอ่ื นทใี่ นการควบคมุ นจ้ี ะใชก้ ารควบคมุ ให้ห่นุ ยนตเ์ คล่ือนท่ีเดนิ หนา้ และเคลื่อนที่ถอยหลัง โดยกำหนด แกน X และแกน Y เป็นค่าแอนะลอ็ กดังน้ี การเคลอื่ นที่ แกน X แกน Y เดนิ หน้า 0 511 ถอยหลัง 511 1023
127 โดยสามารถเขยี นโปรแกรมควบคมุ ได้ดงั นี้ int X = A0; //ประกาศตวั แปรช่ือ X ใหม้ คี ่าเทา่ กบั ขา A0 int XValue = 0; //ประกาศตวั แปรชือ่ XValue ให้มีค่าเทา่ กบั 0 int Y = A1; //ประกาศตัวแปรชอ่ื Y ใหม้ ีค่าเทา่ กับขา A1 int YValue = 0; //ประกาศตัวแปรชอ่ื YValue ให้มคี ่าเทา่ กบั 0 int SW = A2; //ประกาศตัวแปรชื่อ SW ให้มีค่าเท่ากบั ขา A2 int SWValue = 0; //ประกาศตัวแปรชอื่ SWValue ให้มคี า่ เทา่ กบั 0 void setup() //กำหนดการเร่ิมการส่ือสารท่ี 9600 บิตต่อวินาที { //ตง้ั คา่ ขา 10 ให้เป็นเอาต์พุต //ตั้งคา่ ขา 11 ใหเ้ ปน็ เอาต์พุต Serial.begin(9600); //ต้ังคา่ ขา 12 ให้เป็นเอาต์พุต pinMode(10,OUTPUT); //ต้งั ค่าขา 13 ใหเ้ ป็นเอาตพ์ ุต pinMode(11,OUTPUT); pinMode(12,OUTPUT); //กำหนดใหต้ ัวแปร XValue อา่ นคา่ จากตัวแปร X pinMode(13,OUTPUT); //กำหนดใหต้ วั แปร YValue อา่ นคา่ จากตวั แปร Y } //กำหนดใหต้ ัวแปร SWValue อ่านค่าจากตวั แปร void loop() { XValue = analogRead(X); YValue = analogRead(Y); SWValue = analogRead(SW); SW if(XValue==0 && YValue>=511) //กำหนดเงื่อนไขถา้ ตัวแปร XValue เท่ากับ 0 และ //ตัวแปร YValue มากกวา่ หรอื เทา่ กบั 511 { digitalWrite(10,HIGH); //สั่งใหข้ า 10 มสี ถานะเปน็ HIGH digitalWrite(11,LOW); //ส่งั ใหข้ า 11 มีสถานะเป็น LOW digitalWrite(12,HIGH); //ส่งั ให้ขา 12 มีสถานะเป็น HIGH digitalWrite(13,LOW); //สงั่ ให้ขา 13 มสี ถานะเป็น LOW }
128 else //ถ้าไม่เป็นไปตามเงื่อนไข { digitalWrite(10,LOW); //สง่ั ให้ขา 10 มสี ถานะเปน็ LOW digitalWrite(11,LOW); //สง่ั ใหข้ า 11 มีสถานะเปน็ LOW digitalWrite(12,LOW); //ส่ังให้ขา 12 มีสถานะเป็น LOW digitalWrite(13,LOW); //สง่ั ใหข้ า 13 มสี ถานะเป็น LOW } if(XValue==1023 && YValue>=511) //กำหนดเง่ือนไขถา้ ตัวแปร XValue เทา่ กบั 1023 และ //ตัวแปร YValue มากกวา่ หรือเท่ากับ 511 { digitalWrite(10,LOW); //สั่งใหข้ า 10 มสี ถานะเปน็ LOW digitalWrite(11,HIGH); //สั่งให้ขา 11 มสี ถานะเป็น HIGH digitalWrite(12,LOW); //สั่งให้ขา 12 มสี ถานะเปน็ LOW digitalWrite(13,HIGH); //สั่งให้ขา 13 มสี ถานะเปน็ HIGH } else { digitalWrite(10,LOW); //สัง่ ให้ขา 10 มีสถานะเปน็ LOW digitalWrite(11,LOW); //สั่งให้ขา 11 มีสถานะเปน็ LOW digitalWrite(12,LOW); //สง่ั ใหข้ า 12 มีสถานะเป็น LOW digitalWrite(13,LOW); //สง่ั ให้ขา 13 มีสถานะเปน็ LOW } delay(200); //หน่วงเวลา 200 มลิ ลวิ นิ าที } 4) การควบคุมมอเตอร์ 1 ตวั ด้วยมือผ่านสมาร์ทโฟน ในการควบคมุ มอเตอร์ดว้ ยมือผ่านสมาร์ทโฟนผา่ นสัญญาณบลูทธู จะต้องเรียนรู้การเขียน แอปพลิเคชันในการควบคุมโดยโปรแกรมที่ใช้เขียนจะเป็นโปรแกรมแอปอินเวอร์เตอร์ 2 (App inventor 2) โดยลำดบั ข้ันตอนการเขียนมดี ังน้ี 1) เขา้ เวบ็ ไซต์ “ http://ai2.appinventor.mit.edu/ ” โดยจะต้องลงชื่อเข้าใชโ้ ดยใช้ อีเมล์ของ google หรอื gmail แสดงดังรปู ที่ 6.50
129 รปู ที่ 6.50 หนา้ การเขา้ ใชง้ านโปรแกรมแอปอนิ เวอรเ์ ตอร์ 2 2) เมื่อเข้าสู่หน้าต่างของ แอปอินเวอร์เตอร์ 2 ให้ทำการคลิกที่ปุ่ม I accept the term of service ตามรูปที่ 6.51 และคลิกที่ Take surver later แสดงดังรูปที่ 6.52 คลกิ รปู ที่ 6.51 หนา้ ตา่ งแอปอินเวอรเ์ ตอร์ 2
130 คลิก รูปที่ 6.52 หน้าตา่ งการคลิกเพ่อื เขา้ หน้าตา่ งของแอปอนิ เวอรเ์ ตอร์ 2 ให้คลิกทปี่ ุ่ม continue ตามรูปท่ี 6.53 คลกิ รูปที่ 6.53 การคลิกเพื่อเขา้ หนา้ ของแอปอนิ เวอร์เตอร์ 2
131 3) ใหค้ ลิกท่ีปุ่ม Strart New Project เพื่อสร้างงานแสดงดังรปู ท่ี 6.54 และตัง้ ช่อื งานตาม รปู ที่ 6.55 คลิก รปู ท่ี 6.54 แสดงการคลิกเพื่อเรม่ิ เขียนโปรแกรม รปู ที่ 6.55 หน้าต่างการตงั้ ช่ือช้นิ งาน
132 เมอื่ ตงั้ ช่ือเสร็จจะไดห้ นา้ ของแอปพลิเคชนั ตามรูปที่ 6.56 รูปที่ 6.56 หนา้ ต่างการสรา้ งแอปพลเิ คชนั 4) ใหท้ ำการสรา้ งปุ่มกดจำนวน 1 ปุ่มโดยการลากมาวางในหนา้ ต่างแสดงดงั รปู ท่ี 6.57 และตัง้ ช่ือว่า “control” ทำการเปล่ยี นชอ่ื ปุม่ ตามรปู ท่ี 6.58 รูปท่ี 6.57 การสรา้ งปุ่มกดชื่อป่มุ “Control”
133 5) ทำการลากฟงั กช์ นั สำหรับการเชื่อมต่อบลทู ธู โดยการลากแล้ววางในหน้าตา่ ง แอปพลเิ คชัน แสดงดงั รูปท่ี 6.58 และ 6.59 1 2 รูปท่ี 6.58 ฟังกช์ นั การเชือ่ มตอ่ บลูทธู รปู ท่ี 6.59 การวางฟงั ก์ชนั การเช่ือมต่อบลูทธู
134 6) ทำการลากฟังกช์ ัน ListPicker มาวางเพ่ือใชแ้ สดงชื่อบลูทธู สำหรบั การเชื่อมต่อ แสดงดัง รูปที่ 6.60 และรูปที่ 6.61 และเปล่ยี นชอ่ื ปุ่มเป็น “Bluetooth” รปู ท่ี 6.60 การเลือกฟังก์ชนั ListPicker รปู ท่ี 6.61 แสดง ListPicker สำหรับแสดงช่ือบลูทูธสำหรบั เช่ือมต่อ 7) ลำดับตอ่ ไปจะทำการเขยี นโปรแกรมในการควบคุมปมุ่ กด แสดงดังรปู ที่ 6.62
135 คลกิ รปู ที่ 6.62 การคลกิ เพอ่ื เขา้ หน้าตา่ งการเขยี นคำส่งั ควบคมุ ปุ่มกด 8) คำสัง่ แรกในการควบคุมป่มุ Bluetooth โดยการลากคำส่งั ไปวางตามรูปท่ี 6.63 และ รปู ท่ี 6.64 เพื่อตง้ั ค่าในการค้นหาอุปกรณ์ในการเชื่อมต่อ 12 รูปท่ี 6.64 คำสงั่ ควบคมุ ปุ่ม Bluetooth
136 รูปท่ี 6.65 การวางคำสั่งในหน้าต่าง กำหนดเพ่ือเรียกใชอ้ ปุ กรณ์ในการเช่อื มต่อดังรปู ท่ี 6.65 , 6.66 12 รปู ท่ี 6.65 แสดงการเลือกคำสงั่ ในการควบคุม รูปท่ี 6.66 แสดงการเช่อื มต่อคำสงั่ เพ่อื ใชง้ าน
137 เลือกคำสั่งในการแสดงตำแหนง่ บลูทธู ของอุปกรณใ์ นการเช่ือมต่อ แสดงดังรปู ท่ี 6.67 และ 6.68 12 รูปท่ี 6.67 การเลือกคำสั่งสำหรบั แสดงตำแหน่งบลูทธู รูปที่ 6.68 แสดงการเชือ่ มต่อคำสง่ั การแสดงตำแหน่งบลูทูธ 9) สร้างคำสั่งสำหรับการเลือกการเช่อื มตอ่ บลูทธู กับอปุ กรณ์ โดยเลือกคำสัง่ ตามรูปที่ 6.69 และรปู ที่ 6.70
138 12 รปู ที่ 6.69 การเรยี กใช้คำสั่งเช่อื มตอ่ บลูทูธ รปู ที่ 6.70 การวางคำส่งั หลังการเช่อื มต่อบลูทูธ
139 เรียกใช้คำส่งั เพื่อเลือกอุปกรณ์ในการเช่ือมต่อบลูทธู และเชื่อมต่อกับคำสั่งเลือกอุปกรณ์ แสดงดัง รูปท่ี 6.71 และ 6.72 1 2 รปู ท่ี 6.73 แสดงการเลอื กคำส่ัง รูปท่ี 6.74 การเชื่อมตอ่ คำสั่ง ทำการเลอื กคำส่ังการสงั่ สำหรับเลอื กตำแหน่งของบลูทธู แสดงดงั รปู ที่ 6.75 และ 6.76
140 1 2 รูปที่ 6.75 การเลือกคำสัง่ ในการเช่ือมตำแหนง่ ของบลทู ูธ 1 2 รปู ที่ 6.76 การเลือกคำสงั่ ในการเลอื กตำแหน่งบลทู ธู ที่เลือก รปู ที่ 6.77 การเชอื่ มตอ่ คำส่ัง
141 10) ลำดับต่อไปจะทำการเขียนคำส่ังในการควบคุมปุม่ กดเพ่ือใชใ้ นการควบคมุ มอเตอร์โดยจะใชก้ ารสมั ผสั ปมุ่ เพื่อใชค้ วบคมุ โดยการเลือกคำสง่ั ใช้ควบคุมแสดงดงั รปู ที่ 6.78 1 2 รปู ท่ี 6.78 การเลือกคำสัง่ ควบคมุ ปมุ่ แบบสัมผสั ในการกด ลำดบั ถดั ไปใหเ้ ลอื กคำสั่งในการสง่ ตวั อกั ษรเพื่อใชใ้ นการควบคมุ มอเตอร์แสดงดังรปู ที่ 6.79 12 รูปท่ี 6.79 การเลือกคำสัง่ การส่งตัวอกั ษรออกทางบลูทูธ
142 และทำการเลอื กคำสง่ั ในการส่งตัวอักษรและมาเช่ือมต่อดงั รปู ท่ี 6.80 และรูปท่ี 6.81 โดยจะส่ง ตวั อักษร “N” เพ่ือแสดงการสงั่ ให้มอเตอรห์ มนุ 1 2 รูปที่ 6.80 แสดงการเลือกคำสง่ั การส่งคา่ ออกทางบลทู ธู รูปที่ 6.81 การเช่ือมตอ่ คำสั่งในการสง่ ตัวอักษร “N”
143 11) หลงั จากทำคำสั่งในการกดปมุ่ เสรจ็ สน้ิ จะเป็นคำสง่ั ทำงานขณะการไม่ได้กดปุ่มโดยทำ ลกั ษณะเดียวกบั คำสั่งในการกดปมุ่ ตามรูปท่ี 6.82 โดยสง่ ตัวอกั ษร “F” เพื่อหยุดการทำงานของมอเตอร์ รปู ที่ 6.82 แสดงการเขียนคำสั่งควบคมุ แอปพลเิ คชนั เปิดปดิ หลอดไฟ 12) เมื่อทำการเขียนโปรแกรมเสร็จเรียบร้อย จะทำการสร้างเป็นแอปพลิเคชันสำหรับสมาร์ท โฟนระบบปฏิบัตกิ าร แอนดรอยด์ โดยการดาวน์โหลดสามารถทำได้ 2 แบบ คอื ทำเปน็ ไฟล์แอปพลิเคชัน และทำเป็นรหัสคิวอาร์โค้ด ในตัวอย่างจะสร้างเป็นคิวอาร์โค้ดและดาวน์โหลดเข้าสมาร์ทโฟน ซึ่งลักษณะ การสรา้ งแสดงดงั รูปท่ี 6.83 และรูปท่ี 6.84 1 2 รูปที่ 6.83 การเลือกสรา้ งแอปพลิเคชันด้วยควิ อารโ์ คด้
144 รปู ท่ี 6.84 คิวอาร์โคด้ สำหรับการตดิ ต้งั แอปพลเิ คชนั เมื่อดาวน์โหลดเสร็จสิ้นใหท้ ำการตดิ ต้ังไปยงั สมาร์ทโฟน และเปิดแอปพลิเคชันจะได้หน้าต่างของ แอปพลิเคชันแสดงดงั รปู ท่ี 6.85 รูปท่ี 6.86 หนา้ ต่างของแอปพลิเคชนั
Search
Read the Text Version
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176
- 177
- 178
- 179
- 180
- 181
- 182
- 183
- 184
- 185
- 186
- 187
- 188
- 189
- 190
- 191
- 192
- 193
- 194
- 195
- 196
- 197
- 198
- 199
- 200
- 201
- 202
- 203
- 204
- 205
- 206
- 207
- 208
- 209
- 210
- 211
- 212
- 213
- 214
- 215
- 216
- 217
- 218
- 219
- 220
- 221
- 222
- 223
- 224
- 225
- 226
- 227
- 228
- 229
- 230
- 231
- 232
- 233
- 234
- 235
- 236
- 237
- 238
- 239
- 240
- 241
- 242
- 243
- 244
- 245
- 246
- 247
- 248
- 249
- 250
- 251
- 252
- 253
- 254
- 255
- 256
- 257
- 258
- 259
- 260
- 261
- 262
- 263
- 264
- 265
- 266
- 267
- 268
- 269
- 270
- 271
- 272
- 273
- 274
- 275
- 276
- 277
- 278
- 279
- 280
- 281
- 282
- 283
- 284
- 285
- 286
- 287
- 288
- 289
- 290
- 291
- 292
- 293
- 294
- 295
- 296
- 297
- 298