前回主翼展開ギミックの改修しましたが、尾翼も改修しちゃいましたww
結局あの小ネタは全部改修かww
まずは前回モーターを仕込みましたので、それの制御から。
まっ、今後の事を考えるとこの部分にarduinoを入れて、これをスレイブとするI2Cでの接続が安全そうかな?
てなことでarduinoを入れますが、問題はここに何Vの電圧が来るかですよね~。
arduinoさんは電源入力端子が5V端子の場合、5Vより電圧が大きいと結構シビアに壊れますwww
VIN端子だと7~12Vと少し高めの電圧が必要です。まっ、以前その事知らなくてVINに5V供給で動かしていたことも有りますので念のためVINに接続しておきました。
ただ、色々とテストするのに5Vのアダプターも併用しますので、結局この後5V端子からの供給に変更www
電源は元々の配線を分岐で
で、使っていない端子が有ったようですので、これをI2Cで使うことにw
元々この電源は尾翼付近のLED点灯のための物です。
このLED達単に点灯するだけです。なのにこんな大きな基板が
これ壮絶に邪魔なので除去しちゃいますw
ついでに尾翼上についてる赤いライトはどうせarduino入れるので点滅にしちゃいましょうw
モータードライバーを入れて動かしてみます。
ちゃんと動いてくれるのですが、どうにも左右のセンターがそろわないw
モーターを外してセンターを合わせて再度調整。
何とかセンター合わせが出来たのですが、やはり時間でのコントロールはムリですね^^;
必ずセンターで終わるようになればいいのですが、ラダーが稼働時に途中で電源を切った場合センターに戻せないww
例えば右に、いっぱいまで行って止まっているところからセンターまでの時間は同じと思っていましたが、微妙に毎回違うんですよね^^;そのずれがドンドン大きくなってくる・・・・・
これ電流値を読み取った制御でも似たような感じになるでしょうね・・・・・・
はいっ!モーターはヤメwww!少しもったいないけどサーボ投入しましょうw
サーボになるとモーターよりトルクが少なくなるので、より一層ラダー部の可動がスムーズに出来るように再調整後ワイヤーも新たに交換。
誤作動防止用のMOSFETも取り付け・・・・ですがMOSFETが上手くいってないみたいでサーボが動かないのでMOSFETは結局除去w
ところが、これ除去しても今回は誤作動が起こらない謎ww
ちなみに、電源はarduinoと共通電源で。
ちなみにサーボはこちらの超小型サーボ
もったいない気もしますが投入w(ここ、ストライクパーツが来ると使わなくなるんですよねw
で、こんな感じに
とりあえず動いてるからオッケーw
プログラムでの注意点は
サーボ用のライブラリーVarSpeedServo.hがタイマー1を使うので、尾翼の点滅用のタイマーはタイマー2を使う事。
それと左右で同じような構造にしているけど、微妙に抵抗やワイヤーの捻じれが違うので左右のサーボは個別調整した角度を入力。
さらに、右に行った後のセンターの位置と、左に行った後のセンターの位置は別角度を指定しないと実際のラダーの動きはセンターに来ない。( void center_rud()部分 )
と注意が有りますが、この辺は今までの経験上知っていたので全くうっかりなしでしたwwww
すみませんm(_ _)m
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
#include <MsTimer2.h> //--------------servo------------------------------------------ #include <VarSpeedServo.h> VarSpeedServo myservo1; VarSpeedServo myservo2; const int servoPin1 = 3; const int servoPin2= 4; int s_speed=200; //----------I2C------------------- #include <Wire.h> //fighter tail 5 #include <SoftwareSerial.h> //----------------------------------- //タイマー1使用 9,10PWM使えず //タイマー2使用 3,11PWM使えず #define TR 2 #define tail_light 11 #define position_light 5 //SDA A4 //SCL A5 byte w,tail,naka=1,migi=0,hidari=0; volatile byte x; //----------------------------------------------------- void receiveEvent(int howMany) { x = Wire.read(); // receive byte as an integer //Serial.println(x); } void left_rud(){ myservo1.write(30,s_speed,false); myservo2.write(10,s_speed,true); migi=0; hidari=1; } void right_rud(){ myservo1.write(140,s_speed,false); myservo2.write(160,s_speed,true); hidari=0; migi=1; } void center_rud(){if(migi==1){ myservo1.write(90,s_speed,false); myservo2.write(65,s_speed,true); migi=0; } if(hidari==1){ myservo1.write(110,s_speed,false); myservo2.write(85,s_speed,true); hidari=0; } } //========================================================================= void ope(){ if(x==21){tail=1;MsTimer2::start();} if(x==22){tail=0;MsTimer2::stop();} if(x==23){analogWrite(position_light,250);} if(x==24){analogWrite(position_light,0);} if(x==25){left_rud();} if(x==26){right_rud();} if(x==27){center_rud();} if(x==99){analogWrite(tail_light,0); tail=0; analogWrite(position_light,0); center_rud(); } Serial.println(x); } //====================================================================== void timerTail(){ w^=1; if(tail==1 && w==1){digitalWrite(tail_light,HIGH);} else {digitalWrite(tail_light,LOW);} } void setup() { Serial.begin(115200); Wire.begin(5); // join i2c bus with address #4 Wire.onReceive(receiveEvent); Serial.begin(9600); pinMode(TR,OUTPUT); pinMode(tail_light,OUTPUT); //-------------------タイマー割り込み----------------------------- MsTimer2::set(500, timerTail); //----------servo----------------------- myservo1.attach(servoPin1); myservo2.attach(servoPin2); delay(100); digitalWrite(TR, HIGH); myservo1.write(90,100,false); myservo2.write(65,100,true); Serial.println("servo"); } void loop() { ope(); /* x=21; center_rud(); delay(2000); left_rud(); delay(2000); right_rud(); delay(2000); center_rud(); delay(2000); right_rud(); delay(2000); left_rud(); delay(2000); */ } |
このプログラムはI2C用になっていますので、このまま書き込んでもマスターからの信号が無いと動きません。
ちなみに最後のコメントアウト外(/*と*/を消す)と動画の動きをします。
あっそうそう!
前回のプリント物、タフレジン来たので交換してみました。
通常のレジンよりプリント時間長いですね~。初めプリント失敗しちゃったw
SM4Kで0.05mm厚で4秒位照射しました。
硬さは・・・・前回の高強靭レジンとの違いあまり分かりませんwww
関連すると思われる記事:
- None Found
やっぱサーボはきれいに動きますね。
なんでモーターにしたのかとww
ちなみにタフレジンはsirayaのものよりSKのもののほうが強度あるみたいですよw
それと、釈迦に念仏とは思いますが二次硬化をしっかりしないと本来の強度出ませんので注意です。
今読み返したら、釈迦に説法だったww
こんばんは
過去の工作を思い切って切り捨て、新たに取り組む決意が凄いですね。
私にはとても真似ができません。(ま~いいか!でいつも見なかったことにしていますので)(笑)
やはりサーボは良いですね。適度なトルクで位置制御も確実です。
ところでFETで誤動作防止って、どんな使い方なんでしょうか?
gyoさん こんばんは!
うむww釈迦に念仏ww
初めは気が付かなかったけど気が付くと超面白いねwwww
ホントなんでモーターにしたんだろうね~w
やっぱサーボが入る時はサーボ最強だよね~。制御が簡単だものw
タフレジンは、2次硬化死ぬほどしときましたw
そっか~SKの方が強いのか・・・・ちょっとミスっちゃいましたねw
Vividさん こんばんは!
モーターでのリミットスイッチ無しの制御なんてやはり無理でしたwww
サクッとサーボに切り替えましたよw
そうですね。やっぱサーボって優秀ですよね。あの角度がきっちり指定できるというのはホントありがたい。
FETの誤作動はarduinoのサーボライブラリー使う時の特有のやつで、初期設定の時にサーボのピンの指定した時に誤作動するんですよwなおさんも困っていたやつですw
ですから、サーボピン設定が終わってからサーボに電流流すようにFETをスイッチとして使用しています。
ふむふむ、gyoさんは6jiroさんの馬力をいつも褒めてるのだと思ってたけど、ほんとに馬だと思っていたとw ひどいなぁ、そこはせめてゴ〇ラぐらいにしとかないと(^^;
本題なんだったっけ?記事からコメント読み進めてたら忘れちゃったよ。。。
そうそう、やっぱサーボですね。でも今回はなんで初期のセンタリングがかからないの?なおしてもないのに発生しなくなった不具合って忘れたころ(しかもヤバいタイミング)で再発するよね、リアル仕事の経験的には。ご無事をお祈りしておきます(ウッカリは期待してないからねw)
なおさん こんばんは!
えっw念仏の方じゃなくて釈迦の方が間違っていたのかww
ゴリラの方がひどいじゃんかww
まっ、行動力を褒めてもらえていると勝手に勘違いしておきます!
やっぱサーボですよね~!ホント!サーボありがたいw
これがねwなんでか分からないんですけど誤動作しないんですよww
何度電源入れなおして試しても誤作動無しですww
プログラム中にはTRが書いてありますが繋げてませんからねww
teznoさんのAT-STもTRなくても誤作動しないんですよ~w
全く謎ですw
こんにちは。
最終的にギヤモーターからサーボに変更されたんですね。
やはりサーボの方が停止位置がカチッとしますね。
このサーボとメタルワイヤー線の結合部分ってどうなってるんですか?
瞬着などでは捻りに耐えられないような気がしますが…というか、そもそもこの直線的な結合方法で捻り稼働するというの自体も凄いです(驚)
yangminさん こんばんは!
結局サーボに頼っちゃいましたよww
やっぱ簡単ですもんww
これね、サーボのあの回転部分に穴が開いてますでしょ。
丁度そこにこのワイヤーがピッタリで入るんですよww
瞬着付けてワイヤーを押し込んでやれっば結構ガッチリと止まるんですよね~^^;
無茶な力でなければ結構耐えてくれますよ~w