Copy
Hỗ trợ online
  • Nhân viên kinh doanh Hà Nội
  • Phone : 0925800809
  •   01664422772
0 - 2,950,000 đ        

Chế tạo Radar với Arduino

1. Giới thiệu

Xin chào các bạn!!! Hôm nay, qua bài viết này mình muốn giới thiệu cho các bạn về một khả năng thần kì của Arduino. Đây là một bài hướng dẫn làm hệ thống radar bằng arduino được chia sẻ trên cộng đồng Arduino.vn. Hy vọng có thể giúp các bạn có cái nhìn rõ ràng , chi tiết hơn về một dự án Arduino. Chúng ta cùng bắt tay vào làm ngay nhé. 

Học lập trình ở đâu

2. Chuẩn bị

3. Kết nối

Phần cứng bạn kết nối như sau:

Chân Siêu âm Chân Servo Chân Arduino UNO
Vcc Vcc 5V
GND GND GND
  Data 12
Trig   10
Echo    11

4. Chương trình

a. Code cho Arduino:

  1. // Sử dụng thư viện Servo
  2. #include <Servo.h>
  3. // Khai báo chân Trig và Echo
  4. const int trigPin = 10;
  5. const int echoPin = 11;
  6. // Khai báo biến thời gian và khoảng cách
  7. long duration;
  8. int distance;
  9. Servo myServo; // Tạo đối tượng Servo để điều khiển Servo
  10. void setup() {
  11. pinMode(trigPin, OUTPUT); // Set chân trig là chân OUTPUT
  12. pinMode(echoPin, INPUT); // Set chân echo INPUT
  13. Serial.begin(9600);
  14. myServo.attach(12); // Chân Servo là chân 12
  15. }
  16. void loop() {
  17. // Quay Servo từ 15 độ - 165 độ
  18. for(int i=15;i<=165;i++){
  19. myServo.write(i);
  20. delay(30);
  21. distance = calculateDistance();// Gọi hàm tính khoảng cách
  22. Serial.print(i); // Gửi giá trị i ( góc quay của Servo) đến Serial Port
  23. Serial.print(","); // Gửi ","
  24. Serial.print(distance); // Tiếp theo gửi các giá trị khoảng cách tới Serial Port
  25. Serial.print("."); // Gửi dấu "."
  26. }
  27. // Sau khi quay xong Servo từ 15 - 165 độ....quay ngược lại từ 165 độ về 15 độ, sau đó gửi tương tự các giá trị như bên trên
  28. for(int i=165;i>15;i--){
  29. myServo.write(i);
  30. delay(30);
  31. distance = calculateDistance();
  32. Serial.print(i);
  33. Serial.print(",");
  34. Serial.print(distance);
  35. Serial.print(".");
  36. }
  37. }
  38. // Hàm tính khoảng cách bằng siêu âm
  39. int calculateDistance(){
  40. digitalWrite(trigPin, LOW);
  41. delayMicroseconds(2);
  42. // Phát xung siêu âm với thời gian là 10 Micro giây
  43. digitalWrite(trigPin, HIGH);
  44. delayMicroseconds(10);
  45. digitalWrite(trigPin, LOW);// Ngưng phát xung
  46. duration = pulseIn(echoPin, HIGH); // Tính thời gian xung siêu âm phát ra đập vào vật cản rồi dội lại là bao nhiêu???
  47. distance= duration*0.034/2;// Tính khoảng cách từ siêu âm đến vật cản ( vì vận tốc của xung siêu âm là 344m/s...và sau khi đập vào vật cản rồi dội lại, nên /2) ==>> khoảng cách = thời gian*vận tốc/2
  48. return distance;
  49. }

b. Code Processing

  1. import processing.serial.*; // Thư viện Serial
  2. import java.awt.event.KeyEvent; // Thư viện đọc dữ liệu
  3. import java.io.IOException;
  4. Serial myPort; // Xác định đối tượng
  5.  
  6. // Khai báo các biến :v
  7. String angle="";
  8. String distance="";
  9. String data="";
  10. String noObject;
  11. float pixsDistance;
  12. int iAngle, iDistance;
  13. int index1=0;
  14. int index2=0;
  15. PFont orcFont;
  16. void setup() {
  17. size (1920, 1080); // Thiết lập màn hình
  18. smooth();
  19. myPort = new Serial(this,"COM4", 9600); // Chọn giao tiếp cổng COM4, tốc độ 9600
  20. myPort.bufferUntil('.'); // Đọc dữ liệu từ cổng COM4...đến khi nhận đc dấu '.' thỳ dừng lại....!!!! ( Processing sẽ nhận đc giá trị như phần Code Arduino đã gửi)
  21. orcFont = loadFont("OCRAExtended-30.vlw");//Chọn Font cho nó nguy hiểm tý, các bạn có thể chọn Font khác theo ý mình
  22. }
  23. void draw() {
  24. fill(98,245,31);
  25. textFont(orcFont);
  26. noStroke();
  27. fill(0,4);
  28. rect(0, 0, width, height-height*0.065);
  29. fill(98,245,31); // green color
  30. // Gọi các hàm vẽ Radar
  31. drawRadar();
  32. drawLine();
  33. drawObject();
  34. drawText();
  35. }
  36. void serialEvent (Serial myPort) { // Đọc dữ liệu từ cổng COM
  37. data = myPort.readStringUntil('.');// Đọc dữ liệu đến khi phát hiện dấu "." rồi gán vào biến "data"
  38. data = data.substring(0,data.length()-1);
  39. index1 = data.indexOf(","); // Tìm ký tự "," rồi gán vào "index1"
  40. angle= data.substring(0, index1); // Đọc dữ liệu từ ký tự đầu tiên...đến khi nhận dấu "," rồi gán vào biến "angle"
  41. distance= data.substring(index1+1, data.length()); // Đọc dữ liệu từ ký tự sau dấu "," đến dấu "." ( đến hết đó )
  42. // Chuyển đổi các chuỗi thành số nguyên
  43. iAngle = int(angle);
  44. iDistance = int(distance);
  45. }
  46. // Đến phần xây dựng giao diện Radar...Đây là vẽ hình á...các bạn cứ coppy
  47. void drawRadar() {
  48. pushMatrix();
  49. translate(width/2,height-height*0.074); // di chuyển tọa độ đến vị trí mới!!!
  50. strokeWeight(2);
  51. stroke(98,245,31);
  52. // Vẽ các vệt line sao ý!!! keke
  53. arc(0,0,(width-width*0.0625),(width-width*0.0625),PI,TWO_PI);
  54. arc(0,0,(width-width*0.27),(width-width*0.27),PI,TWO_PI);
  55. arc(0,0,(width-width*0.479),(width-width*0.479),PI,TWO_PI);
  56. arc(0,0,(width-width*0.687),(width-width*0.687),PI,TWO_PI);
  57. // Vẽ các đường góc
  58. line(-width/2,0,width/2,0);
  59. line(0,0,(-width/2)*cos(radians(30)),(-width/2)*sin(radians(30)));
  60. line(0,0,(-width/2)*cos(radians(60)),(-width/2)*sin(radians(60)));
  61. line(0,0,(-width/2)*cos(radians(90)),(-width/2)*sin(radians(90)));
  62. line(0,0,(-width/2)*cos(radians(120)),(-width/2)*sin(radians(120)));
  63. line(0,0,(-width/2)*cos(radians(150)),(-width/2)*sin(radians(150)));
  64. line((-width/2)*cos(radians(30)),0,width/2,0);
  65. popMatrix();
  66. }
  67. void drawObject() {
  68. pushMatrix();
  69. translate(width/2,height-height*0.074); // Di chuyển con trỏ đến tọa độ khác...rồi vẽ tiếp
  70. strokeWeight(9);
  71. stroke(255,10,10); // Màu đỏ
  72. pixsDistance = iDistance*((height-height*0.1666)*0.025); // Khoảng cách..từ cm đổi thành pixcel ( theo công thức )
  73. // Nếu khoảng cách < 40cm
  74. if(iDistance<40){
  75. // Vẽ các đối tượng góc và khoảng cách...!!!!
  76. line(pixsDistance*cos(radians(iAngle)),-pixsDistance*sin(radians(iAngle)),(width-width*0.505)*cos(radians(iAngle)),-(width-width*0.505)*sin(radians(iAngle)));
  77. }
  78. popMatrix();
  79. }
  80. void drawLine() {
  81. pushMatrix();
  82. strokeWeight(9);
  83. stroke(30,250,60);
  84. translate(width/2,height-height*0.074); // Lại di chuyển con trỏ đến vị trí khác
  85. line(0,0,(height-height*0.12)*cos(radians(iAngle)),-(height-height*0.12)*sin(radians(iAngle)));
  86. popMatrix();
  87. }
  88. void drawText() { // Viết các dòng chữ trên màn hình
  89. pushMatrix();
  90. if(iDistance>40) {
  91. noObject = "Ra khỏi phạm vi";
  92. }
  93. else {
  94. noObject = "Trong phạm vi";
  95. }
  96. fill(0,0,0);
  97. noStroke();
  98. rect(0, height-height*0.0648, width, height);
  99. fill(98,245,31);
  100. textSize(25);
  101. text("10cm",width-width*0.3854,height-height*0.0833);
  102. text("20cm",width-width*0.281,height-height*0.0833);
  103. text("30cm",width-width*0.177,height-height*0.0833);
  104. text("40cm",width-width*0.0729,height-height*0.0833);
  105. textSize(40);
  106. text(
    TIN TỨC KHÁC

Vui lòng đợi ...

Đặt mua sản phẩm

Xem nhanh sản phẩm