问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

arduino舵机控制问题

发布网友 发布时间:2022-05-01 21:08

我来回答

2个回答

热心网友 时间:2022-06-23 11:32

  舵机是一种位置伺服的驱动器,主要是由外壳、电路板、无核心马达、齿轮与位置检测器所构成。其工作原理是由接收机或者单片机发出信号给舵机,其内部有一个基准电路,产生周期为20ms,宽度为1.5ms 的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。经由电路板上的IC 判断转动方向,再驱动无核心马达开始转动,透过减速齿轮将动力传至摆臂,同时由位置检测器送回信号,判断是否已经到达定位。适用于那些需要角度不断变化并可以保持的控制系统。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。一般舵机旋转的角度范围是0 度到180 度。
  舵机有很多规格,但所有的舵机都有外接三根线,分别用棕、红、橙三种颜色进行区分,由于舵机品牌不同,颜色也会有所差异,棕色为接地线,红色为电源正极线,橙色为信号线。
  舵机的转动的角度是通过调节PWM(脉冲宽度调制)信号的占空比来实现的,标准PWM(脉冲宽度调制)信号的周期固定为20ms(50Hz),理论上脉宽分布应在1ms到2ms 之间,但是,事实上脉宽可由0.5ms 到2.5ms 之间,脉宽和舵机的转角0°~180°相对应。有一点值得注意的地方,由于舵机牌子不同,对于同一信号,不同牌子的舵机旋转的角度也会有所不同。
   用Arino 控制舵机的方法有两种,一种是通过Arino 的普通数字传感器接口产生占空比不同的方波,模拟产生PWM 信号进行舵机定位,第二种是直接利用Arino 自带的Servo 函数进行舵机的控制,这种控制方法的优点在于程序编写,缺点是只能控制2 路舵机,因为Arino 自带函数只能利用数字9、10 接口。Arino 的驱动能力有限,所以当需要控制1 个以上的舵机时需要外接电源。
  方法一:

  将舵机接数字 9 接口上。
  编写一个程序让舵机转动到用户输入数字所对应的角度数的位置,并将角度打印显示到屏幕上。
  
  int servopin=9;//定义数字接口9 连接伺服舵机信号线
  int myangle;//定义角度变量
  int pulsewidth;//定义脉宽变量
  int val;
  void servopulse(int servopin,int myangle)//定义一个脉冲函数
  {
  pulsewidth=(myangle*11)+500;//将角度转化为500-2480 的脉宽值
  digitalWrite(servopin,HIGH);//将舵机接口电平至高
  delayMicroseconds(pulsewidth);//延时脉宽值的微秒数
  digitalWrite(servopin,LOW);//将舵机接口电平至低
  delay(20-pulsewidth/1000);
  }
  void setup()
  {
  pinMode(servopin,OUTPUT);//设定舵机接口为输出接口
  Serial.begin(9600);//连接到串行端口,波特率为9600
  Serial.println("servo=o_seral_simple ready" ) ;
  }
  void loop()//将0 到9 的数转化为0 到180 角度,并让LED 闪烁相应数的次数
  {
  val=Serial.read();//读取串行端口的值
  if(val>'0'&&val<='9')
  {
  val=val-'0';//将特征量转化为数值变量
  val=val*(180/9);//将数字转化为角度
  Serial.print("moving servo to ");
  Serial.print(val,DEC);
  Serial.println();
  for(int i=0;i<=50;i++) //给予舵机足够的时间让它转到指定角度
  {
  servopulse(servopin,val);//引用脉冲函数
  }
  }
  }
  方法二
  先具体分析一下 Arino 自带的Servo 函数及其语句,来介绍一下舵机函数的几个常用语句吧。
  1、attach(接口)——设定舵机的接口,只有数字9 或10 接口可利用。
  2、write(角度)——用于设定舵机旋转角度的语句,可设定的角度范围是0°到180°。
  3、read()——用于读取舵机角度的语句,可理解为读取最后一条write()命令中
  的值。
  4、attached()——判断舵机参数是否已发送到舵机所在接口。
  5、detach()——使舵机与其接口分离,该接口(数字9 或10 接口)可继续被用作PWM 接口。
  注:以上语句的书写格式均为“舵机变量名.具体语句()”例如:myservo.attach(9)。
  仍然将舵机接在数字9 接口上即可。
  参考源程序B:
  #include <Servo.h>//定义头文件,这里有一点要注意,可以直接在Arino 软件菜单栏单击Sketch>Importlibrary>Servo,调用Servo 函数,也可以直接输入#include <Servo.h>,但是在输入时要注意在#include 与<Servo.h>之间要有空格,否则编译时会报错。
  Servo myservo;//定义舵机变量名
  void setup()
  {
  myservo.attach(9);//定义舵机接口(9、10 都可以,缺点只能控制2 个)
  }
  void loop()
  {
  myservo.write(90);//设置舵机旋转的角度
  }

热心网友 时间:2022-06-23 11:32

char data;
if(Serial.available>0){
data = Serial.read();
}
最好写成这样
两边写的端口号和比特率多少 都一样吗
SendData((char*)&val,sizeof(val));
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果手机微信怎么换漂亮字体(苹果手机微信怎么换行输入) 有什么好用的app转换字体 手写转文字的软件 erp可以看评论地址吗 淘宝评论url是什么意思? 揭秘:码牌支付风控升级,背后真相揭秘 电脑电视直播软件哪个好用什么软件好电脑看电视直播 潼南子同街学区是哪些 三极管BU406价格和参数? 火锅料放在冰柜忘了插电一个星期给会坏了吗 火锅的设备有哪些 arduino 控制舵机 我的名字有个曼字取个微信名 手机上网流量2800兆等于多少gb? 简单微信名带曼字的 有谁知道带曼字的QQ网名呀? 带曼字的QQ网名有哪些? 通用篮球适合打水泥地不 翻毛篮球适合水泥地打吗? 什么型号的斯伯丁篮球最适合在室外的水泥地上打? 什么牌子的篮球适合在水泥地上打 8000M是多少G delphi开发USB时用到HidController控件,里面有这么一个 CurrentDevice.OnData := ShowRead 8000M流量是多少 什么篮球适合在室外打,水泥地ProSelect专选的篮球能打吗? 8000MB等于多少G啊? 搜狗输入法 str数据文件格式出错 Delphi 时间变量提示Invalid floating point operation,弄了一天都弄不过来 在室外打篮球用什么材质的篮球比较好呢? 水泥地。。 请问在水泥地上打篮球,哪种材质的篮球更好,篮球鞋应该选什么材质的 java如何读取excel中报表(柱状图)的信息 arduino控制舵机角度不正常 Arduino控制舵机的程序 怎样让arduino同时控制两个舵机 如何用arduino做舵机控制板 新人求助,关于arduino控制舵机的 带曼字的七言绝句,主要目的是改一个7个字带漫字的诗 arduino板控制舵机的问题!! arduino 串口控制舵机 按键控制 舵机 arduino arduino如何随机控制舵机(比如9个舵机,随机控制一个或两个) arduino控制多个舵机的代码 Arduino可以控制几路舵机 数独游戏在线玩?这款游戏玩的时候是不是在线的啊,哪里可以在线玩的啊。 arduino怎样控制9g舵机 关于Arduino 控制舵机方向的问题 Arduino同时控制八个舵机,怎么实现并行 在哪里可以玩到数独游戏? 谁有专门玩《数独》游戏的网站? 数独在线小游戏?游戏都玩腻了,朋友说这个比较有挑战,想试试。 黑天鹅理论的介绍