arduino舵机控制问题 arduino板控制舵机的问题!!

arduino\u5f00\u5173\u63a7\u5236\u8235\u673a\u7684\u95ee\u9898

\u672c\u671f\u521b\u5ba2G\u574a\u6559\u670b\u53cb\u4eec\u4f7f\u7528Arduino\u7f16\u5199\u4e00\u6bb5\u4f7f\u7528\u7535\u4f4d\u5668\u63a7\u5236\u8235\u673a\u7684\u5c0f\u7a0b\u5e8f

\u8fd9\u4e2a\u65f6\u5019\u662f\u7684\u3002
\u6b64\u65f6\u8fd0\u884c\u7684\u901f\u5ea6\u4e0e\u53cd\u5e94\uff0c\u5c31\u662f\u8235\u673a\u7684\u6700\u5927\u80fd\u529b\u4e86\u3002
\u53ea\u53ef\u4ee5\u6bd4\u8fd9\u4e2a\u4f4e\u3002
\u60f3\u518d\u9ad8\uff0c\u53ea\u80fd\u6362\u8235\u673a\u3002

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

char data;
if(Serial.available>0){
data = Serial.read();
}
最好写成这样
两边写的端口号和比特率多少 都一样吗
SendData((char*)&val,sizeof(val));

第42期《Arduino入门》善假篇 05:舵机的PWM控制原理



  • arduino鑸垫満鎺у埗闂
    绛旓細鐢ˋrduino 鎺у埗鑸垫満鐨勬柟娉曟湁涓ょ锛涓绉嶆槸閫氳繃Arduino 鐨勬櫘閫氭暟瀛椾紶鎰熷櫒鎺ュ彛浜х敓鍗犵┖姣斾笉鍚岀殑鏂规尝锛屾ā鎷熶骇鐢烶WM 淇″彿杩涜鑸垫満瀹氫綅锛岀浜岀鏄洿鎺ュ埄鐢ˋrduino 鑷甫鐨凷ervo 鍑芥暟杩涜鑸垫満鐨勬帶鍒讹紝杩欑鎺у埗鏂规硶鐨勪紭鐐瑰湪浜庣▼搴忕紪鍐欙紝缂虹偣鏄彧鑳芥帶鍒2 璺埖鏈猴紝鍥犱负Arduino 鑷甫鍑芥暟鍙兘鍒╃敤鏁板瓧9銆10 鎺ュ彛銆侫rduino 鐨勯┍...
  • arduino濡備綍鎺у埗鑸垫満浠ヤ竴瀹氱殑閫熷害杞姩涓涓搴﹀仠姝
    绛旓細1銆佸皢鑸垫満鐨勭數婧愬拰鎺ュ湴寮曡剼鍒嗗埆杩炴帴鍒癆rduino鐨勭數婧愬拰鎺ュ湴寮曡剼涓婏紝灏嗚埖鏈虹殑淇″彿寮曡剼杩炴帴鍒癆rduino鐨勬暟瀛楀紩鑴氫笂銆2銆佸湪ArduinoIDE涓紪鍐欎唬鐮佹潵鎺у埗鑸垫満锛屽彲浠ヤ娇鐢⊿ervo搴撴潵鎺у埗鑸垫満锛屽湪浠g爜涓紝闇瑕佸畾涔夎埖鏈哄璞″苟鎸囧畾瀹冭繛鎺ュ埌鍝釜寮曡剼涓婏紝鍙互浣跨敤write()鍑芥暟灏嗚埖鏈鸿浆鍔ㄥ埌鐗瑰畾鐨勮搴︼紝骞朵娇鐢╠elay()鍑芥暟鏉ユ帶鍒...
  • 鍦arduino涓婁负浠涔坰g90鑸垫満娌℃湁鎺wm淇″彿寮曡剼涔熻兘椹卞姩?
    绛旓細SG90鑸垫満鍦ㄦ病鏈夋帴PWM淇″彿寮曡剼鐨勬儏鍐典笅涔熻兘椹卞姩锛鍙兘鏄洜涓鸿埖鏈哄唴閮ㄨ嚜甯︿簡PWM鎺у埗鍣銆傝繖绉嶆帶鍒跺櫒鍙互灏嗚緭鍏ョ殑鐩存祦鐢靛帇淇″彿杞崲涓鸿埖鏈烘墍闇鐨凱WM淇″彿锛屼粠鑰屾帶鍒惰埖鏈虹殑杞姩瑙掑害銆傚洜姝わ紝鍗充娇娌℃湁杩炴帴鍒癆rduino鐨凱WM寮曡剼锛孲G90鑸垫満浠嶇劧鍙互閫氳繃鐩存祦鐢靛帇淇″彿杩涜椹卞姩銆備絾鏄紝闇瑕佹敞鎰忕殑鏄紝涓嶄娇鐢≒WM鎺у埗鍙兘浼氬鑸垫満...
  • 鎯冲仛涓涓arduino uno绾㈠閬ユ帶鎺у埗鑸垫満鐨勫疄楠,鎬绘槸涓嶆垚鍔
    绛旓細鎯冲仛涓涓arduino uno绾㈠閬ユ帶鎺у埗鑸垫満鐨勫疄楠,鎬绘槸涓嶆垚鍔 5 涓嬮潰鏄唬鐮,鍐欏叆涔嬪悗鎸夌孩澶栭仴鎺у櫒,鑸垫満鍋跺皵浼氭姈鍔ㄤ竴涓,涔熶笉鐭ラ亾鏄笉鏄浆鍒颁簡瑙掑害,鎯冲挩璇笅鏄▼搴忓摢閲岀殑闂#include"InfraredRemote.h"#include<Servo.h>//寮曞叆libServomyservo;/... 涓嬮潰鏄唬鐮,鍐欏叆涔嬪悗鎸夌孩澶栭仴鎺у櫒,鑸垫満鍋跺皵浼氭姈鍔ㄤ竴涓,涔熶笉鐭ラ亾鏄...
  • arduino鑸垫満杞埌90搴﹀仠姝
    绛旓細1銆佺▼搴忚璁¢棶棰橈細浣犵殑绋嬪簭璁捐鍙兘鏈夐棶棰锛屽鑷磋埖鏈哄湪杞姩鍑犳涔嬪悗鍋滄銆傛鏌ヤ竴涓嬬▼搴忥紝鐪嬬湅鏄惁鏈夐昏緫閿欒鎴栬呬唬鐮佺己闄枫2銆渚涚數闂锛氳埖鏈洪渶瑕佺ǔ瀹氱殑鐢垫簮渚涘簲锛屽鏋滅數婧愪笉绋冲畾锛屽彲鑳戒細瀵艰嚧鑸垫満鍦ㄨ浆鍔ㄥ嚑娆′箣鍚庡仠姝傛鏌ヤ竴涓嬩緵鐢电郴缁燂紝鐪嬬湅鏄惁瀛樺湪鐢靛帇娉㈠姩鎴栬呯數婧愪笉绋冲畾鐨勬儏鍐点3銆佺數鏈鸿繃鐑細濡傛灉鑸垫満杩炵画...
  • Arduino Uno鎬庝箞鐢ㄥ洓涓彉浣嶅櫒鎺у埗鍥涗釜鑸垫満,闈㈠寘鏉夸笂闇瑕佸姞棰濆鐢垫簮鍚...
    绛旓細鎺у埗鑸垫満鏈濂芥槸澶栨帴鐢垫簮锛屽洓涓數浣嶅櫒鐨勮緭鍑哄垎鍒帴鍥涗釜妯℃嫙杈撳叆鎺ュ彛姣斿A0锛孉1锛孉2锛孉3锛屽洓涓埖鏈哄垎鍒帴鍥涗釜鏁板瓧寮曡剼锛屾瘮濡2,3,4,5锛孉0鎺у埗2,A1鎺у埗3浠ユ绫绘帹 绋嬪簭锛氫竴涓數浣嶅櫒鎺у埗涓涓埖鏈虹殑绋嬪簭鍐欏洓閬嶄慨鏀逛笅瀵瑰簲鐨勫紩鑴氬氨鍙互浜
  • 鍏充簬arduino椹卞姩鑸垫満鐨勭▼搴闂銆備互涓嬫槸鎴戠殑绋嬪簭,涓轰綍杞60搴︿箣鍚庝笉...
    绛旓細鍙互杩欐牱锛歷oid loop(){ myservo.write(0); //鑸垫満杞姩鍒扮浉搴旇搴 delay(500);myservo.write(60);delay(500);} 鍔犱釜寤舵椂銆 鍥犱负鑸垫満浠0-60瑕佹湁涓椂闂达紝浣犲師鏉ョ殑绋嬪簭锛屾病绛夊埌鑸垫満杞埌60搴﹀憿锛屽氨鍙堣瀹冭浆鍥0搴︼紝褰撶劧涓嶈浜嗐傚鏋滆缁欏畾杞姩閫熷害 锛屼綘鍙互鐩存帴鐢ㄥ簱渚嬬▼锛歴ervo-sweep.
  • arduino鎸夐挳鎺у埗鑸垫満鐐瑰姩
    绛旓細鐪嬩竴涓鑸垫満鎺у埗鍣ㄤ富鑺墖鏃佽竟鐨勫弻鎺掗拡锛屼娇鐢╮s232鏉ユ帶鍒剁殑鏃跺欐槸鏈夋潯绾垮附鐨勶紝鎮ㄨ浣跨敤arduino鎺у埗闇瑕佸皢鏉$嚎甯芥媶闄わ紝鐢ㄥ洓鏍规潨閭︾嚎杩炴帴鍐呬晶鐨勬帓閽堝拰uno鎺у埗鍣紝杩炴帴涔嬪墠灏嗙▼搴忓鍏ュ埌uno鎺у埗鍣ㄤ腑锛屾帴绾块『搴忎负锛歵x-rx锛宺x-tx锛+鎺ョ數婧愭锛-鎺nd鐒跺悗缁欒埖鏈轰緵鐢碉紝灏卞彲浠ヤ娇鐢╱no鎺у埗鍣ㄦ潵鎺у埗32璺埖鏈烘帶鍒跺櫒...
  • 姹備竴浣嶅ぇ绁炲府蹇欒В鍐arduino鏉鎺у埗鑸垫満鐨闂(淇敼void loop閲岀殑绋嬪簭...
    绛旓細0); //鍚﹀垯杞洖0浣 } delay(15); // 绛夊緟鐢垫満鏃嬭浆鍒扮洰鏍囪搴鑸垫満鐨勮浆鍔ㄩ熷害鍙栧喅浜庤捣濮嬭搴﹀拰鐩爣瑙掑害鐨勫樊锛屽樊鍒秺澶ц浆寰楄秺蹇紝褰撴帴杩戞椂灏辨斁鎱㈣搴︺傛墍浠ユ病鏈変笓闂ㄧ殑鍑芥暟鎺у埗杞熴備絾鍦ㄥぇ瑙掑害杞姩鏃讹紝浣犲彲浠ョ敤绋嬪簭鎶婂畠璁炬垚鍑犱釜灏忚搴﹂掕繘锛屽姞涓婂欢鏃禿elay()锛...
  • 杩欐槸涓涓arduino鐨勬寜閿鎺у埗鑸垫満鏉ュ洖杞姩鐨勭▼搴,鍙寜閿彧鍝嶅簲涓娆,绗...
    绛旓細浣犵殑绋嬪簭inp鍙涓娆★紝濡傛灉鎸夐敭鎸変笅灏辫繘鍘绘寰幆锛屼竴娆″悗灏辨病鍙嶅簲浜嗐傛渶鍚庣殑while閫昏緫鏈闂銆
  • 扩展阅读:arduino智能小车机械臂 ... arduino控制总线舵机 ... 为什么不建议儿童感统训练 ... 常见的arduino仿真软件 ... 舵机arduino连接图 ... arduino智能小车编程 ... arduino蓝牙控制舵机 ... arduino程序代码大全 ... arduino寻迹小车说明书 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网