回路

インターネットで制御された火星探査機を構築する方法:4つのステップ(写真あり)

不要嘲笑我們的性

不要嘲笑我們的性

目次:

Anonim

このInstructableは、インターネットで制御される全地形ロボットを構築するためにあなたが知る必要があるすべてを説明します。これは火星の好奇心ローバーをモデルにしたものです。このロボットはあらゆるインターネット対応機器から制御可能なので、あなたは惑星の向こう側でこのことを制御することができます(それがインターネットしか持っていなければ火星)。このプロジェクトはすべて、驚くほどのElectric Imp(インターネットに何か接続できるSDカードサイズのデバイス)とArduinoによって実現されています。
このプロジェクトは、ダンディーのProduct Design Research StudioでMichael Shorter、Tom Metcalfe、Jon Rogers、およびAli Napierによって作成されました。

必要なもの
6WD Wild Thumper Arduinoシャーシ - http://robosavvy.com/store/product_info.php/products_id/1167?osCsid=5e99bbe12a25938cbf4267ea6bc497ea
Wild Thumper Arduinoコントローラ - http://robosavvy.com/store/product_info.php/products_id/1168
リポバッテリー - 7.2V 5000mah
3mmアクリル
5mmアクリル
直径10cmの排水管
直径35mmパイプ
アルミ棒
電気インプ
電気インプブレイクアウトボード
いくつかのジャンパーケーブル
スケートボードグリップテープ

用品:

ステップ1:ローバーを構築する

Adobe Illustratorファイルが添付されているので、必要な部分をすべてレーザーカットできます。合計3つのファイルがあります。厚さ3 mmの部品すべて、厚さ5 mmの部品、グリップテープ部品の1つのファイル。
うまくいけば、以下の画像はあなたのWild Thumper 6WDのための新しいシャーシを一緒に固執する方法の良い考えを与える。
エレクトリックインプのArduinoへの配線は簡単です。
インプピン1 - Arduinoピン10
インプピン2 - Arduinoピン9
インプピン8 - Arduinoピン12
インプピン9 - Arduinoピン2
エレクトリックインプはまたあなたのブレイクアウトボードとグラウンドに応じて5Vか3.3Vを必要とするでしょう。
電源のオン/オフを簡単にするために、バッテリーに合わせてトグルスイッチを接続することにしました。

ステップ2:物事のWeb側

ここにいくつかのコードがあります…。
impのリス(私がもう見つけることができないオンラインの情報源から適応させた…):
================================================
server.show(“”);
//ローバー用リモコン
ledState < - 0;
機能点滅()
{
//状態を変更
ledState = ledState?0:1;
server.log(“ ledState val:“ + ledState);
//状態をピンに反映
hardware.pin9.write(ledState);
}
// LED制御チャネルの入力クラス
クラスinputHTTPはInputPortを拡張します
{
name =“電源制御”
type =“番号”
機能セット(httpVal)
{
server.log(“受信値:“ + httpVal);
if(httpVal == 1){
hardware.pin9.write(1);
imp.sleep(0.1);
hardware.pin9.write(0);
}
そうでなければ(httpVal == 2){
hardware.pin8.write(1);
imp.sleep(0.1);
hardware.pin8.write(0);
}
そうでなければ(httpVal == 3){
hardware.pin2.write(1);
imp.sleep(0.1);
hardware.pin2.write(0);
}
そうでなければ(httpVal == 4){
hardware.pin1.write(1);
imp.sleep(0.1);
hardware.pin1.write(0);
}
その他{
;
}
}
}
関数ウォッチドッグ(){
imp.wakeup(60、ウォッチドッグ);
server.log(httpVal);
}
// 60秒ごとにウォッチドッグ書き込みを開始します
// watchdog();
//内部プルアップを使用してピンをオープンドレイン出力として設定
hardware.pin9.configure(DIGITAL_OUT_OD_PULLUP);
hardware.pin8.configure(DIGITAL_OUT_OD_PULLUP);
hardware.pin2.configure(DIGITAL_OUT_OD_PULLUP);
hardware.pin1.configure(DIGITAL_OUT_OD_PULLUP);
//サーバーに登録する
imp.configure(“ Reverote Control for Rover”、inputHTTP()、);
================================================


