無線電子工学および電気工学の百科事典 シンプルなロボット。 無線エレクトロニクスと電気工学の百科事典 この記事では、単純な「ロボット」の図を示します。 彼は光のところに行きますが、光源がない場合は、「自由探索」モードがアクティブになります。 ロボットが運転し、衝突した場合は発進して方向転換します。 ロボットの心臓部は ATMEL マイクロコントローラー AT90S2313 ですが、この会社の他のマイクロコントローラーを使用することもできます。このマイクロコントローラーにはプログラム用の 2kb のメモリ、15 個の入出力ポート、利用可能な電力 - 4 ~ 6V が備わっています。 エンジンは、「エンジンドライバー」、つまりL293Dマイクロ回路(国内の類似品はKR1128KT4A)によって制御されます。 センサーとしてフォトレジスター SF3-1 を採用することにしました。 ロボットは XNUMX つのモーターで構成されています。 特定のアクションに対してどのように機能するかは次のとおりです。
回路で使用される無線要素: マイコン AT90S2313 マイクロサーキット L293D (国内アナログ - KR1128KT4A) 2 フォトレジスタ SF3-1 4MHzのクォーツ コンデンサ 22~24pF スタビライザー 7805 (または KREN5A) 100 オームの抵抗器 (オプション) XNUMXつのモーター 電源 Vbat - 単三電池 4 本、またはクラウン (1V) 9 本 電源 Vm-1クラウン(9V) 回路を組み立てた後、プログラムをマイクロコントローラーにダウンロードする必要があり、ロボットの準備が整います。 /**************************************************** **** *** チップタイプ:AT90S2313 クロック周波数: 4,000000 MHz メモリモデル:Tiny 外部 SRAM サイズ : 0 データスタックサイズ: 32 ****************************************************** ***** **/#include <90s2313.h> #include #含む // 周辺機器の操作を便利にするための定義の割り当て #定義 OUT PORTB #定義 MOTOR_F 7 #MOTOR_B の定義 6 #定義TURN_R 5 #定義TURN_L 4 #PIND で定義 #定義 LIGHT_R 0 #定義 LIGHT_L 1 #define BUMPER_F 2 #define BUMPER_B 3 // 可能な運転モード enum {停止、F、FR、FL、B、BR、BL}; // ------------------------------------------------ ------------------------------ // 遅延 t x 10ms // ------------------------------------------------ ------------------------------ void Delay_10ms(符号なし文字) {char i; for(i=0;i // 移動方向を選択するための確率表 // 現在の移動方向に基づく 符号なし文字 p[7][7] = {14、43、57、71、86、93、100、 7、43、71、100、100、100、100、 7、50、93、100、100、100、100、 7、50、57、100、100、100、100、 29、29、29、29、57、79、100、 36、36、36、36、71、93、100、 36、36、36、36、71、79、100}; // 現在の移動方向 unsigned char this_move; // ------------------------------------------------ ------------------------------ // モーターの組み合わせをオンにして、特定の方向に移動します // ------------------------------------------------ ------------------------------ void go(unsigned char 方向){ スイッチ (方向) { ケース停止: OUT.MOTOR_F=0; OUT.MOTOR_B=0; OUT.TURN_R=0; OUT.TURN_L=0; 破る; ケース F: OUT.MOTOR_F=1; OUT.MOTOR_B=0; OUT.TURN_R=0; OUT.TURN_L=0; 破る; ケースFR: OUT.MOTOR_F=1; OUT.MOTOR_B=0; OUT.TURN_R=1; OUT.TURN_L=0; 破る; ケース FL: OUT.MOTOR_F=1; OUT.MOTOR_B=0; OUT.TURN_R=0; OUT.TURN_L=1; 破る; ケースB: OUT.MOTOR_F=0; OUT.MOTOR_B=1; OUT.TURN_R=0; OUT.TURN_L=0; 破る; ケースBR: OUT.MOTOR_F=0; OUT.MOTOR_B=1; OUT.TURN_R=1; OUT.TURN_L=0; 破る; ケース BL: OUT.MOTOR_F=0; OUT.MOTOR_B=1; OUT.TURN_R=0; OUT.TURN_L=1; 破る; } } // ------------------------------------------------ ------------------------------ // 確率表に従って、次のステップでの移動方向を選択します // ------------------------------------------------ ------------------------------ unsigned char next_move(void){ 符号なしcharpp、i; pp = ランド()/327; // 乱数 0..99 を取得します for (i=0;i<7;i++){ // 確率テーブルで一致を探します if (p[this_move][i] > pp) ブレーク; } this_move = i; // 新しく受信した方向を現在の方向として書き込みます リターン(私); } // ------------------------------------------------ ------------------------------ // フロントバンパー割り込み処理 (INT0 = PD2) // ------------------------------------------------ ------------------------------ 割り込み [EXT_INT0] void ext_int0_isr(void) { if(this_move==FR) go(BL); if(this_move==FL) go(BR); そうでなければ行く(B); 遅延_10ms(250); // 2.5×2秒以内に出発 遅延_10ms(250); この移動=B; } // ------------------------------------------------ ------------------------------ // リアバンパー割り込み処理 (INT1 = PD3) // ------------------------------------------------ ------------------------------ 割り込み [EXT_INT1] void ext_int1_isr(void) { if(this_move==BR) go(FL); if(this_move==BL) go(FR); そうでなければ行く(F); 遅延_10ms(250); // 2.5×2秒以内に出発 遅延_10ms(250); this_move=F; } // ------------------------------------------------ ------------------------------ // "ランダムウォーク" // ------------------------------------------------ ------------------------------ unsigned char walk(void){ // このループは「フリーローミング」を構成します // どの光センサーからも信号がありません while((IN.LIGHT_R) && (IN.LIGHT_L)){ go(next_move()); // 次の移動方向を取得し、 遅延_10ms(250); // この方向に 2.5 秒移動します } // このループは、ライトへの動きを整理します。 // 少なくとも XNUMX つの光センサーからの信号があります while((IN.LIGHT_R==0) || (IN.LIGHT_L==0)){ if((IN.LIGHT_R==0) && (IN.LIGHT_L==0)) go(F); それ以外の場合 (IN.LIGHT_R==0) go(FR); それ以外の場合 (IN.LIGHT_L==0) go(FL); } return(0); } // ------------------------------------------------ ------------------------------ // メインプログラム // ------------------------------------------------ ------------------------------ 無効メイン(ボイド) { DDRB=0xff; // ポート B のすべてのラインを出力に割り当てます ポート B = 0x00; // そしてそれらを低く設定します DDRD=0x00; // ポート D のすべてのラインを入力に割り当てます ポート = 0xff; // 内部負荷抵抗を接続します // 外部割り込みの初期化 // INT0: オン // INT0 モード: 立ち下がりエッジ // INT1: オン // INT1 モード: 立ち下がりエッジ GIMSK=0xC0; MCUCR=0x0A; GIFR=0xC0; // 割り込みを有効にする #asm("せい") // メインループ開始 while(1) ウォーク(); } プログラム、ファームウェア ファイル、ロボット図を sPlan 形式でダウンロード 出版物: cxem.net 他の記事も見る セクション ラジコン機器. 読み書き 有用な この記事へのコメント. 科学技術の最新ニュース、新しい電子機器: 交通騒音がヒナの成長を遅らせる
06.05.2024 ワイヤレススピーカー Samsung ミュージックフレーム HW-LS60D
06.05.2024 光信号を制御および操作する新しい方法
05.05.2024
その他の興味深いニュース: ▪ 飛行船列車 ▪ 疑わしい海事法 ▪ 救急車の通知 ▪ 地球を回る軌道輪
無料の技術ライブラリの興味深い資料: ▪ サイトセクション 充電器、蓄電池、バッテリー。 記事の選択 ▪ 記事急速 LED ファイア (オプション 3)。 無線エレクトロニクスと電気工学の百科事典 ▪ 記事 160m対応のシンプルなSSBミニトランシーバー。 無線エレクトロニクスと電気工学の百科事典 このページのすべての言語 ホームページ | 図書館 | 物品 | サイトマップ | サイトレビュー www.diagram.com.ua |