เปิดโปรแกรม Arduino (IDE) และ Upload โค้ดนี้ ไปยัง บอร์ด Arduino UNO R3
/*read analog data from A1-A3 and send to PC via Serial port*/
int sensor_L , sensor_C , sensor_R ; //optical sensor valuesString tmp ;int ADC_stabilize = 5 ;
void setup ( ) { // initialize the serial communication: Serial . begin ( 9600 ) ;}
void loop ( ) { //take a snapshot sensor_L = digitalRead ( A1 ) ; delay ( ADC_stabilize ) ; //stabilize sensor_L = digitalRead ( A1 ) ; delay ( ADC_stabilize ) ;
sensor_C = digitalRead ( A2 ) ; delay ( ADC_stabilize ) ; sensor_C = digitalRead ( A2 ) ; delay ( ADC_stabilize ) ;
sensor_R = digitalRead ( A3 ) ; delay ( ADC_stabilize ) ; sensor_R = digitalRead ( A3 ) ; delay ( ADC_stabilize ) ;
tmp = "L=" + String ( sensor_L ) + " C=" + String ( sensor_C ) + " R=" + String ( sensor_R ) ;
// send the value of analog inputs: Serial . println ( tmp ) ;
// wait a bit for next reading delay ( 1000 ) ; //1000=1 sec
}
นำเทปพันสายไฟสีดำ แปะที่พื้นสีขาว ให้ เซ็นเซอร์ ทั้ง 3 ตัว ของหุ่นยนต์อยู่บริเวณ พื้นสีขาว
ให้ ไฟ LED สีแดงทั้ง 3 ตัว ติด
แล้วไปที่ Tools -> Serial Monitor
เลือก Both NL & CR และ เลือก 9600 baud
Serial Monitor จะแสดง L=0 C=0 R=0
และเมื่อ เซ็นเซอร์ซ้ายของหุ่นยนต์ อยู่บริเวณเทปสีดำ
และ เซ็นเซอร์ขวา และ เซ็นเซอร์กลาง อยู่บริเวณพื้นสีขาว
ไฟ LED สีแดง ของ เซ็นเซอร์ซ้าย จะดับ และ Serial Monitor จะแสดง L=1 C=0 R=0
และเมื่อ เซ็นเซอร์กลางของหุ่นยนต์ อยู่บริเวณเทปสีดำ
และ เซ็นเซอร์ซ้าย และ เซ็นเซอร์ขวา อยู่บริเวณพื้นสีขาว
ไฟ LED สีแดง ของ เซ็นเซอร์ตัวกลาง จะดับ และ Serial Monitor จะแสดง L=0 C=1 R=0
และเมื่อ เซ็นเซอร์ขวาของหุ่นยนต์ อยู่บริเวณเทปสีดำ
และ เซ็นเซอร์ซ้าย และ เซ็นเซอร์กลาง อยู่บริเวณพื้นสีขาว
ไฟ LED สีแดง ของ เซ็นเซอร์ขวา จะดับ และ Serial Monitor จะแสดง L=0 C=0 R=1
แสดงว่า การเชื่อมต่อ เซ็นเซอร์ ทั้ง 3 ตัว นั้นถูกต้อง และ พร้อมใช้งานแล้ว
*** ถ้าไม่ถูกต้อง ให้ตรวจสอบการเชื่อมต่อสาย และ ทดลอง ปรับค่าการรับแสง โดย ใช้ไขควงหมุน ตัว R ปรับค่าได้ แบบ trimpot สี่เหลี่ยมสีฟ้า ***
Upload โค้ดนี้ ไปยัง บอร์ด Arduino UNO R3
/*
Line Following Robot 3 Sensors with Arduino UNO + L298P For more details visit: https://robotsiam.blogspot.com/2018/01/3-arduino-l298p.html
*/
/*-------definning Outputs------*/
int MA1 = 12; // Motor A1int MA2 = 3; // Motor A2int PWM_A = 10; // Speed Motor A
int MB1 = 13; // Motor B1int MB2 = 8; // Motor B2int PWM_B = 11; // Speed Motor B
int SPEED = 110; // Speed PWM สามารถปรับความเร็วได้ถึง 0 - 255
/*-------definning Sensor------*/
int sensor[3] = {0, 0, 0};
void setup() {
//Setup Channel A pinMode(12, OUTPUT); //Motor A1 pinMode(3, OUTPUT); //Motor A2 pinMode(10, OUTPUT); //Speed PWM Motor A
//Setup Channel B pinMode(13, OUTPUT); //Motor B1 pinMode(8, OUTPUT); //Motor B2 pinMode(11, OUTPUT); //Speed PWM Motor B
}
void loop() {
sensor[0] = digitalRead(A1); sensor[1] = digitalRead(A2); sensor[2] = digitalRead(A3);
if ((sensor[0] == 0) && (sensor[1] == 1) && (sensor[2] == 0) ) Forward(1); else if ((sensor[0] == 0) && (sensor[1] == 0) && (sensor[2] == 1) ) turnRight(10); else if ((sensor[0] == 0) && (sensor[1] == 1) && (sensor[2] == 1) ) turnRight(200); else if ((sensor[0] == 1) && (sensor[1] == 0) && (sensor[2] == 0) ) turnLeft(10); else if ((sensor[0] == 1) && (sensor[1] == 1) && (sensor[2] == 0) ) turnLeft(200);
else Forward(1);
}
void Backward(int time){ digitalWrite(MA1, LOW); digitalWrite(MA2, HIGH); analogWrite(PWM_A, SPEED);
digitalWrite(MB1, HIGH); digitalWrite(MB2, LOW); analogWrite(PWM_B, SPEED);
delay(time);}
void Forward (int time){ digitalWrite(MA1, HIGH); digitalWrite(MA2, LOW); analogWrite(PWM_A, SPEED);
digitalWrite(MB1, LOW); digitalWrite(MB2, HIGH); analogWrite(PWM_B, SPEED);
delay(time);}
void turnLeft(int time){ digitalWrite(MA1, HIGH); digitalWrite(MA2, LOW); analogWrite(PWM_A, SPEED);
digitalWrite(MB1, LOW); digitalWrite(MB2, LOW); analogWrite(PWM_B, 0);
delay(time);}
void turnRight(int time){ digitalWrite(MA1, LOW); digitalWrite(MA2, LOW); analogWrite(PWM_A, 0);
digitalWrite(MB1, LOW); digitalWrite(MB2, HIGH); analogWrite(PWM_B, SPEED);
delay(time);}
void Stop(int time){ digitalWrite(MA1, LOW); digitalWrite(MA2, LOW); analogWrite(PWM_A, 0);
digitalWrite(MB1, LOW); digitalWrite(MB2, LOW); analogWrite(PWM_B, 0);
delay(time);
}
ใส่ถ่าน แบบ 18650 จำนวน 2 ก้อน เข้าที่รางถ่าน เปิดเพาเวอร์สวิตซ์สำหรับเปิดปิด (ON / OFF ) ทดสอบการทำงาน กับ สนาม เส้นสีดํา พื้นสีขาว ตาม วีดีโอผลลัพธ์การทำงานของ หุ่นยนต์เดินตามเส้น 3 เซ็นเซอร์ Arduino + L298P
วีดีโอผลลัพธ์ หุ่นยนต์เดินตามเส้น 3 เซ็นเซอร์ Arduino + L298P