ロボットの自作に興味がありますか?自作可能なロボットは多種多様です。まずは、A点からB点へ移動するという単純な作業を実行するロボットを作ってみたいと思う人がほとんどです。アナログ部品を集めるところから始めたり、スターターキットを購入したりするなどして、一からロボットを作ることができます。ロボットの自作は電子工学とコンピュータプログラミングの両方の学習にうってつけの方法です。

パート 1 の 5:
ロボットを組み立てる

  1. 1
    部品を集める 基本的なロボットを組み立てるには、以下のようないくつかの単純な部品が必要です。全部ではないにしても、これらの部品のほとんどは、地元の電子工作部品販売店や多数のオンラインショップで入手できます。基本的なロボット製作キットには、これらの基本的な部品がまとめて入っているかもしれません。ここで紹介するロボットにははんだ付けは不要です。
    • Arduino Uno(または他のマイクロコントローラー)[1]
    • 連続回転サーボ×2個
    • サーボに接続できるホイール×2個
    • キャスターローラー×1個
    • はんだ付け不要のブレッドボード×1個(両側に+と-の2本の線が並んでいるブレッドボードを探しましょう)
    • 距離センサー(4ピンコネクタケーブル付きのもの)×1個
    • プッシュボタンスイッチ×1個
    • 10kΩ抵抗×1個
    • USBケーブル(A-Bタイプ)×1本
    • ブレイクアウェイヘッダ×1セット
    • 電池ホルダー(単三電池6本用、9V DCジャック付き)×1個
    • ジャンパー線×1セットまたは22ゲージ配線
    • 強力な両面テープまたは熱接着剤
  2. 2
    電池パックをひっくり返して平らな面を上向きにする ひっくり返した電池パックの平らな面をロボットを組み立てる土台として利用します。
  3. 3
    2個のサーボを電池パックの端の上に揃えて並べる 電池パックの線が出ている方の端の上に2個のサーボを配置します。各サーボの回転機構が電池パック側面の外側を向くようにして置きましょう。ホイールが真っすぐに進むようにするためには、サーボをきっちりと揃えて並べることが重要です。サーボの配線が電池パックの後ろ側から出てきているはずです。
  4. 4
    テープや接着剤でサーボを貼り付ける [2]  サーボを電池パックにしっかりと貼り付けましょう。サーボの裏面がバッテリーパックの裏面とぴったり重なるように配置します。
    • サーボが電池パック裏面の半分を占めている状態になるはずです。
  5. 5
    電池パックの空いているスペースにブレッドボードを横向きに貼り付ける ブレッドボードを電池パックの前面から少しはみ出るように、また両側面から張り出すように配置し、しっかりと固定しましょう。ブレッドボードのA列がサーボ側に来ているはずです。
  6. 6
    サーボの上にArduinoマイクロコントローラーを載せる 2個のサーボが適切に取り付けられていれば、サーボ自体の面が平らになっているはずです。この平らな面に、USBコネクタと電源コネクタが後ろ側(ブレッドボードから離れる方向)に来るように、Arduinoを貼り付けます。Arduinoの前面は、ほんのわずかだけブレッドボードと重なるはずです。
  7. 7
    サーボにホイールを取り付ける サーボの回転機構にホイールをしっかりと押し込みます。最適な駆動を実現するために、ホイールはできるだけきつくフィットするように設計されているため、押し込むにはかなりの力が必要かもしれません。
  8. 8
    ブレッドボードの底面にキャスターを取り付ける 本体をひっくり返すと、ブレッドボードが電池パックから少しだけはみ出ている部分があるはずです。このはみ出ている部分に、必要に応じてスペーサーを使用して、キャスターを取り付けましょう。キャスターは前輪として機能し、ロボットがどの方向にも簡単に回転できるようにします。[3]
    • ロボット製作キットを購入した場合は、キャスターが地面と接触するように調節するためのスペーサーが付属しているかもしれません。
    広告

