风筝
发表于: 2020-4-8 20:08:14 | 显示全部楼层

在本篇文章中,我们使用Arduino开发板和超声波传感器设计了一款雷达模型,用于检测和测距。RADAR是一种物体检测系统,它使用无线电波来识别物体的范围、高度、方向和速度。雷达天线发射的无线电波脉冲会从其路径上的任何物体反射回来。物体返回一部分波,并被接收器接收到,该部分与发送器在同一直线上。


此Arduino雷达项目旨在实现基于Arduino开发板的雷达系统原型,能够检测静止和移动的物体。

Arduino-RADAR-Model-using-Ultrasonic-Sensor-1000x562.png


所需的组件

为了使用超声波传感器设计Arduino雷达模型,我们需要以下组件。

●    Arduino UNO开发板

●    伺服电机SG90

●    超声波传感器HC-SR04

●    蜂鸣器

●    1602 LCD显示屏

●    面包板

●    连接线


使用超声波传感器的Arduino雷达模型的框图和连接方式

以下是Arduino雷达模型框图:

BLOCK-DIAGRA.png

项目核心采用Arduino UNO开发板,通过超声波检测前面的物体,使用电机改变角度,并将结果显示在LCD显示屏上。具体的电路连接如下:

radar-module.jpg


使用超声波传感器的Arduino雷达原型的工作过程

Arduino开发板向超声波传感器HC-SR04的触发引脚发送+ 5V信号,该信号触发传感器,然后在与超声波传感器HC-SR04一起机械安装的伺服电机上提供旋转动作,以便它可以检测到运动物体并定位在180度内。

flowchart.png


Arduino在传感器的TRIGGER引脚上发送(10S)的HIGH脉冲宽度,以重新生成一系列超声波在空气中传播,直到接触到障碍物,然后以相反的方向朝着传感器引脚ECHO返回。传感器检测脉冲的宽度以计算距离。传感器在发送期间在引脚ECHO上的信号保持在HIGH位置,从而测量超声波往返的持续时间,从而确定距离。


LCD显示屏显示计算出的距离和旋转角度。蜂鸣器是一个附加组件,当检测到障碍物时,它会响起,同时LED点亮。这两个LED和蜂鸣器一起确定物体所在的区域(近处或远处)。

2-3.png


