创客渔机器人编程 - Lesson Three

网友投稿 2019-04-28 15:26

Lesson Three

让 机 器 人 跑 起 来

知识点:

1、如何控制电机转动?

2、控制电机转动方向?

3、如何控制电机调速?

4、PWM模拟输出原理;

5、Arduino模拟输出函数;

6、模块化程序设计思想;

7、顺序结构程序设计;

8、函数调用与程序调试;

PWM模拟输出原理

PWM,脉冲宽度调制,是在数字电路中 达到 模拟输出效果的一种手段。即:使用数字控制产生占空比不同的方波(一个不停在开与关之间切换的信号)来控制模拟输出,PWM常用于控制LED的暗亮程度,电机的转速等。

https://cdn.china-scratch.com/timg/190430/152643C19-0.jpg

https://cdn.china-scratch.com/timg/190430/15264311b-1.jpg

https://cdn.china-scratch.com/timg/190430/1526431C4-2.jpg

https://cdn.china-scratch.com/timg/190430/15264351Y-3.jpg

Arduino模拟输出函数

analogWrite(pin,value)

作用:

让一个支持PWM输出的引脚持续输出指定脉冲宽度的方波。

参数:

    pin:PWM输出的引脚编号。

    value:用于控制占空比,范围:0~255。

值为0表示占空比为0,值为255表示占空比为100%,值为127表示占空比为50%。对Arduino  而言,0相当于输出0V,255相当于输出5V,超出255仍输出5V 。

Arduino源代码(仅供参考)

/*

   * 5、13控制左轮电机

   * 11、12控制右轮电机

   * 5、11做模拟输出使用

   */

void setup() 

{

  pinMode(5,OUTPUT); 

  pinMode(13,OUTPUT);

  pinMode(11,OUTPUT);

  pinMode(12,OUTPUT);

}

void loop() 

{

  /*

* 程序调试说明:

* 每次只调试一个函数,

* 有问题检查这一个函数即可;

* 单个函数调试成功,

* 最后进行综合调试;

* 增加停止函数,方便调试;

   */

    qianJin();

    delay(2000);

    tingZhi();

    delay(1000);

    houTui();

    delay(1000);

    tingZhi();

    delay(1000);

    zuoZhuan();

    delay(1000);

    tingZhi();

    delay(1000);

    youZhuan();

    delay(1000);

    tingZhi();

    delay(1000);

}

/*

 * 前进

 */

void  qianJin()

{

  analogWrite(5,200);

  digitalWrite(13,LOW);

  analogWrite(11,200);

  digitalWrite(12,LOW);

}

/*

 * 后退

 */

void  houTui()

{

  analogWrite(5,55);

  digitalWrite(13,HIGH);

  analogWrite(11,55);

  digitalWrite(12,HIGH);

}

/*

 * 左转

 * 左轮不转右轮转,

* 实现小车左转;

 */

 void  zuoZhuan()

{

  analogWrite(5,0);

  digitalWrite(13,LOW);

  analogWrite(11,200);

  digitalWrite(12,LOW);

}

/*

 * 右转

 * 右轮不转左轮转,

* 实现小车右转;

 */

 void  youZhuan()

{

  analogWrite(5,200);

  digitalWrite(13,LOW);

  analogWrite(11,0);

  digitalWrite(12,LOW);

}

/*

 * 停止

 */

 void  tingZhi()

{

  analogWrite(5,0);

  digitalWrite(13,LOW);

  analogWrite(11,0);

  digitalWrite(12,LOW);

}

--end--

声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com