การใช้งาน 3 Channel CTRT5000






3 เซ็นเซอร์ สำหรับหุ่นยนต์หุ่นยนต์เดินตามเส้น ใช้อินฟราเรดในการตรวจจับ สามารถ ป้องกันการรบกวน ใช้ เซ็นเซอร์ CTRT5000 ,ความไวแสงสูง,มีเสถียรภาพในการทำงาน โมดูลอ่านค่าสะท้อนกลับของแสง ใช้ไฟ 3.3-5V เหมาะสำหรับใช้กับ Arduino ให้เอาต์พุตออกมา 2 แบบคือแบบดิจิตอล เมื่อค่าที่อ่านได้ถึงระดับที่ต้องการก็จะส่งค่า 1 ออกมา ถ้ายังไม่ถึงระดับก็จะส่งค่า 0 ออกมา และอีกแบบคือเอาต์พุตแบบอะนาล็อก อ่านค่าได้เป็นตัวเลข 0-1023 หรือสัญญาณไฟในช่วง 0-5V

 สามารถนำไปประยุกต์กับงานได้หลายแบบ เช่น ใช้เป็นตัวตรวจจับเส้นสีขาวกับสีดำสำหรับรถ 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;
  }
}