黄工无刷电机学习
直播中

tulin

12年用户 1225经验值
私信 关注
[问答]

请问超声波测距如何控制步进电机转动?

请问超声波测距如何控制步进电机转动?

回帖(1)

王琴

2021-10-15 11:37:39
功能实现
超声波测距控制步进电机,当超声波检测距离低于阈值距离,电机转动;反之电机则不转动。
威廉希尔官方网站 连接



接线图



源代码及注释

#include


// 这里设置步进电机旋转一圈是多少步
#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();
}
}
实验现象
超声波检测距离小于阈值距离,电机不转动








超声波检测距离高于阈值距离,电机转动





举报

更多回帖

发帖
×
20
完善资料,
赚取积分