ziyoudefeiji 2022-03-10 02:50 采纳率: 100%
浏览 236
已结题

arduino超声波控制180度舵机旋转转过头,一直卡齿有噪声

问题遇到的现象和发生背景

#include <Servo.h>

Servo myservo;

int TrgPin = A0; // 设置超声波发送引脚
int EcoPin = A1; // 设置超声波接收引脚
int PWM = 3; // 设置舵机引脚
float dist;

void setup() {

myservo.attach(PWM); //绑定舵机的引脚号
Serial.begin(9600); // 设置串口波特率
pinMode(TrgPin, OUTPUT); // 设置引脚为输出模式
pinMode(EcoPin, INPUT); // 设置引脚为接收模式
}

void loop() {

digitalWrite(TrgPin, LOW); // 向超声波引脚输出低位电压0
delayMicroseconds(8); // 等待8毫秒
digitalWrite(TrgPin, HIGH); //向超声波引脚输出高位电压1
delayMicroseconds(10); // 等待10毫秒
digitalWrite(TrgPin, LOW); //向超声波引脚输出低位电压0
dist = pulseIn(EcoPin, HIGH) /58; // 读取接收超声波数据,并且将模拟信号换算成cm
Serial.print("Distance:"); // 向串口发送数据
Serial.print(dist); // 向串口发送数据
Serial.println("cm"); // 向串口发送数据
delay(300); // 等待 800毫秒

if (dist <10){ // 判断距离是否小过10CM
myservo.write(60); // 控制舵机旋转
delay(20); // 等待 20毫秒

} else {
myservo.write(0); // 控制舵机旋转
}
}

运行结果及报错内容

超声波检测到距离小于10cm时反而不转动,大于10cm反而动,转动时超过了180度,由于我的舵机是180度的,超过后卡齿发出巨大的噪声

我想要达到的结果

超声波检测到距离小于10cm时转动60度,大于10cm不动

展开全部

  • 写回答

1条回答 默认 最新

  • 火星人不在地球 2022-03-11 01:59
    关注

    1.用串口看看超声波数据正常吗。
    2.单独用舵机控制看看正常吗。
    都正常再看看。。。(感觉应该是舵机控制的问题,不是就打我脸,嘻嘻)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    ziyoudefeiji 2022-03-11 03:25

    串口看超声波的距离是正常的

    回复
    火星人不在地球 回复 ziyoudefeiji 2022-03-11 03:48

    myservo.write(60); // 控制舵机旋转 这句的作用是把舵机转动到60°吧 声纳数据在10cm内它已经转到60°了,那么舵机不动,如果不在60°位置则转动到60°位置,下一次如果还在10CM内,舵机就是一直不动的,根据你的代码来看现象是正常的。如果在10CM外,舵机不在0°位置,则需要转回去,可能是因为机械结构卡住了吧。
    所以需要只运行舵机控制,看看从0-180是否可以顺利的转动到每个位置。
    不知道你能不能明白,先这样吧。

    回复
    ziyoudefeiji 回复 火星人不在地球 2022-03-11 05:29

    我单独控制舵机试了一下是正常的,然后又把180度舵机改成了360度的试了一下,发现它在小于10时和大于10时都转动且不停止,不复位,只是小于10时转动较慢

    回复
    展开全部6条评论
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 3月18日
  • 已采纳回答 3月11日
  • 创建了问题 3月10日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部