北東北 LabVIEWユーザー会

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

おもちゃのロボットアームで遊んでみる

金属製のロボットアームを購入しましたが、動かしてみると意図しない動きをしたときに少し危険な感じなので、おもちゃのロボットアームも購入してみました。

 

R0017924.JPGM2281364.JPG

 

面白いのはLabVIEW LINXで動くEXEが用意されていることです。

スクリーンショット 2023-02-28 16.25.24.png

 

Arduino UNOでIOはサーボが4個、可変抵抗が4個、プッシュスイッチが1個です。

 

LINXという手もありますが、とりあえずサーボ4個だけをシリアルで動かすことにしました。


// digital servo SF006C 0-180°
#include <Servo.h>
Servo Servo_0;
Servo Servo_1;
Servo Servo_2;
Servo Servo_3;

int A_CNT[4]={95,90,90,150};
int A_MIN[4]={20,00,20,10};
int A_MAX[4]={160,155,170,180};
int j_state[4];

String Command;

void setup() 
{
  Serial.begin(9600);
  
  Servo_0.attach(4);
  Servo_1.attach(5);
  Servo_2.attach(6);
  Servo_3.attach(7);

  Servo_0.write(90);
  Servo_1.write(90);
  Servo_2.write(90);
  Servo_3.write(170);
}


void loop() 
{
  while(Serial.available()) {
    Command = Serial.readStringUntil('\n');
    parseCommand(Command);
  }
}

//str="***,****¥n"
void parseCommand(String str){
  int pos=str.indexOf(",");
  int len=str.length();
  String str1=str.substring(0,pos);
  String str2=str.substring(pos+1,len);
  int val1=str1.toInt();
  int val2=str2.toInt();
  j_servo(val1, val2);
  //Serial.println(str);
  //Serial.println(str1);
  //Serial.println(str2);
  respond_j_state();
}


void testMove(int num){
  int angle=A_CNT[num];
  j_servo(num,angle);// move to center
  while(angle<=A_MAX[num]){
    j_servo(num,angle);
    delay(10);
    angle++;
  }
  delay(1000);
  while(angle>=A_MIN[num]){
    j_servo(num,angle);
    delay(10);
    angle--;
  }
  delay(1000);
  while(angle<=A_CNT[num]){
    j_servo(num,angle);
    delay(10);
    angle++;
  }
  delay(2000);
}

void j_servo(int num, int angle){
  if(angle >= A_MIN[num] && angle <= A_MAX[num]){
    switch(num){
      case 0:
      Servo_0.write(angle);
      break;
      case 1:
      Servo_1.write(angle);
      break;
      case 2:
      Servo_2.write(angle);
      break;
      case 3:
      Servo_3.write(angle);
      break;
      default:
      ;
    }
  }
}

void respond_j_state(){
  Serial.print(Servo_0.read());
  Serial.print(",");
  Serial.print(Servo_1.read());
  Serial.print(",");
  Serial.print(Servo_2.read());
  Serial.print(",");
  Serial.print(Servo_3.read());
  Serial.println("");
}

 

LabVIEW CommunityはMac版2023Q1が出ていたのでダウンロードしてみましたが、VISAも最新にしないと動きませんでした。

スクリーンショット 2023-02-28 16.17.47.pngスクリーンショット 2023-02-28 16.18.16.png

 

所々でサーボの位置を記録して再生する機能をつけたのですが、ダイアグラムで無理矢理感があります。

動作の指示、記録、再生ができる美しいプログラムにできるデザインパターンは如何に。

 

 

VIはMac版2023Q1と2021にしたものを添付します。

すべてをダウンロード
メッセージ1/2
1,034件の閲覧回数

おおはしさん、ロボットアームのシェアありがとうございます。

おもちゃの方は、5000円程度で購入できかつLabVIEWから制御できるのはかなり興味深いですね。

 

先日打合せさせて頂いた際のもう一名が、もう少しでユーザー会内で動かせて頂く予定のようです。

近くまた、お話しできますと幸いです。

Certified LabVIEW Developer
There are only two ways to tell somebody thanks: Kudos and Marked Solutions

GCentral
0 件の賞賛
メッセージ2/2
915件の閲覧回数