2017-01-23 49 views
-1

我试图通过蓝牙来接收命令时打开/关闭门的自动门。伺服电机的不良行为

所有我想要的伺服做的是:

  1. 留在了Arduino的供电稳定。 (目前它旋转到一定角度,并在Arduino上电时恢复)。

  2. 从0度旋转到90度并停止,在接收到另一个命令时,它应该从90度旋转到0度并停止。

这是我的代码:

else if (val=='i'){ 
myservo.write(0); 
delay(4000); 
for(pos = 0; pos <= 90; pos += 1){ 
    myservo.write(pos);    
    delay(15);      
} 
} 
    else if (val=='j'){ 
myservo.write(0); 
delay(4000); 
for(pos = 90; pos >= 0; pos -= 1){ 
    myservo.write(pos);    
    delay(15);      
    } 
    } 
+1

您应该提及您正在使用的**电机**的特定*型号*,并提供*最小的可重现示例*。另外,你应该描述* Arduino *的**期望行为**和你的代码是什么,以及你重新观察的行为*是什么。事实上,你的帖子甚至不包含问题,因此它不清楚。 –

+0

提供更多关于开机和这些动作的时间信息。神的名字是什么是一定的角度。 1°或176°还是什么?电机如何连接? – Piglet

+0

型号: - Tower Pro SG90 当我启动我的arduino时,伺服电机前后转动一定角度。我不知道确切的角度,但它是大约20度。当我在手机上的应用程序上点击开门按钮时,它会通过蓝牙HC-05传递'我'。在这种情况下,我希望它从0度旋转到90度。但是它以正常速度从0旋转到90,并且突然再次变为0度,以正常速度开始旋转到90度,并且在4-5次之后,电机刚刚达到0度并开始产生噪音。 –

回答

1
  1. 这是伺服系统的电子设备的特征。在上电之前或在上电几毫秒内向伺服提供PWM信号。如果您想继续使用Arduino,引导加载程序会等待几秒钟,在此期间伺服器没有信号,因此添加一个晶体管以切换启动代码中的最后一个东西。如果您可以直接编程微控制器并移除Arduino引导加载程序,那么微控制器应该开始快速执行您的伺服控制,而不会有明显的故障。在任何一种情况下,伺服都会跳到您在启动时所告诉的位置,而不是随机的位置;您可以将最后一个指令位置保存在EEROM中,这样跳跃就不那么明显了,但是当没有动力时,伺服器在机械加载时会移动,因此可能会跳转。没有办法说'留在你现在的位置'给遥控伺服器。
  2. val == 'i'val == 'j'分支机构从90慢慢旋转到零或零到90还记得你的位置,并从该位置移动到所需位置之前没有移动到零之前快速移动的伺服为零。

从机械上看,伺服库控制的伺服类型不够强,无法打开或关闭正常的门;如果它是娃娃屋或猫皮瓣的门,你会没事的,但除此之外,你应该使用更强大的执行器和终点挡板以及一些力传感器,这样你就不会伤害人。