找回密码
 立即注册

QQ登录

只需一步,快速开始

本帖最后由 lxf 于 2020-8-17 13:30 编辑

第35课 16路PWM舵机驱动板的使用


目标

1、16路PWM舵机驱动板第三方库的使用
2、16路PWM舵机驱动板的使用
3、超声波控制舵机转动

实验材料

Arduino UNO开发板
HC-SR04超声波传感器模块
三个MG90S金属齿轮舵机
16路PWM舵机驱动板
9V充电锂电池和9V电池扣子
配套USB数据线
配套杜邦线若干
Arduino IDE软件

微信图片_20200710141334.png

内容

接线图

图片2.png

备注:三个舵机分别接在16路PWM舵机驱动板3、4、5号引脚处。

接线方式

Arduino UNO        <------>    16路PWM舵机驱动板
               5V           <------>                  VCC
            GND          <------>                 GND
                A5          <------>                 SCL
                A4          <------>                 SDA
Arduino UNO     <------>    HC-SR04超声波传感器模块
             5V          <------>                  VCC
         GND          <------>                  GND
              7           <------>                  Trig
              3           <------>                  Echo
MG90S金属齿轮舵机1    <------>    16路PWM舵机驱动板
                  信号线          <------>          3
                    正极           <------>         V+
                    负极           <------>        GND
MG90S金属齿轮舵机2   <------>    16路PWM舵机驱动板
                 信号线          <------>         4
                   正极           <------>         V+
                   负极           <------>        GND
MG90S金属齿轮舵机3    <------>    16路PWM舵机驱动板
                  信号线          <------>         5
                    正极           <------>         V+
                    负极           <------>        GND
9V充电锂电池          <------>    16路PWM舵机驱动板
              正极           <------>          V+
              负极           <------>         GND

需要用到16路PWM舵机驱动板第三方库文件,文件名为“AdafruitPWMServoDriverLibrary”。
提取码:45bt
下载后解压,把解压后的整个文件夹复制放到Arduino安装包的“libraries”文件夹里面。

程序实现代码

  1. <div class="blockcode"><blockquote>#include <Wire.h>
  2. #include <Adafruit_PWMServoDriver.h>   //16路PWM舵机驱动板库文件
  3. Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();  
  4. #define SERVOMIN  150
  5. #define SERVOMAX  600
  6. float checkdistance_7_3() {   //定义一个浮点型函数checkdistance_7_3()
  7.   digitalWrite(7, LOW);    //低高低电平发一个短时间脉冲去Trigpin   
  8.   delayMicroseconds(2);
  9.   digitalWrite(7, HIGH);
  10.   delayMicroseconds(10);
  11.   digitalWrite(7, LOW);
  12.   float distance = pulseIn(3, HIGH) / 58.00;
  13.   delay(10);
  14.   return distance;    //将回波时间换算成distance
  15. }
  16. void setup(){
  17.   Serial.begin(9600);
  18.    pwm.begin();
  19.   pinMode(7, OUTPUT);  //定义7号引脚为输出
  20.   pinMode(3, INPUT);   //定义3号引脚为输入
  21. }
  22. void loop(){
  23.   pwm.setPWMFreq(50);
  24.   if (checkdistance_7_3() < 20) {   //如果超声波碰到障碍物距离小于20,那么三个舵机转动
  25.     pwm.setPWM(3,0,240);
  26.     pwm.setPWM(4,0,240);
  27.     pwm.setPWM(5,0,240);
  28.   } else {                 //否则三个舵机保持原先状态
  29.     pwm.setPWM(3,0,40);
  30.     pwm.setPWM(4,0,40);
  31.     pwm.setPWM(5,0,40);
  32.   }
  33. }
复制代码
分享至 : QQ空间
收藏

0 个回复

您需要登录后才可以回帖 登录 | 立即注册