Arduinoボードの比較-火星探査機

奇妙なことに、人類は発展しています。 技術の進歩により人の生活は急速に変化したため、携帯電話、コンピューター、ラップトップ、デジタルフォトフレーム、カメラのない別の生活を想像することはできません。 これはすべて常に行われているようです。 そして、誰がこれをすべて発明して実行しますか? これらのエンジニアは超頭脳を持っていますか? 知ってる? あなた自身が電子的で驚くべきことをしようとすることができます。 作成した「製品」は何百万部も販売されていない可能性がありますが、実際には知り合いを驚かせることができます。 あなたが少しアマチュア無線ファンであり、はんだごてという言葉を恐れず、あなたが少し忍耐力を持っているなら、あなたは成功するでしょう。



どこから始めますか? おそらく2つの興味深い可能性があります-これはArduinoボードまたはMarsローバーボードです。 私はそれが何であるかを説明しようとします。







まず、両方のボードはもともと電子モデリング用に設計されました-あらゆる種類の電子玩具、ロボット、車、その他のジョークの作成。 これは一種の「電子デザイナー」です。 彼らの助けを借りて、回路と電子機器およびプログラミングの基本を学び、実際の、便利な、シンプルな日常の自動化デバイスを作成できます。 興味深いのは、これらの回路基板の回路が無料で入手でき、インターネット上でメーカーが公開していることです。 インターネット上のArduinoに実装された「デバイス」の例も多数あります。

火星探査車の委員会まだあまり知られていませんが、その作者自身が機械ロボットとそれに基づいたあらゆる種類のおもちゃを作っています。 プロジェクトのすべてのソーステキストは、無料でアクセスできるWebサイトでも入手できます。



ここに要約表があります。



画像



さらに、おそらく、表の比較は機能しません:-)

これらのボードの技術的な機能をいくつか見てみましょう。



Arduino Duemilanoveボード(ATmega168)



画像



*電源:+ 5V

*デジタル入力/出力の数:14

*アナログ入力の数:6

*許容入力/出力電流40 mA

*フラッシュメモリ容量:16 KB

* SRAMボリューム:1 KB

* EEPROMボリューム:512バイト

*ジェネレーター周波数:16 MHz



料金火星ローバー



画像



*供給電圧:2.5-4.6V(VCC)

*ユーザーピンの総数:22

*これらの増加した電力のうち(モーター用):6

* 1つのピンの最大電流は25 ma

*「モーター」ピンの最大電流は250 mAです

* -0.7VからVCC + 0.7Vまでのピンごとの入力電圧

*内部チップジェネレーター〜5MHz

*ロジックエレメント/トリガーの数:240

*フラッシュメモリの量:512x16ビット= 1024バイト。



火星ローバーボードのパラメーターのこれらの特性を簡単に見ると、いくぶん驚くべきことです。 実際、フラッシュメモリの量はATmega168の量よりもはるかに少なく、SRAMはまったくありません。 「論理要素/トリガーの数」とは何ですか? そして、どういうわけか彼らは少数です-わずか240 ...



おそらく今、これらのボードの間で最も重要かつ根本的な違いに到達しました。 Arduinoボードの場合、SIに似た言語でプログラムを作成する必要があります。 しかし、 火星ローバーボードの場合は、「電気回路図を描く」必要があります。 もちろん、回路の代わりにVerilogやVHDLなどの特別なハードウェア記述言語を使用できますが、これは本質を変えるものではありません。 火星探査機ボード用に作成されたプロジェクトは、まだ回路設計プロジェクトです。



おそらく、マイクロコントローラーのプログラミングを始めた人は、このすべてを非常に難しく感じるでしょう。 本当に考えるべきことがあります。 実際、SIなどの言語での典型的なプログラミングは、プロセッサのシーケンシャルアクションの記述です。 FPGAではすべてが間違っています。 ここでは、並行して実行される多くの同期プロセスを記述する必要があります。 これは、レジスタからレジスタへのデータビットの転送の説明です。



最も単純なプロジェクトの特定の例を参照することをお勧めします。 同じことを行いますが、異なるボード上で: ArduinoMars rover

たとえば、 Arduino Webサイトに投稿された簡単な「ボタン」の例を見てみましょう。

この例では、マイクロコントローラーは、ボタンが接続されている1つの入力ラインの状態を定期的にポーリングします。 ボタンが押されていない場合、値「ゼロ」が入力ラインに表示されます(ラインは抵抗によりわずかにグラウンドに引き寄せられます)。 ボタンが押されると、ライン上に供給電圧、つまり「ユニット」が存在します。 マイクロコントローラーはこの値をポートに書き込み、接続されたLEDが点灯または消灯します。 私の意見では、これは素晴らしい例です。 そのソースを以下に示します。



