自宅でロボットを作成します



確かに、ロボットに関する映画を見た後、仲間を作りたいと思うことがよくありましたが、どこから始めればいいのかわかりませんでした。 もちろん、2本足のターミネーターを構築することはできませんが、私たちはこのために努力していません。 簡単なロボットは、はんだごてを手に正しく保持する方法を知っている人なら誰でも組み立てることができ、これは深い知識を必要としませんが、傷つけることはありません。 アマチュアのロボット工学は回路とそれほど違いはありませんが、より興味深いのは、メカニクスやプログラミングなどの領域も影響を受けるためです。 すべてのコンポーネントは簡単にアクセスでき、それほど高価ではありません。 そのため、進歩は止まっておらず、私たちはそれを有利に活用します。





はじめに



だから。 ロボットとは? ほとんどの場合、これは環境アクションに応答する自動デバイスです。 ロボットは人間によって制御されるか、事前にプログラムされたアクションを実行できます。 通常、ロボットにはさまざまなセンサー(距離、回転角度、加速度)、ビデオカメラ、マニピュレーターがあります。 ロボットの電子部品は、マイクロコントローラー(MK)で構成されています。これは、プロセッサー、クロックジェネレーター、さまざまな周辺機器、操作可能な読み取り専用メモリを収容するマイクロ回路です。 世界には、さまざまなアプリケーション向けの多種多様なマイクロコントローラーがあり、それらに基づいて強力なロボットを組み立てることができます。 アマチュアの建物では、AVRマイクロコントローラーが広く使用されています。 それらは最も手頃な価格であり、インターネット上でこれらのMKに基づいた多くの例を見つけることができます。 マイクロコントローラーを使用するには、アセンブラーまたはCでプログラミングでき、デジタルおよびアナログ電子機器の基本的な知識が必要です。 このプロジェクトでは、Cを使用します。 MKのプログラミングはコンピューターでのプログラミングとそれほど変わらず、言語の構文は同じです。ほとんどの機能は実質的に違いはなく、新しい機能は習得が容易で使いやすいです。



何が必要ですか



そもそも、ロボットは障害物を簡単に回避することができます。つまり、自然界のほとんどの動物の通常の行動を繰り返すことができます。 このようなロボットを構築するために必要なものはすべて、ラジオ店で見つけることができます。 ロボットの動きを決定します。 戦車で使用される最も成功したキャタピラーは、最も便利なソリューションであると考えています。キャタピラーは車の車輪よりも優れたクロスカントリー能力を持ち、それらを制御する方が便利だからです(回転させるとキャタピラーをさまざまな方向に回転させるのに十分です)。 したがって、トラックが互いに独立して回転するおもちゃのタンクが必要になります。これは任意のおもちゃ屋で手頃な価格で購入できます。 このタンクから必要なのは、トラックを備えたプラットフォームとギアを備えたモーターのみで、残りは安全にねじを外して投げることができます。 また、マイクロコントローラーも必要です。私の選択はATmega16でした。センサーと周辺機器を接続するのに十分なポートがあり、一般に非常に便利です。 また、いくつかの無線コンポーネント、はんだごて、マルチメーターを購入する必要があります。



MKで料金を支払う





ロボット回路



この場合、マイクロコントローラーは脳の機能を実行しますが、それではなく、ロボットの脳の力で開始します。 適切な栄養は健康への鍵です。初心者のロボットビルダーは通常これを間違えるため、ロボットに適切に栄養を与える方法から始めます。 また、ロボットが適切に機能するためには、電圧安定器を使用する必要があります。 私はL7805チップを好みます-それは出力で5Vの安定した電圧を与えるように設計されています。 ただし、このチップの電圧降下は約2.5 Vであるため、最低7.5 Vを供給する必要があります。 この安定器とともに、電解コンデンサを使用して電圧リップルを平滑化し、逆極性から保護するために回路にダイオードを含める必要があります。

