Xe dò line với Arduino
I.Linh kiện và giới thiệu mô hình
1 board Arduino Uno
2 Modul thu phát hồng ngoại IR
1 Khung robot
1 Motor Driver IC – L293D
2 bộ bánh xe gắn kèm motor
Nguồn cấp từ pin 9v và jack kết nối với Arduino
Sẽ rất thú vị khi chính tay ta tạo ra một chiếc xe mà có thể tự vạch đường đi cho nó dựa trên tín hiệu phản xạ từ bề mặt sáng và tối khi ta kẻ 1 vạch. Xe sẽ hoàn toàn tự động chạy theo vạch,dựa trên tín hiệu phát ra và hồi tiếp từ bộ thu-phát hồng ngoại IR
Driver motor L293D sẽ điều khiển 2 động cơ DC 5v dẫn động cho hai bánh của xe quay thuận và nghịch nhờ tín hiệu từ Arduino qua driver điều khiển 2 động cơ độc lập nhau. Qua sự đảo chiều và quay tuần tự hay đồng thời của động cơ mà xe có thể quay trái,phải,khi chỉ có 1 động cơ ở bên tương ứng quay hoặc quay ngược. Để nhận biết và hướng xe đi theo vạch,ta nhờ vào bộ thu và phát tín hiệu hồng ngoại
- Sơ đồ toàn mạch và kết nối các linh kiện
Trong đây ta sử dụng 1 bộ IR hồng ngoại đã lắp ráp sẵn có sơ đồ như sau
III. Giải thích các linh kiện
Board Arduino đóng vai trò là bộ vi xử lý trung tâm của xe,xử lý tín hiệu từ bộ thu phát hồng ngoại IR trên đoạn đường có vạch kẻ để đưa ra lệnh điều khiển chính xác cho driver điều khiển chuyển động 2 động cơ.
Motor Driver (L293D) đóng vài trò là bộ điều khiển cho hai động cơ,nhận tín hiệu trực tiếp từ Arduino dựa trên thông tin nhận được từ bộ IR hồng ngoại
Hai động cơ hoạt động độc lập cho ta chuyển động,tiến,lùi,quay trái-phải
- Nguyên lý hoạt động
Trong đây,ta sẽ cho xe thực hiện một công việc khá đơn giản là chạy theo đoạn đường màu đen đã kẻ sẵn. IR sẽ phát hiện ra vạch qua việc phát ra bước sóng hồng ngoại và phản xạ lại trên bởi bề mặt có màu sáng tức là ở những nơi không có màu đen là vạch thì sẽ có phản hồi,còn trên vạch thì không,nguyên lý này sẽ dẫn hướng cho xe đi đúng vạch đã định.
Dưới đây là sơ đồ cơ chế hoạt động của IR hồng ngoại qua việc phản xạ và không phản xạ
Nhờ đó robot phát hiện được đoạn đường nào màu đen,đoạn đường nào không mà di chuyển chính xác.
Khi robot di chuyển về phía trước,cả hai cảm biến sẽ ở trạng thái chờ,nếu 1 trong hai cảm biến ở 2 phía phát hiện vạch màu đen ở phía của mình tức là sẽ sẽ rẽ theo một hướng trái hoặc phải, Arduino sẽ phát hiện ra sự thay đổi này và điều hướng 2 động cơ thông qua driver để điều khiển theo hướng phù hợp
- giới thiệu chương trình
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(mot4,0);
}
analogWrite(mot1,255);
analogWrite(mot2,0);
}
void STOP (void)
{
analogWrite(mot1,0);
analogWrite(mot2,0);
analogWrite(mot3,0);
analogWrite(mot4,0);
}