【Arduino】超声波测距控制步进电机转动
功能实现超声波测距控制步进电机,当超声波检测距离低于阈值距离,电机转动;反之电机则不转动。电路连接接线图源代码及注释#include <Stepper.h>// 这里设置步进电机旋转一圈是多少步#define STEPS 100// attached to设置步进电机的步数和引脚Stepper stepper(STEPS, 8, 9, 10, 11);const int trig =
·
功能实现
超声波测距控制步进电机,当超声波检测距离低于阈值距离,电机转动;反之电机则不转动。
电路连接
接线图
源代码及注释
#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();
}
}
实验现象
超声波检测距离小于阈值距离,电机不转动
超声波检测距离高于阈值距离,电机转动
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献2条内容
所有评论(0)