パート 2 の 5:
ロボットの配線をする

  1. 1
    3ピンヘッダーを2つ切り離す サーボをブレッドボードに接続するために、3ピンヘッダーを2つ使います。ピンをヘッダーから押し出して、ピンがヘッダー両側から等距離に出ている状態にしましょう。
  2. 2
    2つのヘッダーをブレッドボードE列、1~3番、6~8番に差し込む しっかりと差し込みましょう。[4]
  3. 3
    黒いケーブルが左側(1番と6番ピン)に来るように、サーボのケーブルをヘッダーに接続する これにより、サーボとブレッドボードが接続されます。左側のサーボを左側のヘッダー、右側のサーボを右側のヘッダーに接続していることを確認しましょう。
  4. 4
    C2およびC7ピンから電源用の赤いライン(+)のピンに赤いジャンパー線を接続する 必ずブレッドボード後ろ側(本体に近い方)の赤いラインを使いましょう。
  5. 5
    B1およびB6ピンから青いライン(グラウンド)のピンに黒いジャンパー線を接続する 必ずブレッドボード後ろ側の青いラインを使いましょう。赤いラインのピンに配線しないようにしましょう。
  6. 6
    Arduinoの12番および13番ピンからA3およびA8ピンに白いジャンパー線を接続する この配線によって、Arduinoがサーボを制御してホイールを回転できるようになります。
  7. 7
    ブレッドボード前側にセンサーを取り付ける センサーはブレッドボード外側の電源ラインではなく、最初の文字列(J)に差し込みます。この列のちょうど真ん中にセンサーを差し込み、その両側のピンの数が同数になるようにしましょう。
  8. 8
    I14ピンからセンサー左側にある青いラインの最初のピンに黒いジャンパー線を接続する この配線により、センサーが接地されます。
  9. 9
    I17ピンからセンサー右側にある赤いラインの最初のピンに赤いジャンパー線を接続する この配線により、センサーが給電されます。
  10. 10
    I15ピンからArduinoの9番ピン、I16ピンから8番ピンに白いジャンパー線を接続する この配線により、センサーからマイクロコントローラーに情報が送信されます。
    広告

パート 3 の 5:
電源の配線をする

  1. 1
    ロボット本体をひっくり返して、電源パック内の電池が見える状態にする 電池パックの線が左下に来るように、電池パックの方向を合わせましょう。
  2. 2
    左から2番目の電極のバネの根元に赤い線を接続する 必ず電池パックの方向が正しい方向であることを確認しましょう。
  3. 3
    右端の電極のバネの根元に黒い線を接続する この黒い線と前のステップの赤い線は、Arduinoに適切な電源を供給する役割を果たします。[5]
  4. 4
    ブレッドボード右端の赤いラインと青いラインのピンに、さきほどの赤い線と黒い線をそれぞれ接続する 黒い線は青いラインの30番のピン、赤い線は赤いラインの30番のピンに接続しましょう。
  5. 5
    ArduinoのGNDピンから後ろ側の青いラインのピンに黒い線を接続する 青いラインの28番ピンに黒い線を接続しましょう。
  6. 6
    後ろ側と前側の青いラインの29番ピン同士を黒い線で接続する Arduinoを損傷させてしまう可能性があるため、赤いラインを接続しないようにしましょう。
  7. 7
    前側の赤いラインの30番ピンからArduinoの5Vピンに赤い線を接続する この配線によって、Arduinoが給電されます。
  8. 8
    24~26番ピンの間にある隙間をまたぐようにプッシュボタンスイッチを差し込む このスイッチによって、電源の配線を抜かなくても、ロボットをオフにすることができるようになります。
  9. 9
    H24ピンからセンサー右側にある赤いラインのピンに赤い線を接続する 赤いライン上の利用可能な一番近いピンに接続しましょう。この配線によって、ボタンが給電されます。
  10. 10
    H26ピンと青いラインを抵抗で接続する 抵抗は数ステップ前に接続した黒い線のすぐ隣のピンに接続しましょう。
  11. 11
    G26ピンからArduinoの2番ピンに白い線で接続する この配線によって、Arduinoがプッシュボタンの押下を登録できるようになります。
    広告

