Chào các bạn ! Bài viết này sẽ hướng dẫn các bạn làm robot dò đường !

Con robot dò đường này sẽ dò và đi theo đường đen ( hoặc trắng ! ) đã kẻ sẵn.

Sơ đồ mạch

arduino11

 

Chuẩn bị:

Arduino UNO ( hoặc Arduino Nano)

IC môtơ L293D

Động cơ  DC 9V  + Bánh xe

Mạch PCB

Module thu phát hồng ngoại

Băng dính cách điện

Dây nối

Nguồn cấp

* Làm module thu phát hồng ngoại

Robot sử dụng mạch thu phát hồng ngoại để dò đường, mạch sử dụng photodiod, led phát hồng ngoại và một số linh kiệt khác.

arduino22

Các bạn có thể tự làm mạch thu phát hồng ngoại theo sơ đồ nguyên lí sau

arduino3

Cách hoạt động

Cách hoạt động của robot khá đơn giản : dò đường đen trên bề mặt và đi theo đường đó. Chi tiết hơn về nguyên lí hoạt động của nó như sau :

Chúng ta cần dùng module để phát hiện đường đen vì vậy,cần dùng 2 mạch thu phát hồng ngoại trong đó bao gồm photodiod và led phát hồng ngoại. Chúng được đặt cạnh nhau để khi tiếp xúc với bề mặt có phản xạ, ánh sáng tạo ra bởi led hồng ngoại có thể thu được bởi photodiode .

arduino4

Hình ảnh minh họa sự hoạt động của một module  . Vì bề mặt màu sáng phản chiếu ánh sáng nhiều, nên ánh sáng phát ra bởi led  hồng ngoại sẽ được phản chiếu và thu được bởi  photodiode .

Trong trường hợp của bề mặt mầu đen có phản xạ ánh sáng kém, ánh sáng của đèn LED sẽ bị hấp thụ bởi bề mặt đen và không tới photodiode.

Sử dụng nguyên lí này, Robot sẽ được dựng lên bằng cách đặt 2 mạch thu nhận hồng quang cạnh nhau ở hai nửa mặt phẳng khác nhau của vạch đen. Cách dựng như sau :

Khi robot di chuyển về phía trước, cả hai module sẽ đợi đến khi vạch đen được phát hiện.  Ví dụ , nếu mạch 1 phát hiện được đường đen, nghĩa là có một đường rẽ phải ở phía trước. Arduino UNO phát hiện sự thay đổi này và điều khiển động cơ sao cho động cơ bên phải chậm lại, còn động cơ bên trái  chạy ở tốc độ bình thường.
Tương tự với mạch thu phát 2 ở bên trái.

 

Code

int mot1=9;
int mot2=6;
int mot3=5;
int mot4=3;
int left=13;
int right=12;
int Left=0;
int Right=0;
void LEFT (void);
void RIGHT (void);
void STOP (void);
void setup()
{
  pinMode(mot1,OUTPUT);
  pinMode(mot2,OUTPUT);
  pinMode(mot3,OUTPUT);
  pinMode(mot4,OUTPUT);
  pinMode(left,INPUT);
  pinMode(right,INPUT);
  digitalWrite(left,HIGH);
  digitalWrite(right,HIGH);
}
void loop()
{
analogWrite(mot1,255);
analogWrite(mot2,0);
analogWrite(mot3,255);
analogWrite(mot4,0);
while(1)
{
  Left=digitalRead(left);
  Right=digitalRead(right);
  if((Left==0 && Right==1)==1)
  LEFT();
  else if((Right==0 && Left==1)==1)
  RIGHT();
}
}
void LEFT (void)
{
   analogWrite(mot3,0);
   analogWrite(mot4,30);
   while(Left==0)
   {
    Left=digitalRead(left);
    Right=digitalRead(right);
    if(Right==0)
    {
      int lprev=Left;
      int rprev=Right;
      STOP();
      while(((lprev==Left)&&(rprev==Right))==1)
      {
         Left=digitalRead(left);
         Right=digitalRead(right);
      }
    }
    analogWrite(mot1,255);
    analogWrite(mot2,0);
   }
   analogWrite(mot3,255);
   analogWrite(mot4,0);
}
void RIGHT (void)
{
   analogWrite(mot1,0);
   analogWrite(mot2,30);
   while(Right==0)
   {
    Left=digitalRead(left);
    Right=digitalRead(right);
    if(Left==0)
    {
      int lprev=Left;
      int rprev=Right;
     STOP();
      while(((lprev==Left)&&(rprev==Right))==1)
      {
         Left=digitalRead(left);
         Right=digitalRead(right);
      }
    }
    analogWrite(mot3,255);
    analogWrite(mot418,0);
    }
   analogWrite(mot1,255);
   analogWrite(mot2,0);
}
void STOP (void)
{
analogWrite(mot1,0);
analogWrite(mot2,0);
analogWrite(mot3,0);
analogWrite(mot4,0);
}

Chúc bạn làm robot dò đường thành công !

Nguồn : electronichub.org