Fala galera, tudo certo?

Estou com um servo motor um pouco diferente e preciso de um help pra controlá-lo pelo Arduino.

Como mostrado na imagem, ele tem um motor simples 12v e o potenciômetro ao lado, esse potenciômetro possui uma engrenagem que, conforme o motor gira, o potenciômetro gira também, assim pode-se saber em que posição o mesmo está. Ele é um motor de rotação normal, mas funciona somente de 0º à 180º.

Eu fiz um programa básico no Arduino para que pudesse ver os valores dele totalmente aberto (0º) e totalmente fechado (180º). Suas medidas foram 520 quando 0º e 215 quando 180º. Esses dois valores ficaram variando cerca de 2 valores, tanto pra mais quando pra menos.

Preciso saber o seguinte, como posso fazer o mapeamento dele? Seria algo tipo:

map(ValorPotenciometro, 215, 520, 0, 180); ?

E outra dúvida, ele vai receber sinal de um tacômetro, onde em 4000RPM ele iniciaria seu trabalho de abertura, e quando chegasse em 9000RPM deveria ficar totalmente aberto (Exemplo).
No caso, eu teria que fazer algum tipo de "segundo mapeamento" ou daria pra usar "if/else" ou "for". E conforme essa RPM fosse reduzindo, o motor giraria ao contrário para ir fechando novamente.

Algo como:


if (x >= 9000); // Motor 100% aberto, ou em 0º
if (x <= 4000); // Motor 0% aberto, ou em 180º

Só que de 4000 à 9000RPM ele tem que ir abrindo aos poucos conforme a RPM vai aumentando.


Desculpem minhas perguntas, mas estou começando agora com Arduino então tenho algumas dúvidas amadoras rs

Agradeço desde já.

Exibições: 3235

Responder esta

Respostas a este tópico

Olá Edmilson. 

Não sou especialista em servo motores, mas vamos lá.

Bom primeiro seria viável pegar mais informações sobre este motor, pesquise os seus parâmetros desde seu torque a potência elétrica para projetar a fonte de alimentação para este motor .

Pelo que entendi em seu projeto você não terá o controle pelo potenciômetro e já que você achou os AD do PWM, teste-o e compare os valores para uma melhor precisão e controle. 

No caso do tacômetro você terá que fazer o Arduino contar estes pulsos usando por exemplo, a interrupção externa pelo pino 2, que todo sinal na borda de descida ou subida (dependendo como vc irá usar) gerará uma contagem. E com os valores formados vc usa decisões ou switch case para controlar o PWM para o servo motor.

Da uma olhada de como programar os pinos de interrupção externa no seu Arduino.

Olá Rodrigo Nogy Pereira, se apenas controlar o servo com o PWM não iria perder a confiabilidade se o motor girou ou não, no caso do eixo motriz do servo estiver travado??

Bom Marcos não sei se entendi direito, mas quando usamos a biblioteca e os exemplos dela mesma "servo.h", estamos utilizando o PWM, ou seja, os valores AD que se aplica na função map. 

Os servos motores possuem um sistema eletromecânico (bom ou ruim dependendo da marca) que quando se trava o eixo por ter excedido o peso ou outros problemas, permanece na posição inicial. 

Da uma olhada:

https://www.youtube.com/watch?v=eLWiQ5hwGrM

O motor será alimentado diretamente por uma bateria de 12V 5A, não é um motor comercializado hoje em dia por isso é complicado obter os parâmetros dele.

O tacômetro vai funcionar por contagem de pulsos elétricos, pelo que pesquisei os pulsos não podem passar de 5V, não medi ainda para ver se o gerador dos pulsos irá passar dos 5V, mas caso passe irei utilizar um LM7905 como regulador. No caso iria contar quantos pulsos obtive em um segundo e multiplicar por 60. Os giros deste tacômetro poderão chegar a até 12.000RPM.

Amanhã irei comprar um Shield que utiliza o L298N, não fiz mais testes por não ter nenhum drive desse pra testar melhor.

Sobre peso que ele suporta creio que não seja necessário pesquisar melhor, pois irá trabalhar em seu local original.