程序源代码

  1. #include <Servo.h>
  2. #include <LiquidCrystal.h>

  3. Servo myservo;
  4. LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7)

  5. int pos = 0; // la position initiale du servo moteur
  6. const int trigPin = 9;
  7. const int echoPin = 10;
  8. const int moteur = 11;
  9. const int buzzer = 12;
  10. const int ledPin1 = 14;
  11. const int ledPin2 = 15;
  12. float distanceCm, DistanceSec,duration;

  13. void setup() {
  14. myservo.attach(moteur); // attache le Servo moteur a la pin numéro 11
  15. lcd.begin(16,2); // Initialiser l'interface de Lcd avec leurs Dimensions
  16. pinMode(trigPin, OUTPUT);
  17. pinMode(echoPin, INPUT);
  18. pinMode(buzzer, OUTPUT);
  19. pinMode(ledPin1, OUTPUT);
  20. pinMode(ledPin2, OUTPUT);
  21. DistanceSec=20;

  22. }

  23. void loop() {
  24. for (pos = 0; pos <= 180; pos += 1) { // aller de 0 a 180 degée
  25. // in steps of 1 degree
  26. myservo.write(pos); // Programmer le Servo pour aller a la position (pos)
  27. digitalWrite(trigPin, LOW);
  28. delayMicroseconds(2);
  29. digitalWrite(trigPin, HIGH); //envoyer une impulsion de 10 micro seconds
  30. delayMicroseconds(10);
  31. digitalWrite(trigPin, LOW);

  32. duration = pulseIn(echoPin, HIGH);
  33. distanceCm= duration*0.034/2;
  34. if (distanceCm <= DistanceSec)
  35. {

  36. if(distanceCm <= DistanceSec/2)
  37. {

  38. tone(buzzer, 10); // Send 1KHz sound signal...
  39. digitalWrite(ledPin1, LOW);
  40. digitalWrite(ledPin2, HIGH);
  41. delay(700);
  42. noTone(buzzer); // Stop sound...
  43. lcd.setCursor(0,0); // positionner le cursor a 0,0
  44. lcd.print("Distance: "); // Printe "Distance" sur LCD
  45. lcd.print(distanceCm); // Printe la valeur Obtenue sur LCD
  46. lcd.print(" cm "); // Printe l'unité sur LCD
  47. delay(10);
  48. lcd.setCursor(0,1);
  49. lcd.print("Angle : ");
  50. lcd.print(pos);
  51. lcd.print(" deg ");
  52. delay(2000);
  53. }
  54. else
  55. {
  56. digitalWrite(buzzer, HIGH);
  57. digitalWrite(ledPin2, LOW);
  58. digitalWrite(ledPin1, HIGH);
  59. delay(100);
  60. digitalWrite(buzzer, LOW);
  61. lcd.setCursor(0,0); // positionner le cursor a 0,0
  62. lcd.print("Distance: "); // Printe "Distance" sur LCD
  63. lcd.print(distanceCm); // Printe la valeur Obtenue sur LCD
  64. lcd.print(" cm "); // Printe l'unité sur LCD
  65. delay(10);
  66. lcd.setCursor(0,1);
  67. lcd.print("Angle : ");
  68. lcd.print(pos);
  69. lcd.print(" deg ");
  70. delay(2000);
  71. }
  72. }
  73. else{
  74. digitalWrite(buzzer, LOW);
  75. digitalWrite(ledPin1, LOW);
  76. digitalWrite(ledPin2, LOW);
  77. }

  78. lcd.setCursor(0,0); // positionner le cursor a 0,0
  79. lcd.print("Distance: "); // Printe "Distance" sur LCD
  80. lcd.print(distanceCm); // Printe la valeur Obtenue sur LCD
  81. lcd.print(" cm "); // Printe l'unité sur LCD
  82. delay(10);
  83. lcd.setCursor(0,1);
  84. lcd.print("Angle : ");
  85. lcd.print(pos);
  86. lcd.print(" deg ");
  87. delay(80); //attendre 100ms pour que le servo cherche sa position

  88. }
  89. for (pos = 180; pos >= 0; pos -= 1) { //
  90. myservo.write(pos); //
  91. digitalWrite(trigPin, LOW);
  92. delayMicroseconds(2);
  93. digitalWrite(trigPin, HIGH);
  94. delayMicroseconds(10);
  95. digitalWrite(trigPin, LOW);

  96. duration = pulseIn(echoPin, HIGH);
  97. distanceCm= duration*0.034/2;
  98. if (distanceCm <= DistanceSec){
  99. if(distanceCm <= DistanceSec/2)
  100. {
  101. tone(buzzer, 10); // Send 1KHz sound signal...
  102. digitalWrite(ledPin1, LOW);
  103. digitalWrite(ledPin2, HIGH);
  104. delay(700);
  105. noTone(buzzer); // Stop sound...
  106. lcd.setCursor(0,0); // positionner le cursor a 0,0
  107. lcd.print("Distance: "); // Printe "Distance" sur LCD
  108. lcd.print(distanceCm); // Printe la valeur Obtenue sur LCD
  109. lcd.print(" cm "); // Printe l'unité sur LCD
  110. delay(10);
  111. lcd.setCursor(0,1);
  112. lcd.print("Angle : ");
  113. lcd.print(pos);
  114. lcd.print(" deg ");
  115. delay(2000);
  116. }
  117. else
  118. {
  119. digitalWrite(buzzer, HIGH);
  120. digitalWrite(ledPin2, LOW);
  121. digitalWrite(ledPin1, HIGH);
  122. delay(100);
  123. digitalWrite(buzzer, LOW);
  124. lcd.setCursor(0,0); // positionner le cursor a 0,0
  125. lcd.print("Distance: "); // Printe "Distance" sur LCD
  126. lcd.print(distanceCm); // Printe la valeur Obtenue sur LCD
  127. lcd.print(" cm "); // Printe l'unité sur LCD
  128. delay(10);
  129. lcd.setCursor(0,1);
  130. lcd.print("Angle : ");
  131. lcd.print(pos);
  132. lcd.print(" deg ");
  133. delay(2000);
  134. }
  135. }
  136. else{
  137. digitalWrite(buzzer, LOW);
  138. digitalWrite(ledPin1, LOW);
  139. digitalWrite(ledPin2, LOW);
  140. }

  141. lcd.setCursor(0,0); //
  142. lcd.print("Distance: "); //
  143. lcd.print(distanceCm); //
  144. lcd.print(" cm ");
  145. delay(10);
  146. lcd.setCursor(0,1);
  147. lcd.print("Angle : ");
  148. lcd.print(pos);
  149. lcd.print(" deg ");
  150. delay(80);
  151. }
  152. }
复制代码

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 700 | 回复: 1480



手机版|

GMT+8, 2024-4-20 18:37 , Processed in 0.150732 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表