日常の進捗

行為と記録とその習慣化

2軸サーボモーターの制御

買って放置していた「SG90 Servo SG90サーボ用ミニ2軸 オリジナル FPV 特殊なナイロン PTZ(NOサーボ) カメラマウント A838」を組み立てがてらサーボの制御をしてみた。

https://www.amazon.co.jp/gp/product/B00FHRVGN6/www.amazon.co.jp

回路図

f:id:takawo:20170729174557p:plain

組み立て

組み立ては下記ブログのエントリを参照した。サーボの固定に必要なパーツ類が十分に揃ってない感じだったのでグルーガン使ってみたが、今回のケースだとボルトとナットで綺麗に固定したほうが良かった。

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;
}