2009-04-07 1 views
3

私のパートナーと私は助けが必要です。私たちは電気工学の学位を取得するための最終プロジェクトに取り組んでいます。私たちの問題は、誰もクラスのプログラミングが本当に分かっていないということです。私たちには、これをプログラムする方法に関するヘルプや一般的なアイデアが必要です。電圧降下を伴うリモコンカーの制御

プロジェクト:

我々は2つのIR(赤外線)センサーが、それは電圧を経由して、パスだと検出モンスタートラックを持っています。これに伴って、私たちは自由な規模の回路基板を「頭脳」として使用しています。これに加えて、ドアを狙って撃つネーファー「ミサイルタレット」があります(IRセンサからの電圧降下に注意するためにプログラミングする必要があります)。

プログラミング:

我々がしようと非常に苦労し、我々

  1. の後、地面にモンスタートラックを設定するには、プログラムの開始に遅延機能を必要とし、このためのコードを作成するのは非常に難しいされていますIRセンサが地上で読み取っている電圧の設定基準から直線をたどる必要があります。
  2. 開いているドアを通過している間に、大きなVドロップの読みがありますが、撮影を中止してそのパスに従う必要があります。電気的にすべての彼の年を越えて賢明な(未来に戻ってからドキュメントのことを思い出す)Cプログラミングが不足している間、私たちの先生、私はそれを頼むことがたくさんある知っているが、我々は助けのための大きな必要としている

Cプログラミングのスキルを使用するには多大な知識が必要です。 最後に、私たちがこの作業(mid may)を手に入れたら、私もビデオを投稿できるようになり、皆さんを見せます。私は、これについての入力と任意のアイデアを感謝し、あなたのすべての時間をありがとう!

+0

これをC#としてタグ付けしてもよろしいですか?あなたはあなたの質問でCを参照しているようです... –

+0

CSの学生として、私はいつもこのようなことをするためにいくつかのエンジニアと私たちを結びつけたいと願っていました。このようなことはプログラマーにとってとてもエキサイティングですが、同じ問題があります。プログラミングはよく知っていますが、電気工学についてはほとんど分かりません。 – AaronLS

+0

今のところタグ付けされていれば、彼は望むなら自分自身を削除することができます。あまりにも多くの注意をあまりにも少ないよりも。 –

答えて

0

ほとんどの大学にはプログラミングクラブがあります(私が私の知っていることを知っています)。なぜ誰かが助けてくれるのを見てみませんか? また、ユニのコンピュータルームの周りの掲示板に何かを置くことさえ、私は確かに、最も良いプログラマは、少し時間を貸してくれる楽しいプロジェクトだと思います。

あなたはそこにいる物理的なプロジェクトであることから、あなたは本当に誰かがあなたと話すことを望んでいます。

5

あなたのコードは、おそらく次のようになります。

明らか
// Give yourself some time to set the robot down 
    <sleep_for_some_interval>; 

    // Keep reading the sensors and reacting until 
    // some amount of time passes, or a button is pressed, etc. 
    while(<keep_running_condition>) 
    { 
    // Update sensor readings 
    int leftDist = <ConvertToDistance>(<read_left_voltage>); 
    int rightDist = <ConvertToDistance(<read_right_voltage>); 

    // React to sensor readings 
    if(leftDist > <door_threshold> && 
     rightDist > <door_threshold>) 
    { 
     // A door has been detected. 
     <stop> 
     <shoot> 
     <move_forward_fixed_amount> 
    } 
    else if(leftDist > <turn_threshold>) 
    { 
     // Left distance is beyond the threshold, 
     // need to turn left 
     <turnLeft>; 
    } 
    else if(rightDist > <turn_threshold>) 
    { 
     // Right distance is beyond the threshold, 
     // need to turn right 
     <turnRight> 
    } 
    else (<terminate_condition>) 
    { 
     // Something happened (a sensor condition, etc) 
     // that tells us that we need to end 
     // the program 
     break; // This will exit the while loop 
    } 
    else (...) 
    { 
     // Other conditions... 
    } 
    else 
    { 
     // Default reaction (happens if none of the previous 
     // conditions are met) 
     <goForward> 
    } 
    } 

    // Shutdown the robot 
    <stop> 
    // ... 

比較は異なる必要があるかもしれませんが、基本的な考え方は、継続的にあなたのセンサーを読み、次にチェックする条件とアクションのリストを持つことになります条件が満たされたときに取る。

ノーツ/ヒント:

  • 「遅延...プログラムの起動に」にあなたは右のあなたの条件をチェックしていることを確認してくださいsleep/usleep
  • のようなものを呼び出します。上記の例では、 "turnLeft"チェックを上に移動すると、ドアに反応するのではなく左に回ってしまうことがあります。
  • 上記のコードが記述されている方法では、ループを1回通過するたびに1つの反応しか起こりません。 (これにより、2つの操作をしなければならないときに、誤って2つの操作を行うことがなくなります。
  • 電圧を遠方に変換できる機能を書くことは役に立ちます。
  • 複雑な操作(ドアを検出した後の反応など)を行うと、コードはよりクリーンで保守が容易になります)、それらを自分自身の機能に移す。
  • 開発ディレクトリを定期的に解凍するだけの場合でも、何らかの形のrevision controlを使用してください。コードにバグを導入したことが判明したときは、非常に役立ちます。
4

好奇心の怪しさから、これをすべてハードウェアで行うことができない理由はありますか?私はあなたのプロジェクトについて多くのことを前提にしていますが、それがあなたの専門分野であれば、少なくとも#1はハードウェアで行う方が簡単かもしれないと思います。もちろん、あなたが従わなければならないソフトウェアでこれを行う指示がない限り。

すでにIRセンサーが可変電圧を出力している場合、センサーからの電圧出力をスケールしてモーターを駆動することはできませんか?私は車輪がモーターによって駆動されていると仮定しており、あなたはそれを回転させるためにもう一方より速く回転しています。次に、標準的なソフトウェアソリューションであるgo-or-turnとは対照的に、よりスムーズな運転パターン(旋回/調整)を得るかもしれません。

#2の場合、state machineを実装できます。これは遅れも処理することができ、状態0(待機中)と状態1(正常)の間にtimerを投げるだけです。その後、ドアセンサーからの電圧出力を使用して状態2(発火)をトリガーします。必要に応じて、2つの状態(アーミング)と3つの状態(発砲)の2つの状態に分割し、その間に別のタイマーを設定することができます。ホイールモータは状態1でのみアクティブであり、状態3が発生するとミサイルトリガを解除する。

+0

+1ステートマシン –

関連する問題