Como eu disse, sou iniciante nisso, não sei como funcionam as bibliotecas para servo, é algo que ainda terei que aprender kkkkkk

É basicamente fazer com que ele, em determinada RPM, comece a girar, ele vai ser ligado em uma válvula que gira 180º, inicialmente ela ficará fechada, quando a RPM atingir uma velocidade "x", ela começa a abrir essa válvula, e quando essa velocidade chegar em um valor limite, ela estará totalmente aberta.


Como no exemplo que dei, irei definir um valor "x" para ela começar a abrir a válvula, e um valor "y" que ela deverá estar totalmente aberta

Bom não sei se seria viável usar este driver em seu projeto.

O pulso passando de cinco coloque um diodo zener de 4v7 ou 5v1. O regulador de tensão 7905 é para tensão negativa e só trabalha linearmente.

Utilizando a interrupção externa, a variável contará conforme os pulsos do tacômetro, a velocidade sendo:

12000 RPM, o microcontrolador contará 200 pulsos  por segundo. Basta você pegar este número fazer uma regra de três que achará a velocidade mínima, média e máxima para usar a posição mais adequada do servo.

Certo, utilizarei o diodo zener então.

Sobre o RPM, quero fazer com que ele funcione de um jeito que eu possa definir o valor inicial e final em RPM, e que o servo varie conforme a rotação, se eu definir pra iniciar a abertura em 7000 e terminar em 10000, seria uma diferença de 3000RPM, dentro destes 3000, o servo vai girando de maneira equivalente com a RPM lida, como não sei como funciona a livraria de servo não sei por onde começar esse programa.

A posição adequada do servo vai variar demais conforme a rotação, em 7500RPM por exemplo ele giraria um pouco, nos 8000 um pouco mais, e assim vai. Ao chegar nos 10000RPM ele deve estar totalmente nos 180º, passando dos 10000RPM ele se mantém nos 180º.

Se eu achasse um vídeo seria mais fácil de explicar, originalmente ele funciona iniciando nos 5500RPM e terminando em 9000RPM, mas não posso editar isso no controlador original.

Sobre o drive, teria algum outro método?

Só uma pergunta: como seria essa válvula que será controlada pelo servo? 

Sobre o driver eu não entendi porque usar duas ponte H que é o caso do L298N. Sendo que você só citou o uso do tacômetro, servo e válvula? 

A válvula é essa, na ponta do servo tem dois cabos de aço, que fazem a abertura e fechamento, é um sistema chamado YPVS, ele regula a saída do escapamento da moto conforme sua rotação, em baixa rotação ela fica fechada. Conforme a rotação aumenta, essa válvula vai abrindo.

Entendi. O arduino e o servo ficarão aonde na moto?

Ainda não defini um lugar específico por não saber como ficará a case dele, mas pretendo colocar o arduino no lugar original do módulo que controla o servo. Penso em utilizar o Pro Mini por ser mais compacto. O servo ficara no lugar original dele na moto.

Consegui controlar ele com um código simples só pra testar:

int IN1 = 4;

int IN2 = 5;

void setup()
{
//Define os pinos como saida
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
}

void loop()
{
//Gira o Motor no sentido horario
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
delay(500);
//Para o motor
digitalWrite(IN1, HIGH);
digitalWrite(IN2, HIGH);
delay(500);

//Gira o Motor no sentido anti-horário
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
delay(500);
//Para o motor
digitalWrite(IN1, HIGH);
digitalWrite(IN2, HIGH);
delay(500);
}

Mas esse código liguei somente o 12v e o GND do servo, sem utilizar o potenciômetro que define a posição dele.

Pelo menos essa parte eu consegui rs, duro vai ser ele trabalhar conforme a RPM. Vou montar um programa pra tentar girar ele conforme eu giro um outro potenciômetro, simulando a rpm.

(Acho que pra vocês isso é simples, mas pra mim ainda é um bicho de sete cabeças hahaha)

Esse motor tem algum circuito ligado ao Potenciometro e ao motor ? 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço