【Arduino】超声波测距控制步进电机转动

功能实现
超声波测距控制步进电机,当超声波检测距离低于阈值距离,电机转动;反之电机则不转动。
电路连接
在这里插入图片描述
接线图
在这里插入图片描述

源代码及注释

#include <Stepper.h>

// 这里设置步进电机旋转一圈是多少步
#define STEPS 100

// attached to设置步进电机的步数和引脚
Stepper stepper(STEPS, 8, 9, 10, 11);
const int trig = 6; // 触发信号
const int echo = 7; // 反馈信号

// 定义变量用来存储历史读数
int length=10;//阈值距离
float S;
void setup()
{
  Serial.begin(9600);
  // 设置电机每分钟的转速为90步
  stepper.setSpeed(90);
  pinMode(8, OUTPUT);    //设置引脚为输出引脚
  pinMode(9, OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(echo, INPUT);
  pinMode(trig, OUTPUT);
}

void loop()
{
  long IntervalTime=0; //定义一个时间变量
  while(1){
  digitalWrite(trig, 1);//置高电平
  delayMicroseconds(15);//延时15us
  digitalWrite(trig, 0);//设为低电平
  IntervalTime=pulseIn(echo, HIGH);//用自带的函数采样反馈的高电平的宽度,单位us
  S=IntervalTime/58.00; //使用浮点计算出距离,单位cm
  turntest();
  S=0;IntervalTime=0;//对应的数值清零。
  delay(500);//延时间隔决定采样的频率,根据实际需要变换参数
  }
}
void stop(){
   digitalWrite(8,LOW);
   digitalWrite(9,LOW);
   digitalWrite(10,LOW);
   digitalWrite(11,LOW);
   delay(2000);
}

void turntest(){
if(S>length){
  Serial.print("距离过长:");
  Serial.print(S);//通过串口输出距离数值
  Serial.println("  步进电机开始转动");
  stepper.step(256);
}else{
  Serial.print("距离:");
  Serial.print(S);//通过串口输出距离数值
  Serial.println("  步进电机不转动转动");
  stop();
}
}

实验现象
超声波检测距离小于阈值距离,电机不转动
在这里插入图片描述
在这里插入图片描述
超声波检测距离高于阈值距离,电机转动
在这里插入图片描述
在这里插入图片描述

可以通过以下步骤来实现: 1. 连接超声波模块和电机驱动模块到Arduino开发板上。超声波模块需要连接到开发板的数字引脚,电机驱动模块需要连接到开发板的PWM引脚。 2. 编写程序,通过超声波模块测量距离,根据距离控制电机的转动。具体实现可以使用Arduino的pulseIn函数来读取超声波模块的输出信号,然后根据距离控制电机的转速。 3. 将程序上传到Arduino开发板上,然后将超声波模块和电机驱动模块连接到外部电源。 4. 测试程序,观察电机的转动是否与超声波测量的距离有关。 以下是一个简单的示例代码,仅供参考: ``` #define trigPin 9 #define echoPin 10 #define motorPin 3 void setup() { pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(motorPin, OUTPUT); Serial.begin(9600); } void loop() { long duration, distance; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = duration / 58.2; Serial.print(distance); Serial.println(" cm"); if (distance > 20) { analogWrite(motorPin, 0); } else { analogWrite(motorPin, 255); } delay(100); } ``` 在这个示例代码中,我们使用了一个超声波模块,它的Trig引脚连接到Arduino的数字引脚9,Echo引脚连接到数字引脚10。我们还使用了一个电机驱动模块,它的控制引脚连接到Arduino的PWM引脚3。 在loop函数中,我们首先使用超声波模块读取距离,并将距离打印到串口监视器中。然后根据距离控制电机的转速:如果距离大于20厘米,则电机停止转动;如果距离小于等于20厘米,则电机以最大速度(255)转动。最后,我们在每次循环结束时延迟100毫秒。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏小泡泡#

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值