今回はPCA9685を使用して、サーボを動かしていきます
こちらの記事では、スケッチ不要でサーボを動かせますので、参考にして下さい。
サーボコントローラーを使用して、手動でサーボを動かします。しかし、これだけではピンを挿すだけですので、スイッチ、LED、三端子レギュレータで9Vから5Vに降圧してみました。 Arduinoなどのマイコンは今回は使いません …
用意するもの
Arduino(Arduino UNO)
サーボ(SG90)
サーボドライバ (PCA9685)
ライブラリ
PCA9685のライブラリをインストールします。
[ツール] - [ライブラリを管理] Adafruit PWM Sewrvo Driver library
を検索してインストールします。
コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
//Servo: SG90 //Angle: 0 - 180 // Duty Cycle: 500μs - 2400μs #include <Wire.h> #include <Adafruit_PWMServoDriver.h> Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(0x40); #define SERVO_FREQ 50 #define DutyMIN 500 #define DutyMAX 2400 int ServoNo1 = 0; int angleMIN = 0; int angleMAX = 180; void setup(){ pwm.begin(); pwm.setPWMFreq(SERVO_FREQ); delay(10); } void loop(){ //最初の角度 pwm.writeMicroseconds(ServoNo1,map(0, angleMIN, angleMAX, DutyMIN, DutyMAX)); delay(1000); //次の角度 pwm.writeMicroseconds(ServoNo1,map(180, angleMIN, angleMAX, DutyMIN, DutyMAX)); delay(1000); } |
コード補足
今回使用したサーボは「SG90」です。事前にデータシートでDutyCycleや周波数を確認します。
#include<Wire.h>
#include<Adafruit_PWMServoDriver.h>
ライブラリのインクルード
Adafruit_PWMServoDriver pwm =Adafruit_PWMServoDriver(0x40);
PCA9685のアドレス設定(1台ならデフォルトの0x40で問題ない)
#defineSERVO_FREQ 50
SG90の周波数は50Hz
#defineDutyMIN 500
SG90のDuty Cycleの最小値は0.5ms(=500μs)
#defineDutyMAX 2400
SG90のDuty Cycleの最大値は2.4ms(=2400μs)
int ServoNo1 =0;
int angleMIN =0;
int angleMAX =180;
サーボ番号、サーボ最小角度 サーボ最大角度を定義
pwm.begin();
pwm.setPWMFreq(SERVO_FREQ);
PWMの開始、周波数を設定
pwm.writeMicroseconds(ServoNo1,map(0, angleMIN, angleMAX, DutyMIN, DutyMAX));
サーボの初期角度をマッピング
pwm.writeMicroseconds(ServoNo1,map(180, angleMIN, angleMAX, DutyMIN, DutyMAX));
次の角度をマッピング