ロボットアーム組み立てキット(動作確認編)

ロボットアーム組み立てキットをArduinoで動かしてみた。
ArduinoのServoライブラリを使うと簡単にサーボモータを動かせる。

ロボットアームの土台部分(左右に回転)と腕部分(上下に回転)の制御にボタンを3つずつ(各リセットを含む)とボールのLEDをOn/Offするスイッチの計7つのスイッチを次の回路図のようにつないだ。

ロボットアームの動作確認

ロボットアームの動作確認

ブレッドボード上の配線

ブレッドボード上の配線

スケッチは次の通り。

#include <Servo.h>

int pinServo1Left = 6;
int pinServo1Reset = 7;
int pinServo1Right = 2;
int pinServo2Up = 3;
int pinServo2Reset = 4;
int pinServo2Down = 5;
int pinLEDOnOff = 8;
int pinLEDSwitch = 11;

int sw1Left;
int sw1Reset;
int sw1Right;
int prv1Left;
int prv1Reset;
int prv1Right;

int sw2Up;
int sw2Reset;
int sw2Down;
int prv2Up;
int prv2Reset;
int prv2Down;

Servo servo1;
Servo servo2;

int val1 = 90;
int val2 = 90;
int prev1;
int prev2;

int swLED = LOW;

void setup()
{
  pinMode(pinServo1Left, INPUT);
  pinMode(pinServo1Reset, INPUT);
  pinMode(pinServo1Right, INPUT);
  pinMode(pinServo2Up, INPUT);
  pinMode(pinServo2Reset, INPUT);
  pinMode(pinServo2Down, INPUT);
  pinMode(pinLEDOnOff, INPUT);
  pinMode(pinLEDSwitch, OUTPUT);
  servo1.attach(9);
  servo2.attach(10);
  servo1.write(val1);
  servo2.write(val2);
  prev1 = val1;
  prev2 = val2;
  digitalWrite(pinLEDSwitch, swLED);
}

void loop()
{
  sw1Reset = digitalRead(pinServo1Reset);
  if (sw1Reset == HIGH) {
    val1 = 90;
  } else {
    sw1Left = digitalRead(pinServo1Left);
    if (sw1Left == HIGH) {
      val1 += 1;
      if (val1 > 180) {
        val1 = 180;
      }
    } else {
      sw1Right = digitalRead(pinServo1Right);
      if (sw1Right == HIGH) {
        val1 -= 1;
        if (val1 < 0) {
          val1 = 0;
        }
      }
    }
  }
  sw2Reset = digitalRead(pinServo2Reset);
  if (sw2Reset == HIGH) {
    val2 = 90;
  } else {
    sw2Up = digitalRead(pinServo2Up);
    if (sw2Up == HIGH) {
      val2 -= 1;
      if (val2 < 0) {
        val2 = 0;
      }
    } else {
      sw2Down = digitalRead(pinServo2Down);
      if (sw2Down == HIGH) {
        val2 += 1;
        if (val2 > 180) {
          val2 = 180;
        }
      }
    }
  }
  int swTemp;
  swTemp = digitalRead(pinLEDOnOff);
  if (swTemp == HIGH) {
    if (swLED == HIGH) {
      swLED = LOW;
    } else {
      swLED = HIGH;
    }
    digitalWrite(pinLEDSwitch, swLED);
    delay(300);
  }
  
  if (val1 != prev1) {
    servo1.write(val1);
    prev1 = val1;
  }
  if (val2 != prev2) {
    servo2.write(val2);
    prev2 = val2;
  }
  
  delay(100);
}

ボタンで上下左右にボールが向く。

カテゴリー: Arduino, キット, ロボット, 作ったモノ, 回路 タグ: , , パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください