工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

二足歩行ロボット「Baby Dino」を作ろう – Arduino Megaで恐竜ロボット自作

必要な部品と材料

プロジェクト概要

Baby Dinoは段ボール製の二足歩行ロボットです。脚に各2個、頭に1個の計5個のサーボを搭載し、超音波センサーで障害物を検知して回避動作を行います。簡単な材料で作れる初心者向けロボット工作です。

手順1: はじめに

手順2: 必要な部品

手順3: サーボの原点合わせ

  1. 調整用プログラム (fix.ino) をダウンロード・書き込み
  2. 配線図に従ってサーボを接続
  3. サーボホーンを取り付け、全サーボを90度位置に合わせる

手順4: 設計・切り出し

  1. 設計データをダウンロードしA4で印刷
  2. 段ボールに貼り付けて切り出し

手順5: 最終組み立て

  1. サーボを段ボールに取り付け
  2. メインプログラム (uBipedino.ino) を書き込み
  3. サーボと超音波センサーを配線
  4. ケーブルを尻尾のようにまとめる
  5. 電池を接続して完成!

コード

fix.ino (サーボ原点合わせ用)

#include 
Servo s1, s2, s3, s4, s5;
void setup() {
    s1.attach(8); s2.attach(9); s3.attach(10);
    s4.attach(11); s5.attach(12);
}
void loop() {
    s1.write(90); s2.write(90); s3.write(90);
    s4.write(90); s5.write(90);
}

biped (メインプログラム)

#include 
#include 

// ピン定義 (接続に合わせて変更)
#define IRsensorPin 13      // 超音波センサー代わりにIRセンサー使用時
#define TRIGGER_PIN 12      // 超音波Trig
#define ECHO_PIN 11         // 超音波Echo
#define LEFTLEG 7
#define RIGHTLEG 10
#define LEFTFOOT 8
#define RIGHTFOOT 9
#define HEAD 6
#define MAX_DISTANCE 200    // 最大測定距離(cm)

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

Servo Lleg, Rleg, Lfoot, Rfoot, Head;

int Hcenter = 70;
int RLcenter = 100;
int RFcenter = 65;
int LLcenter = 90;
int LFcenter = 75;
int tAngle = 30;   // 傾き角度
int uAngle = 35;   // 旋回角度
int sAngle = 35;   // 振り角度
int hAngle = Hcenter;

// 前進
void Forward(byte Steps, byte Speed) {
    Serial.println("Forward");
    TiltRightUp(tAngle, Speed);
    for (byte j = 0; j < Steps; ++j) {
        SwingRight(sAngle, Speed);
        TiltRightDown(tAngle, Speed);
        TiltLeftUp(tAngle, Speed);
        SwingRcenter(sAngle, Speed);
        SwingLeft(sAngle, Speed);
        TiltLeftDown(tAngle, Speed);
        TiltRightUp(tAngle, Speed);
        SwingLcenter(sAngle, Speed);
    }
    TiltRightDown(tAngle, Speed);
}

// 左旋回
void TurnLeft(byte Steps, byte Speed) {
    Serial.println("TurnLeft");
    TiltLeftUp(uAngle, Speed);
    delay(20);
    for (byte j = 0; j < Steps; ++j) {
        LeftLegIn(sAngle, Speed);
        TiltLeftDown(uAngle, Speed);
        TiltRightUp(uAngle, Speed);
        delay(20);
        LeftLegIcenter(sAngle, Speed);
        RightLegOut(sAngle, Speed);
        TiltRightDown(uAngle, Speed);
        TiltLeftUp(uAngle, Speed);
        delay(20);
        RightLegOcenter(sAngle, Speed);
    }
    TiltLeftDown(uAngle, Speed);
}

// 右旋回
void TurnRight(byte Stps, byte Speed) {
    Serial.println("TurnRight");
    TiltRightUp(uAngle, Speed);
    delay(20);
    for (byte f = 0; f <= Stps; ++f) {
        RightLegIn(sAngle, Speed);
        TiltRightDown(uAngle, Speed);
        TiltLeftUp(uAngle, Speed);
        delay(20);
        RightLegIcenter(sAngle, Speed);
        LeftLegOut(sAngle, Speed);
        TiltLeftDown(uAngle, Speed);
        TiltRightUp(uAngle, Speed);
        delay(20);
        LeftLegOcenter(sAngle, Speed);
    }
    TiltRightDown(uAngle, Speed);
}

