在本篇文章中,我们使用Arduino开发板和超声波传感器设计了一款雷达模型,用于检测和测距。RADAR是一种物体检测系统,它使用无线电波来识别物体的范围、高度、方向和速度。雷达天线发射的无线电波脉冲会从其路径上的任何物体反射回来。物体返回一部分波,并被接收器接收到,该部分与发送器在同一直线上。
此Arduino雷达项目旨在实现基于Arduino开发板的雷达系统原型,能够检测静止和移动的物体。
所需的组件 为了使用超声波传感器设计Arduino雷达模型,我们需要以下组件。 ● Arduino UNO开发板 ● 伺服电机SG90 ● 超声波传感器HC-SR04 ● 蜂鸣器 ● 1602 LCD显示屏 ● 面包板 ● 连接线
使用超声波传感器的Arduino雷达模型的框图和连接方式 以下是Arduino雷达模型框图:
项目核心采用Arduino UNO开发板,通过超声波检测前面的物体,使用电机改变角度,并将结果显示在LCD显示屏上。具体的电路连接如下:
使用超声波传感器的Arduino雷达原型的工作过程 Arduino开发板向超声波传感器HC-SR04的触发引脚发送+ 5V信号,该信号触发传感器,然后在与超声波传感器HC-SR04一起机械安装的伺服电机上提供旋转动作,以便它可以检测到运动物体并定位在180度内。
Arduino在传感器的TRIGGER引脚上发送(10S)的HIGH脉冲宽度,以重新生成一系列超声波在空气中传播,直到接触到障碍物,然后以相反的方向朝着传感器引脚ECHO返回。传感器检测脉冲的宽度以计算距离。传感器在发送期间在引脚ECHO上的信号保持在HIGH位置,从而测量超声波往返的持续时间,从而确定距离。
LCD显示屏显示计算出的距离和旋转角度。蜂鸣器是一个附加组件,当检测到障碍物时,它会响起,同时LED点亮。这两个LED和蜂鸣器一起确定物体所在的区域(近处或远处)。
程序源代码 - #include <Servo.h>
- #include <LiquidCrystal.h>
- Servo myservo;
- LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7)
- int pos = 0; // la position initiale du servo moteur
- const int trigPin = 9;
- const int echoPin = 10;
- const int moteur = 11;
- const int buzzer = 12;
- const int ledPin1 = 14;
- const int ledPin2 = 15;
- float distanceCm, DistanceSec,duration;
- void setup() {
- myservo.attach(moteur); // attache le Servo moteur a la pin numéro 11
- lcd.begin(16,2); // Initialiser l'interface de Lcd avec leurs Dimensions
- pinMode(trigPin, OUTPUT);
- pinMode(echoPin, INPUT);
- pinMode(buzzer, OUTPUT);
- pinMode(ledPin1, OUTPUT);
- pinMode(ledPin2, OUTPUT);
- DistanceSec=20;
- }
- void loop() {
- for (pos = 0; pos <= 180; pos += 1) { // aller de 0 a 180 degée
- // in steps of 1 degree
- myservo.write(pos); // Programmer le Servo pour aller a la position (pos)
- digitalWrite(trigPin, LOW);
- delayMicroseconds(2);
- digitalWrite(trigPin, HIGH); //envoyer une impulsion de 10 micro seconds
- delayMicroseconds(10);
- digitalWrite(trigPin, LOW);
- duration = pulseIn(echoPin, HIGH);
- distanceCm= duration*0.034/2;
- if (distanceCm <= DistanceSec)
- {
- if(distanceCm <= DistanceSec/2)
- {
- tone(buzzer, 10); // Send 1KHz sound signal...
- digitalWrite(ledPin1, LOW);
- digitalWrite(ledPin2, HIGH);
- delay(700);
- noTone(buzzer); // Stop sound...
- lcd.setCursor(0,0); // positionner le cursor a 0,0
- lcd.print("Distance: "); // Printe "Distance" sur LCD
- lcd.print(distanceCm); // Printe la valeur Obtenue sur LCD
- lcd.print(" cm "); // Printe l'unité sur LCD
- delay(10);
- lcd.setCursor(0,1);
- lcd.print("Angle : ");
- lcd.print(pos);
- lcd.print(" deg ");
- delay(2000);
- }
- else
- {
- digitalWrite(buzzer, HIGH);
- digitalWrite(ledPin2, LOW);
- digitalWrite(ledPin1, HIGH);
- delay(100);
- digitalWrite(buzzer, LOW);
- lcd.setCursor(0,0); // positionner le cursor a 0,0
- lcd.print("Distance: "); // Printe "Distance" sur LCD
- lcd.print(distanceCm); // Printe la valeur Obtenue sur LCD
- lcd.print(" cm "); // Printe l'unité sur LCD
- delay(10);
- lcd.setCursor(0,1);
- lcd.print("Angle : ");
- lcd.print(pos);
- lcd.print(" deg ");
- delay(2000);
- }
- }
- else{
- digitalWrite(buzzer, LOW);
- digitalWrite(ledPin1, LOW);
- digitalWrite(ledPin2, LOW);
- }
- lcd.setCursor(0,0); // positionner le cursor a 0,0
- lcd.print("Distance: "); // Printe "Distance" sur LCD
- lcd.print(distanceCm); // Printe la valeur Obtenue sur LCD
- lcd.print(" cm "); // Printe l'unité sur LCD
- delay(10);
- lcd.setCursor(0,1);
- lcd.print("Angle : ");
- lcd.print(pos);
- lcd.print(" deg ");
- delay(80); //attendre 100ms pour que le servo cherche sa position
- }
- for (pos = 180; pos >= 0; pos -= 1) { //
- myservo.write(pos); //
- digitalWrite(trigPin, LOW);
- delayMicroseconds(2);
- digitalWrite(trigPin, HIGH);
- delayMicroseconds(10);
- digitalWrite(trigPin, LOW);
- duration = pulseIn(echoPin, HIGH);
- distanceCm= duration*0.034/2;
- if (distanceCm <= DistanceSec){
- if(distanceCm <= DistanceSec/2)
- {
- tone(buzzer, 10); // Send 1KHz sound signal...
- digitalWrite(ledPin1, LOW);
- digitalWrite(ledPin2, HIGH);
- delay(700);
- noTone(buzzer); // Stop sound...
- lcd.setCursor(0,0); // positionner le cursor a 0,0
- lcd.print("Distance: "); // Printe "Distance" sur LCD
- lcd.print(distanceCm); // Printe la valeur Obtenue sur LCD
- lcd.print(" cm "); // Printe l'unité sur LCD
- delay(10);
- lcd.setCursor(0,1);
- lcd.print("Angle : ");
- lcd.print(pos);
- lcd.print(" deg ");
- delay(2000);
- }
- else
- {
- digitalWrite(buzzer, HIGH);
- digitalWrite(ledPin2, LOW);
- digitalWrite(ledPin1, HIGH);
- delay(100);
- digitalWrite(buzzer, LOW);
- lcd.setCursor(0,0); // positionner le cursor a 0,0
- lcd.print("Distance: "); // Printe "Distance" sur LCD
- lcd.print(distanceCm); // Printe la valeur Obtenue sur LCD
- lcd.print(" cm "); // Printe l'unité sur LCD
- delay(10);
- lcd.setCursor(0,1);
- lcd.print("Angle : ");
- lcd.print(pos);
- lcd.print(" deg ");
- delay(2000);
- }
- }
- else{
- digitalWrite(buzzer, LOW);
- digitalWrite(ledPin1, LOW);
- digitalWrite(ledPin2, LOW);
- }
- lcd.setCursor(0,0); //
- lcd.print("Distance: "); //
- lcd.print(distanceCm); //
- lcd.print(" cm ");
- delay(10);
- lcd.setCursor(0,1);
- lcd.print("Angle : ");
- lcd.print(pos);
- lcd.print(" deg ");
- delay(80);
- }
- }
复制代码
|