回路

他の無駄な機械の作り方:作りやすく、使いにくい!:9つのステップ(写真付き)

Borderlands 2 guia definitiva sobre el terramorfo

Borderlands 2 guia definitiva sobre el terramorfo

目次:

Anonim

非常に多くの無駄なマシンが作られています。単純に、それは本当に楽しいです:)、構築するのが楽しい、そして一緒に遊ぶのが楽しいです。
「箱の中を考える」人が常にいると感じたので、私はこのバージョンにキャラクターを与えようとしました、それでここで私が試みた、私は私が「彼女」に人生を与えることに成功したと思います!
私はあなたがすべてのステップをあなたと簡単に共有できることを本当に嬉しく思います。私のバージョンはArduinoに基づいています、あなたはそれがやり過ぎだと思うかもしれませんが、それが私に与えた柔軟性を考えると、私はそれが価値があると思います。
これがすべてまとめたビデオです。後で、私達は部品、ステップ、回路図およびコードに移動します
もしあればあなたのコメントや質問を教えてください。
あなたが楽しむことを願っています!
f。

用品:

ステップ1:仕組み

すべてがArduinoボードに接続され、ボードがスイッチがロジックHIGHに設定されるまで待機します。つまり、スイッチをフリックすると、ボードは2つのサーボモーターに特定の方法で移動するように指示します。 「手」に接続されたサーボは、スイッチをオフ位置にフリックしてボックスに戻し、続いて「ドア」サーボに戻ります。それからすべてが繰り返されます。
あなたが上記のビデオを見たならば、スイッチが切り替えられるたびに、マシンは異なった方法で反応します、そしてこれは単にArduinoコードで異なったタイミングで異なった機能を書くことによって行われます、(私はそれらを "Moves"と呼んでいます)。スイッチが切り替えられるたびに、すべてが完了するまで新しい動作を呼び出しています。最初からやり直します。ステップ9では、順次ではなくランダムな移動を選択するコードの別のバージョンを提供したことに注意してください。 Arduinoに十分なメモリがある限り、好きなだけ移動を追加できます。
Arduinoは常にオンになっています、これは私がマシンが使用されていないときにいくらかの電力を節約するためにバッテリー用のスイッチを追加した理由です。現在の単純なHIGH / LOW検出の代わりに、スイッチで割り込みを使用し、それをスリープモードと組み合わせることをすでに計画しています。これは、マシンが使用されていないときには電力を節約し、常に準備ができていることを可能にします(ただしこれはコードを複雑にします)。今のところ、それは単なるON / OFFスイッチで、ボードには常に電源が入っています。

ステップ2:部品

必要になるだろう:
必須:
1.箱
2. PWM出力を備えたArduinoのボード(私はたまたま古いものがある、Diecimila)
3. 2つの標準的なRCサーボモーター(私はFutabaを使用しました - S3003、それらはドアまたは手を動かすのに十分すぎる以上の3,2 Kg / cmのトルクを持っています)
4. 6-12 Vバッテリー(ARドローンバッテリーを使用しました。11.1v / 1000 mAです)
3.トリガー用のSPTTまたはSPSTスイッチ(基本的にはあなたに合ったスイッチ!)
5.電池用のもう一つのスイッチ
あなたは上から移動/コードを再起動したい場合にArduinoをリセットするためのプッシュボタン。
7.いくつかのジャンパー線

オプション:
あなたがボックスの周りを動かすことを含む動きをデザインしたい場合(ビデオの最後の動きのように)、そしてあなたは得ることができます:
1. Arduinoのモーターシールド、これは他のプロジェクトにも役立ちます(または自分でHブリッジを設計し、それを検索することもできます)。
あなたがそのDCモーターとギアボックスを取ることができるように安いRCカー
さらに、「オプション」の項では、スイッチのオン/オフが切り替わったときにクリーンなトリガーを発生させるためのハードウェアデバウンス回路を構築しました。これはスキップすることができ、遅延またはタイマーを使用してarduinoソフトウェアに簡単に実装できます。ハードウェアデバウンスをしたのは、割り込みを使用するようにコードをすぐに変更する予定で、後者はルーチン内で遅延/タイマー機能を確実に使用できないため、将来使用するために単純なデバウンス回路を作成する必要があった。この部分をスキップしたい場合は、単純なスイッチ/抵抗をarduinoのピン2に接続してソフトウェアデバウンスルーチンを実装するだけです。
ハードウェアデバウンスのために:
1. 10mF電解コンデンサ
2. 10K抵抗
論理NOTゲート、すなわちインバータ(チップ74HC04)これは6つのインバータを有するが、あなたは1つだけ必要であろう。
それを構築しましょう…

ステップ3:箱を作る

あなたは適当だと思うどんな箱でも使うことができます。私は私のものを建てました、多分完璧ではありませんが、それでも多くの個人的な:)
1.私はカッターを使って作業するのが非常に簡単で、その信じられないほどの軽量を考えると比較的強い2枚の5mm BALSA木材を使いました。
シアノアクリレート接着剤(別名強力速効性接着剤)5本
ここにあります:
A 22 x 14 x 14 cm ボックス

ステップ4:回路図

上の図は(Fritzingを使って描いた)回路図です。
頭の部分: arduinoのメインボード、2つのサーボとスイッチの接続性。前述のように、デバウンス(右上)回路全体を単純な抵抗/スイッチで置き換えることができます。
「ドア」と「ハンド」の両方のサーボは、Arduinoの5Vピンから直接給電されています。信号線はそれぞれ9番ピンと10番ピンに接続されています。これらのピンはPWMをサポートしているので、私はサーボの角度/位置を制御するためにそれらを使用しています(0から最大180度まで)。
注意:赤いプッシュボタンはリセットです(arduinoのボードの表面にあるものと同じです)。私は箱を開けることなくいつでもボード/ソフトウェアをリセットするための素早いアクセスを持つためにそれを加えました。リセットを行うには、単にRESETピンをグランドに接続してください。
下部: DCモーターを使用して機械を動かしたい場合に必要です。これはArduinoのモーターシールドで、Arduinoの上に取り付けられているため、両方のボードのすべてのピンが互いに接続されています。わかりやすくするために、これらを以下のように分けて表示しています。このシールドは、驚くほど簡単に最大2台のDCモーター(2チャンネルA / B)を制御できます。今は1つだけ使っています。それは利用可能な2つのチャンネル/モーターのいずれかのコード、方向、スピードとブレークを設定することを可能にします。下記のようにチャンネルBを使用しています。どこピン
方向は13、速度は11、ブレーキ制御は8です。
バッテリーはシールドに接続された11.1 / 1000 mAで、DCモーター、メインのarduinoボード、そしてサーボに給電します。シールドを使用していない場合は、メインのarduinoボード上のパワーバレルにバッテリーを直接接続できます。

ステップ5:サーボを修理する

手とドアのサーボが取り付けられています:
あなたは最初にそれらの正しい場所にサーボをインストールする必要があります、あなたが必要な動きを得るまでこれは少し試行錯誤を必要とします。あなたはサーボとそれぞれに必要なたわみの量をテストするためにarduino IDEで提供されたサーボの例を使用することができます、そしてそれ故にドアとハンドのサーボのための最終的な位置決めと腕の長さを決定します。
腕は単純にバルサ材で作られています、私はいくらかの引き裂きに耐えるためにそれらをより厚くしました。
以下は私がそれをした方法です。ハンドサーボについて注意してください。サーボシャフトはカバーの端の真下にある必要があります(下図を参照)。これは、スイッチをうまく押すことができ、またボックスに戻ることができるようにするのに苦労するのを避けるためです。


ステップ6:スイッチ、サーボ、Arduinoの接続

回路図の手順で表示されているすべての接続を作成し、上に表示されているものと同様に、すべてボックス内に配置します。

ステップ7:オプション:DCモーターとバッテリー

上に私がDCモーターのギアボックス(安いRCカーから取った)を入れる方法があります、そしてまた打者とスイッチ配置を示します。
箱のバランスをとるためにギアをできるだけ中央に配置するようにしてください。私が使用したバッテリーは少し重く(100 gr)、多少の振動があるため、箱の内側にある程度の重さでバランスをとる必要があります。ボックスを切り替えるときや移動するとき
そのDCモーターに注意してください 速度 ピンによって制御されます 11, 方向 ピンで 13、そして ブレーキ ピンで 8, これらは、arduinoモーターシールドのチャンネルBと見なされます。
アセンブリを通して、私は単純な本物の箱を持つためにすべてのワイヤースイッチと他の部品を隠そうとしました。これはホイールにも当てはまるので、ホイールとバッテリーの両方を収容するリムを作り、さらに赤いリセットボタンへのアクセスも提供します。

ステップ8:コード

arduino用のコードを書くためには、arduino IDEが必要です(ここからダウンロードしてください)
私はバージョン1.0.5を使用しています、ちょうどIDEの中から正しいCOMポート(ウィンドウ)とボードタイプを選択することを確認してくださいそしてそれから以下のコードを使ってください、そして、アップロードを押してください。
注:サーボの最大たわみを設定するためにコードで使用した値は、サーボの位置、軸、角度を考慮して、このボックスに対して正確に作成されています。私はこれを裁判で受けました。だからあなたはあなたのボックスに従ってあなた自身の値を工夫する必要があります サーボ配置.
参考までに、コード内で発生するのがわかるように、各サーボに使用した最小/最大値を以下に示します。
ドア:
80隠し、155全開
手:
0非表示、129スイッチを押す

これがコードです(下からコピー/貼り付けするのではなく、このステップに添付されたファイルをダウンロードしたほうが良いです)。
#含める
サーボドアサーボ。
サーボハンドサーボ
int switch_pin = 2。 //スイッチをピン2に設定
//モーター変数
int motorThrottle = 11;
int motorDirection = 13。
int motorBrake = 8。
int pos = 0;
int selectedMove = 0。 //セレクタを移動
int Testmove = 0。 //テストモード:選択した1つの移動のみをテストするために移動番号に設定
//(通常の実行ではゼロに設定、すなわちammの移動時にroundrobbin)
void setup()
{
Serial.begin(9600);
pinMode(switch_pin、INPUT);
doorServo.attach(9); //ドアのサーボをピン9 PWMに設定
handServo.attach(10); //ハンドサーボをピン10 PWMに設定
doorServo.write(80); //ドアを隠れる位置に設定
handServo.write(0); //手を隠す位置にする

//チャンネルBを設定します(チャンネルAはドアとハンドのサーボによって予約されており、同時に使用することはできません)。
pinMode(motorDirection、OUTPUT); //モーターチャンネルBピンを開始
pinMode(motorBrake、OUTPUT); //ブレーキチャンネルBピンを起動

}

