舵机

舵机是一种非常有意思的,多级齿轮增大扭力的widget。非常有用。在很多方面。

Servo is very useful. Now Please check this out : What is Servo Control (from wikipedia)

Variations

When a pulse is sent to a servo that is less than 1.5 ms the servo rotates to a position and holds its output shaft some number of degrees counterclockwise from the neutral point. When the pulse is wider than 1.5 ms the opposite occurs. The minimal width and the maximum width of pulse that will command the servo to turn to a valid position are functions of each servo. Different brands, and even different servos of the same brand, will have different maximum and minimums. Generally the minimum pulse will be about 1 ms wide and the maximum pulse will be 2 ms wide.

See also

  • Servomechanism
  • PID controller
  • Servo (radio control)

Now we go to implement it on Arduino.

Strongly it is recommended that you NEED A 9V~1A ADAPTER to do this experiment.

我们引用下面的文章

http://www.geek-workshop.com/thread-137-1-1.html

arduino学习笔记23 - 任意输出舵机角度实验

[

使用的Arduino
IDE 1.0.1 可行

作者 弘毅

本次实验的器材非常简单,arduino控制板一个,标准舵机一个,电池盒(外接电源)一个。(一定要使用外接电源,直接使用USB供电,有烧毁USB的危险。)

先上硬件连接图

然后把下面代码编译,下载进入arduino控制板中。(感谢坏鸟童鞋提供的代码)

需要查看的东西ASCII表

ARDUINO 代码复制打印
  1. int i,val;
  2. char a[3];
  3. boolean display;
  4. #include <Servo.h>
  5. Servo servo1;
  6. void setup()
  7. {
  8. Serial.begin(9600);
  9. servo1.attach(4);//舵機一接pin4
  10. }
  11. void loop()
  12. {
  13. if (Serial.available()){        //如果有数据输入.....
  14. delay(30);                    //等待30毫秒让所有输入数据从串口传输完毕.....
  15. if (Serial.available() <= 3){ //如果输入数据位数'<=3'.....
  16. while (Serial.available()){ //开始读取数据直到[串口输入缓存被清空]
  17. a[i++] = Serial.read();   //读取数据到[数组"a"]
  18. }
  19. display = 1;                    //数据读取完毕以后'打开'显示输出开关
  20. }
  21. else {                        //如果输入数据位数'>3'.....
  22. Serial.flush();             //刷新串口输入缓存
  23. }
  24. }
  25. /*======================直接通过串口返回输入数值模块======================
  26.   if (display)                    //如果[显示输出开关]被'打开'则显示[数组"a"]的数据
  27.   {
  28.     for (i = 0; i <= sizeof(a); i++)
  29.     {
  30.      Serial.print("a[");
  31.      Serial.print(i);
  32.      Serial.print("]= ");
  33.       Serial.print(a[i]);
  34.       Serial.print(" | ");
  35.     }
  36.     Serial.println();
  37.     display = 0;                  //显示完毕'关闭'显示输出开关
  38.     Serial.flush();               //刷新串口输入缓存
  39.     for (i = 0; i <= 3; i++)      //重置[数组"a"]
  40.     {
  41.       a[i] = 0;
  42.     }
  43.     i = 0;                        //重置"计数变量"[i]
  44.   }
  45. //=======================通过加减符号控制舵机增减一度转动=================*/
  46. if (a[0] == 43 && display){ //看ASCII表得到的,这是"-" 符号
  47. val++;
  48. servo1.write(val);
  49. Serial.println(val);
  50. display = 0;                  //显示完毕'关闭'显示输出开关
  51. Serial.flush();               //刷新串口输入缓存
  52. for (i = 0; i <= 3; i++)      //重置[数组"a"]
  53. {
  54. a[i] = 0;
  55. }
  56. i = 0;                        //重置"计数变量"[i]
  57. }
  58. if (a[0] == 45 && display){
  59. val--;
  60. servo1.write(val);
  61. Serial.println(val);
  62. display = 0;                  //显示完毕'关闭'显示输出开关
  63. Serial.flush();               //刷新串口输入缓存
  64. for (i = 0; i <= 3; i++)      //重置[数组"a"]
  65. {
  66. a[i] = 0;
  67. }
  68. i = 0;                        //重置"计数变量"[i]
  69. }
  70. //========================判断及修正输入数据位数模块======================
  71. if (display)                    //如果[显示输出开关]被'打开'则显示[数组"a"]的数据
  72. {
  73. if (!a[2]){ //如果输入数据为两位数(最后一位空)
  74. if (!a[1]){ //如果输入数据为一位数(最后两位空)
  75. a[2] = a[0];
  76. a[1] = 48;
  77. a[0] = 48;
  78. }
  79. else {
  80. a[2] = a[1];
  81. a[1] = a[0];
  82. a[0] = 48;
  83. }
  84. }
  85. //==============转换变量类型后输出给舵机且通过串口返回结果值==============
  86. for (i=0;i<=3;i++){ //变量类型:char to int (48为0的ASCII)
  87. a[i] -= 48;
  88. }
  89. val = 100*a[0] + 10*a[1] + a[2];
  90. // Serial.print("val: ");
  91. servo1.write(val);
  92. Serial.println(val);
  93. /* int val2 = random(50); //int型变量加法测试
  94. val += val2;
  95. Serial.print("+");
  96. Serial.print(val2);
  97. Serial.print("=");
  98. Serial.println(val);
  99. */
  100. display = 0;                  //显示完毕'关闭'显示输出开关
  101. Serial.flush();               //刷新串口输入缓存
  102. for (i = 0; i <= 3; i++)      //重置[数组"a"]
  103. {
  104. a[i] = 0;
  105. }
  106. i = 0;                        //重置"计数变量"[i]
  107. //    val = 0;
  108. }
  109. }

点击下图箭头指示按钮,打开串口监视器。

实验效果如下:

转载于:https://www.cnblogs.com/spaceship9/archive/2013/04/10/3011896.html

Arduino 各种模块篇 舵机 Modules - Servo相关推荐

  1. Arduino 各种模块篇 光敏感应器 简易光敏

    这一款是非常简单的光敏感应器 简单到,只对一定光强度有信号感应,输出TTL电平. 此款也是用电位器来调节的. 都是这么简单. 过段时间我为大家奉上数字版的光敏传感器. ---------------- ...

  2. Java舵机_mBlock Arduino(9)舵机(Servo motor)控制

    舵机(Servo motor)英文常简称 Servo,中文也有人称伺服机,由控制电路.齿轮.直流马达等组成,可使用〈mBlock & Arduino(4)利用 PWM 模拟类比讯号〉中谈过的 ...

  3. Arduino 各种模块篇 DHT11 温度湿度 数字模块 单总线

    ---恢复内容开始--- DHT11 以前用的是DS18B20也是但总线的,而且每个DS18B20都有一个特定的ROM,所以将许多单总线的温度计放在一根线上也行. 真是一个非常好的设计方案! 如果这里 ...

  4. Arduino 各种模块篇 motor shield

    根据arduino官方网站出的shield, 类似的情况有很多中motor shield 这里测试采用的是http://www.seeedstudio.com/wiki/Motor_Shield_V1 ...

  5. Arduino 各种模块篇 步进电机 step motor( 不用库,不用shield, 纯)

    下面上一些代码,是没有用任何库的. 仅仅是将步进点击链接到arduino不同的8, 9, 10 , 11口上的 Arduino 控制步进电机 2012-06-11 12:44:44 原帖:http:/ ...

  6. Arduino 各种模块篇 震动模块 常开 震动传感器模块

    以下是店家提供的一部分资料 一共就需要3根线 ------------------分割线------------------------ 用途: 用于各种震动触发作用,报盗报警,智能小车,电子积木等. ...

  7. Arduino开发遥控小车(三)基于nRF24L01无线模块实现舵机转向和直流电机调速

    Arduino开发遥控小车(三)基于nRF24L01无线模块实现舵机转向和直流电机调速 前面和大家分享了通过nRF24L01无线模块实现数据发送和接收的基本方法,本次继续和大家分享最终实现遥控小车转向 ...

  8. 树莓派4B通过16路PWM输出的PCA9685模块控制舵机(机械臂)附完整代码

    树莓派4B通过16路PWM输出的PCA9685模块控制舵机(机械臂)附完整代码 文章目录 树莓派4B通过16路PWM输出的PCA9685模块控制舵机(机械臂)附完整代码 一. Servo Driver ...

  9. 织女星开发板RISC-V核通过SPI协议驱动ARDUINO LCD模块(触屏)

    前言 之前写了一个通过SPI协议初始化LCD屏幕并显示字符串和图片的文章,这次再尝试一下触屏的功能. 准备工作 1,焊接织女星开发板J1,J2,J3,J4的双排母座,以便与LCD屏通信.前段时间免费申 ...

最新文章

  1. 机器学习新手们 我这有本秘笈要不要?
  2. Cacti如何实现电话告警
  3. Hystrix和ribbon的超时时长准确配置的理论依据
  4. 程序员面试时自称字节跳动工作两年,被发现学历造假,结果蒙了
  5. Weka算法Classifier-meta-AdaBoostM1源代码分析(一)
  6. 2月20日 阻尼牛顿法,拟牛顿法(Quasi-Newton Methods)及各种具体实现方法,共轭梯度法(Conjugate Gradient)
  7. 图书馆占座系统(SSM,JQUERY-EASYUI,MYSQL)
  8. 【数学建模暑期培训】CUMCM历年题分类 2000-2021年数模国赛赛题及求解模型
  9. 微信android分身,安卓手机微信分身怎么用?微信分身版制作教程
  10. 《人间告白》---我看万物像你,我看你像万物
  11. app后端开发系列文章文件夹
  12. iOS 获取手机 唯一标识
  13. mac系统安装Anaconda后再打开终端自动进入Anaconda环境
  14. Android缓存,删除网络依赖包缓存
  15. 题目:A派生出子类B,B派生出子类C,并且在Java源代码中有如下声明,问以下哪个说法是正确的?()
  16. java微信摇一摇_微信摇一摇功能实现
  17. 如何myabtis使用注解对数据库进行操作呢?
  18. TUP第19期综述:从12306看海量并发网站架构
  19. 当年赫赫有名的“四大工学院”,如今都发展得怎样?依然牛气冲天!
  20. python的项目骨架_练习 46 - 一个项目骨架 - Learn Python 3 The Hard Way

热门文章

  1. 用户研究三部曲:有关用户研究的战略思考
  2. 简述控制反转ioc_Spring学习之——控制反转(IoC)与依赖注入(DI)
  3. python3.8-运行jupyter 报raise NotImplementedError
  4. pycharm remote 远程项目 同步 本地_手把手教你Pycharm远程连接服务器端项目进行本地开发调试...
  5. 【C++入门】C++ 运算符的重载
  6. kafka retries参数入门
  7. flink Table API 与SQL入门实战
  8. C语言开发里指针到底快还是不快?(底层汇编解释)
  9. spring-cloud Sleuth
  10. 计算机及服务器硬件组成结合企业运维场景知识