これで、マイクロコントローラーの世話をすることができます。 MK-DIP(はんだ付けする方が便利)の場合、40の結論があります。 ボードにはADC、PWM、USARTなどがありますが、まだ使用しません。 いくつかの重要なノードを検討してください。 RESETピン(MKの9フィート)は、抵抗R1によって電源の「プラス」にプルアップされます-これは行わなければなりません! そうしないと、MKが意図せずにリセットされたり、より単純にグリッチが発生する可能性があります。 RESETをセラミックコンデンサC1を介してグランドに接続することも望ましい手段ですが、必須ではありません。 図では、1000マイクロファラッドの電解質も確認できます。これは、モーターの動作中の電圧低下を防ぎます。これは、マイクロコントローラーの動作にも好影響を与えます。 水晶X1とコンデンサC2、C3は、端子XTAL1とXTAL2にできるだけ近く配置する必要があります。

MKをフラッシュする方法については説明しません。これはインターネットで読むことができるからです。 CodeVisionAVRを選択したプログラミング環境として、プログラムをCで作成します。 これはかなり便利な環境であり、コードを作成するための組み込みのウ​​ィザードがあるため、初心者には便利です。





私のロボットボード



エンジン管理



ロボットの同様に重要なコンポーネントはエンジンドライバーです。これにより、管理が容易になります。 モーターをMKに直接接続しないでください。 一般に、強力な負荷はマイクロコントローラーから直接制御することはできません。そうしないと燃焼します。 キートランジスタを使用してください。 私たちの場合、特別なチップ-L293Dがあります。 このような単純なプロジェクトでは、過負荷から保護するためのダイオードが組み込まれているため、常にこの特定のチップを「D」インデックスで使用するようにしてください。 このチップは制御が非常に簡単で、電気店で簡単に入手できます。 2つのDIPおよびSOICパッケージで提供されます。 ボードへの取り付けが便利なため、DIPパッケージで使用します。 L293Dには、独立したモーター電源とロジック電源があります。 したがって、安定化回路(VSS入力)から超小型回路自体に電力を供給し、バッテリー(VS入力)からモーターに直接電力を供給します。 L293Dは、チャネルあたり600 mAの負荷に耐えることができ、これらのチャネルが2つあります。つまり、2つのモーターを同じチップに接続できます。 しかし、安全にするために、チャネルを結合し、各エンジンに1つのマイクラが必要になります。 したがって、L293Dは1.2 Aに耐えることができます。これを実現するには、図に示すように、マイクラの脚を組み合わせる必要があります。 マイクロ回路は次のように機能します:論理「0」がIN1とIN2に供給され、論理ユニットがIN3とIN4に供給されると、モーターは一方向に回転し、信号が反転すると論理ゼロが適用され、モーターは他の方向に回転し始めます。 結論EN1およびEN2は、各チャネルの切り替えを担当します。 それらを接続し、スタビライザーからの「プラス」電源に接続します。 動作中に超小型回路が熱くなり、このタイプのケースではラジエーターの設置に問題があるため、熱はGND脚から供給されます。広い接触領域にはんだ付けする方がよいでしょう。 エンジンドライバーについて初めて知る必要があるのはこれだけです。



障害物センサー



ロボットがすべてに衝突せずに移動できるように、2つの赤外線センサーを取り付けます。 最も単純なセンサーは、赤外線スペクトルで放射するIRダイオードと、IRダイオードから信号を受信するフォトトランジスタで構成されています。 原理は次のとおりです。センサーの前に障害物がない場合、赤外線はフォトトランジスタに落ちず、フォトトランジスタは開きません。 センサーの前に障害物がある場合、センサーからの光線は反射され、トランジスタに当たります。トランジスタが開き、電流が流れ始めます。 このようなセンサーの欠点は、異なる表面に対して異なる反応を示し、干渉から保護されないことです-センサーは、偶然に、他のデバイスからの外部信号から動作する可能性があります。 信号を変調することで干渉を防ぐことができますが、今のところは気にしません。 開始するには、それで十分です。





ロボットセンサーの最初のバージョン



ロボットファームウェア



ロボットを復活させるには、そのためのファームウェア、つまりセンサーから読み取り値を取得してエンジンを制御するプログラムを作成する必要があります。 私のプログラムは最も単純で、複雑な構造が含まれておらず、誰もが理解するでしょう。 次の2行には、マイクロコントローラーのヘッダーファイルと遅延を生成するためのコマンドが含まれています。



#include <mega16.h>

#include <delay.h>








PORTC値はエンジンドライバーをマイクロコントローラーに接続した方法に依存するため、次の行は条件付きです。



PORTC.0 = 1;

PORTC.1 = 0;

