/*
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