eae pessoa blz? 

é o seguinte estou fazendo meu tcc da faculdade e toda parte mecânica está funcionando, agora a danada da programação me pegou. Vou explicar mais ou menos o projeto, se trata de um robô escalador de árvores ou tree climber robot como é cohecido, eu utilizei 3 motores Dc. 2 controlam garras que prendem no tronco e o 3º um fuso que faz o movimento de sobe e desce. 

Inicialmente eu fiz um programa para a garra fechar no tronco e ficar travada pela própria redução do motor, mas percebemos nos testes que essa não consegue suportar o peso. Então fiz um programa teste em que deixava os motores acionados diretos continuamente fazendo força para fechar a garra e felizmente consegui que o protótipo ficasse parado  no tronco, porém, não consegui estabelecer os parâmetros para que o motor fique funcionando e consiga fazer as outra operações.

 vou descrever o programa de forma verbal para explicar:

-motor 2 abre a garra1;

-motor 4 abre a garra2;

-motor 2 fecha a garra1 (deve ficar continuo até que tenha outro comando para abrir);

-motor 3 movimenta o fuso;

-motor 3 para o fuso;

-motor 4 fecha a garra2;(deve ficar continuo até que tenha outro comando para abrir);

-motor 2 abre a garra1;

-motor 3 movimenta o fuso;

-motor 3 para o fuso;

-motor 2 fecha a garra1 (deve ficar continuo até que tenha outro comando para abrir);

-motor 4 abre a garra2;

-motor 3 movimenta o fuso;

-motor 3 para o fuso;

esse ciclo tem q ser continuo mudando apenas a direção de giro do fuso (speed 100, -100);

me perdi nos comando update acho, não sei kkkk, se puderem me ajudar agradeço.

segue o programa que estava utilizando:

#include <S4power.h>
S4Power s4power;
void setup()
{
s4power.Config();
}
void loop()
{
s4power.M2.speed = -100;
s4power.M2.Update();

delay ( 1000 );

s4power.M2.speed = 0;
s4power.M2.Update();

s4power.M4.speed = 100;
s4power.M4.Update();

delay ( 1000 );

s4power.M4.speed = 0;
s4power.M4.Update();

s4power.M3.speed = 100;
s4power.M3.Update();

delay ( 10000 );

s4power.M3.speed = 0;
s4power.M3.Update();

s4power.M4.speed = -100;
s4power.M4.Update();

delay ( 1000 );

s4power.M4.speed = 0;
s4power.M4.Update();

s4power.M2.speed = 100;
s4power.M2.Update();

delay ( 1000 );

s4power.M2.speed = 0;
s4power.M2.Update();

s4power.M3.speed = -100;
s4power.M3.Update();

delay ( 10000 );

s4power.M3.speed = 0;
s4power.M3.Update();

}

Exibições: 286

Anexos

Responder esta

Respostas a este tópico

Oi Bruno,

Ok, mas qual está sendo sua dúvida??? Se for o parametro 100 a -100 você pode aumentar... colocando 200 a -200 por exemplo. 

Equipe LdG

eu preciso que um motor permaneça acionado direto enquanto o restante do program é executado. Ex.: eu mando ele girar no speed 100, ele tem q ficar acionado direto rodando o restante do programa e depois eu coloco um comando speed -100 e ai ele para e inverte o giro.

Oi Bruno,

Entendi. O que acontece é que a função delay pára o microcontrolador durante o tempo determinado por você (neste caso 1000). Experimente utilizar a função millis() ou microseconds(). Tem uma programação exemplo dentro do Arduino que mostra como utilizar, ela se chama BlinkWithoutDelay.

Outra coisa, o microcontrolador do Arduino, executa a programação linha por linha e de cima para baixo e não tudo ao mesmo.... Mas como o clock é muito alto, parece que está executando tudo ao mesmo tempo.

Abraços!

Equipe LdG

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço