การใช้ Arduino UNO R3 รถตามเส้น ด้วย 4-way Infrared Line Tracking Module

Microcontroller

จุดประสงค์

  1. นักเรียนสามารถต่อวงจรในการทำให้รถตามเส้น ด้วย 4-way Infrared Line Tracking Module ได้
  2. นักเรียนสามารถเขียนโปรแกรมในการทำให้รถตามเส้น ด้วย 4-way Infrared Line Tracking Module ได้
  3. นักเรียนสามารถนำความรู้ที่ได้ไปใช้ในการแก้ปัญหาในชีวิตประจำวันได้

เครื่องมือและอุปกรณ์ในการต่อวงจร ในการทำให้รถตามเส้น ด้วย 4-way Infrared Line Tracking Module ได้

Arduino Uno R3

Arduino อ่านว่า (อา-ดู-อิ-โน่ หรือ อาดุยโน่) เป็นบอร์ดไมโครคอนโทรเลอร์ตระกูล AVR ที่มีการพัฒนาแบบ Open Sourceคือมีการเปิดเผยข้อมูลทั้งด้าน Hardware และ Software ตัว บอร์ด Arduino ถูกออกแบบมาให้ใช้งานได้ง่าย ดังนั้นจึงเหมาะสำหรับผู้เริ่มต้นศึกษา ทั้งนี้ผู้ใช้งานยังสามารถดัดแปลง เพิ่มเติม พัฒนาต่อยอดทั้งตัวบอร์ด หรือโปรแกรมต่อได้อีกด้วย

  VCC เป็นจุดต่อไฟแรงสูงสำหรับขับมอเตอร์ รองรับตั้งแต่ 5 – 35V (แนะนำให้ใช้สูงสุดแค่ 35V)
GND เป็นจุดต่อกราวด์ร่วม
5V เป็นจุดต่อไฟเลี้ยงวงจร โดยจะต่อมาจาก 5V ของบอร์ด Arduino
          *** ให้สังเกตด้านหลังจะมีจุดจั๊ม 5VEN เราจะใช้ประโยชน์ได้คือหากเราจั๊มจุดนี้ไว้โมดูลจะดึงไฟจาก VCC ไปผ่านไอซี 5V Regulator สำหรับใช้เลี้ยงวงจร ทำให้เราไม่ต้องต่อ 5V มาจาก Arduino แต่หากเราต่อไว้ 5V ของโมดูลจะส่งไฟออกไปเลี้ยงบอร์ด Arduino แทน ทำให้เราไม่ต้องจ่ายไฟให้ Arduino อีก ซึ่งมีจุดที่ควรระวังคือหากเราจั๊มไว้แล้วจะต้องจ่าย VCC ให้มากกว่าที่ใช้งาน 2V สมมติมอเตอร์ 12V จั๊ม 5VEN ไว้ ก็จะต้องจ่ายไฟเข้าที่ VCC เป็น 14V เนื่องจาก L298 เป็น Transistor Dual Full-Bridge ซึ่งทรานซิสเตอร์จะทำให้แรงดันดรอปลง 2V เป็นปกติ
ENA เป็นขาสำหรับควบคุมความเร็วของมอเตอร์ชุด A (ในรูปพิมพ์ OUT1) หากเราจั๊มกับ 5V ด้านหลังไว้จะทำให้มอเตอร์หมุนที่ความเร็วคงที่ แต่หากต้องการควบคุมความเร็วของมอเตอร์ให้หมุนช้าเร็วก็ต้องถอดจั๊มออกแล้วดึงสัญญาณ PWM มาควบคุม ENA แทน
IN1 และ IN2 ใช้ควบคุมทิศการหมุนของมอเตอร์ เหมือนกับที่เราเล่นตอนเด็ก ๆ เลยครับ ถ้าไฟไหลจาก 1 ไป 2 ก็จะหมุนทิศนึง ถ้าไฟไหลจาก 2 มา 1 ก็จะหมุนกลับอีกทิศ
ENB, IN3 และ IN4 ก็มีหน้าที่เหมือนกัน แต่จะเป็นการควบคุมมอเตอร์ชุด B (ในรูปพิมพ์ OUT2) แทนOUT1 และ OUT2, OUT3 และ OUT4 สำหรับต่อสายไฟไปควบคุมมอเตอร์ A และมอเตอร์ B ตามลำดับ

L298N Motor Driver

Tracking Sensor 4 Channal for Smart Car เซนเซอร์ตรวจจับเส้น ขาว ดำ 4 ช่อง

เซนเซอร์ตรวจจับเส้น ขาว-ดำ  4 จุดแยกอิสระ สำหรับตรวจจับเส้นหรือหลีกเลี่ยงสิ่งกีดขวาง ตรวจจับวัตถุ ใช้ไฟ 3.3-5V ให้สัญญาณเอาต์พุตเป็นแบบ ดิจิตอล ใช้คำสั่ง digitalRead() อ่านค่า เมื่อมีวัตถุสีดำมาบังเซนเซอร์จะให้ค่า 0 เมื่อมีสีขาวจะให้ค่า 1 สามารถนำค่านี้ไปใช้กับ Arduino ได้ สามารถปรับระยะการเซนเซอร์ได้ที่ 0.1 – 60cm

การใช้งานกับ Arduino ควบคุมทิศทางของมอเตอร์

การใช้งานเพื่อควบคุมทิศทางของมอเตอร์นั้นก็แสนง่ายดายครับ เมื่อเรารู้แล้วว่าไฟไหลทางนึงมอเตอร์ก็หมุนทิศนึง พอไฟกลับทางมอเตอร์ก็หมุนกลับอีกทาง ฉะนั้นเราก็เขียนโค้ดควบคุมไปตามนั้นเลยครับ โดยวิธีจ่ายไฟแบบไหนได้ผลอย่างไรก็ดังตารางที่ Datasheet บอกไว้ครับ

Inputผลที่ได้
EN = HIGH1 = HIGH ; 2 = LOWมอเตอร์หมุนตามเข็มนาฬิกา
1 = LOW ; 2 = HIGHมอเตอร์หมุนทวนเข็มนาฬิกา
1 = 2หยุดมอเตอร์อย่างรวดเร็ว (เบรกนั่นเอง)
EN = LOW1 = X ; 2 = Xปล่อยให้มอเตอร์ไหลแล้วหยุดเอง

          ก็ตามว่าเลยครับ กลับทิศไฟมอเตอร์ก็หมุนกลับทิศกันไป ทีนี้เมื่อเราจ่ายสัญญาณที่เหมือนกันไป HIGH ทั้งคู่ หรือ LOW ทั้งคู่ก็จะทำให้มอเตอร์เบรกเอี๊ยด ลดความเร็วลงอย่างรวดเร็ว และเมื่อ EN เป็น LOW ก็จะปลดการทำงานทั้งหมด ทีนี้สัญญาณจะเป็นอะไรก็ไม่สนแล้วครับ มอเตอร์จะหมุนตามแรงเฉื่อยค่อย ๆ ลดความเร็วจนหยุดไปเองเหมือนการใส่เกียร์ว่างให้ไหลไป แต่เราจะไม่สนใจครับเนื่องจากเราจะจั๊ม EN ไว้กับ 5V ตลอดเวลา จึงจะมีแค่เดินหน้า ถอยหลัง และเบรก เท่านั้น

คำสั่งในการควบคุม ในการทำให้รถตามเส้น ด้วย 4-way Infrared Line Tracking Module ได้

int l298n_ena=9;
int l298n_in1=2;
int l298n_in2=3;
int l298n_in3=4;
int l298n_in4=5;
int l298n_enb=6;
void setup()
{
pinMode(9, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(11, INPUT);
pinMode(12, INPUT);
pinMode(13, INPUT);
pinMode(10, INPUT);
}
void loop()
{
if ((digitalRead(11) == true)) {
if ((digitalRead(12) == true)) {
if ((digitalRead(13) == true)) {
if ((digitalRead(10) == true)) {
digitalWrite(l298n_in1,LOW);
digitalWrite(l298n_in2,HIGH);
analogWrite(l298n_ena,(255));
digitalWrite(l298n_in3,HIGH);
digitalWrite(l298n_in4,LOW);
analogWrite(l298n_enb,(255));
}
else {
digitalWrite(l298n_in1,HIGH);
digitalWrite(l298n_in2,LOW);
analogWrite(l298n_ena,(255));
digitalWrite(l298n_in3,LOW);
digitalWrite(l298n_in4,HIGH);
analogWrite(l298n_enb,(255));
}
}
else {
if ((digitalRead(10) == true)) {
digitalWrite(l298n_in1,LOW);
digitalWrite(l298n_in2,HIGH);
analogWrite(l298n_ena,(255));
digitalWrite(l298n_in3,HIGH);
digitalWrite(l298n_in4,LOW);
analogWrite(l298n_enb,(255));
}
else {
digitalWrite(l298n_in1,LOW);
digitalWrite(l298n_in2,HIGH);
analogWrite(l298n_ena,(255));
digitalWrite(l298n_in3,LOW);
digitalWrite(l298n_in4,HIGH);
analogWrite(l298n_enb,(255));
}
}
}
else {
if ((digitalRead(13) == true)) {
if ((digitalRead(10) == true)) {
digitalWrite(l298n_in1,LOW);
digitalWrite(l298n_in2,HIGH);
analogWrite(l298n_ena,(255));
digitalWrite(l298n_in3,HIGH);
digitalWrite(l298n_in4,LOW);
analogWrite(l298n_enb,(255));
}
else {
digitalWrite(l298n_in1,HIGH);
digitalWrite(l298n_in2,LOW);
analogWrite(l298n_ena,(255));
digitalWrite(l298n_in3,LOW);
digitalWrite(l298n_in4,HIGH);
analogWrite(l298n_enb,(255));
}
}
else {
if ((digitalRead(10) == true)) {
digitalWrite(l298n_in1,LOW);
digitalWrite(l298n_in2,HIGH);
analogWrite(l298n_ena,(255));
digitalWrite(l298n_in3,HIGH);
digitalWrite(l298n_in4,LOW);
analogWrite(l298n_enb,(255));
}
else {
digitalWrite(l298n_in1,LOW);
digitalWrite(l298n_in2,HIGH);
analogWrite(l298n_ena,(255));
digitalWrite(l298n_in3,LOW);
digitalWrite(l298n_in4,HIGH);
analogWrite(l298n_enb,(255));
}
}
}
}
else {
if ((digitalRead(12) == true)) {
if ((digitalRead(13) == true)) {
if ((digitalRead(10) == true)) {
digitalWrite(l298n_in1,HIGH);
digitalWrite(l298n_in2,LOW);
analogWrite(l298n_ena,(255));
digitalWrite(l298n_in3,LOW);
digitalWrite(l298n_in4,HIGH);
analogWrite(l298n_enb,(255));
}
else {
digitalWrite(l298n_in1,LOW);
digitalWrite(l298n_in2,HIGH);
analogWrite(l298n_ena,(255));
digitalWrite(l298n_in3,HIGH);
digitalWrite(l298n_in4,LOW);
analogWrite(l298n_enb,(255));
}
}
else {
if ((digitalRead(10) == true)) {
digitalWrite(l298n_in1,LOW);
digitalWrite(l298n_in2,HIGH);
analogWrite(l298n_ena,(255));
digitalWrite(l298n_in3,HIGH);
digitalWrite(l298n_in4,LOW);
analogWrite(l298n_enb,(255));
}
else {
digitalWrite(l298n_in1,LOW);
digitalWrite(l298n_in2,HIGH);
analogWrite(l298n_ena,(255));
digitalWrite(l298n_in3,LOW);
digitalWrite(l298n_in4,HIGH);
analogWrite(l298n_enb,(255));
}
}
}
else {
if ((digitalRead(13) == true)) {
if ((digitalRead(10) == true)) {
digitalWrite(l298n_in1,LOW);
digitalWrite(l298n_in2,HIGH);
analogWrite(l298n_ena,(255));
digitalWrite(l298n_in3,HIGH);
digitalWrite(l298n_in4,LOW);
analogWrite(l298n_enb,(255));
}
else {
digitalWrite(l298n_in1,HIGH);
digitalWrite(l298n_in2,LOW);
analogWrite(l298n_ena,(255));
digitalWrite(l298n_in3,LOW);
digitalWrite(l298n_in4,HIGH);
analogWrite(l298n_enb,(255));
}

}
else {
if ((digitalRead(10) == true)) {
digitalWrite(l298n_in1,LOW);
digitalWrite(l298n_in2,HIGH);
analogWrite(l298n_ena,(255));
digitalWrite(l298n_in3,HIGH);
digitalWrite(l298n_in4,LOW);
analogWrite(l298n_enb,(255));
}
else {
digitalWrite(l298n_in1,LOW);
digitalWrite(l298n_in2,HIGH);
analogWrite(l298n_ena,(255));
digitalWrite(l298n_in3,LOW);
digitalWrite(l298n_in4,HIGH);
analogWrite(l298n_enb,(255));
}
}
}
}
}

Arduino Block ในการทำให้รถตามเส้น ด้วย 4-way Infrared Line Tracking Module ได้

การต่อวงจรควบคุม ในการทำให้รถตามเส้น ด้วย 4-way Infrared Line Tracking Module ได้

การต่อ 2WD Smart Robot Car