Robô Bípede - Programa de controle v. 1.0.1



/*

Programa de controle de robô bípede com 6 servos v. 1.0.1 Beta
Última atualização em 11 de dezembro de 2012 às 15:34:03
Autor: Marcelo Borges dos Santos
e-mail: mbsborges@gmail.com
blog: http://mbsborges.blogspot.com

*/

#include <Servo.h>
#define tempo 150

//Servos
//Quadris
Servo quadrilDireito;
Servo quadrilEsquerdo;
//joelhos
Servo joelhoDireito;
Servo joelhoEsquerdo;
//pés
Servo peDireito;
Servo peEsquerdo;

void setup() {
  //Definindo as portas de controle dos servos
  peDireito.attach(6);
  peEsquerdo.attach(11);
  joelhoDireito.attach(5);
  joelhoEsquerdo.attach(10);
  quadrilDireito.attach(3);
  quadrilEsquerdo.attach(9);
}

void loop() {
  //Movendo servos para posição inicial
  posicaoInicial();
  delay (2000);
  cumprimentar (2);
  delay(20);
  andar(4);
  delay(20);
  girarSentidoAntiHorario(4);
  delay(20);
  andar(2);
  delay(20);
  girarSentidoAntiHorario(4);
  delay(20);
  andar(4);
  delay(20);
  girarSentidoAntiHorario(8);
  delay(20);
  cumprimentar (2);
  delay(20);
}

//Funções
//Função Posição Inicial (Manda todos os servos para 90º)
void posicaoInicial() {
  peDireito.write(90);
  peEsquerdo.write(90);
  quadrilDireito.write(90);
  quadrilEsquerdo.write(90);
  joelhoDireito.write(90);
  joelhoEsquerdo.write(90);
  delay(1000);
}

//Função Cumprimentar (Faz n cumprimentações)
void cumprimentar (int vezes) {
  int x;
  for (x = 0; x < vezes; x++) {
    //(i - incremento) / (d - decremento)
    //Movimento de ida
    int i = 90, d = 90;
    for (i = 90; i < 115; i++) {
      joelhoDireito.write(d);
      joelhoEsquerdo.write(i);
      quadrilDireito.write(i);
      quadrilEsquerdo.write(d);
      d--;
      delay(0.5 * tempo);
    }
    delay (2000);
    //Movimento de volta
    for (i = 115; i > 90; i--) {
      joelhoDireito.write(d);
      joelhoEsquerdo.write(i);
      quadrilDireito.write(i);
      quadrilEsquerdo.write(d);
      d++;
      delay(0.5 * tempo);
    }
    posicaoInicial();
    delay (50);
  }
}

//Função abaixar-se (o robô abaixa-se)
void abaixar () {
  //(i - incremento) / (d - decremento)
  int i = 90, d = 90;
  for (i = 90; i < 130; i++) {
    joelhoDireito.write(d);
    joelhoEsquerdo.write(i);
    quadrilDireito.write(d);
    quadrilEsquerdo.write(i);
    d--;
    delay(0.5 * tempo);
  }
}

//Função inclinar para a esquerda
void inclinarEsquerda(int sentido) {
  int i;
  //Inclinando para a esquerda
  if (sentido == 1) {
    for (i = 90; i < 110; i++) {
      peEsquerdo.write(i);
      peDireito.write(i);
      delay(tempo);
    }
    delay (100);
    peEsquerdo.write(110);
    peDireito.write(110);
    delay (100);
  }
  //Retornando para posição anterior
  if (sentido == 0) {
    for (i = 110; i > 90; i--) {
      peEsquerdo.write(i);
      peDireito.write(i);
      delay (tempo);
    }
    delay (100);
    peDireito.write(90);
    peEsquerdo.write(90);
    delay (100);
  }
}

//Função inclinar para a direita
void inclinarDireita (int sentido) {
  int i;
  if (sentido == 1) {
    //Inclinando para a direita
    for (i = 90; i > 70; i--) {
      peDireito.write(i);
      peEsquerdo.write(i);
      delay (tempo);
    }
    delay (100);
    peDireito.write(70);
    peEsquerdo.write(70);
    delay(100);
  }
  //Retornando para posição anterior
  if (sentido == 0) {
    for (i = 70; i < 90; i++) {
      peEsquerdo.write(i);
      peDireito.write(i);
      delay(tempo);
    }
    delay (100);
    peEsquerdo.write(90);
    peDireito.write(90);
    delay(100);
  }
}

//Função Aquecimento
void aquecimento () {
  inclinarDireita(1);
  inclinarDireita(0);
  inclinarEsquerda(1);
  inclinarEsquerda(0);
  posicaoInicial();
  abaixar();
  posicaoInicial();
}

//Função Andar
void andar (int passos) {
  posicaoInicial();
  int i, x;
  for (i = 0; i < passos; i++) {
    inclinarEsquerda(1);
    if (i == 0) {
      for (x = 90; x < 110; x++) {
        quadrilDireito.write(x);
        quadrilEsquerdo.write(x);
        joelhoDireito.write(x);
        joelhoEsquerdo.write(x);
        delay(0.25 * tempo);
      }
    }
    else {
      for (x = 70; x < 110; x++) {
        quadrilDireito.write(x);
        quadrilEsquerdo.write(x);
        joelhoDireito.write(x);
        joelhoEsquerdo.write(x);
        delay(0.25 * tempo);
      }
    }
    inclinarEsquerda(0);
    inclinarDireita(1);
    for (x = 110; x > 70; x--) {
      quadrilDireito.write(x);
      quadrilEsquerdo.write(x);
      joelhoDireito.write(x);
      joelhoEsquerdo.write(x);
      delay(0.25 * tempo);
    }
    inclinarDireita(0);
  }
  //Retornando para a posição inicial
  inclinarEsquerda (1);
  for (i = 70; i < 90; i++) {
    quadrilDireito.write(i);
    quadrilEsquerdo.write(i);
    joelhoDireito.write(i);
    joelhoEsquerdo.write(i);
    delay (0.25 * tempo);
  }
  inclinarEsquerda (0);
}
//Função Girar no Sentido Anti-Horário
void girarSentidoAntiHorario(int passos) {
  //Cada passo proporciona um giro de 45º no sentido anti-horário
  int i, x;
  for (i = 0; i < passos; i++) {
    posicaoInicial();
    inclinarEsquerda(1);
    for (x = 90; x < 110; x++) {
      quadrilDireito.write(x);
      quadrilEsquerdo.write(x);
      joelhoDireito.write(x);
      joelhoEsquerdo.write(x);
      delay(0.25 * tempo);
    }
    inclinarEsquerda(0);
    posicaoInicial();
  }
}
//Função Girar no Sentido Horário
void girarSentidoHorario(int passos) {
  //Cada passo proporciona um giro de 45º no sentido horário
  int i, x;
  for (i = 0; i < passos; i++) {
    inclinarDireita(1);
    for (x = 90; x > 70; x--) {
      quadrilDireito.write(x);
      quadrilEsquerdo.write(x);
      joelhoDireito.write(x);
      joelhoEsquerdo.write(x);
      delay(0.25 * tempo);
    }
    inclinarDireita(0);
    posicaoInicial();
  }
}

//Fim

Comentários

Archive

Formulário de contato

Enviar