ラジコン用サーボモータ。Galileo&Arduinoで動かします。
サーボモータですので、角度を指定して制御できます。
初サーボなのでまずはお試しを。
でも動作テストだからってただ動かすだけじゃ味気無いよね・・・
【追記】2014/02/23 Galileoで動いたよ。
遂にGalileoでミクにネギを振らせることができました。
スケッチはとても見にくいifとforのみで構成されていますが・・・
Galileoが割り込みに対応してない?(上手く動作させられません・・・)ようなのでムリヤリです。
尚、一定時間(回数?)腕を振らせると固まります。
動作確認用LEDは光るので、サーボの処理が固まる?
何はともあれ、一先ずの成功。
/*Galileo用スケッチ
#include <Wire.h>
#include <Servo.h>
Servo serv1;
Servo serv2;
int pos1 = 0; // 腕1角度
int pos2 = 0; // 腕2角度
void setup()
{
serv1.attach(9); // サーボ1を9ピンに
serv2.attach(10); // サーボ2を10ピンに
pinMode(12,OUTPUT); //LED1 12ピン
pinMode(13,OUTPUT); //LED2 13ピン
pinMode(2,INPUT); //ボタン1 2ピン
pinMode(3,INPUT); //ボタン2 3ピン
}
void loop()
{
if(digitalRead(2)==HIGH){ //2ピンのボタンが押されたら
digitalWrite(12,HIGH); //動作確認用LED点灯
delay(100);
digitalWrite(12,LOW); //LED消灯
if(pos1>=45){ //手が上がっている時
for(pos1 = 90; pos1>=1; pos1-=1) //90°に直してから徐々に下げる
{
serv1.write(pos1);
delay(1);
}
}else{ //手が下がってる時
for(pos1 = 0; pos1 < 90; pos1 += 1) //0度に直してから徐々に上げる
{
serv1.write(pos1);
delay(1);
}
}
}
if(digitalRead(3)==HIGH){ //3ピンのボタンが押されたら
digitalWrite(13,HIGH); //動作確認用LED点灯
delay(100);
digitalWrite(13,LOW); //LED消灯
if(pos2>=45){ //手が上がっている時
for(pos2 = 90; pos2>=1; pos2-=1) //90°に直してから徐々に下げる
{
serv2.write(pos2);
delay(1);
}
}else{
for(pos2 = 0; pos2 < 90; pos2 += 1) //0度に直してから徐々に上げる
{
serv2.write(pos2);
delay(1);
}
}
}
}
//////////////////////////////////////////////////////
簡単に遊べるねー。
子供には受けた。無駄に絵を描いた元は取れた。よし十分だ。
本来はGalileoで動かすつもりでしたが、
結局Arduino dueで動かしました・・・
動かない原因はいまだ不明・・・心が折れそうです。
付属品: ホーン3種類(各1個)、ホーン用ビス1本、本体用ビス2本
コネクター: 3端子(爪なしタイプ)
外寸: 22mm×11.5mm×27mm, 重さ 9g
トルク: 1.6kg/cm (4.8Vのとき)
回転速度:0.12秒/60度 (4.8Vのとき)
//ボタンを押すと割り込みが入って手の角度が0度⇔90度変わるスケッチ
//チャタリングは未対策。調べるの面倒・・・
/* 以下スケッチ */
#include <Wire.h>
#include <Servo.h>
Servo serv1;//サーボのインスタンス
Servo serv2;//サーボのインスタンス
volatile int state1 = false;
volatile int state2 = false;
void setup(){
serv1.attach(8); //デジピン8をサーボ1
serv2.attach(9); //デジピン9をサーボ2
attachInterrupt(0,pressed0,RISING); //デジピン2を割り込み0押したとき処理
attachInterrupt(1,pressed1,RISING); //デジピン3を割り込み1押したとき処理
Serial.begin(9600);
}
void loop(){
serv1.write(state1*90);//0度か90度か
serv2.write(state2*90);//0度か90度か
}
void pressed0(){
state1=!state1;//サーボ1の位相反転
Serial.print(state1,DEC);
}
void pressed1(){
state2=!state2;//サーボ1の位相反転
Serial.print(state2,DEC);
}
-
購入金額
0円
-
購入日
2014年02月22日
-
購入場所
ZIGSOWにログインするとコメントやこのアイテムを持っているユーザー全員に質問できます。