Arduinoのコード(Chris Martinに感謝します!)…
================================================
/*
AnalogReadSerial
ピン0のアナログ入力を読み取り、結果をシリアルモニタに出力します。
ポテンショメータの中央のピンをピンA0に、外側のピンを+ 5Vとグランドに接続します。
このサンプルコードはパブリックドメインにあります。
*/
int pinf = 2。
int pinl = 12。
int pinr = 10。
int pinb = 9。
#define LmotorA 3 //左モーターHブリッジ、入力A
#define LmotorB 11 //左モーターHブリッジ、入力B
#define RmotorA 5 //右モーターHブリッジ、入力A
#define RmotorB 6 //右モーターHブリッジ、入力B
#define v 255
#含める
//サーボmyservo。
// int led = 12;
int pos = 0;
//リセットを押すとセットアップルーチンが1回実行されます。
void setup(){
//myservo.attach(9);
// pinMode(led、OUTPUT);
pinMode(pinf、INPUT); //シリアル通信を9600 bpsで初期化します
pinMode(pinl、INPUT);
pinMode(pinr、INPUT);
pinMode(pinb、INPUT);
Serial.begin(9600);
digitalWrite(pinf、LOW);
digitalWrite(ピン1、LOW)。
digitalWrite(ピン、LOW)。
digitalWrite(ピン、LOW)。
//288000
//これはシリアルモニタでは違います。
// Serial.begin(14400);
}
int lls = 0;
int rls = 0。
int al = 0。
//ループルーチンは永遠に繰り返し実行されます。
void loop(){
//アナログピン0の入力を読み取ります
int sensorValue1 = digitalRead(pinf);
int sensorValue2 = digitalRead(pinl);
int sensorValue3 = digitalRead(pinr);
int sensorValue4 = digitalRead(pinb);
//読み込んだ値を表示します
Serial.print(sensorValue1);
Serial.print( ":");
Serial.print(sensorValue2);
Serial.print( ":");
Serial.print(sensorValue3);
Serial.print( ":");
Serial.println(sensorValue4);
遅延(25)。 //安定性のために読み込み間の遅延
if(sensorValue1 == 1){
analogWrite(RmotorA、0);
analogWrite(RmotorB、120);
analogWrite(LmotorA、0);
analogWrite(LmotorB、120);
遅延(500)。
analogWrite(RmotorA、0);
analogWrite(RmotorB、0);
analogWrite(LmotorA、0);
analogWrite(LmotorB、0);
// myservo.write(10);
// delay(500);
}
その他{
analogWrite(RmotorA、0);
analogWrite(RmotorB、0);
analogWrite(LmotorA、0);
analogWrite(LmotorB、0);
}
if(sensorValue2 == 1){
// digitalWrite(led、HIGH);
analogWrite(RmotorA、0);
analogWrite(RmotorB、250);
analogWrite(LmotorA、250);
analogWrite(LmotorB、0);
遅延(100)。
analogWrite(RmotorA、0);
analogWrite(RmotorB、0);
analogWrite(LmotorA、0);
analogWrite(LmotorB、0);
// myservo.write(10);
// delay(500);
}
それ以外の
{
analogWrite(RmotorA、0);
analogWrite(RmotorB、0);
analogWrite(LmotorA、0);
analogWrite(LmotorB、0);
}
if(sensorValue4 == 1){
// digitalWrite(led、HIGH);
analogWrite(RmotorA、250);
analogWrite(RmotorB、0);
analogWrite(LmotorA、0);
analogWrite(LmotorB、250);
遅延(100)。
analogWrite(RmotorA、0);
analogWrite(RmotorB、0);
analogWrite(LmotorA、0);
analogWrite(LmotorB、0);
// myservo.write(10);
// delay(500);
}
それ以外の
{
analogWrite(RmotorA、0);
analogWrite(RmotorB、0);
analogWrite(LmotorA、0);
analogWrite(LmotorB、0);
}
if(sensorValue3 == 1){
// digitalWrite(led、HIGH);
analogWrite(RmotorA、120);
analogWrite(RmotorB、0);
analogWrite(LmotorA、120);
analogWrite(LmotorB、0);
遅延(500)。
analogWrite(RmotorA、0);
analogWrite(RmotorB、0);
analogWrite(LmotorA、0);
analogWrite(LmotorB、0);
// myservo.write(10);
// delay(500);
}
それ以外の
{
analogWrite(RmotorA、0);
analogWrite(RmotorB、0);
analogWrite(LmotorA、0);
analogWrite(LmotorB、0);
}
}
================================================

今すぐユーザーインターフェイス用。添付フォルダを解凍します。必要なコードはすべてそこにあるはずです。あなたがする必要があるのは、適切なスペースのindex.htmlファイルにあなたのユニークなElectric Imp APIを貼り付けることです。ファイル内でこれにラベルを付けました。

ステップ3:ビジュアルをいくつか与えよう

私は火星の映像を表示するヘッドユニットに古いiPhoneを入れることにしました。 SkypeやFacetimeを使って運転中の場所を確認できるので、これは何でも、ビデオカメラでも可能です。

ステップ4:ロービングしよう!

SWSW 2013でNASAのイベントに出演したThe Mini Mars Roverのクイックビデオです。

マイケルのSXSWローバーはVimeoで短くなっています。

このプロジェクトの素晴らしいところは、コードを微調整してロボットの動作やインタフェースを変更するのが簡単だということです。
楽しい!
M

のファイナリスト
リモコンコンテスト