Boa Noite! Eu estou com dificuldade em elaborar um código para um projeto de um robô bipede controlado via Bluetooth e gostaria de saber se alguém já fez e possa me ajudar  ? com meu pouco conhecimento já fiz esse código mas a dificuldade é principalmente no angulo de devo movimentar as pernas e a ordem desse movimento.

// controlando do robô bipede via bluetooth

#include <Servo.h>
Servo pedireito;// declarando servo motor com o nome servo1
Servo jodireito;
Servo quadireito;
Servo peesquerdo;
Servo joesquerdo;
Servo quaesquerdo;

char valor; //caractere que vai ser recebida via bluetooth

int ang=0; // angulo inicial 0 graus


void setup() {
pedireito.attach(8);// o servo esta conectado pa porta 3 do arduino
jodireito.attach(9);// servo porta 9 do arduino
quadireito.attach(10);
peesquerdo.attach(11);
joesquerdo.attach(12);
quaesquerdo.attach(13);

Serial.begin(9600);
}

void loop() {
valor = Serial.read();
if(valor=='F'){ // se valor recebido for = a F movimento os servos para 45 graus frente
peesquerdo.write(135);
delay (15);

jodireito.write(45);
quadireito.write(45);
quaesquerdo.write(45);
delay (15);


peesquerdo.write(90);
joesquerdo.write(135);
quaesquerdo.write(135);


}


}

Exibições: 442

Responder esta

Respostas a este tópico

Essa é realmente a maior dificuldade de um codigo como esse.

Vc tem 2 caminhos:

1) Fazer na unha uma tabela de posições. mais ou menos o que vc está fazendo, e uma rotina que leve de uma a outra. Seria um for(;;) de 0 a 100 por ex alimentando um  comando map(;;;;) ou um calculo com regra de tres que forneca as posições do motor de forma interpolada. 

Enfim, esse metodo seria assim: Vc divide uma caminhada em 10 porções (por ex) e cria uma tabela de angulos para cada uma dessas 3 porções. Depois usa esses dados para alimentar uma rotina que suavemente levara as pernas de uma posição para a outra, depois para a outra e assim vai.

2) Fazer matematicamente. Seria esboçar um circulo matematicamente. Para melhorar coloque uma parte reta na base dele. Fica algo assim:

r é o raio e a é o angulo.

limite é o limite inferior para não girar e sim fazer um movimento reto na base.

com um a que vai de 0 a 360 vc calcula:

x=cos(a)*r

y=sen(a)*r

Para achatar a base use: if y<limite y=limite;

Os 2 ossos são como 2 vetores um na ponta do outro.

Por calculo vetorial vc consegue saber qual angulo precisa por em cada vetor para chegar ao ponto (x,y).

Enfim, veja se dá para encarar essa segunda, senão va na primeira opção.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço