Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Bouw een Twee-Benen Arduino Robot: Baby Dino DIY Handleiding

Onderdelen en Benodigdheden

Onderdeel Aantal
Arduino Mega 2560 1
9V Batterij (algemeen) 1
SparkFun Ultrasonische Sensor - HC-SR04 1
SG90 Micro-servo motor 5

Over dit Project

Baby Dino is een twee-benige robot gebaseerd op Arduino. Het gebruikt vijf servomotoren: twee voor elk been en één voor het hoofd. Daarnaast gebruikt het een ultrasone sensor om obstakels te detecteren en te vermijden. Laten we zien hoe je het maakt!

Stap 1: Introductie

  • Baby Dino is een DIY robot met Arduino.
  • Hij is gemaakt van karton.
  • Hij vindt obstakels en beweegt dan links of rechts.

Stap 2: Benodigde Componenten

  • 1x Arduino Uno, Nano of Mega
  • 5x 9g servo
  • 1x HC-SR04 ultrasone sensor
  • 1x LiPo batterij (2s of 9V batterij)

Stap 3: Servo's Vasten

  • Download het programma
  • Upload naar Arduino
  • Sluit de servo aan volgens het schema hieronder
  • Bevestig de servo-arm
  • Zorg dat alles op 90 graden staat

fix.ino

Stap 4: Ontwerp

  • Download het ontwerp
  • Print op A4
  • Plak op karton
  • Knip uit

Stap 5: Eindstap

  • Bevestig de servo's aan het karton
  • Upload het programma naar Arduino
  • Sluit de servo's en ultrasone sensor aan
  • Beheer de kabels als staart
  • Sluit de batterij aan

Dat is het! uBipedino.ino

Code

fix.ino (Arduino)

#include 
Servo s1;
Servo s2;
Servo s3;
Servo s4;
Servo 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 (Arduino)

Pas de servo en ultrasone pinnen aan naar wens

#include 
#include 

// Pas de pin aan volgens je verbinding
#define IRsensorPin 13 // Als je IR sensor gebruikt in plaats van ultrasone sensor
#define TRIGGER_PIN 12
#define ECHO_PIN 11
#define LEFTLEG 7
#define RIGHTLEG 10
#define LEFTFOOT 8
#define RIGHTFOOT 9
#define HEAD 6
#define MAX_DISTANCE 200

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

Servo Lleg;
Servo Rleg;
Servo Lfoot;
Servo Rfoot;
Servo 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);
    }
}

void LeftFootUp(char ang, byte sp) {
    for (int i = 0; i <= ang; i += 5) {
        Lfoot.write(LFcenter - i);
        delay(sp);
    }
}

void LeftFootDown(byte ang, byte sp) {
    for (int i = ang; i > 0; i -= 5) {
        Lfoot.write(LFcenter - i);
        delay(sp);
    }
}

void RightFootUp(byte ang, byte sp) {
    for (int i = 0; i <= ang; i += 5) {
        Rfoot.write(RFcenter + i);
        delay(sp);
    }
}

void RightFootDown(byte ang, byte sp) {
    for (int i = ang; i > 0; i -= 5) {
        Rfoot.write(RFcenter + i);
        delay(sp);
    }
}

void SwingRight(byte ang, byte sp) {
    for (int i = 0; i <= ang; i += 5) {
        Lleg.write(LLcenter - i);
        Rleg.write(RLcenter - i);
        delay(sp);
    }
}

void SwingRcenter(byte ang, byte sp) {
    for (int i = ang; i > 0; i -= 5) {
        Lleg.write(LLcenter - i);
        Rleg.write(RLcenter - i);
        delay(sp);
    }
}

void SwingLeft(byte ang, byte sp) {
    for (byte i = 0; i <= ang; i += 5) {
        Lleg.write(LLcenter + i);
        Rleg.write(RLcenter + i);
        delay(sp);
    }
}

void SwingLcenter(byte ang, byte sp) {
    for (byte i = ang; i > 0; i -= 5) {
        Lleg.write(LLcenter + i);
        Rleg.write(RLcenter + i);
        delay(sp);
    }
}

void RightLegIn(byte ang, byte sp) {
    for (int i = 0; i <= ang; i += 5) {
        Rleg.write(RLcenter - i);
        delay(sp);
    }
}

void RightLegIcenter(byte ang, byte sp) {
    for (int i = ang; i > 0; i -= 5) {
        Rleg.write(RLcenter - i);
        delay(sp);
    }
}

void RightLegOut(byte ang, byte sp) {
    for (int i = 0; i <= ang; i += 5) {
        Rleg.write(RLcenter + i);
        delay(sp);
    }
}

void RightLegOcenter(byte ang, byte sp) {
    for (int i = ang; i > 0; i -= 5) {
        Rleg.write(RLcenter + i);
        delay(sp);
    }
}

void LeftLegIn(byte ang, byte sp) {
    for (byte i = 0; i <= ang; i += 5) {
        Lleg.write(LLcenter + i);
        delay(sp);
    }
}

void LeftLegIcenter(byte ang, byte sp) {
    for (byte i = ang; i > 0; i -= 5) {
        Lleg.write(LLcenter + i);
        delay(sp);
    }
}

void LeftLegOut(byte ang, byte sp) {
    for (byte i = 0; i <= ang; i += 5) {
        Lleg.write(LLcenter - i);
        delay(sp);
    }
}

void LeftLegOcenter(byte ang, byte sp) {
    for (byte i = ang; i > 0; i -= 5) {
        Lleg.write(LLcenter - i);
        delay(sp);
    }
}

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;
    unsigned int cmLeft = MAX_DISTANCE;
    unsigned int 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);
}

Schema

Zie het schakelschema voor de juiste verbindingen van alle componenten.

Productieproces

  1. Snuiter: Ontwerp, Veiligheidsnormen en Productie-inzichten
  2. Baby Draagzak: Geschiedenis, Ontwerp en Veiligheid van Babydragers
  3. De Wetenschap en Mark van Babydoekjes: Materialen, Productie en Toekomsttrends
  4. Babyvoeding: Wetenschap, Productie en Toekomstperspectief
  5. De Evolutie en Fabricage van Babywagentjes: Van Wiegborden tot Moderne Wandelwagentjes
  6. Bluetooth-gecontroleerde Arduino Spybot bouwen
  7. FlickMote: Gebarengecontroleerde IR-afstandsbediening voor Slimme Huizen
  8. DIY Arduino TV-B-Gone: Universele TV-uit-schakelaar
  9. Bouw een Aangepaste LED Hoofdklok met Alarm – Zichtbaar vanaf 12 Meter
  10. Servo-gestuurde obstakelvermijdende robot: Bouw met Arduino & HC-SR04
  11. Find Me: Slimme Item Locator met Arduino en Bluetooth