パート 4 の 5:
Arduinoのソフトをインストールする

  1. 1
    Arduino IDEをダウンロードして展開する Arduino IDEはArduinoの開発環境です。これを使って、命令をプログラムしてArduinoマイクロコントローラーにアップロードすることができます。Arduino IDE は「arduino.cc/en/main/software」から無料でダウンロードできます。ダウンロードしたファイルをダブルクリックして解凍し、中のフォルダをアクセスしやすい場所に移動しましょう。実際にはプログラムはインストールしません。「arduino.exe」をダブルクリックして、解凍したフォルダに入っているプログラムを実行するだけです。[6]
  2. 2
    電池パックをArduinoに接続する 電池パックのジャックをArduinoのコネクターに差し込んで給電しましょう。
  3. 3
    USB経由でArduinoをパソコンに接続する おそらくWindowsはArduinoを認識しません。
  4. 4
    . Win+Rを押して、devmgmt.mscと入力する デバイスマネージャーが起動します。
  5. 5
    [ほかのデバイス]の項目で[不明なデバイス]を右クリックし、[ドライバーソフトウェアの更新]を選択する このオプションが見当たらない場合は、[プロパティ]をクリックして[ドライバー]タブを選択し、[ドライバーの更新]をクリックしましょう。
  6. 6
    [コンピューターを参照してドライバーソフトウェアを検索]を選択する Arduino IDEに付属しているドライバーを選択できるようになります。
  7. 7
    [参照]をクリックして、さきほど解凍したフォルダに行く 解凍したフォルダ内に[drivers]フォルダがあります。
  8. 8
    [drivers]を選択して[OK]をクリックする 不明なソフトに関する警告が表示されても、そのまま継続しましょう。
    広告

パート 5 の 5:
ロボットのプログラミングを行う

  1. 1
    IDEフォルダ内の「arduino.exe」ファイルをダブルクリックしてArduino IDEを起動する 空白のプロジェクトが表示されます。
  2. 2
    以下のコードを貼り付けて、ロボットが直進するようにする 以下のコードは、Arduinoがロボットをひたすら直進させるためのコードです。
    #include <Servo.h> // このプログラムに「サーボ」ライブラリを追加します。
    
    // 以下で2つのサーボオブジェクトを作成します。
    Servo leftMotor;
    Servo rightMotor;
    
    void setup()
    {
        leftMotor.attach(12); // 誤ってサーボのピン番号を変えてしまった場合は、ここで切り替え可能です。
        rightMotor.attach(13);
    }
    
    
    void loop()
    {
        leftMotor.write(180); // 180はサーボに回転を継続しながら、フルスピードで前進するように指示します。
        rightMotor.write(0); // これらが共に180の場合は、サーボが反転するため、ロボットは円を描くように動作します。0はサーボにフルスピードで後退するように指示します。
    }
    
  3. 3
    プログラムを構築してアップロードする プログラムを構築して接続しているArduinoにアップロードするには、画面左上隅にある右向き矢印のボタンをクリックします。
    • プログラムがアップロードされると、ロボットはひたすら前進し続けるため、ロボットを持ち上げておくとよいかもしれません。
  4. 4
    キルスイッチ機能を追加する キルスイッチを有効にするには、コード内の「void loop()」の部分の「write()」機能の上に、以下のコードを追加しましょう。
    if(digitalRead(2) == HIGH) // ボタンが押されているときに、Arduinoの2番ピンに記録します。
    {
        while(1)
        {
            leftMotor.write(90); // 90はサーボのニュートラルポジションであり、回転を止めるように指示します。
            rightMotor.write(90);
        }
    }
    
  5. 5
    コードをアップロードしてテストする キルスイッチを追加したコードをアップロードして、ロボットの動作をテストできます。プッシュボタンボタンスイッチを押すまで、ロボットは前進を続け、スイッチを押した時点で止まります。全コードは以下の通りです。
    #include <Servo.h>
    
    // 以下で2つのサーボオブジェクトを作成します。
    Servo leftMotor;
    Servo rightMotor;
    
    void setup()
    {
        leftMotor.attach(12); 
        rightMotor.attach(13);
    }
    
    
    void loop()
    {
        if(digitalRead(2) == HIGH) 
        {
            while(1)
            {
                leftMotor.write(90); 
                rightMotor.write(90);
            }
        }
    
        leftMotor.write(180); 
        rightMotor.write(0); 
    }
    
    広告

サンプルコード

以下のコードは、ロボットに取り付けられているセンサーを使用して、障害物に遭遇するたびにロボットを左に回転させるコードです。コードの各部分の機能詳細については、コード内のコメントを参照しましょう。以下のコードはプログラム全体です。

#include <Servo.h>

Servo leftMotor;
Servo rightMotor;

const int serialPeriod = 250;       // コンソールへの出力を0.25秒に1回に制限します。
unsigned long timeSerialDelay = 0;

const int loopPeriod = 20;          // センサーの読み取り頻度を20ms(周波数50Hz)に設定します。
unsigned long timeLoopDelay   = 0;

// ArduinoのピンにTRIGとECHO機能を割り当てます。違うピンに接続した場合は、ここの数字を変更しましょう。
const int ultrasonic2TrigPin = 8;
const int ultrasonic2EchoPin = 9;

int ultrasonic2Distance;
int ultrasonic2Duration;

// ロボットができる2つの動作(前進または左回転)を定義します。
#define DRIVE_FORWARD     0
#define TURN_LEFT         1

int state = DRIVE_FORWARD; // 0 = 前進(デフォルト)、1 = 左回転

void setup()
{
    Serial.begin(9600);
  
    // センサーピン設定
    pinMode(ultrasonic2TrigPin, OUTPUT);
    pinMode(ultrasonic2EchoPin, INPUT);
    
    // モーターをArduinoピンに割り当て
    leftMotor.attach(12);
    rightMotor.attach(13);
}


void loop()
{
    if(digitalRead(2) == HIGH) // キルスイッチを検出します。
    {
        while(1)
        {
            leftMotor.write(90);
            rightMotor.write(90);
        }
    }

    debugOutput(); // デバッグメッセージをシリアルコンソールに出力します。
    
    if(millis() - timeLoopDelay >= loopPeriod)
    {
        readUltrasonicSensors(); // センサーに計測と測定した距離の保存を指示します。
        
        stateMachine();
        
        timeLoopDelay = millis();
    }
}


void stateMachine()
{
    if(state == DRIVE_FORWARD) // 障害物が検出されない場合
    {
        if(ultrasonic2Distance > 6 || ultrasonic2Distance < 0) // ロボットの正面に何もない場合、ultrasonicDistanceは負の値になります。
        {
            // 前進
            rightMotor.write(180);
            leftMotor.write(0);
        }
        else //  正面に障害物がある場合
        {
            state = TURN_LEFT;
        }
    }
    else if(state == TURN_LEFT) // 障害物が検出された場合は、左回転します。
    {
        unsigned long timeToTurnLeft = 500; // 90度回転するには約0.5秒間かかります。ホイールのサイズが例とは異なる場合は、ここを調整する必要があるかもしれません。
        
        unsigned long turnStartTime = millis(); // 回転を開始した時間を保存します。

        while((millis()-turnStartTime) < timeToTurnLeft) // timeToTurnLeft が経過するまで、このループに留まります。
        {
            // 左回転します。両方の値が180に設定されるとき、ロボットは回転します。
            rightMotor.write(180);
            leftMotor.write(180);
        }
        
        state = DRIVE_FORWARD;
    }
}


void readUltrasonicSensors()
{
    // これはultrasonic 2用です。別のセンサーを利用する場合は、これらのコマンドを変更する必要があるかもしれません。
    digitalWrite(ultrasonic2TrigPin, HIGH);
    delayMicroseconds(10);                  // 少なくとも10ms間、trig pinをhighの状態に保持します。
    digitalWrite(ultrasonic2TrigPin, LOW);
    
    ultrasonic2Duration = pulseIn(ultrasonic2EchoPin, HIGH);
    ultrasonic2Distance = (ultrasonic2Duration/2)/29;
}

// 以下はコンソールでのデバッグエラーのためのものです。
void debugOutput()
{
    if((millis() - timeSerialDelay) > serialPeriod)
    {
        Serial.print("ultrasonic2Distance: ");
        Serial.print(ultrasonic2Distance);
        Serial.print("cm");
        Serial.println();
        
        timeSerialDelay = millis();
    }
}

関連記事

How to

XMLファイルを開く

How to

画像検索で簡単に人物を特定する

How to

EMLファイルを開く

How to

ワイヤレスマウスを接続する

How to

キズの付いたCDを修復する

How to

VCFファイルを開く

How to

Facebook Messengerでメッセージを削除する

How to

特定のウェブサイトにアクセスできない問題を解決する

How to

DLLファイルを開く

How to

AndroidでSMSを別の端末に移行する

How to

大容量の動画ファイルをメールで送る

How to

DVDプレーヤーを接続する

How to

2台のパソコンを接続する

How to

ノートパソコンをテレビに接続する
広告

このwikiHow記事について

wikiHowは「ウィキ」サイトの一つであり、記事の多くは複数の著者によって共著されています。 この記事は、匿名の筆者を含む78人が執筆・推敲を行い、時間をかけて編集されました。
このページは 627 回アクセスされました。

この記事は役に立ちましたか?

広告