16サーボドライブのArduino

https://item.taobao.com/item.htm?spm=a1z09.2.0.0.435e2e8dKDHquW&id=536890985912&_u=21qf7bf5b2a1

 

 

 それができるUSB搭載コンピュータまたは専用12V-2A電源があるかどうか

 

 

 

 

ボードは、複数のレベルのトレーニングを制御することができます

 

インストールライブラリ

 

 

 

 

/ ************************************************* ** 
  これは私たちadafruit 16チャネルPWM&サーボドライバのための一例である
  に次々 、これは8個のサーボを駆動する-サーボテスト
  PCA9685の最初の8本のピン

  adafruitショップで今日1をピックアップ!
  ------> http://www.adafruit.com/products/815 
  
  これらのドライバが通信にI2Cを使用し、2本のピンがために必要とされる   
  インターフェース。

  Adafruitは、時間とリソースは、このオープンソースコードを提供する投資し、
  購入することで、Adafruitとオープンソースのハードウェアをサポートしてください
  Adafruitから製品を!

  Adafruit Industries社のためのリモア・フリート/ Ladyadaによって書かれました。  
  BSDライセンスは、すべてのテキストは、上記のいずれかの再配布に含める必要があります
 ************************************************** ** /

書式#include <Wire.h> 
書式#include <Adafruit_PWMServoDriver.h> 

//このよう呼ばれ、それは0x40のデフォルトのアドレスを使用しています
Adafruit_PWMServoDriver PWM = Adafruit_PWMServoDriver(); 
//また、あなたが望む別のアドレスでそれを呼び出すことができます
// Adafruit_PWMServoDriver PWM = Adafruit_PWMServoDriver(0×41)。
//あなたはまた、別のアドレスでそれを呼び出すことができますし、I2Cインターフェース
// Adafruit_PWMServoDriver PWM = Adafruit_PWMServoDriver(0x40の、ワイヤ)。

//あなたのサーボメイクに応じて、パルス幅最小値と最大値は、あなたは、異なる場合があり 
これらのハードストップを押すことなく小型/大型できるだけなりたい//
、最大範囲のために//。あなたはサーボ一致させるために、必要に応じてそれらを微調整する必要があります
持っている//を!
#define SERVOMIN 150 //これは(4096のうち)「最小」パルス長カウントです 
。これは(4096のうちの)「最大」パルス長カウントです// SERVOMAX 600 #defineしを
。これは、丸みを帯びた「最小」マイクロ秒の長さに基づいている// 600の#define USMINを150の最小パルス上
の#define USMAX 2400 //これは、600の最大パルスに基づいて、丸みを帯びた「最大の」マイクロ秒の長さである
の#define SERVO_FREQ 50 //〜50 Hzのアップデートでアナログサーボ実行

//私たちのサーボ#カウンタ
uint8_tのservonum = 0; 

ボイドセットアップ(){ 
  Serial.begin(9600)。
  Serial.println( "8チャンネルサーボテスト!"); 

  pwm.begin(); 
  //理論的には内部発振器は、25MHzのですが、それは本当にではありません
  //正確なこと。あなたはまでこの数を微調整することにより「キャリブレーション」することができ
  、あなたが期待している周波数を取得//!
  pwm.setOscillatorFrequency(27000000)。// int.osc。  
  pwm.setPWMFreq(SERVO_FREQ)。〜50 Hzのアップデートで//アナログサーボの実行

  遅延(10)。
} 

あなたは数秒でパルス長を設定したい場合//この関数を使用することができます
。//たとえばsetServoPulse(0、0.001)〜1ミリ秒のパルス幅です。それは正確ではありません!
ボイドsetServoPulse(uint8_t N、ダブルパルス){ 
  ダブルpulselength。
  
  pulselength = 1000000; 毎秒// 1,000,000たち
  pulselength / = SERVO_FREQ。〜60 Hzのアップデートで//アナログサーボ実行 
ボイドループ(){ 
  //ドライブsetPWMを使用時の各サーボオン() 
  Serial.print(pulselength)。Serial.println( "期間ごとに私たち"); 
  pulselength / = 4096; 解像度の// 12ビット
  Serial.print(pulselength)。Serial.println( "ビットあたりの私たち");
  パルス* = 1000000; 私たちに//変換入力秒
  / = pulselengthパルス。
  Serial.println(パルス)。
  pwm.setPWM(nは、0、パルス)。
} 

  Serial.println(servonum)。
  用(uint16_t pulselen = SERVOMIN; pulselen <SERVOMAX; pulselen ++){ 
    pwm.setPWM(servonum、0、pulselen)。
  } 

  遅延(500)。
  (uint16_t pulselen = SERVOMAX; pulselen> SERVOMIN; pulselen--)用{ 
    pwm.setPWM(servonum、0、pulselen)。
  } 

  遅延(500)。

  //ドライブwriteMicrosecondsを使用して一度に各サーボ1は()、それは計算の丸めによる正確ではありません!
  // writeMicroseconds()関数は、ArduinoのサーボライブラリwriteMicroseconds()の挙動を模倣するために使用されます。
  用(uint16_tマイクロ秒= USMIN;マイクロ秒<USMAX;マイクロ秒++){ 
    pwm.writeMicroseconds(servonum、マイクロ秒)。
  } 

  遅延(500)。
  (uint16_tマイクロ秒= USMAX;マイクロ秒> USMIN; microsec--)用{ 
    pwm.writeMicroseconds(servonum、マイクロ秒)。
  } 

  遅延(500)。

  servonum ++; 
  IF(servonum> 3)servonum = 0。//最初の8つのサーボチャネルをテストします
}

  

おすすめ

転載: www.cnblogs.com/kekeoutlook/p/12622889.html