Bom dia pessoal, com a ajuda de uns videos pela internet, elaborei um programa no IDE do Arduino para controlar um motor de passo (o sketch segue em anexo). Pelo monitor serial eu consigo entrar com valores e girar o motor para o respectivo ângulo. Mas meu impasse é o seguinte, alem de entrar com o valor de angulo pelo serial eu preciso escrever as seguintes frases:

:gotoangle: "aqui dentro o valor do angulo" exemplo, (:gotoangle: 90) fazendo o motor ir direto para 90 graus. 

:addtoangle: "valor para somar junto com o angulo já andado" exemplo, (:addtoangle: 5) giraria para 95 graus.

:angle?: "valor do ângulo da ultima posição do motor" exemplo, (:angle?: "no print apareceria 95 graus").

Alguma dica de como adicionar essas frases? Desde já agradeço. Abraços. 

Exibições: 700

Anexos

Responder esta

Respostas a este tópico

olá José Gustavo, eu gostei dessa ideia, mas a minha intenção é usar o Arduino juntamente com o driver NI-VISA. É assim, esse driver vai identificar o que está conectado na porta USB do computador e eu vou poder a partir dele abrir um app de test and measuring dentro do programa MATLAB, então, dentro do MATLAB eu vou poder usar o comando obj = visa('ni','ASLR3::INSTR') e fopen(obj) a partir disso eu vou poder controlar o Arduino pelo MATLAB (no meu programa atual eu consigo controlar mas gostaria de implementar aquelas frases do meu tópico) e vou ganhar também alguns comandos que o NI-VISA trás como, *IDN? (no meu caso esse idn também não esta funcionando) que vai identificar o nome da placa que está conectada no computador. Enfim, gostaria de implementar mais coisas nesse meu sketch que é o caso do :gotoangle: e :addtoangle:

Muito obrigado a atenção e estou disposto a testar mais dicas sobre isso!

Olá,

Você esta usando o Labview?

Abs.

CK

Não, pensei em usa-lo mas não era aquilo que eu precisava. Estou abrindo o o driver NI-VISA dentro do MATLAB, a partir de lá posso controlar o Arduíno, deve ser a mesma pegada com o Labview, mas o software precisa ser o MATLAB. 

Vou anexar umas fotos pra você ver como fica. A partir daquele ultimo comando o motor gira!

Abraços CK!

Anexos

Olá Arthur!

Esse método que você está usando para ler valores inteiros não é muito prático.

O melhor é usar o comando Serial.parseInt(). Que lê um número completo de uma vez só

Veja um exemplo do lab aqui: http://labdegaragem.com/forum/topics/serial-read-ler-um-decimal

Você pode fazer assim:

if (Serial.available() > 0)
{
   Serial.print(":gotoangle: ");
   numero = Serial.parseInt();
   //Coloque aqui o comando para o servo....
}

Obs: É bom validar o número lido antes de enviar o comando para o servo...

por gentileza vc poderia me falar como faco uma ponte H pra controlar um motorzinho pequeno de um antigo eletronico? tenho um arduino e umas sucatas, nao gostaria de comprar o microchip, gostaria de aprender um metodo mais facil de construcao da ponte h, talvez com transistores?

Olá Guacamole!

O ideal é você criar um outro tópico sobre a sua dúvida com Ponte H para não atrapalhar o post do Arthur sobre serial e motor de passo.

Veja as regras do blog aqui: labdegaragem.com/forum/topics/sugest-o-de-como-postar

agradecido desculpa ae e q sua duvida seja sanada, falou! 

eu testei aqui esse código, funciona corretamente, mas qualquer palavra que eu entro no serial junto com a angulação o motor gira, a minha intenção era que a entrada :gotoangle: " " fosse reconhecida como, mover o motor para a posição que esta em " " mas que faça isso só se o :gotoangle: estiver escrito corretamente. Portanto :gotoangle: " " e :addtoangle: " " seriam entradas distintas com tarefas distintas. Muito obrigado pela atenção José Augusto, se tiver mais algumas ideias estou disposto a testar. Abraços. 

Arthur, boa tarde!

Acho que entendi o que vc quer (acho!)

Os comandos vem completos pela serial:

:gotangle: 90

:addtoangle: 5

E assim por diante

Nesse caso, você ter que ler toda entrada e separar o que é o comando e o que é o valor.

Depois testar o comando e executar a ação correspondente.

Isso pode ser feito com o objeto String da linguagem do Arduino. ele possui o método indexOf que procura uma ocorrência e o método substring que extrai uma parte da string.

Fiz um pequeno exemplo comentado no anexo. É só fazer as adaptações. Veja se entendi o que você quer...

Falta incluir no exemplo as validações, caso venha um comando incompleto ou errado.

Anexos

Cara, é exatamente isso, (só tive que trocar aquele if do inicio por um while porque o if ele girava pro angulo de entrada mas voltava pra origem) muito obrigado! Só que eu criei um problema la dentro kkkkk

Segue em anexo o meu sketch, o :addangle: quando começa a girar não para mais haha, eu acho que não estou sabendo com o que somar. 

Agradeço as dicas e o tempo gasto cara, muito obrigado mesmo!

Anexos

Arthur, bom dia!

Tem um trecho no seu programa que está fora do lugar:

while (graus>numero_passos){
  passo_esq();
  numero_passos = numero_passos +1;
}
while(graus<numero_passos){
  passo_dir();
  numero_passos = numero_passos -1;
}

Esse trecho vai ser sempre executado. Por isso que o servo não para de girar.

Coloque um condição para ser executado apenas quando for necessário.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço