Phát hiện vật cản bằng hồng ngoại

I. Mở đầu

Lâu nay, chúng ta đã quen với việc sử dụng cảm biến siêu âm để phát hiện vật cản, tuy nhiên điểm yếu của nó là dễ bị nhiễu, để khắc phục điểm yếu trên, hôm nay mình xin giới thiệu với các bạn một cách phát hiện vật cản khác. Đó chính là sử dụng hồng ngoại, mà cụ thể hơn là mình muốn giới thiệu với các bạn con cảm biến E18-D80NK.

II. Giới thiệu sơ bộ

  • Nó gồm có 1 con mắt phát và 1 con mắt thu hồng ngoại khá to. Bên trong là bộ phận xử lí (Thực sự mình cũng chẳng biết nó có gì bên trong, vì mình cũng không dại gì mà phá 120K - Em tiết kiệm lắm :D). Ở đuôi thì có con biến trở điều chỉnh khoảng cách phát hiện, đèn báo và một sợi dây đen xì to tướng, bên trong sợi dây ấy có 3 sợi nhỏ màu xanh dương, màu nâu và màu đen.
  • Khoảng cách phát hiện khoảng từ 3-80 cm(Điều chỉnh bằng biến trở ở đuôi).
  • Điện áp hoạt động là 5V DC
  • Đặc biệt, dòng ra của chân tín hiệu rất lớn, khoảng 300mA, nên các bạn phải nối tiếp với 1 con điện trở khoảng 10k (Theo như trên mạng thì dòng ra lớn như vậy là do "Ngõ ra dạng NPN cực thu hở" - Mình cũng chẳng hiểu nó nói cái gì, ai giải thích hộ với.)
  • Nguyên lí hoạt động thì rất đơn giản: Mắt phát thì phát ra, nếu đánh trúng vật cản thì phản xạ lại vào mắt thu, mắt thu báo về cho ta biết.
Vậy là OK rồi nha.

III. Thực hành

1. Chuẩn bị

Nhưng trước tiên ta phải nối 3 dây cảm biến với 3 jack đực nha.

2. Ráp phần cứng

Trước hết, ta phải ngắm sơ đồ chân đã, có 2 loại nên xem trong bảng nè (Mình sài loại thứ 2):
Các bạn ráp theo mạch sau, mình nối chân tín hiệu vào chân D9 nha (Do mình không tìm thấy con E18-D80NK nên lấy con này):

3. Code

Code thì đơn giản thôi
  1. #define sensor 9
  2. void setup()
  3. {
  4. pinMode(sensor,INPUT);
  5. Serial.begin(9600);
  6. }
  7. void loop()
  8. {
  9. Serial.print("Gia tri cam bien:");
  10. Serial.println(digitalRead(sensor)); //Nếu sensor = 1 thì không phát hiện vật cản, nếu sensor = 0 thì phát hiện vật cản.
  11. delay(1000);
  12. }

IV. Kết Luận

Đây chính là thành quả:
Như vậy là chúng ta vừa tìm hiểu xong cảm biến E18-D80NK và ứng dụng nó trong việc phát hiện vật cản. Ngoài ứng dụng trên, ta còn có thể ứng dụng nó trong việc như:
  • Ứng dụng để đo mực nước (Nước không trong suốt)
  • Phát hiện hoặc đếm sản phẩm trong dây truyền
  • Ứng dụng trong Robot dò đường
  • Thiết bị hỗ trợ người mù.
  • Thậm chí là thiết bị chống trộm
  • Và còn nhiều ứng dụng khác nằm trong bộ não của bạn. 

Tia hồng ngoại

Tia hồng ngoại là những bức xạ không nhìn thấy được, có bước sóng lớn hơn bước sóng của ánh sáng đỏ (λ > 0,75μm), có bản chất là sóng điện từ.
Trên cảm biến hồng ngoại được sử dụng  sẽ có 1 đèn Led để truyền tín hiệu hồng ngoại. Tín hiệu này sẽ được nhận bởi đèn Led thu và chuyển thành dạng xung điện, sau đó các xung điện này được chuyển đổi thành dữ liệu được sử dụng cho các thiết bị điện tử.

Lắp đặt cảm biến

Ta tiến hành lắp đặt cảm biến hồng ngoại theo sơ đồ sau:
ss_1
Out: nối với chân 4 của Arduino.
Gnd: nối với PIN GND.
Vcc: nối với nguồn 5V của Adruino.

Mạch sau khi hoàn tất lắp đặt

ss_2

Lập trình điều khiển

Với cảm biến hồng ngoại, ta sẽ minh hoạ việc sử dụng qua việc lập trình cho cảm biến cứ mỗi lần phát hiện có vật cản đèn Led sẽ sáng lên.
  1. Khai báo chân cảm biến và đèn led.
  2. Khai báo trong hàm setup.
  3. INPUT_PULLUP: Mặc định khi không được kết nối với một mạch ngoài hoặc được kết nối với cực dương thì pin sẽ nhận giá trị là HIGH, khi pin được thông tới cực âm xuống đất thì nhận giá trị là LOW tương ứng với 0 - 1.
Đoạn code thực hiện công việc này như sau:
  1. int infrared = 4;
  2. int led = 2;
  3.  
  4. void setup()
  5. {
  6. pinMode(led,OUTPUT);
  7. pinMode(infrared, INPUT_PULLUP);
  8. }
  9. void loop()
  10. {
  11. if(digitalRead(infrared) == 0)
  12. {
  13. digitalWrite(led,HIGH);
  14. }
  15. else
  16. {
  17. digitalWrite(led,LOW);
  18. }
  19. }
  20. Cách 2: void setup() { // put your setup code here, to run once: pinMode (A2, INPUT_PULLUP); pinMode(13, OUTPUT); } void loop() { // put your main code here, to run repeatedly: if (digitalRead(A2) == 0); digitalWrite(13, HIGH); else digitalWrite(13, LOW); }

0 nhận xét:

Copyright © 2012 My Blog