Controlo de motores bipolares

Olá!

Sou relativamente novo no mundo do arduino, sem muita experiência, de momento queria fazer o controlo de 4 motores bipolares de passo simultaneamente, a partir de um potenciómetro. Os motores são nema 17. As drivers utilizadas são BL-TB6560-V2.

O que eu queria fazer era controlar 2 motores com uma placa arduino uno, e os outros 2 com outra placa arduino uno. E os motores de uma placa arduino iriam funcionar num sentido quando o valor do potenciómetro fosse por exemplo maior do que 700 e girar no sentido contrario quando o valor do potenciometro fosse menor do que 300. Enquanto que na outra placa arduino, os motores ligados iriam rodar num sentido caso o o valor lido fosse por exemplo maior do que 900 e girar no outro sentido quando fosse menor do que esse valor.

Estes motores vão funcionar como comportas para água, por isso era interessante que os motores não continuassem a rodar quando as comportas já estivessem fechadas, alguma ideia de como é possível?

Eu procurei muito mas apesar de tudo não encontrei ajuda neste sentido, pelo que li, é recomendável utilizar a biblioteca accelstepper para este caso, ou acham melhor outra?

A dúvida baseia-se essencialmente no código, não sei muito bem como fazer, e não encontrei nada para controlo de 2 motores bipolares usando potenciómetro, por isso qualquer ajuda seria ótimo.

Muito obrigado e deus vos abençoe!

joaomiranda2:
Olá!

Sou relativamente novo no mundo do arduino, sem muita experiência, de momento queria fazer o controlo de 4 motores bipolares de passo simultaneamente, a partir de um potenciómetro. Os motores são nema 17. As drivers utilizadas são BL-TB6560-V2.
(...)

Olá João! Bem-vindo ao fórum.

joaomiranda2:
(...)
O que eu queria fazer era controlar 2 motores com uma placa arduino uno, e os outros 2 com outra placa arduino uno. E os motores de uma placa arduino iriam funcionar num sentido quando o valor do potenciómetro fosse por exemplo maior do que 700 e girar no sentido contrario quando o valor do potenciometro fosse menor do que 300. Enquanto que na outra placa arduino, os motores ligados iriam rodar num sentido caso o o valor lido fosse por exemplo maior do que 900 e girar no outro sentido quando fosse menor do que esse valor.
(...)

