2軸サーボモーターの制御
買って放置していた「SG90 Servo SG90サーボ用ミニ2軸 オリジナル FPV 特殊なナイロン PTZ(NOサーボ) カメラマウント A838」を組み立てがてらサーボの制御をしてみた。
https://www.amazon.co.jp/gp/product/B00FHRVGN6/www.amazon.co.jp
回路図
組み立て
組み立ては下記ブログのエントリを参照した。サーボの固定に必要なパーツ類が十分に揃ってない感じだったのでグルーガン使ってみたが、今回のケースだとボルトとナットで綺麗に固定したほうが良かった。
Raspberry Piでサーボコントロール、Part1 上下・左右の2軸を動かす | ものづくりエクスペリメント
Arduino
Arduinoに書き込んだコード。サーボモータが揺れる周期をポテンショメータで制御している。
#include <Servo.h> int sensorPin1 = A0; Servo myservo1; float angle1 = 0; float volume1 = 0; int sensorPin2 = A1; Servo myservo2; float angle2 = 0; float volume2 = 0; void setup() { myservo1.attach(10); myservo2.attach(9); Serial.begin(9600); } void loop() { volume1 = analogRead(sensorPin1); volume1 = mapfloat(volume1,0,1023,0.001,0.01); float n = (float) sin(angle1); float val1 = n * 30.0 + 30.0; myservo1.write(val1); volume2 = analogRead(sensorPin2); volume2 = mapfloat(volume2,0,1023,0.001,0.01); float m = (float) sin(angle2); float val2 = m * 30.0 + 30.0; myservo2.write(val2); delay(5); angle1 += volume1 * 5; angle2 += volume2 * 5; } float mapfloat(float x, float in_min, float in_max, float out_min, float out_max){ return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; }