สามารถนำไปประยุกต์กับงานได้หลายแบบ เช่น ใช้เป็นตัวตรวจจับเส้นสีขาวกับสีดำสำหรับรถ smart car ทำงานแรงดันไฟฟ้า5โวลต์, ติดตั้งง่ายได้ง่าย
ตัวอย่างการใช้งาน
ต่อวงจรดังนี้
Module -> Arduino
L -> A0
C -> A1
R -> A2
VCC -> 5V
GND -> GND
เปิดโปรแกรม Arduino (IDE) และ Upload โค้ดนี้ ไปยัง บอร์ด Arduino UNO R3
/*
read analog data from A0-A2 and send to PC via Serial port
*/
int sensor_L , sensor_C , sensor_R ; //optical sensor values
String tmp ;
int ADC_stabilize = 5 ;
void setup ( ) {
// initialize the serial communication:
Serial . begin ( 9600 ) ;
}
void loop ( ) {
//take a snapshot
sensor_L = digitalRead ( A0 ) ;
delay ( ADC_stabilize ) ; //stabilize
sensor_L = digitalRead ( A0 ) ;
delay ( ADC_stabilize ) ;
sensor_C = digitalRead ( A1 ) ;
delay ( ADC_stabilize ) ;
sensor_C = digitalRead ( A1 ) ;
delay ( ADC_stabilize ) ;
sensor_R = digitalRead ( A2 ) ;
delay ( ADC_stabilize ) ;
sensor_R = digitalRead ( A2 ) ;
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
}
เมื่อเปิดดูที่ Serial Monitor ผลลัพธ์ที่ได้ L=1 , C=1 , R=1 แสดงว่าอ่านค่าการสะท้อนกลับได้
และเมื่อยก โมดูล CTRT5000 สูงขึ้น ผลลัพธ์ที่ได้ L=0 , C=0 , R=0 แสดงว่าอ่านค่าการสะท้อนกลับไม่ได้
เมื่อนำเทปสีดํามาทดสอบ โดยให้ เซ็นเซอร์ตัวกลาง (C) อยู่ในพื้นที่ของเทปสีดํา
เมื่อเปิดดูที่ Serial Monitor ผลลัพธ์ที่ได้ L=1 , C=0 , R = 1 แสดงว่า โมดูล CTRT5000 พร้อมใช้งานแล้ว
ตัวอย่างโค้ด แนวทางการพัฒนา สู่หุ่นยนต์เดินตามเส้น
// connect the sensors to digital pins
#define LEFT_SENSORPIN 2
#define CENTER_SENSORPIN 10
#define RIGHT_SENSORPIN 4
// do you have black line on white ground or white line on black ground?
#define LINE LOW
#define NOLINE HIGH
// define some symbolic constants for our driving directions
enum {GO_AHEAD, GO_LEFT, GO_RIGHT, STOP, GO_POWERLEFT, GO_POWERRIGHT};
void setup()
{
Serial.begin(9600);
Serial.println("*** LINE FOLLOWER ***");
pinMode(LEFT_SENSORPIN,INPUT);
pinMode(CENTER_SENSORPIN,INPUT);
pinMode(RIGHT_SENSORPIN,INPUT);
}
void loop()
{
// read input from sensors
byte leftSensor=digitalRead(LEFT_SENSORPIN);
byte centerSensor=digitalRead(CENTER_SENSORPIN);
byte rightSensor=digitalRead(RIGHT_SENSORPIN);
// calculate direction
byte goDirection;
// if only center sensor detects line, go straight ahead
if (leftSensor==NOLINE && centerSensor==LINE && rightSensor==NOLINE)
goDirection= GO_AHEAD;
// if only left sensor detects line, turn left
else if (leftSensor==LINE && centerSensor==NOLINE && rightSensor==NOLINE)
goDirection= GO_LEFT;
// if only right sensor detects line, turn right
else if (leftSensor==NOLINE && centerSensor==NOLINE && rightSensor==LINE)
goDirection= GO_RIGHT;
// if no sensor detects any line: we are either finished or out of control and will stop
else if (leftSensor==NOLINE && centerSensor==NOLINE && rightSensor==NOLINE)
goDirection= STOP;
// if left and center sensor detect line, must be 90° turn to the left
else if (leftSensor==LINE && centerSensor==LINE && rightSensor==NOLINE)
goDirection= GO_POWERLEFT;
// if right and center sensor detect line, must be 90° turn to the right
else if (leftSensor==NOLINE && centerSensor==LINE && rightSensor==LINE)
goDirection= GO_POWERRIGHT;
// Now we have found the direction,
// show it on Serial and control motors accordingly
switch (goDirection)
{
case GO_AHEAD:
Serial.println("Go ahead");
// place motor code here
break;
case GO_RIGHT:
Serial.println("Turn right");
// place motor code here
break;
case GO_LEFT:
Serial.println("Turn left");
// place motor code here
break;
case STOP:
Serial.println("No line detected - STOP!");
// place motor code here
break;
case GO_POWERLEFT:
Serial.println("Power-turn 90 degrees left");
// place motor code here
break;
case GO_POWERRIGHT:
Serial.println("Power-turn 90 degrees right");
// place motor code here
break;
}
}