5: 2009-12-21 (月) 19:58:41 eid7gud ソース 6: 2009-12-25 (金) 18:56:56 eid7gud ソース
Line 1: Line 1:
-現在編集中です。 +*プログラミング [#zd1ae695]
#ref(AutomaticDoor_13.png,100%) #ref(AutomaticDoor_13.png,100%)
「AX-S1の距離センサに人が反応したら、AX-12+でバーを開く」というプログラムを作成します~ 「AX-S1の距離センサに人が反応したら、AX-12+でバーを開く」というプログラムを作成します~
Line 9: Line 8:
処理の流れを図にしましょう。 処理の流れを図にしましょう。
#ref(AutomaticDoor_14.png,100%) #ref(AutomaticDoor_14.png,100%)
-Chapter2との違いはブザーを鳴らす代わりに、センサ値が閾値以上ならバーを開け、閾値以下ならバーを閉じるという所です。人が来てバーが開いたら直ぐ閉じてしまうと困るのでその後に少し待機します。+Chapter2との違いはブザーを鳴らす代わりに、センサ値が閾値以上ならバーを開け、閾値以下ならバーを閉じるという所です。人が来てバーが開い後、直ぐ閉じてしまうと困るのでその後に少し待機します。
**準備 [#o28e1018] **準備 [#o28e1018]
Line 73: Line 72:
AX-12+のホーンは図のように0°から300°まで回転します。ゴールポジションの値は0°なら0、中心の150°なら512、300°なら1023になります。~ AX-12+のホーンは図のように0°から300°まで回転します。ゴールポジションの値は0°なら0、中心の150°なら512、300°なら1023になります。~
#ref(AutomaticDoor_19.png,100%) #ref(AutomaticDoor_19.png,100%)
-バーが開いている状態は大凡0°と150°の真ん中として、ゴールポジションの値を300にしました。もし、AX-12+を反対向きにに付けた場合は700位にしましょう。+バーが開いている状態は大凡0°と150°の真ん中として、ゴールポジションの値を300にしました。もし、AX-12+を反対向きに付けた場合は700位にしましょう。
**if~ else~ [#e4c030b4] **if~ else~ [#e4c030b4]
Line 99: Line 98:
**トルクリミットの設定 [#a3422d73] **トルクリミットの設定 [#a3422d73]
-これで図に書いた一通りの処理のプログラムを書きましたので、書き込んで実行したいところですが、プログラムを書いて初めてAX-12+を動かす時に注意する点があります。~+これで図に書いた一通りの処理のプログラムを書きましたので、書き込んで実行したいところですが、プログラムを一通り書いた後、初めてAX-12+を動かす時に注意する点があります。~
-プログラムを間違えると自分が意図していた角度とは異なる角度にAX-12+のホーンが動いてしまうことがあります。ホーンは0~300°まで動きますが、フレームやケースを取り付けた場合、0~300°で動かそうとしてもフレームやケースにぶつかって狭い範囲でしか動きません。それにも拘らず、動かない範囲まで動かそうとするとどうなるでしょうか?~+プログラムを間違えると、自分が意図していた角度とは異なる角度にAX-12+のホーンが動いてしまうことがあります。ホーンは0~300°まで動きますが、フレームやケースを取り付けた場合、0~300°の範囲で動かそうとしてもフレームやケースにぶつかってそれより狭い範囲でしか動きません。それにも拘らず、干渉する範囲まで動かそうとするとどうなるでしょうか?~
AX-12+に負担が掛かりギアがかけてしまいます。~ AX-12+に負担が掛かりギアがかけてしまいます。~
そうならないようにテスト動作の際はAX-12+のトルクリミットを下げます。トルクリミットとはホーンを動かす力の最大値です。ホーンが回りにくい時、AX-12+は頑張ってホーンを回そうと力を入れます。その力を制限することで壊れることを防ぎます。~ そうならないようにテスト動作の際はAX-12+のトルクリミットを下げます。トルクリミットとはホーンを動かす力の最大値です。ホーンが回りにくい時、AX-12+は頑張ってホーンを回そうと力を入れます。その力を制限することで壊れることを防ぎます。~
-ただそれでもAX-12+に負担になりますので予期せぬ動きをした場合は直ぐに電源を切れるようにしましょう。+ただそれでもAX-12+に負担になりますので予期せぬ動きをした場合は、直ぐに電源を切るようにしましょう。
#ref(AutomaticDoor_24.png,100%) #ref(AutomaticDoor_24.png,100%)
Line 114: Line 113:
[[AX-12+コントロールテーブル>FDIII-HC Starter Kit Guid Chapter1.1#xa86a787]]を見て下さい。~ [[AX-12+コントロールテーブル>FDIII-HC Starter Kit Guid Chapter1.1#xa86a787]]を見て下さい。~
-トルクリミットはアドレス34と35の1バイトで表されるので、fd_DXWriteWordData関数を使います。~+トルクリミットはアドレス34と35の2バイトで表されるので、fd_DXWriteWordData関数を使います。~
IDは1、アドレスは34、トルクリミットは150とします。~ IDは1、アドレスは34、トルクリミットは150とします。~
トルクリミットは1~1024まで設定でき、0にすると最大の力で動作します。~ トルクリミットは1~1024まで設定でき、0にすると最大の力で動作します。~
Line 125: Line 124:
動かして見て気になる点は無いでしょうか? 動かして見て気になる点は無いでしょうか?
 +#ref(AutomaticDoor_25.png,100%)
 +人がセンサの前に立ってから、バーが開くまでにちょっと時間が掛かっているのが気になりませんか?
 +**プログラムの修正 [#wfed4549]
 +#ref(AutomaticDoor_14.png,100%)
 +プログラムの流れを書いた図を見てみましょう。
 +センサ値取得 -> 閾値と比較 -> バーを開く/閉じる -> 少し待つ(2秒) -> センサ値・・・というようにループしています。~
 +つまり毎回2秒待っているため、センサの値を2秒に1回しか見ていないということになります(他の処理は殆んど一瞬で終わっています)。よって人がセンサの前に立っても、最悪2秒間はバーが開かないのです。
 +#ref(AutomaticDoor_26.png,100%)
 +2秒待ちたいのはバーを開いた後だけですのでバーを開く
 +     fd_DXWriteWordData (1, 30, 300);
 +の後に
 +     fd_Wait (2000);
 +を移動します。
 +
 +**再び動作確認 [#h4448457]
 + #include <fd.h>
 + #define KEY_QUIT { if(fd_rx_buff()) fd_SoftReset();}
 +
 + void main (void) {
 +   uint8_t ReadData;
 +
 +   fd_Init (0, BT_CONSOLE, FD_BEEP_MMI | FD_BEEP_PACKETERR | FD_BEEP_LOWVOLTAGE | FD_BEEP_BOOTUP, 7.4);
 +   fd_DXWriteWordData (1, 34, 150);
 +
 +   while (1) {
 +     fd_DXReadByteData (100, 27, &ReadData);
 +     fd_printf ("%3d\r", ReadData);
 +     if (ReadData > 100) {
 +       fd_DXWriteWordData (1, 30, 300);
 +       fd_Wait (2000);
 +     }
 +     else {
 +       fd_DXWriteWordData (1, 30, 512);
 +     }
 +     KEY_QUIT;
 +   }
 + }
 +
 +修正が完成しました。FDIII-HCにプログラムを書き込んで動かしてみましょう。~
 +
 +書き込み方法は[[前章>FDIII-HC Starter Kit Guid Chapter2.4#ybaa88fa]]などを参考にして下さい。~
 +
 +如何でしょうか?バーを開いた後の待機時間が2秒では短く感じませんか?~
 +もし短かったら、fd_Waitの引数を増やして、再び書き込んで下さい。
 +
 +このように、ある程度プログラムができたら、動かして見て、気になる所を修正して、また動かして見て・・・を繰り返すことで納得できるプログラムを作って行きます。
 +
 +[[次のチャプターへ>FDIII-HC Starter Kit Guid Chapter3.4]]~
 +
 +[[FDIII-HC Starter Kit Guid]]へ戻る


トップ   差分 リロード印刷に適した表示   全ページ一覧 単語検索 最新ページの一覧   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom