vividさんのPICプログラム その4

このシリーズも4まで来ています^^。もうこれ以上望むことは無い状態まできましたね!

今回もまずはvividさんの動画ご覧ください。

もうサーボに制限はなく、自由に複数のサーボが動いています・・・・。

凄すぎですね!

プログラムはvividさんのブログ「趣味を楽しむ Enjoy your hobby」のこちらの記事からどうぞ。

今回のプログラムも凄いですよ〜!最大4個のサーボが自由なタイミングで自由な角度で動かせます。スピードも自在です。これに色々な形式の点滅するLEDもついて、さらにカタマイズが超簡単です。

早速プログラムをコピペして動かしてみました。

2016_06_22_21_38_11.jpg

凄い凄い!サーボの動きが自由ですね!わかってはいましたが、こうやって自分で動かしてみると感動ものですね〜。

ちなみにLEDの点滅についてのカタマイズはこちらの記事と全く同じです。

サーボにつきましてはこちらの記事とほぼ同じですが、

今回はこの部分だけで大丈夫です。

スクリーンショット 2016-06-23 0.10.25.jpg

緑と青の線を書き換えることによりRC6に繋がれているサーボの角度が変わります。

RA0のスイッチを押している時は緑色の数字に対応する角度に。RA0のスイッチを離した時は青色に対応した角度になります。

オレンジと黄色の部分を書き換えるとRC7に繋がれているサーボが、それぞれの状況に応じた角度になります。

サーボを3個、4個動かしたい場合はこの辺のプログラムの改修が必要です。

次にサーボのスピードを変えたい場合は

スクリーンショット 2016-06-23 0.11.00.jpg

ここの対応するサーボの緑色の部分の数字を増やすと早く動くようになります。

いやはや、凄いプログラムを公開していただきました。

 

ちなみに、LEDで一瞬光ってしばらく消えてまた一瞬光ってをしたい場合は、順次点灯を利用すると表現できます。

例えば、点滅設定定義エリアのこの部分

unsigned char parameter[16][3] = {//

{1, 4, 80}, // RA2
{2, 8, 10},//RA3

と配列の0個目({1,4,80}の場合は1という数字です)の数字を今回は順次点灯の1と2の番号を割り振ります。

するとこの2つに設定した場合、LEDはRA2が光って80ms後に消灯し、それと同時にRA3が光って10msほど点灯して消えます。そしてRA3が消灯すると再度RA2が点灯するということを繰り返します。

ということは、もしRA2にLEDを接続しなければ、RA3が10ms光って、80ms後に再度RA3が光るように見えます。このように順次点灯の時間を工夫することで簡単に点灯時間と消灯時間が違う点滅方式も再現可能です。

ただこの場合、他のところで順次点灯は使えなくなります。

しかし、なんとも色々な可能性を秘めたプログラムで凄いな〜としか言いようがありません。

 

で、新しいプログラムが出ましたので、先日サンダーバード2号に組み込んだサーボもこのプログラムで動かしてみました。

上記のスイッチ部分を前回のプログラムから下記のように改変しました。

スクリーンショット 2016-06-23 14.38.36.png

 

 

コピペするとこうなります。

if (sw0 == 0){//スイッチが押されたら
if(sw0f1==0 && sw0f2==0){//サーボ1,0が稼働していないなら
if(sv_para[3][1]<180){//サーボ0目標180届いていないなら
parameter[15][2] =180;
}
if(sv_para[3][1]>=180){//サーボ0の目標180に到達したら
sw0f1=1;//サーボ0目標到達フラッグ1
}
}//ここまででハッチが開いた
if(sw0f1==1 && sw0f2==0){
parameter[14][2]=140;//サーボ1の目標値140
sw0f2=1;//サーボ1目標到達フラッグ1
}//ミサイルがせり上がった状態
}

else {//スイッチが押されていない時
if(sw0f1==1 && sw0f2==1){//サーボ0、1の目標到達フラッグ1(ハッチ開、ミサイル上)
if(sv_para[2][1]>0){//currentは140woから
parameter[14][2]=0;//サーボ1の目標値0
}
if(sv_para[2][1]<=0){//サーボ1の目標値0到達したら
sw0f2=0;//サーボ1目標到達フラッグ0

} //ここまででミサイルが下がる
}
if(sw0f1==1 && sw0f2==0){//ここからハッチが閉まる
if(sv_para[3][1]>0){
parameter[15][2]=0;//サーボ0の目標値0
}
if(sv_para[3][1]<=0){
sw0f1=0; //フラッグなし
}
}
}

今回は必要なさそうなコマンドは削除しています。ずいぶんスッキリしました。

今回はそれぞれのサーボのcurrentが格納されているsv_para[3][1]等を条件にして分岐しています。

サーボの可動範囲は少し広くしたので数値が少し増えている部分もありますが、完全に動作しましたので、

このプログラムを国際救助隊で採用させていただきます。∠(^ー^)

vividさんいつもありがとうございます!

関連すると思われる記事:

2 comments

  1. こんばんは!

    いつもありがとうございます。
    今回も、詳細な説明をしていただき、感謝です!
    そして何より「国際救助隊に正式採用」していただき、ありがとうございます。名誉な事です。
    できれば、PICに関心を持って頂く方が増えるとうれしいですね。
    そして、それぞれ、「あーだ、こーだ」と色々ディスカッションできると楽しいでしょうね。

  2. Vividさん こんばんは!

    こちらこそいつもありがとうございます!
    今回もこのような素晴らしいプログラムを紹介出来て私自身非常にうれしいです。
    我が国際救助隊(偽物w)にも採用させていただきありがとうございました!あとは翼端灯や衝突防止等等もこれで賄いたいと思っています^^。

    PICには興味あるけども、どうも難しそうでいまさら勉強するのもな
    ・・・。と思われている方もいると思います。まっ!実際私がそうでしたからw
    ただ、これから模型を作っていくうえでPICやAVRを使用できるようになると、凄くいろいろなことができるようになるのをわかって欲しいですね。
    特に今回のようなプログラムはC言語を理解していなくてもPICの書き込みさえできれば、所定の数字をいじるだけでサーボまで動かせるんですからまずは使ってみて欲しいですね。
    何よりそのような作品たくさん見てみたいです!

Leave a Reply

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

wp-puzzle.com logo