lxf 发表于 2020-7-10 14:12:58

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

本帖最后由 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软件

内容
接线图

备注:三个舵机分别接在16路PWM舵机驱动板的3、4、5号引脚处。
接线方式
Arduino UNO        <------>    16路PWM舵机驱动板               5V         <------>                  VCC            GND          <------>               GND                A5          <------>               SCL                A4          <------>               SDAArduino UNO   <------>    HC-SR04超声波传感器模块             5V          <------>                  VCC         GND          <------>                  GND            7         <------>                  Trig            3         <------>                  EchoMG90S金属齿轮舵机1    <------>    16路PWM舵机驱动板                  信号线          <------>          3                   正极         <------>         V+                  负极         <------>      GNDMG90S金属齿轮舵机2   <------>    16路PWM舵机驱动板               信号线          <------>         4                    正极         <------>         V+                   负极         <------>      GNDMG90S金属齿轮舵机3    <------>    16路PWM舵机驱动板                  信号线          <------>         5                  正极         <------>         V+                  负极         <------>      GND9V充电锂电池          <------>    16路PWM舵机驱动板            正极         <------>          V+            负极         <------>         GND
需要用到16路PWM舵机驱动板第三方库文件,文件名为“AdafruitPWMServoDriverLibrary”。下载链接:https://pan.baidu.com/s/1amHrUFnCnireI4ZfjqFLGA 提取码:45bt下载后解压,把解压后的整个文件夹复制放到Arduino安装包的“libraries”文件夹里面。
程序实现代码
<div class="blockcode"><blockquote>#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>   //16路PWM舵机驱动板库文件
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
#define SERVOMIN150
#define SERVOMAX600
float checkdistance_7_3() {   //定义一个浮点型函数checkdistance_7_3()
digitalWrite(7, LOW);    //低高低电平发一个短时间脉冲去Trigpin   
delayMicroseconds(2);
digitalWrite(7, HIGH);
delayMicroseconds(10);
digitalWrite(7, LOW);
float distance = pulseIn(3, HIGH) / 58.00;
delay(10);
return distance;    //将回波时间换算成distance
}
void setup(){
Serial.begin(9600);
   pwm.begin();
pinMode(7, OUTPUT);//定义7号引脚为输出
pinMode(3, INPUT);   //定义3号引脚为输入
}
void loop(){
pwm.setPWMFreq(50);
if (checkdistance_7_3() < 20) {   //如果超声波碰到障碍物距离小于20,那么三个舵机转动
    pwm.setPWM(3,0,240);
    pwm.setPWM(4,0,240);
    pwm.setPWM(5,0,240);
} else {               //否则三个舵机保持原先状态
    pwm.setPWM(3,0,40);
    pwm.setPWM(4,0,40);
    pwm.setPWM(5,0,40);
}
}
页: [1]
查看完整版本: 第35课 16路PWM舵机驱动板的使用