PORTC.2 = 1;

PORTC.3 = 0;








値0xFFは、出力がログであることを意味します。 「1」、および0x00はログです。 「0」。



次の構造により、ロボットの前に障害物があるかどうか、またどの側から障害物があるかを確認します。



if (!(PINB & (1<<PINB.0)))

{

...

}








IRダイオードからの光がフォトトランジスタに到達すると、ログがマイクロコントローラーの足元に設定されます。 「0」の場合、ロボットは後方に動き始めて障害物から遠ざかり、その後、再び障害物に衝突しないように向きを変えて、再び前方に移動します。 センサーが2つあるため、障害物の存在を2回確認します(右側と左側)。したがって、障害物がどちら側にあるかを確認できます。 delay_ms(1000)コマンドは、次のコマンドが実行を開始する前に1秒が経過することを示します。



おわりに



最初のロボットを組み立てるのに役立つほとんどの側面を調べました。 しかし、これはロボット工学の終わりではありません。 このロボットを集めると、その拡張の機会がたくさんあります。 障害物がある側からではなく、ロボットの正面にある場合の対処方法など、ロボットアルゴリズムを改善できます。 また、エンコーダーをインストールしても問題ありません。これは、宇宙空間でのロボットの位置を正確に位置決めして知るのに役立つシンプルなデバイスです。 明確にするために、カラーまたはモノクロのディスプレイをインストールして、バッテリー残量、障害物までの距離、さまざまなデバッグ情報などの有用な情報を表示できます。 センサーの改善は障害ではありません-従来のフォトトランジスタの代わりにTSOP(これらは特定の周波数の信号のみを受信するIRレシーバー)の設置です。 赤外線センサーに加えて、超音波センサーがあり、より高価であり、欠点もありますが、最近ではロボットエンジニアの間で人気が高まっています。 ロボットが音に反応するためには、アンプ付きのマイクを設置するとよいでしょう。 しかし、本当に興味深いのは、マシンビジョンに基づいてカメラとプログラミングをインストールすることです。 顔認識、色付きビーコンに沿った移動、および多くの興味深いことをプログラムできる特別なOpenCVライブラリのセットがあります。 それはすべてあなたの想像力とスキルに依存します。



コンポーネントリスト:




ファームウェアコード:


/*****************************************************





: ATmega16

: 16,000000 MHz

, :

Project -> Configure -> "C Compiler"

*****************************************************/



#include <mega16.h>

#include <delay.h>



void main(void)

{

//

//

DDRB=0x00;

//

PORTB=0xFF;



//

//

DDRC=0xFF;



// .

//

while (1)

{

//

PORTC.0 = 1;

PORTC.1 = 0;

PORTC.2 = 1;

PORTC.3 = 0;

if (!(PINB & (1<<PINB.0))) //

{

// 1

PORTC.0 = 0;

PORTC.1 = 1;

PORTC.2 = 0;

PORTC.3 = 1;

delay_ms(1000);

//

PORTC.0 = 1;

PORTC.1 = 0;

PORTC.2 = 0;

PORTC.3 = 1;

delay_ms(1000);

}

if (!(PINB & (1<<PINB.1))) //

{

// 1

PORTC.0 = 0;

PORTC.1 = 1;

PORTC.2 = 0;

PORTC.3 = 1;

delay_ms(1000);

//

PORTC.0 = 0;

PORTC.1 = 1;

PORTC.2 = 1;

PORTC.3 = 0;

delay_ms(1000);

}

};

}








私のロボットについて



現時点では、私のロボットはほぼ完成しています。



ワイヤレスカメラ、距離センサー(カメラとこのセンサーの両方がタレットに取り付けられています)、障害物センサー、エンコーダー、リモコン信号受信機、コンピューターに接続するためのRS-232インターフェイスを備えています。 スタンドアロンと手動(リモートコントロールから制御信号を受信する)の2つのモードで動作します。カメラはリモートで、またはバッテリー自体を節約するためにロボット自体でオン/オフすることもできます。 私はアパートを保護するためにファームウェアを書いています(画像をコンピューターに転送する、動きを検出する、部屋を迂回する)。



希望に応じてビデオをアップロードします。





UPD。 写真をリロードし、テキストを少し修正しました。



この記事は、2009年8月のジャーナル「Hacker」に掲載されました。



All Articles