本帖最后由 lxf 于 2020-8-17 13:30 编辑
目标
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 <------> 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”。 下载后解压,把解压后的整个文件夹复制放到Arduino安装包的“libraries”文件夹里面。
程序实现代码
- <div class="blockcode"><blockquote>#include <Wire.h>
- #include <Adafruit_PWMServoDriver.h> //16路PWM舵机驱动板库文件
- Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
- #define SERVOMIN 150
- #define SERVOMAX 600
- 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);
- }
- }
复制代码 |