โปรเจค หุ่นยนต์เดินตามเส้น 2 เซ็นเซอร์ Arduino
เซ็นเซอร์แบบนี้จะมีช่วงในการทำงาน หรือ ระยะในการตรวจจับจะได้ใกล้กว่าแบบ Opposed mode ซึ่งในสภาวะการทำงานปกติ พื้นเเป็นสีขาว ตัวรับ Receiver จะสามารถรับสัญญาณแสงจากตัวส่ง Emitter ได้ตลอดเวลา เนื่องจากลำแสง สะท้อนกลับมาได้ จะแสดงค่า เป็น 0
และ เมื่อพื้นเป็นสีดำ แสงสะท้อนกลับมาไม่ได้ จึงทำให้ตัวรับ Receiver ไม่สามารถรับลำแสงที่จะสะท้อนกลับมาได้ จะแสดงค่า เป็น 1
การทำงานของ หุ่นยนต์เดินตามเส้น Arduino
หากเซ็นเซอร์ซ้ายมาพบพื้นสีดำ และ เซ็นเซอร์ขวาพบพื้นสีขาว ( 1 , 0 ) ให้หุ่นยนต์เลี้ยวไปทางด้านซ้าย
โดยสรุป มี 4 เงื่อนไขที่ หุ่นยนต์เดินตามเส้น Arduino รับค่าจากเซ็นเซอร์ซ้ายและขวา
คือ (0 ,0) | (0 ,1) | (1 , 0) | (1 ,1 ) แสดงตามตารางด้านล่าง
คือ (0 ,0) | (0 ,1) | (1 , 0) | (1 ,1 ) แสดงตามตารางด้านล่าง
อินพุต
|
เอาต์พุต
|
การเคลื่อนที่ของหุ่นยนต์
|
||||
เซ็นเซอร์ซ้าย
|
เซ็นเซอร์ขวา
|
มอเตอร์ซ้าย
|
มอเตอร์ขวา
|
|||
LS
|
RS
|
LM1
|
LM2
|
RM1
|
RM2
|
|
0
|
0
|
0
|
0
|
0
|
0
|
เดินหน้า
|
0
|
1
|
1
|
0
|
0
|
0
|
เลี้ยวขวา
|
1
|
0
|
0
|
0
|
1
|
0
|
เลี้ยวซ้าย |
1
|
1
|
1
|
0
|
1
|
0
|
หยุด
|
เราจะสร้าง หุ่นยนต์เดินตามเส้น Arduino และ เขียนโปรแกรมตามเงื่อนไขที่แสดงในตารางด้านบน
อุปกรณ์ที่ต้องใช้ก็คือ
1. 2WD Smart Robot Car Chassis Kits
2. Arduino UNO R3 - Made in italy
3. IR Infrared Obstacle Avoidance Sensor Module 2 ชิ้น
4. Motor Drive Module L298N
5. สาย Jumper Female to Male ยาว 20cm.
6. สาย Jumper Male to Male ยาว 20cm.
7. รางถ่านแบบ 18650 ใส่ถ่าน 2 ก้อน
8. แบตเตอรี่ลิเธียม 18650 จำนวน 2 ก้อน
9. เสารองแผ่นพีซีบีโลหะแบบเหลี่ยม 6 mm
10. สกรูหัวกลมน็อตตัวเมีย ขนาด 3มม ยาว12 มม.
11. Mounting Bracket for HC-SR04 Ultrasonic Module แบบสั้น
12. ตัดแผ่นอะคริลิค หนา 3 มิลลิเมตร ขนาด 3 x 10 เซ็นติเมตร
เริ่มต้นด้วยการ ประกอบ Smart Robot Car Chassis Kit
ต่อวงจร Arduino UNO กับ L298N Motor Driver ตามรูปการต่อวงวงจร
ยึดเข้ากับ Mounting Bracket for HC-SR04 Ultrasonic Module แบบสั้น
ยึดเข้ากับ ตัวหุ่นยนต์
เมื่อต่อวงจร หุ่นยนต์เดินตามเส้น เสร็จ
ต่อสาย USB จากคอมพิวเตอร์ เข้ากับ Arduino UNO R3 ปรับ ระยะการตรวจจับ
โดย เมื่อ เซ็นเซอร์ อยู่ที่พื้นปรกติ ให้ไฟ LED ติด 2 ดวง และ เมื่อ เข้าไปในพื้นที่ สีดำ ให้ ไฟ LED ติด 1 ดวง
ถาพรวมเมื่อต่อเสร็จแล้ว
เปิดโปรแกรม Arduino (IDE) และ Upload โค้ดนี้ ไปยัง บอร์ด Arduino UNO R3
/*-------definning Inputs------*/
int LS = 2; // left sensor
int RS = 3; // right sensor
/*-------definning Outputs------*/
int LM1 = 4; // left motor
int LM2 = 5; // left motor
int RM1 = 6; // right motor
int RM2 = 7; // right motor
/*-------PWM ควบคุมความเร็วมอเตอร์-----*/
int PWM1 = 10; // PWM left motor
int PWM2 = 11; // PWM right motor
int SPEED = 90; // Speed PWM สามารถปรับความเร็วได้ถึง 255
void setup()
{
pinMode(LS, INPUT);
pinMode(RS, INPUT);
pinMode(LM1, OUTPUT);
pinMode(LM2, OUTPUT);
pinMode(RM1, OUTPUT);
pinMode(RM2, OUTPUT);
pinMode(PWM1, OUTPUT);
pinMode(PWM2, OUTPUT);
}
void loop()
{
if (!(digitalRead(LS)) && !(digitalRead(RS))) // Move Forward
{
analogWrite(PWM1, SPEED);
digitalWrite(LM1, HIGH);
digitalWrite(LM2, LOW);
analogWrite(PWM2, SPEED);
digitalWrite(RM1, HIGH);
digitalWrite(RM2, LOW);
}
if (!(digitalRead(LS)) && digitalRead(RS)) // Turn right
{
digitalWrite(LM1, LOW);
digitalWrite(LM2, LOW);
analogWrite(PWM2, SPEED);
digitalWrite(RM1, HIGH);
digitalWrite(RM2, LOW);
}
if (digitalRead(LS) && !(digitalRead(RS))) // turn left
{
analogWrite(PWM1, SPEED);
digitalWrite(LM1, HIGH);
digitalWrite(LM2, LOW);
digitalWrite(RM1, LOW);
digitalWrite(RM2, LOW);
}
if (digitalRead(LS) && digitalRead(RS)) // stop
{
digitalWrite(LM1, LOW);
digitalWrite(LM2, LOW);
digitalWrite(RM1, LOW);
digitalWrite(RM2, LOW);
}
}
ไม่มีความคิดเห็น:
แสดงความคิดเห็น