//定数は変更されません。 ここで使用されています

//ピン番号を設定します:

const int buttonPin = 2; //押しボタンピンの番号

const int ledPin = 13; // LEDピンの番号



//変数は変更されます:

int buttonState = 0; //プッシュボタンのステータスを読み取るための変数



void setup(){

// LEDピンを出力として初期化します:

pinMode(ledPin、OUTPUT);

//プッシュボタンピンを入力として初期化します:

pinMode(buttonPin、INPUT);

}



void loop(){

//プッシュボタン値の状態を読み取ります:

buttonState = digitalRead(buttonPin);



//プッシュボタンが押されているかどうかを確認します。

//存在する場合、buttonStateはHIGHです:

if(buttonState == HIGH){

// LEDをオンにします:

digitalWrite(ledPin、HIGH);

}

その他{

// LEDをオフにします:

digitalWrite(ledPin、LOW);

}

}



プログラムから、ボタンが接続されている入力の値をマイクロコントローラーがポートから読み取り、次に1ビットを他のポートに書き込んでLEDを点灯させることがわかります。



正直なところ、この例の作成者が次のように書いていない理由はわかりません。



ボイドループ()

{

digitalWrite(ledPin、digitalRead(buttonPin));

}



私の意見では、これははるかに明確です:-)

このプログラムはマイクロコントローラーによって実行されるため、当然、ボタンの状態をポーリングする瞬間の間、 ループ(){...}サイクル全体のマイクロプロセッサー命令の数とそのクロック周波数に比例して時間が経過することに注意してください。



次に、 火星探査機ボードに基づいて同じことを行う方法を見てみましょう。 プロジェクトの概要を作成する必要があります。 次のようになります。



画像



実際、この回路では、ボタンが接続されている入力からLEDが接続されている出力までの配線は1本のみです。 もちろん、それらの間にはまだ論理要素があります-「NOT」。 彼は信号「ゼロ」から「ユニット」を作り、その逆も同様です。 火星探査機の回路基板はArduinoが提供するものとは異なるため、この要素はインバーターに必要です。 そこで、ボタンは電源に接続され、2番目の接点はATmega168の入力に行き、抵抗を介してグランドに引き寄せられます。 火星探査機のボードでは、逆です。 ボタンはグランドに接続され、2番目のピンはチップの入力に接続され、弱い抵抗(弱いプルアップ抵抗)を介して電源電圧に引き上げられます。 このため、ロジックは反対になり、「NOT」要素が必要になります。



そのようなプロジェクトは、 Arduinoのプログラムよりもはるかに高速に「動作」することに注意してください。 ここでは、ボタンはプログラムで問い合わせられませんが、実際には入力から出力までインバータを介してワイヤで接続されています。 伝播遅延は文字通り数ナノ秒になります。 したがって、潜在的にCPLDはマイクロコントローラーよりもはるかに高速な機能を実行できます。



そしてもう一つの発言。

もちろん、大規模なプロジェクトは図に描かれていません。 これは同じ回路がどのように見えるかですが、Verilogプログラミング言語で書かれています:



モジュールテスト(入力ワイヤキー、出力ワイヤLED);

led =!キーを割り当てます。

終了モジュール



おそらく、このボタンの例はあなたには馬鹿げているように見えるでしょう。 確かに、その意味はあまりありません。 しかし、彼は最も重要なことを明らかにしています。 火星探査機用のプロジェクトを作成するときは、プロジェクトに「AND」、「OR」、「NOT」などの必要な論理要素とトリガーをインストールし、ワイヤーで接続します。 アルテラのQuartusII開発環境は、プロジェクトのすべてのロジックをチップ内に自動的に配置し、必要な要素をワイヤで接続します。



一般的に、あなたはそう見ることができます。 間違いなく、両方のボードが注目に値します。 Arduinoプラットフォームで行う方が簡単なこと、 Mars roverプラットフォームで行うこと。 一部のアイデアは、あるボードでは実装でき、別のボードでは実装できないと思います。



私は火星ローバーが好きです。 一見非常に小さなリソースの助けを借りて、より多くのことを考え、素晴らしいことをすることができます。 このサイトmarsohod.orgにアクセスし、少なくとも完了済みのプロジェクトの例を見てください。 説明があり、プロジェクト自体を収縮させることができ、ビデオがあります。 ビデオは、ロボット車がどのように機能するか、リモコンの助けを借りてどのように制御されるか、車が光に反応して迷路を去る様子を示しています。 さらに多く!



All Articles