/*
Programa de controle de robô bípede com 6 servos v. 0.9 Beta
Última atualização em 02 de dezembro de 2012 às 00:24:43
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 (5000);
aquecimento();
delay (20);
cumprimentar (3);
delay(20);
andar(4);
}
//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);
for (x = 90; 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);
}
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);
}
//Fim
Comentários