Robô Bípede - Programa de controle v1.1.1



/*

Programa de controle de robô bípede com 6 servos v. 1.1.1 Beta
Última atualização em 20 de março de 2013 às 15:14:10
Autor: Marcelo Borges dos Santos
e-mail: mbsborges@gmail.com
blog: https://mbsborges.blogspot.com

*/

//Inicio da inserção das bibliotecas
#include <Servo.h>

//Fim da inserção das bibliotecas

#define tempo 150 //Variável de controle da velocidade 

//Inicio da nomeção dos servos
//Quadris
Servo quadrilDireito;
Servo quadrilEsquerdo;
//joelhos
Servo joelhoDireito;
Servo joelhoEsquerdo;
//pés
Servo peDireito;
Servo peEsquerdo;
//Fim da nomeção dos servos

//Inicio do ajuste de angulação dos servos (em graus)
#define ajustePeDireito 0           // Ajuste do pé direito
#define ajustePeEsquerdo 0          // Ajuste do pé esquerdo
#define ajusteJoelhoDireito 0       // Ajuste do joelho direito
#define ajusteJoelhoEsquerdo 0      // Ajuste do joelho esquerdo
#define ajusteQuadrilDireito -5    // Ajuste do quadril direito
#define ajusteQuadrilEsquerdo 0     // Ajuste do quadril esquerdo
//Fim do ajuste de angulação dos servos

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 + ajustePeDireito);
  peEsquerdo.write(90 + ajustePeEsquerdo);
  quadrilDireito.write(90 + ajusteQuadrilDireito);
  quadrilEsquerdo.write(90 + ajusteQuadrilEsquerdo);
  joelhoDireito.write(90 + ajusteJoelhoDireito);
  joelhoEsquerdo.write(90 + ajusteJoelhoEsquerdo);
  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 + ajusteJoelhoDireito);
      joelhoEsquerdo.write(i + ajusteJoelhoEsquerdo);
      quadrilDireito.write(i + ajusteQuadrilDireito);
      quadrilEsquerdo.write(d + ajusteQuadrilEsquerdo);
      d--;
      delay(0.5 * tempo);
    }
    delay (2000);
    //Movimento de volta
    for (i = 115; i > 90; i--) {
      joelhoDireito.write(d + ajusteJoelhoDireito);
      joelhoEsquerdo.write(i + ajusteJoelhoEsquerdo);
      quadrilDireito.write(i + ajusteQuadrilDireito);
      quadrilEsquerdo.write(d + ajusteQuadrilEsquerdo);
      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 + ajusteJoelhoDireito);
    joelhoEsquerdo.write(i + ajusteJoelhoEsquerdo);
    quadrilDireito.write(d + ajusteQuadrilDireito);
    quadrilEsquerdo.write(i + ajusteQuadrilEsquerdo);
    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 + ajustePeEsquerdo);
      peDireito.write(i + ajustePeDireito);
      delay(tempo);
    }
    delay (100);
    peEsquerdo.write(110 + ajustePeEsquerdo);
    peDireito.write(110 + ajustePeDireito);
    delay (100);
  }
  //Retornando para posição anterior
  if (sentido == 0) {
    for (i = 110; i > 90; i--) {
      peEsquerdo.write(i + ajustePeEsquerdo);
      peDireito.write(i + ajustePeDireito);
      delay (tempo);
    }
    delay (100);
    peDireito.write(90 + ajustePeDireito);
    peEsquerdo.write(90 + ajustePeEsquerdo);
    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 + ajustePeDireito);
      peEsquerdo.write(i + ajustePeEsquerdo);
      delay (tempo);
    }
    delay (100);
    peDireito.write(70 + ajustePeDireito);
    peEsquerdo.write(70 + ajustePeEsquerdo);
    delay(100);
  }
  //Retornando para posição anterior
  if (sentido == 0) {
    for (i = 70; i < 90; i++) {
      peEsquerdo.write(i + ajustePeEsquerdo);
      peDireito.write(i + ajustePeDireito);
      delay(tempo);
    }
    delay (100);
    peEsquerdo.write(90 + ajustePeEsquerdo);
    peDireito.write(90 + ajustePeDireito);
    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 + ajusteQuadrilDireito);
        quadrilEsquerdo.write(x + ajusteQuadrilEsquerdo);
        joelhoDireito.write(x + ajusteJoelhoDireito);
        joelhoEsquerdo.write(x + ajusteJoelhoEsquerdo);
        delay(0.25 * tempo);
      }
    }
    else {
      for (x = 70; x < 110; x++) {
        quadrilDireito.write(x + ajusteQuadrilDireito);
        quadrilEsquerdo.write(x + ajusteQuadrilEsquerdo);
        joelhoDireito.write(x + ajusteJoelhoDireito);
        joelhoEsquerdo.write(x + ajusteJoelhoEsquerdo);
        delay(0.25 * tempo);
      }
    }
    inclinarEsquerda(0);
    inclinarDireita(1);
    for (x = 110; x > 70; x--) {
      quadrilDireito.write(x + ajusteQuadrilDireito);
      quadrilEsquerdo.write(x + ajusteQuadrilEsquerdo);
      joelhoDireito.write(x + ajusteJoelhoDireito);
      joelhoEsquerdo.write(x + ajusteJoelhoEsquerdo);
      delay(0.25 * tempo);
    }
    inclinarDireita(0);
  }
  //Retornando para a posição inicial
  inclinarEsquerda (1);
  for (i = 70; i < 90; i++) {
    quadrilDireito.write(i + ajusteQuadrilDireito);
    quadrilEsquerdo.write(i + ajusteQuadrilEsquerdo);
    joelhoDireito.write(i + ajusteJoelhoDireito);
    joelhoEsquerdo.write(i + ajusteJoelhoEsquerdo);
    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 + ajusteQuadrilDireito);
      quadrilEsquerdo.write(x + ajusteQuadrilEsquerdo);
      joelhoDireito.write(x + ajusteJoelhoDireito);
      joelhoEsquerdo.write(x + ajusteJoelhoEsquerdo);
      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 + ajusteQuadrilDireito);
      quadrilEsquerdo.write(x + ajusteQuadrilEsquerdo);
      joelhoDireito.write(x + ajusteJoelhoDireito);
      joelhoEsquerdo.write(x + ajusteJoelhoEsquerdo);
      delay(0.25 * tempo);
    }
    inclinarDireita(0);
    posicaoInicial();
  }
}

//Fim

Comentários

Archive

Formulário de contato

Enviar