Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Construisez un robot bipède Arduino : Guide DIY Baby Dino

Composants et fournitures

Composant Quantité
Arduino Mega 2560 (Uno ou Nano fonctionnent aussi) 1
Pile 9V 1
Capteur ultrasonique HC-SR04 1
Micro-servomoteur SG90 9g 5

À propos du projet

Baby Dino est un robot bipède basé sur Arduino. Il utilise cinq servomoteurs : deux par jambe et un pour la tête. Un capteur ultrasonique détecte les obstacles et les évite. Voyons comment le fabriquer !

Étape 1 : Introduction

Étape 2 : Composants requis

Étape 3 : Calibrer les servos

Étape 4 : Conception et découpe

Étape 5 : Assemblage final

C'est tout !

Code

fix.ino – Calibration des servos (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 – Programme principal (Arduino)

#include 
#include 

// Ajustez les broches selon votre câblage
#define IRsensorPin 13        // Si vous utilisez un capteur IR au lieu de l'ultrasonique
#define TRIGGER_PIN 12        // Broche trigger du capteur ultrasonique
#define ECHO_PIN 11           // Broche echo du capteur ultrasonique
#define LEFTLEG 7
#define RIGHTLEG 10
#define LEFTFOOT 8
#define RIGHTFOOT 9
#define HEAD 6
#define MAX_DISTANCE 200      // Distance max de ping (cm). Max capteur : 400-500cm.

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;  // angle d'inclinaison
int uAngle = 35;  // angle de virage
int sAngle = 35;  // angle de balancement
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);
}

// Fonctions de mouvement des pieds et jambes
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);
}

Schéma de câblage

Disponible dans la section « Schémas ».

Processus de fabrication

  1. Sucette : conception, normes de sécurité et aperçu de la fabrication
  2. Porte-bébé : histoire, conception et sécurité des porte-bébés
  3. La science et le marché des lingettes pour bébés : matériaux, fabrication et tendances futures
  4. Le lait infantile : science, production et perspectives d'avenir
  5. L'évolution et la fabrication des poussettes : des berceaux portatifs aux landaus modernes
  6. Construire un Spybot Arduino piloté par Bluetooth
  7. FlickMote : Télécommande IR à gestes pour maison connectée
  8. TV-B-Gone DIY Arduino : Télécommande universelle pour toutes les TV
  9. Construire une horloge maître LED personnalisée avec alarme – Visible à 12 mètres