meiyao 发表于 3 天前

行空板K10驱动舵机点亮屏

行空板K10是一款集成了多种功能的开发板,适用于教学、物联网项目等多种场景,所以它可以做很多好玩的东西。

一、硬件
1、行定板K10。
2、自己设计的底板。
3、舵机

硬件设计与它们的性能:

底板3D图:


正面3D图:


原理图:



芯片:
PCA9685PW
厂商:NXP(恩智浦)
封装:TSSOP28
工作电压范围:2.3V至5.5V
输入/输出容差电压:5.5V
输出电流:25mA(5V时)



技术参数:产品名称:SG90 9g 小型舵机 (S版)
厂家编号:SG90S
产品尺寸: 23x12.2x29mm
产品扭矩: 1.6kg/cm(4.8V)
反应速度: 0.1sec/60degree(4.8v)
工作电压: 4.8V
使用温度: 0-55度
动作死区: 10us
齿轮介质: 尼龙
工作模式: 模拟
包含:1 x9g 小型舵机 (S版) 带摇臂包


二、焊接与连接事物图:

焊接完成图:

未焊接插座图:


底部图:


成品连接图:




三、代码:


Use SERVO2 Module to control the rotation of 16-channel servo.
使用 SERVO2 模块控制 16 通道舵机的旋转。
*/

// #include <M5Stack.h>
#include <Wire.h>

#include "Adafruit_PWMServoDriver.h"

Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(0x40, Wire);

#define SERVOMIN \
    102// This is the 'minimum' pulse length count (out of 4096)
         // 这是“最小”脉冲长度计数(共 4096 个)
#define SERVOMAX \
    512// This is the 'maximum' pulse length count (out of 4096)
         // 这是“最大”脉冲长度计数(共 4096 个)
#define USMIN \
    500// This is the rounded 'minimum' microsecond length based on the
         // minimum pulse of 102这是基于 102 的最小脉冲的舍入“最小”微秒长度
#define USMAX \
    2500// This is the rounded 'maximum' microsecond length based on the
          // maximum pulse of 512这是基于 512 的最大脉冲的舍入“最大”微秒长度
#define SERVO_FREQ \
    50// Analog servos run at ~50 Hz updates模拟伺服以 ~50 Hz 更新运行

void setup() {
    // M5.begin(true, true, true, true);
    Wire.begin(47,48);
    pwm.begin();
    pwm.setPWMFreq(50);
    // M5.Lcd.setCursor(115, 0, 4);
    // M5.Lcd.setTextColor(TFT_GREEN, TFT_BLACK);
    // M5.Lcd.print("Servo2");
}

void setServoPulse(uint8_t n, double pulse) {
    double pulselength;
    pulselength = 1000000;// 1,000,000 us per second
    pulselength /= 50;      // 50 Hz
    Serial.print(pulselength);
    Serial.println(" us per period");
    pulselength /= 4096;// 12 bits of resolution
    Serial.print(pulselength);
    Serial.println(" us per bit");
    pulse *= 1000;
    pulse /= pulselength;
    Serial.println(pulse);
    pwm.setPWM(n, 0, pulse);
}

void servo_angle_write(uint8_t n, int Angle) {
    double pulse = Angle;
    pulse      = pulse / 90 + 0.5;
    setServoPulse(n, pulse);
}

void loop() {
    for (int i = 0; i < 16; i++) {
      setServoPulse(i, 0.5);
    }
    delay(500);
    for (int i = 0; i < 16; i++) {
      setServoPulse(i, 2.5);
    }
    delay(500);
}四、实际运行视频:



屏点亮效果图:



页: [1]
查看完整版本: 行空板K10驱动舵机点亮屏