void loop()
{
if(Testmove!= 0){
selectedMove = Testmove;
}

//スイッチがオンの場合は、ドアと手を動かしてスイッチをオフにします…
if(digitalRead(switch_pin)== HIGH)
{

if(selectedMove> 10){selectedMove = 0; //すべての動きが再生されたら、最初から動きを繰り返す
//以下は私がこれまでに設計したすべての "Moves"です、それぞれがコードの下に書かれている関数です、名前を実行してください、不思議に思ってください?はい、アラビア語で書かれているものもあります
if(selectedMove == 0){switchoff(); }
そうでなければ(selectedMove == 1){switchoff(); }
そうでなければ(selectedMove == 2){switchoffbitaraddod(); }
そうでなければ(selectedMove == 3){crazydoor(); }
そうでなければ(selectedMove == 4){crazyslow(); }
そうでなければ(selectedMove == 5){m7anika7anika(); }
そうでなければ(selectedMove == 6){m3alla2(); }
そうでなければ(selectedMove == 7){switchoff(); }
そうでなければ(selectedMove == 8){matrix(); }
そうでなければ(selectedMove == 9){sneak(); }
それ以外の場合(selectedMove == 10){zee7(); }

if(Testmove == 0){
selectedMove ++; //テストモードではない場合は次の移動に切り替える
}
}
}

//移動ライブラリ
//基本的な動き
void switchoff()
{
//移動ドア
(pos = 80、pos <155、pos = 3)の場合
{
doorServo.write(pos);
遅延(15)。
}

//手を動かす
(pos = 0; pos <129; pos = 4)の場合
{
handServo.write(pos);
遅延(15)。
}

//手を隠す
(pos = 129; pos> = 0; pos- = 4)に対して
{
handServo.write(pos);
遅延(15)。
}

//ドアを隠す
(pos = 155; pos> = 80; pos- = 3)に対して
{
doorServo.write(pos);
遅延(15)。
}
}

//移動3:開いて待ってから手を動かして待ってからに切り替えて非表示
void switchoffbitaraddod()
{
//移動ドア
(pos = 80、pos <155、pos = 3)の場合
{
doorServo.write(pos);
遅延(15)。
}
遅延(800)。
//手を動かす
(pos = 0; pos <100; pos = 4)の場合
{
handServo.write(pos);
遅延(15)。
}
遅延(1000)。
(pos = 100; pos <129; pos = 4)の場合
{
handServo.write(pos);
遅延(15)。
}

//手を隠す
(pos = 129; pos> = 0; pos- = 5)に対して
{
handServo.write(pos);
遅延(15)。
}

//ドアを隠す
(pos = 155; pos> = 80; pos- = 3)に対して
{
doorServo.write(pos);
遅延(15)。


}

}

// 4を移動する:ドアを開けて何度も閉めて、待ってから、すぐにもう一度電源を入れなおして非表示にします。

void crazydoor()
{

//移動ドア
(pos = 80、pos <125、pos = 3)の場合
{
doorServo.write(pos);
遅延(15)。
}

//ドアを隠す
(pos = 125; pos> = 80; pos - = 5)に対して
{
doorServo.write(pos);
遅延(15)。
}
//移動ドア
(pos = 80、pos <110、pos = 3)の場合
{
doorServo.write(pos);
遅延(15)。
}

//ドアを隠す
(pos = 110; pos> = 80; pos- = 15)に対して
{
doorServo.write(pos);
遅延(15)。
}
遅延(700)。
//移動ドア
(pos = 80、pos <125、pos = 3)の場合
{
doorServo.write(pos);
遅延(15)。
}
遅延(700)。
//ドアを隠す
(pos = 125; pos> = 80; pos - = 5)に対して
{
doorServo.write(pos);
遅延(15)。
}

// ----のスイッチの---- //
//移動ドア
(pos = 80、pos <155、pos = 8)の場合
{
doorServo.write(pos);
遅延(15)。
}

//手を動かす
(pos = 0; pos <129; pos = 3)の場合
{
handServo.write(pos);
遅延(15)。
}

//手を隠す
(pos = 129; pos> = 0; pos- = 3)に対して
{
handServo.write(pos);
遅延(15)。
}

//ドアを隠す
(pos = 155; pos> = 80; pos- = 15)に対して
{
doorServo.write(pos);
遅延(15)。
}

}

// 5を動かす:ドアを開け、手をゆっくりと前後にゆっくりと隠し、ゆっくりとドアを閉める。
void crazyslow()
{
//移動ドア
(pos = 80、pos <155、pos = 1)の場合
{
doorServo.write(pos);
遅延(30)。
}

//手を動かす
の場合(pos = 0; pos <129; pos = 1)
{
handServo.write(pos);
遅延(30)。
}

//手を隠す
(pos = 129; pos> = 0; pos- = 1)に対して
{
handServo.write(pos);
遅延(30)。
}

//ドアを隠す
(pos = 155; pos> = 125; pos - = 1)に対して
{
doorServo.write(pos);
遅延(30)。
}
遅延(100)。
(pos = 125; pos> = 80; pos - = 4)に対して
{
doorServo.write(pos);
遅延(15)。
}

}
// 6を移動:
void m7anika7anika(){
//移動ドア
(pos = 80、pos <155、pos = 3)の場合
{
doorServo.write(pos);
遅延(15)。
}

//手を動かす
(pos = 0; pos <70; pos = 1)の場合
{
handServo.write(pos);
遅延(15)。
}
遅延(800)。


//ドアを隠す
(pos = 155; pos> = 130; pos- = 3)に対して
{
doorServo.write(pos);
遅延(15)。
}

//ドアを隠す
(pos = 130; pos <155; pos = 3)の場合
{
doorServo.write(pos);
遅延(15)。
}
//ドアを隠す
(pos = 155; pos> = 130; pos- = 3)に対して
{
doorServo.write(pos);
遅延(15)。
}
//ドアを隠す
(pos = 130; pos <155; pos = 3)の場合
{
doorServo.write(pos);
遅延(15)。
}

handServo.write(40);
遅延(1000)。

//手を動かす
(pos = 40; pos <129; pos = 4)の場合
{
handServo.write(pos);
遅延(15)。
}

//手を隠す
(pos = 129; pos> = 0; pos- = 4)に対して
{
handServo.write(pos);
遅延(15)。
}


(pos = 120; pos> = 80; pos - = 1)の場合
{
doorServo.write(pos);
遅延(15)。
}



}
void m3alla2(){
//移動ドア
(pos = 80、pos <155、pos = 3)の場合
{
doorServo.write(pos);
遅延(15)。
}

//手を動かす
(pos = 0; pos <127; pos = 4)の場合
{
handServo.write(pos);
遅延(15)。
}
//ドアを隠す
(pos = 155; pos> = 130; pos- = 3)に対して
{
doorServo.write(pos);
遅延(15)。
}
遅延(2000)。

(pos = 130; pos <155; pos = 3)の場合
{
doorServo.write(pos);
遅延(15)。
}

(pos = 155; pos> = 140; pos- = 3)に対して
{
doorServo.write(pos);
遅延(15)。
}
(pos = 140; pos <155; pos = 3)の場合
{
doorServo.write(pos);
遅延(15)。
}
遅延(500)。
//手を隠す
(pos = 127; pos> = 0; pos- = 4)に対して
{
handServo.write(pos);
遅延(15)。
}

//ドアを隠す
(pos = 155; pos> = 80; pos- = 3)に対して
{
doorServo.write(pos);
遅延(15)。
}
}

空行列()
{
//移動ドア
(pos = 80、pos <155、pos = 3)の場合
{
doorServo.write(pos);
遅延(15)。
}

//手を動かす
(pos = 0; pos <80; pos = 4)の場合
{
handServo.write(pos);
遅延(15)。
}

(pos = 80、pos <129、pos = 1)の場合
{
handServo.write(pos);
遅延(30)。
}
遅延(300)。

(pos = 129; pos> = 0; pos- = 4)に対して
{
handServo.write(pos);
遅延(10)。
}

//ドアを隠す
(pos = 155; pos> = 80; pos- = 3)に対して
{
doorServo.write(pos);
遅延(15)。
}

}
void sneak()
{
//移動ドア
(pos = 80、pos <130、pos = 1)の場合
{
doorServo.write(pos);
遅延(30)。
}
遅延(2000)。

//手を動かす
(pos = 0; pos <40; pos = 1)の場合
{
handServo.write(pos);
遅延(30)。
}

遅延(500)。

(pos = 130; pos <155; pos = 4)の場合
{
doorServo.write(pos);
遅延(15)。
}
遅延(100)。

(pos = 40; pos <90; pos = 4)の場合
{
handServo.write(pos);
遅延(15)。
}
遅延(500)。
//手を隠す
(pos = 90; pos> = 70; pos- = 4)に対して
{
handServo.write(pos);
遅延(15)。
}
遅延(100)。
(pos = 70; pos <90; pos = 4)の場合
{
handServo.write(pos);
遅延(15)。
}
遅延(100)。
(pos = 90; pos> = 70; pos- = 4)に対して
{
handServo.write(pos);
遅延(15)。
}
遅延(100)。

に対して(pos = 70; pos <129; pos = 4)
{
handServo.write(pos);
遅延(15)。
}

(pos = 129; pos> = 0; pos- = 4)に対して
{
handServo.write(pos);
遅延(15)。
}
//ドアを隠す
(pos = 155; pos> = 80; pos- = 3)に対して
{
doorServo.write(pos);
遅延(15)。
}
}


void zee7()
{
//移動ドア
(pos = 80、pos <155、pos = 3)の場合
{
doorServo.write(pos);
遅延(15)。
}
遅延(2000)。
//半分の速度で左に進む
digitalWrite(motorDirection、LOW); //チャンネルBの右方向を設定
digitalWrite(motorBrake、LOW); //チャンネルBのブレーキを解除する
analogWrite(motorThrottle、100); //チャンネルBのモーターをフルスピードで回転させる
遅延(300)。
digitalWrite(motorBrake、HIGH)。 //チャンネルBのブレーキをかける
遅延(2000)。

//右半分の速度で後退@半分
digitalWrite(motorDirection、HIGH); //チャンネルBの左方向を確立
digitalWrite(motorBrake、LOW); //チャンネルBのブレーキを解除する
analogWrite(motorThrottle、100); //チャンネルBのモーターを半分の速度で回転させる
遅延(300)。
digitalWrite(motorBrake、HIGH)。 //チャンネルBのブレーキをかける
遅延(1000)。

//手を動かす
(pos = 0; pos <129; pos = 4)の場合
{
handServo.write(pos);
遅延(15)。
}

//手を隠す
(pos = 129; pos> = 0; pos- = 4)に対して
{
handServo.write(pos);
遅延(15)。
}

//ドアを隠す
(pos = 155; pos> = 80; pos- = 3)に対して
{
doorServo.write(pos);
遅延(15)。
}
}


ステップ9:オプションの更新:動き検出

今日私は近接センサー(GP2Y0A21)を持っています、それで今ユーザがトグルスイッチに近づくならば私はそれを使って機械を動かすことができます:)
この追加のステップでは、移動を可能にするためのホイールをすでに構築していると仮定します(オプションのステップ8を参照)。今残っているのは、センサーを追加して、動き検出のためのコードを修正することだけです。
センサーに接続されている3本の線、黄色の信号線 ピン3 arduinoでは そして に接続されている v5 そして 接地 それぞれボード上。
写真のようにセンサーをドアの下に隠して置いたので、ドアが開いたときにのみユーザーの動きを「見る」ことができます。まさに私が必要なもの!
私はまた動き検出ルーチンを実行するためにコードを少し(ここで)変更しなければなりませんでした(機能のコードを見てください) zee7() 動きが検出されると、ボックスが最初に右に、次に左に移動し、手がスイッチを反転させて非表示になるようにします。コードは非常にコメントされています、私はそれをやり過ぎないことを願っています!
あなたは以下の更新されたコードを見つけることができます、また私が機械に無作為に動きを選ばせたことに注意してください、これは単に設定することによって順次に変えることができます boolean randomize = false;
あなたの素晴らしい提案をありがとう!
コード (下からコピーして貼り付けるのではなく、このステップに添付されているファイルをダウンロードしたほうがよいです。):
#含める
サーボドアサーボ。
サーボハンドサーボ
符号なしlong TimerA、TimerB。 //動き検出ルーチンのタイマー
int switch_pin = 2。 //スイッチをピン2に設定
//モーター変数
int motorThrottle = 11;
int motorDirection = 13。
int motorBrake = 8。
//距離変数
int motionPin = 3; //アナログ0のモーションセンサーピン
int lastDist = 0。 //最後の距離を記憶する
int currentDist = 0;
int thresh = 200; //動きのしきい値(動き検出の望ましい感度が得られるように設定します)

int pos = 0;
int selectedMove = 0。 //セレクタを移動
int Testmove = 0。 //テストモード:選択した1つの移動のみをテストするために移動番号に設定
//(通常の実行の場合はゼロに設定、つまりすべての移動でラウンドロビン)
boolean randomize = true; // trueの場合、ボックスはランダムに移動します。falseの場合、移動は1から10まで連続して行われます。

void setup()
{
Serial.begin(9600);
pinMode(switch_pin、INPUT);
doorServo.attach(9); //ドアのサーボをピン9 PWMに設定
handServo.attach(10); //ハンドサーボをピン10 PWMに設定
doorServo.write(80); //ドアを隠れる位置に設定
handServo.write(0); //手を隠す位置にする
//チャンネルAはドアとハンドのサーボで予約されており、同時に使用することはできないため、//チャンネルBを設定します。
pinMode(motorDirection、OUTPUT); //モーターチャンネルBピンを開始
pinMode(motorBrake、OUTPUT); //ブレーキチャンネルBピンを起動

}

void loop()
{
//スイッチがオンの場合は、ドアと手を動かしてスイッチをオフにします…
if(digitalRead(switch_pin)== HIGH)
{

if(Testmove == 0)
{

if(randomize == false)
{
if(selectedMove> 10)
{
selectedMove = 0; //すべての動きが再生されたら、最初から動きを繰り返す
}
}
それ以外の
{
selectedMove = random(11);
}
}
それ以外の
{
selectedMove = Testmove;
}
Serial.println(selectedMove);
if(selectedMove == 0){switchoff(); }
そうでなければ(selectedMove == 1){switchoff(); }
そうでなければ(selectedMove == 2){switchoffbitaraddod(); }
そうでなければ(selectedMove == 3){crazydoor(); }
そうでなければ(selectedMove == 4){crazyslow(); }
そうでなければ(selectedMove == 5){m7anika7anika(); }
そうでなければ(selectedMove == 6){m3alla2(); }
そうでなければ(selectedMove == 7){switchoff(); }
そうでなければ(selectedMove == 8){matrix(); }
そうでなければ(selectedMove == 9){sneak(); }
それ以外の場合(selectedMove == 10){zee7(); }

if(Testmove == 0 && randomize == false){
selectedMove ++; //テストモードでない場合は次の移動に切り替えます
}
}
}
//移動ライブラリ
//基本的な動き
void switchoff()
{
//移動ドア
(pos = 80、pos <155、pos = 3)の場合
{
doorServo.write(pos);
遅延(15)。
}

//手を動かす
(pos = 0; pos <129; pos = 4)の場合
{
handServo.write(pos);
遅延(15)。
}

//手を隠す
(pos = 129; pos> = 0; pos- = 4)に対して
{
handServo.write(pos);
遅延(15)。
}

//ドアを隠す
(pos = 155; pos> = 80; pos- = 3)に対して
{
doorServo.write(pos);
遅延(15)。
}
}

//移動3:開いて待ってから手を動かして待ってからに切り替えて非表示
void switchoffbitaraddod()
{
//移動ドア
(pos = 80、pos <155、pos = 3)の場合
{
doorServo.write(pos);
遅延(15)。
}
遅延(800)。
//手を動かす
(pos = 0; pos <100; pos = 4)の場合
{
handServo.write(pos);
遅延(15)。
}
遅延(1000)。
(pos = 100; pos <129; pos = 4)の場合
{
handServo.write(pos);
遅延(15)。
}

//手を隠す
(pos = 129; pos> = 0; pos- = 5)に対して
{
handServo.write(pos);
遅延(15)。
}

//ドアを隠す
(pos = 155; pos> = 80; pos- = 3)に対して
{
doorServo.write(pos);
遅延(15)。


}

}

// 4を移動する:ドアを開けて何度も閉めて、待ってから、すぐにもう一度電源を入れなおして非表示にします。

void crazydoor()
{

//移動ドア
(pos = 80、pos <125、pos = 3)の場合
{
doorServo.write(pos);
遅延(15)。
}

//ドアを隠す
(pos = 125; pos> = 80; pos - = 5)に対して
{
doorServo.write(pos);
遅延(15)。
}
//移動ドア
(pos = 80、pos <110、pos = 3)の場合
{
doorServo.write(pos);
遅延(15)。
}

//ドアを隠す
(pos = 110; pos> = 80; pos- = 15)に対して
{
doorServo.write(pos);
遅延(15)。
}
遅延(700)。
//移動ドア
(pos = 80、pos <125、pos = 3)の場合
{
doorServo.write(pos);
遅延(15)。
}
遅延(700)。
//ドアを隠す
(pos = 125; pos> = 80; pos - = 5)に対して
{
doorServo.write(pos);
遅延(15)。
}

// ----のスイッチの---- //
//移動ドア
(pos = 80、pos <155、pos = 8)の場合
{
doorServo.write(pos);
遅延(15)。
}

//手を動かす
(pos = 0; pos <129; pos = 3)の場合
{
handServo.write(pos);
遅延(15)。
}

//手を隠す
(pos = 129; pos> = 0; pos- = 3)に対して
{
handServo.write(pos);
遅延(15)。
}

//ドアを隠す
(pos = 155; pos> = 80; pos- = 15)に対して
{
doorServo.write(pos);
遅延(15)。
}

}

// 5を動かす:ドアを開け、手をゆっくりと前後にゆっくりと隠し、ゆっくりとドアを閉める。
void crazyslow()
{
//移動ドア
(pos = 80、pos <155、pos = 1)の場合
{
doorServo.write(pos);
遅延(30)。
}

//手を動かす
の場合(pos = 0; pos <129; pos = 1)
{
handServo.write(pos);
遅延(30)。
}

//手を隠す
(pos = 129; pos> = 0; pos- = 1)に対して
{
handServo.write(pos);
遅延(30)。
}

//ドアを隠す
(pos = 155; pos> = 125; pos - = 1)に対して
{
doorServo.write(pos);
遅延(30)。
}
遅延(100)。
(pos = 125; pos> = 80; pos - = 4)に対して
{
doorServo.write(pos);
遅延(15)。
}

}
// 6を移動:
void m7anika7anika(){
//移動ドア
(pos = 80、pos <155、pos = 3)の場合
{
doorServo.write(pos);
遅延(15)。
}

//手を動かす
(pos = 0; pos <70; pos = 1)の場合
{
handServo.write(pos);
遅延(15)。
}
遅延(800)。


//ドアを隠す
(pos = 155; pos> = 130; pos- = 3)に対して
{
doorServo.write(pos);
遅延(15)。
}

//ドアを隠す
(pos = 130; pos <155; pos = 3)の場合
{
doorServo.write(pos);
遅延(15)。
}
//ドアを隠す
(pos = 155; pos> = 130; pos- = 3)に対して
{
doorServo.write(pos);
遅延(15)。
}
//ドアを隠す
(pos = 130; pos <155; pos = 3)の場合
{
doorServo.write(pos);
遅延(15)。
}

handServo.write(40);
遅延(1000)。

//手を動かす
(pos = 40; pos <129; pos = 4)の場合
{
handServo.write(pos);
遅延(15)。
}

//手を隠す
(pos = 129; pos> = 0; pos- = 4)に対して
{
handServo.write(pos);
遅延(15)。
}


(pos = 120; pos> = 80; pos - = 1)の場合
{
doorServo.write(pos);
遅延(15)。
}



}
void m3alla2(){
//移動ドア
(pos = 80、pos <155、pos = 3)の場合
{
doorServo.write(pos);
遅延(15)。
}

//手を動かす
(pos = 0; pos <127; pos = 4)の場合
{
handServo.write(pos);
遅延(15)。
}
//ドアを隠す
(pos = 155; pos> = 130; pos- = 3)に対して
{
doorServo.write(pos);
遅延(15)。
}
遅延(2000)。

(pos = 130; pos <155; pos = 3)の場合
{
doorServo.write(pos);
遅延(15)。
}

(pos = 155; pos> = 140; pos- = 3)に対して
{
doorServo.write(pos);
遅延(15)。
}
(pos = 140; pos <155; pos = 3)の場合
{
doorServo.write(pos);
遅延(15)。
}
遅延(500)。
//手を隠す
(pos = 127; pos> = 0; pos- = 4)に対して
{
handServo.write(pos);
遅延(15)。
}

//ドアを隠す
(pos = 155; pos> = 80; pos- = 3)に対して
{
doorServo.write(pos);
遅延(15)。
}
}

空行列()
{
//移動ドア
(pos = 80、pos <155、pos = 3)の場合
{
doorServo.write(pos);
遅延(15)。
}

//手を動かす
(pos = 0; pos <80; pos = 4)の場合
{
handServo.write(pos);
遅延(15)。
}

(pos = 80、pos <129、pos = 1)の場合
{
handServo.write(pos);
遅延(30)。
}
遅延(300)。

(pos = 129; pos> = 0; pos- = 4)に対して
{
handServo.write(pos);
遅延(10)。
}

//ドアを隠す
(pos = 155; pos> = 80; pos- = 3)に対して
{
doorServo.write(pos);
遅延(15)。
}

}
void sneak()
{
//移動ドア
(pos = 80、pos <130、pos = 1)の場合
{
doorServo.write(pos);
遅延(30)。
}
遅延(2000)。

//手を動かす
(pos = 0; pos <40; pos = 1)の場合
{
handServo.write(pos);
遅延(30)。
}

遅延(500)。

(pos = 130; pos <155; pos = 4)の場合
{
doorServo.write(pos);
遅延(15)。
}
遅延(100)。

(pos = 40; pos <90; pos = 4)の場合
{
handServo.write(pos);
遅延(15)。
}
遅延(500)。
//手を隠す
(pos = 90; pos> = 70; pos- = 4)に対して
{
handServo.write(pos);
遅延(15)。
}
遅延(100)。
(pos = 70; pos <90; pos = 4)の場合
{
handServo.write(pos);
遅延(15)。
}
遅延(100)。
(pos = 90; pos> = 70; pos- = 4)に対して
{
handServo.write(pos);
遅延(15)。
}
遅延(100)。

に対して(pos = 70; pos <129; pos = 4)
{
handServo.write(pos);
遅延(15)。
}

(pos = 129; pos> = 0; pos- = 4)に対して
{
handServo.write(pos);
遅延(15)。
}
//ドアを隠す
(pos = 155; pos> = 80; pos- = 3)に対して
{
doorServo.write(pos);
遅延(15)。
}
}

//スイッチの近くでこの動きが検出された場合、ドアを開けて動きを待つ
//ボックスは最初に右、次に左に移動し、最後に手が移動してスイッチをオフにします
void zee7()
{

//ドアを開ける
(pos = 80、pos <155、pos = 3)の場合
{
doorServo.write(pos);
遅延(15)。
}
遅延(1200)。 //ドアを開けたらセンサーの読み値が安定するのを待つ

//タイマーを設定してセンサーを読み取る
//しきい値を超える移動を待つか、タイマーが期限切れになる(5秒)
lastDist = analogRead(motionPin);
TimerA = millis();

while(millis() - TimerA <= 5000)
{
currentDist = analogRead(motionPin);

//現在の距離が最後の距離からしきい値以上ずれていませんか
//ある場合は、ボックスを右に移動
if((currentDist> lastDist thresh || currentDist <lastDist - thresh)|| currentDist> 300)
{
//半分の速度を左に進める(速度と遅延を選択する
//(ボックスとバッテリーの電圧に応じて遅延(300)を設定し、移動が望ましいようにする)
digitalWrite(motorDirection、LOW); //チャンネルAの右方向を設定
digitalWrite(motorBrake、LOW); //チャンネルBのブレーキを解除する
analogWrite(motorThrottle、100); //チャンネルBのモーターをフルスピードで回転させる
遅延(300)。
digitalWrite(motorBrake、HIGH)。 //チャンネルBのブレーキをかける
ブレーク;
}
lastDist = currentDist;
}

//タイマーを設定してセンサーを読み取る
//しきい値を超える移動を待つか、タイマーが期限切れになる(5秒)
遅延(1200)。 //ドアを開けたらセンサーの読み値が安定するのを待つ
lastDist = analogRead(motionPin);
TimerB = millis();
while(millis() - TimerB <= 5000)
{
currentDist = analogRead(motionPin);
//ボックスはすでに右に移動し、現在の距離が最後の距離からしきい値を超えて逸脱していますか?
//もしそうなら、左に移動する
if((currentDist> lastDist thresh || currentDist <lastDist - thresh)|| currentDist> 300)
{
//右半分の速度で逆方向に移動(速度と遅延を選択)
//(ボックスとバッテリーの電圧に応じて遅延(300)を設定し、移動が望ましいようにする)
digitalWrite(motorDirection、HIGH); //チャンネルBの左方向を確立
digitalWrite(motorBrake、LOW); //チャンネルBのブレーキを解除する
analogWrite(motorThrottle、100); //チャンネルBのモーターを半分の速度で回転させる
遅延(300)。
digitalWrite(motorBrake、HIGH)。 //チャンネルBのブレーキをかける
ブレーク;
}

lastDist = currentDist;

}
遅延(100)。
//手を動かす
(pos = 0; pos <130; pos = 4)の場合
{
handServo.write(pos);
遅延(15)。
}

//手を隠す
(pos = 130; pos> = 0; pos- = 4)に対して
{
handServo.write(pos);
遅延(15)。
}

//ドアを隠す
(pos = 155; pos> = 80; pos- = 3)に対して
{
doorServo.write(pos);
遅延(15)。
}
}

3人がこのプロジェクトを作りました!

  • AndyC159がやった!

  • SamL84はそれを作りました!

  • melton1313がやった!

あなたはこのプロジェクトを作りましたか?私たちと共有しましょう!

おすすめ

  • スクリュー選別機

  • PCB BOT(ライン追跡、障害物回避、1つのPCBにBluetooth制御ロボット)

  • モノのインターネットクラス

  • レインボーコンテストの色

  • Fandomコンテスト

  • パーティーの挑戦

194件のディスカッション

0

areyoutrying

4年前にはじめに

これをありがとう!私はこの指示に基づいて私の最初のArduinoプロジェクトを作りました:無駄なドラゴン!

4件の返信 0

アヤンareyoutrying

返信3年前

あなたのドラゴンマシンは最高です。 !!!芸術的

0

TJAOkevinareyoutrying

返信3年前

驚くばかり!!!!!

0

リアチareyoutrying

はじめに4年前に返信

あなたは素晴らしいです :) !!!

ドラゴンの素晴らしい性格!ドラゴンを直接カメラに向けて(トップビュー)ビデオをやり直すことができればいいのにと思っています。これはとても楽しいことになるでしょう。

あなたのビデオを共有してくれてありがとう、そして私が私を助けてくれてうれしい

0

areyoutryingリアチ

はじめに4年前に返信

私は早い段階でトップビューを試しましたが、うまくいきませんでした(面倒なことをあまりにも多く見ました)ので、このビデオを撮ったときにそれを却下しました。私はあなたが正しいと思います:最終段階でそれは素晴らしく見えたでしょう!残念ながら私はすでにドラゴンを配っていました…それで次のプロジェクトに進みましょう!

0

br1pro

4年前

とても楽しい!サーボを修正し、手をデザインするのは難しい仕事です。この教えてくれてありがとう!

1件の返信 0

リアチbr1pro

はじめに4年前に返信

素晴らしい仕事人!本当にいいね:)どんなビデオ?

0

クリンカーン

5年前

最初にそれのビデオを見て、それからあなたはお尻を笑います

1件の返信 0

トビアスVクリンカーン

はじめに4年前に返信

私は知っています! :D

0

リリー

5年前

それはそれ自身の心を持っていたようにそれをスーパークールビデオ

0

エリートキラー117

5年前にはじめに

arduinoとriachisのコードを使った私のダメなマシン! Dr.whoから遅刻しました。 :)
http://www.youtube.com/watch?v=aDs0T52o6-M

2件の返信 0

リアチエリートキラー117

はじめに5年前に返信

大好きです!!!! :))本当によくできた人、爆弾が生きているのを見てとてもうれしい!私はドラマ化と音楽もしています。
- これでドアを閉めるために重力の助けを失うことになりますが、簡単な解決策は片側のドアの内側に2つの輪ゴムを取り付けることです。もう一方の端のボックスの内側に、これはドアのサーボが閉じているときにドアを閉じるようになります…私の構築手順を確認してください、あなたはステップ6でゴムバンドが表示されます…
- また、手を黒で塗ることについて、それはもっと卑劣で滑らかになるでしょう
!また手の先端は血まみれの赤で塗られるか、または狂気の顔またはそのような何かで飾られることができます..
- 何も起こらないので最後の手を取り除き(箱を動かすものと想定されます)、あなた自身の手を書いてください…
それにもかかわらず、提案を忘れて、私はあなたのmachineeeeを愛しました!そして、たくさんの感謝をこめてありがとう。あなたはそれらを減らして、ビデオをマシンに集中させ続けることができます:)
あなたのGFがそれを好き願っています!

0

エリートキラー117リアチ

はじめに5年前に返信

Hahah賛辞をありがとう:)私は実際にそれにもっと多くをしたいと思ったが時間の窮屈さのために私は私が望んだ多くの詳細に収まることができなかった。腕に色を付けたいのですが、時間がありませんでした。そして私はシャープで腕に顔を描きたかったのですが、それはすでに包まれていてクリスマスのために彼女に渡す準備ができています。 Hehehe私は彼女がそれを好きになると思います。私はそれを立ち上げてもらいたかったのですが、ラバーバンドがサーボにあまりにも大きな重さをかけることを恐れていました。ドアはもうかなり重い。最後の動きは、それが飛び出すのを待ってあなたを悩ませ続けるので私が続けた。ハハハしかし私は私の友人のすべての助けに感謝します!それだけの価値がある!

0

ちょっとした

5年前

これは私がしなければならない…それは素晴らしいです

0

wrs715

5年前にはじめに

これが私がArduinoを使って見た最初のプロジェクトです、「ええ、それだけの価値があります。今、私は手に入れなければなりません」素晴らしい仕事だ!

0

シリコンゴースト

5年前にはじめに

うわー、共通のプロジェクトをどうぞ。それをもっとおもしろくすることへのあなたのスピンが大好きです!

0

bob3030

5年前

一人の男の役に立たない装置は他のもののこの世の外では全く素晴らしいです。プロジェクトを更新していただきありがとうございます。投稿ありがとうございます。

0

激怒

5年前にはじめに

考え1:これのためにArduinoを使用することはただばかげてやり過ぎです
思考2​​:ビデオを見た後 - これのためにArduinoを使用することは単なる純粋な天才です!
私はあなたの創造性に屈します!

0

スティッチ

5年前にはじめに

それは真剣に素晴らしいことだ!種類はWall-Eの性格を思い出させます。このような素晴らしいプロジェクトをありがとう!

0

ガジラバイト

5年前にはじめに

本当にダメ!いいね。私はインスピレーションを得ていて、私の机のためにそれを作る必要があります。ありがとう。