arduino超声波传感器控制舵机转动
时间: 2025-01-03 17:39:20 浏览: 13
### 使用Arduino控制超声波传感器驱动舵机转动
超声波传感器能够检测物体的距离并将此信息传递给Arduino,而Arduino则可以根据所获得的数据来决定如何操作舵机。下面是一个简单的例子说明这一过程。
#### 硬件连接
- 将超声波传感器的VCC和GND分别接到Arduino的5V电源和接地端子上。
- 把超声波传感器的Trig引脚连到Arduino的一个数字I/O口(比如D2),Echo引脚也连到另一个数字I/O口(例如D3)[^3]。
- 对于舵机而言,其信号线应当接入支持PWM功能的引脚之一;这里假设使用的是D9作为舵机控制引脚[^2]。
#### 示例代码
```cpp
#include <Servo.h>
// 定义变量存储触发与回响引脚编号以及最小最大测距范围
const int trigPin = 2;
const int echoPin = 3;
long duration; // 存储往返时间
int distance; // 记录实际距离(cm)
Servo myServo; // 创建servo对象实例化myServo
void setup() {
pinMode(trigPin, OUTPUT); // 设置trigPin为输出模式
pinMode(echoPin, INPUT); // 设置echoPin为输入模式
Serial.begin(9600);
myServo.attach(9); // 绑定舵机至指定引脚(D9)
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH); // 获取脉冲宽度
distance= duration * 0.034 / 2; // 计算目标距离
if (distance >= 2 && distance <= 400) { // 当有效范围内有障碍物时调整角度
Serial.print("Distance: ");
Serial.println(distance);
int angle = map(distance, 2, 400, 0, 180); // 映射距离值到对应的角度区间内
myServo.write(angle); // 向舵机发出指令改变位置
}
}
```
这段程序实现了当超声波传感器探测到一定范围内的物体时,会依据该物体离传感器之间的距离映射成一个介于0度~180度之间变化的角度,并让舵机按照这个新的设定角旋转相应的位置[^5]。
阅读全文