// 頭部制御
void HeadRight() { Serial.println("HeadRight"); Head.write(Hcenter - 105); delay(1000); }
void HeadLeft()  { Serial.println("HeadLeft");  Head.write(Hcenter + 105); delay(1000); }
void HeadCenter(){ Serial.println("HeadCenter"); Head.write(Hcenter); delay(1000); }

// 足首傾き制御
void TiltRightUp(byte ang, byte sp) {
    for (int i = 0; i <= ang; i += 5) {
        Lfoot.write(LFcenter + i); Rfoot.write(RFcenter + i); delay(sp);
    }
}
void TiltRightDown(byte ang, byte sp) {
    for (int i = ang; i > 0; i -= 5) {
        Lfoot.write(LFcenter + i); Rfoot.write(RFcenter + i); delay(sp);
    }
}
void TiltLeftUp(byte ang, byte sp) {
    for (int i = 0; i <= ang; i += 5) {
        Lfoot.write(LFcenter - i); Rfoot.write(RFcenter - i); delay(sp);
    }
}
void TiltLeftDown(byte ang, byte sp) {
    for (int i = ang; i > 0; i -= 5) {
        Lfoot.write(LFcenter - i); Rfoot.write(RFcenter - i); delay(sp);
    }
}

// 脚振り制御 (以下同様のパターンで SwingRight, SwingRcenter, SwingLeft, SwingLcenter,
// RightLegIn, RightLegIcenter, RightLegOut, RightLegOcenter,
// LeftLegIn, LeftLegIcenter, LeftLegOut, LeftLegOcenter を定義)
// ... 省略 ...

void setup() {
    Serial.begin(19200);
    Serial.println("Bipedino setup is running.");
    Lleg.attach(LEFTLEG); Rleg.attach(RIGHTLEG);
    Lfoot.attach(LEFTFOOT); Rfoot.attach(RIGHTFOOT);
    Head.attach(HEAD);
    CenterServos();
    delay(500);
    for (int i = 0; i < 5; ++i) { GetSonar(); delay(1000); }
    Serial.println("Bipedino is ready.");
}

void loop() {
    unsigned int cmCenter = MAX_DISTANCE, cmLeft = MAX_DISTANCE, cmRight = MAX_DISTANCE;
    HeadCenter();
    cmCenter = GetSonar();
    if (cmCenter < 20) {
        HeadRight(); cmRight = GetSonar(); HeadCenter();
        if (cmRight > 20) { TurnRight(1, 30); }
        else {
            HeadLeft(); cmLeft = GetSonar(); HeadCenter();
            if (cmLeft > 20) { TurnLeft(1, 30); }
        }
    } else {
        int nSteps = cmCenter / 5;
        if (nSteps > 5) nSteps = 5;
        else nSteps = 1;
        Serial.print("Steps <"); Serial.print(nSteps); Serial.println(">");
        for (int n = 0; n < nSteps; n++) Forward(1, 30);
    }
}

int GetSonar() {
    unsigned int uS = sonar.ping();
    Serial.print("Ping: "); Serial.print(uS / US_ROUNDTRIP_CM); Serial.println("cm");
    return uS / US_ROUNDTRIP_CM;
}

void CenterServos() {
    Lleg.write(LLcenter); Rleg.write(RLcenter);
    Lfoot.write(LFcenter); Rfoot.write(RFcenter);
    Head.write(Hcenter);
    delay(1000);
}

回路図

二足歩行ロボット「Baby Dino」を作ろう – Arduino Megaで恐竜ロボット自作

製造プロセス

  1. おしゃぶり:設計、安全基準、製造の洞察
  2. ベビーキャリア:歴史・設計・安全性から見る乳児キャリーの進化
  3. ベビーワイプの科学と市場:材料、製造、将来トレンド
  4. ベビーフォーミュラ(乳児用調製粉乳):科学、製造、将来展望
  5. ベビーカー(ストローラー)の進化と製造:揺り籠から現代プラムまで
  6. Bluetooth操作のArduinoスパイボットを自作する
  7. FlickMote:ジェスチャー操作のIRリモコンでスマートホームを制御
  8. 自作Arduino TV-B-Gone:全テレビ対応の万能リモコン
  9. 12メートル先から見える大型LEDマスタークロック(アラーム機能付き)を自作しよう
  10. ArduinoとHC-SR04で作るサーボ駆動障害物回避ロボット
  11. ArduinoとBluetoothで作るスマート紛失防止タグ「Find Me」