Fiquei com dúvidas em relação a isto. Os motores têm que estar de alguma forma sincronizados? Isto podem ser considerados 2 projectos independentes a trabalhar em conjunto? Quantos potenciómetros vai ter? (um em cada Arduino ou apenas 1 para os 2 Arduinos? A velocidade dos motores também varia? (ou apenas é alterado o sentido de rotação)

joaomiranda2:
(...)
Estes motores vão funcionar como comportas para água, por isso era interessante que os motores não continuassem a rodar quando as comportas já estivessem fechadas, alguma ideia de como é possível?
(...)

O que se faz neste caso é ter dois interruptor em cada extremidade do deslocamento (chamam-se fim de curso). Quando o objecto que está em movimento toca nesse interruptor é porque chegou a essa extremidade e o programa pára o movimento nesse sentido (invertendo de seguida ou parando simplesmente, conforme a aplicação). Faça uma pesquisa por "fim de curso Arduino" ou qualquer coisa do género que acredito irá encontrar muitos exemplos.

joaomiranda2:
(...)
Eu procurei muito mas apesar de tudo não encontrei ajuda neste sentido, pelo que li, é recomendável utilizar a biblioteca accelstepper para este caso, ou acham melhor outra?

A dúvida baseia-se essencialmente no código, não sei muito bem como fazer, e não encontrei nada para controlo de 2 motores bipolares usando potenciómetro, por isso qualquer ajuda seria ótimo.

Muito obrigado e deus vos abençoe!

Em relação a bibliotecas para motores de passo, não consigo ajudar porque não utilizo, mas certamente haverá alguém no fórum que consegue ajudar a esclarecer esta dúvida. Sem conhecimento, eu diria que fazem todas mais ou menos o mesmo. Se não precisa de rampas de aceleração elaboradas (e apenas pretende fazer girar o motor) eu diria que qualquer biblioteca de motores de passo fará o trabalho.
Em termos de programação o maior problema que terá será ler o potenciómetro e actuar o motor em conformidade. Deve fazer o trabalho em 2 passos: primeiro ler o potenciómetro e enviar uma mensagem para a porta série quando ultrapassa o valor pretendido; segundo fazer arrancar o motor, fazê-lo girar para um lado e para o outro e parar (o controlo do motor também pode ser através de porta série). Quando tiver estas duas coisas a trabalhar em separado, deverá ser fácil juntar as duas num único programa que faça o que pretende. (sem utilizar nenhum exemplo que já tenha isto completamente como quer).

Bom trabalho.

Olá Luís!

Muito obrigado pela resposta!

Respondendo às suas questões, os motores podem ser considerados como projetos independentes apesar da sua finalidade serem trabalhar juntos, visto que dois dos motores são de "emergência", ou seja só atuam se o potenciómetro passar um certo valor. Já o potenciómetro vai ser o mesmo para todos os motores, ou seja, o seu valor deve ser lido nas 2 placas arduino.

Mais uma questão, quando refere "porta série" está a falar do monitor série que aparece no programa arduino? Aquele onde é possível ver os valores lidos pelo potenciómetro?

Muito obrigado mais uma vez

joaomiranda2:
Olá Luís!

Muito obrigado pela resposta!

Respondendo às suas questões, os motores podem ser considerados como projetos independentes apesar da sua finalidade serem trabalhar juntos, visto que dois dos motores são de "emergência", ou seja só atuam se o potenciómetro passar um certo valor. Já o potenciómetro vai ser o mesmo para todos os motores, ou seja, o seu valor deve ser lido nas 2 placas arduino.

Mais uma questão, quando refere "porta série" está a falar do monitor série que aparece no programa arduino? Aquele onde é possível ver os valores lidos pelo potenciómetro?

Muito obrigado mais uma vez

Sim, "porta série" é isso (o monitor série apenas serve para mostrar o que chega à porta série do PC - que neste momento é uma porta virtual em cima de uma porta USB).
Em relação ao potenciómetro, assim é mais complicado. Têm mesmo que ser 2 Arduinos? (o mesmo não pode controlar os 4 motores?) Não falou se conforme o valor lido nos potenciómetros a velocidade dos motores (ou algo tem que variar. Ou apenas tem que mover para um lado e para o outra a uma velocidade constante e o potenciómetro apenas indica quando é que tem que começar a mover para cada lado? Não estou a perceber muito bem qual é a ideia.

luisilva:
Sim, "porta série" é isso (o monitor série apenas serve para mostrar o que chega à porta série do PC - que neste momento é uma porta virtual em cima de uma porta USB).
Em relação ao potenciómetro, assim é mais complicado. Têm mesmo que ser 2 Arduinos? (o mesmo não pode controlar os 4 motores?) Não falou se conforme o valor lido nos potenciómetros a velocidade dos motores (ou algo tem que variar. Ou apenas tem que mover para um lado e para o outra a uma velocidade constante e o potenciómetro apenas indica quando é que tem que começar a mover para cada lado? Não estou a perceber muito bem qual é a ideia.

Ah ok, já entendi!
Infelizmente só temos acesso a placas arduino Uno, que não têm inputs suficientes para tudo aquilo que necessitamos trabalhar, por isso a necessidade de ter de ser mais do que uma placa.
Quanto à implicação do potenciómetro, ele serve simplesmente para dar ordem de início aos motores para se movimentarem para um lado ou para o outro, é irrelevante se isso acontece a velocidade constante ou a partir do valor lido pelo potenciómetro. E assim sendo é de optar pela solução mais simples.

joaomiranda2:
Ah ok, já entendi!
Infelizmente só temos acesso a placas arduino Uno, que não têm inputs suficientes para tudo aquilo que necessitamos trabalhar, por isso a necessidade de ter de ser mais do que uma placa.
Quanto à implicação do potenciómetro, ele serve simplesmente para dar ordem de início aos motores para se movimentarem para um lado ou para o outro, é irrelevante se isso acontece a velocidade constante ou a partir do valor lido pelo potenciómetro. E assim sendo é de optar pela solução mais simples.

Assim entendi. É que para ter o potenciómetro numa placa Arduino e os motores noutra é necessário que as placas comuniquem entre si. Se o que interessa é apenas ligar e desligar motores a comunicação é mais simples (e, no limite, pode ser dada feita por entradas/saídas digitais, possivelmente apenas com uma linha).
Sendo assim pode pense quantas entradas/saídas digitais necessita ao todo para cada placa (note que tem: motores, fins de curso, comunicação, potenciómetro e possivelmente interface com o utilizador - leds, bezouros, etc.). Estou a chamar a atenção porque pode necessitar de ainda mais sinais e mesmo 2 placas não serem suficientes. Ainda tem a opção de expansores de I/O (tipo PCF8574), que pode ser uma opção melhor que utilizar várias placas de Arduino.

luisilva:
Assim entendi. É que para ter o potenciómetro numa placa Arduino e os motores noutra é necessário que as placas comuniquem entre si. Se o que interessa é apenas ligar e desligar motores a comunicação é mais simples (e, no limite, pode ser dada feita por entradas/saídas digitais, possivelmente apenas com uma linha).
Sendo assim pode pense quantas entradas/saídas digitais necessita ao todo para cada placa (note que tem: motores, fins de curso, comunicação, potenciómetro e possivelmente interface com o utilizador - leds, bezouros, etc.). Estou a chamar a atenção porque pode necessitar de ainda mais sinais e mesmo 2 placas não serem suficientes. Ainda tem a opção de expansores de I/O (tipo PCF8574), que pode ser uma opção melhor que utilizar várias placas de Arduino.

De facto, os expansores parecem uma boa opção, contudo, pelo que li eles apenas podem funcionar como input ou output, não como os 2 ao mesmo tempo, pelo que 1 só expansor talvez ainda seja limitativo, recomenda usar 2? um como output outro como input?

Contudo, caso não seja possível obter os expansores a tempo, não será possível o potenciómetro ser input em 2 placas diferentes? Nesse caso cada placa seria independente da outra, dependendo ambas apenas do valor do potenciómetro e eliminando a necessidade de haver comunicação entre as placas

joaomiranda2:
De facto, os expansores parecem uma boa opção, contudo, pelo que li eles apenas podem funcionar como input ou output, não como os 2 ao mesmo tempo, pelo que 1 só expansor talvez ainda seja limitativo, recomenda usar 2? um como output outro como input?

Contudo, caso não seja possível obter os expansores a tempo, não será possível o potenciómetro ser input em 2 placas diferentes? Nesse caso cada placa seria independente da outra, dependendo ambas apenas do valor do potenciómetro e eliminando a necessidade de haver comunicação entre as placas

A minha dúvida (que me levou a sugerir esta solução) não é o potenciómetro mas o número de pinos (sinais de entrada/saída) que tem que usar. Sim, pode usar vários expansores (até um máximo de 8, para o PCF8574) na mesma aplicação. Isso que diz de que os expansores como input ou output, parece-me uma história mal contada (já não trabalho com este tipo de dispositivos há vários anos, mas não me lembro de nada desse estilo). Por outro lado, não existe só o PCF8574, por exemplo o mcp23017 tem 16 i/o's em vez de 8 (pode ver aqui uma página com um tutorial de como usar este dispositivo).
Mas se vir que os 2 Arduino têm pinos suficientes para a aplicação (e como não tem muita prática nestas coisas) opte pelas 2 placas Arduino.