Bom dia pessoal

Estou a pouco tempo estudando sobre arduíno e fazendo algumas invenções aqui, mas ainda estou aprendendo. pesquisei bastante sobre PWM e vi que tem muito material no youtube mostrando a parte teórica e com potenciometro, mas achei escasso a forma prática de como aplicá-lo em comando ( SEM USO DE POTÊNCIOMETRO ) precisava de um sistema que fosse o menor possível e já criei, tive ajuda de pessoas aqui do forúm, enfim meu esquema está funcionando tudo OK, mas aí surgiu uma questão estudando modulação.

posso incrementar no comando do arduíno ( talvez exemplo analogRead ) para modificar as módulações de FORMA PERMANENTE ?

 O que eu pretendo com isso? eu queria aproveitar o máximo de desempenho dos servos, por que meu sistema funciona, mas quando coloco carga nos servos eles não se movimentam.

se é possivel incrementar um comando PWM para que DUTY CYCLE trabalhe com máximo de rendimento uns 80% ou mais, como eu faço para incrementar ao código e compilar ?

#include <Servo.h>

Servo myservo; // Cria um objeto de controle para o servo 1
Servo myservo1; // Cria um objeto de controle pro servo 2
const int pinobotao = 2; // Designa o pino 2 ao botão
const int pinoled = 5; // Designa o pino 5 ao led
int estadobotao = 0; // Estado atual do botão
int ultimoEstadobotao = 0; // estado anterior do botão
int estadoled = 0; // Lembra o atado atual do led
int pos = 0; // Variável para armazenar a posiçao do braço do servo
int pos1 = 180; //Variável para armazenar a posiçao do braço do servo

void setup()
{
myservo.attach(9); // Designa o pino 9 para controle do servo
myservo1.attach(10); // Designa o pino 10 para controle do servo
pinMode(pinobotao, INPUT); // Inicializa o botão como entrada
pinMode(pinoled, OUTPUT); // Inicializa o led como saida
}

void loop()
{
estadobotao = digitalRead(pinobotao); // Faz a leitura do pino do botão
if (estadobotao != ultimoEstadobotao) // Compara o atual estado do botão com o estado anterior
{
if (estadobotao == 1) // se o estado do botão for alto
{
if(estadoled == 1) // e se o estado do led for alto
{
delay(30); estadoled = 0; //atrasa 30ms e inicia a sequencia

for(pos = 0; pos <= 180; pos += 10) // faz o servo1 ir de 0º a 180º em passos de 10º
{
myservo.write(pos); // armazena o valor de pos na variavel do servo1
}
for(pos1 = 180; pos1 >= 0; pos1 -= 10) // faz o servo2 ir de 180º a 0º em passos de -10º
{
myservo1.write(pos1); // armazena o valor de pos1 na variavel do servo2
}
delay(15); // Atrasa em 15ms depois que o servo atingir a posição final
}
else
{
delay(30); //atraso de 30ms
estadoled = 1; // manda um valor alto para a variavel estadoled
for(pos = 180; pos >= 0; pos -= 10) // faz o servo1 ir de 180º a 0º em passos de 10º
{
myservo.write(pos); // armazena o valor de pos na variavel do servo1
}
for(pos1 = 0; pos1 <= 180; pos1 += 10) // faz o servo2 ir de 0º a 180º em passos de 10º
{
myservo1.write(pos1); // armazena o valor de pos1 na variavel do servo2
}
delay(1000); //Atraso de 1000ms
}
}

ultimoEstadobotao = estadobotao; // Lembra o atual estado do botão e Liga o led se estadoled =1 ou desliga se estadoled = 0
}
digitalWrite(pinoled, estadoled); //atribui o valor de pinoled ao estadoled
myservo.write(pos); // vai de 0º a 180º
myservo1.write(pos1); // vai de 180º a 0º

delay(20); // Atraso de 20ms
}

Exibições: 984

Responder esta

Respostas a este tópico

Não entendi ?

O que eu pretendo com isso? eu queria aproveitar o máximo de desempenho dos servos, por que meu sistema funciona, mas quando coloco carga nos servos eles não se movimentam.

Informe como fez as ligações. Envie uma foto. 

Qual servo? Qual alimentação ? Descreva com detalhes. 

Sugestão para estudo :

https://learn.adafruit.com/adafruit-arduino-lesson-14-servo-motors?...

Obrigado por responder José Gustavo

estou usando:

-arduino Nano V3.0 atmega 328 16 Mhz

-2 servos Mg 90s 1,8 Kgs de força em 5v   ( alimentados por fonte externa 6v )

- batéria 9v / 800 mah

- circuito com 1 regulador de tensão 6v 

- 1 capacitor 100uf

os servos não levantam a carga carga de aproximadamente ( 2,5Kgs dividido para os 2 servos )troquei os servos, mas não resolveu, então estudando um pouco sobre modelação fiz um teste no autodesk e vi que a modulação dos pinos tem um intervalo muito longo acredito que alterando o duty cycle e consequentemente a alimentação dos servos.

https://circuits.io/circuits/3830417-the-unnamed-circuit/edit#bread...

mandei o link do circuito no autodesk veja que com auxilio do osciloscópio os pulsos acredito eu que estão com intervalos muito longos, gostaria de diminuir esse intervalo é possível ? estou certo que com pulsos maiores teria um rendimento melhor com meus servos ?

Boa tarde! favor tirar uma foto ou faca um desenho de como distribuiu a carga de 2,5Kg nos dois servos, o servo Mg 90s ele tem torque de 1,8 com 6V e 1,5 com 5V , mas depende da montagem,

Boa tarde Nelson! valeu cara você me ajudou a projetar esse circuito há + ou - 1 mês atrás tirando muitas dúvidas minhas, muito obrigado mesmo pela força.

vou tirar foto e enviar ( esperando o celular carregar um pouco, descarregou por completo )

eu estava usando o SG90S e troquei os 2 servos por MG90S  ( engrenagem de metal )

- Torque: 2,2kg/cm (6,0V) / 1,8kg/cm (4,8V) não cheguei a pesar a carga que ele precisa lenatar, mas tenho certeza quem não pesa nem 3 Kgs, então eu acho que seria suficiente para levantar, mas não levanta, só funciona sem peso algum.

Nelson eu notei no autodesk pelo osciloscópio os servos estão recebendo modulações diferentes, exemplo de 0° para 180° um dutycycle maior e de 180° para 0° um duty cycle menor.

por isso pensei em alterar esse duty cycle permanente acrescentando um comando para isso, é possivel?

vou deixar o link do circuito no autodesk 

https://circuits.io/circuits/3830417-the-unnamed-circuit/edit#bread...

vou providenciar as imagens tabém

obrigado mais uma vez

 

Nelson anexei as fotos

os servos deveriam levantar essa mascara do capacete...

OBS - cara ainda estou aprendendo e me interessando muito em estudar cada vez mais sobre arduino, mas mesmo aprendendo estou ficando cada vez mais convencido que o duty cycle está mandando uma tensão menor do que deveria a fonte externa que alimenta os servos era de 5v 800 mah ( carregador de celular ) aumentei para 6v usando um regulador de tensão e bateria 800 mah e os servos giravam, mas tremiam muito o tempo inteiro, então eu arrisquei colocar um regulador de 8v mesmo correndo risco de queimar os servos, mas aconteceu o contrário os servos funcionaram melhores sem tremer e com precisão, mas mesmo assim não levantam o peso.

Anexos

Marcos eu vi as fotos , e os pontos de articulacoes da mascara fica nos servos? , se puder fazer um desenho onde fica as articulacoes da mascara ficaria mais facil, se puder ver o peso da mascara  tambem,  pelo que vi, eu acho que com esses servos nao vai conseguir tem que ser servos mais potentes, tipo de uns torque de 9Kg para nao forcar os servos, 

eu pensei que fosse as viseiras do capacete de moto.

Nelson

há um tempo atrás vi um video de um cara que fez um capacete desse também acho que era uma americano ele usou esses mesmo servos mg90s, mas não encontrei mais esse video e também ele não dava detalhes do esquema no video.

as hastes de sustentação ficam nas laterais e deixei sem atrito usando umas buchas pequenas e arroelas, as hastes estão bem leves mesmo a haste dos servos só pega o peso, as hastes laterais alinham a direção se eu colocar o dedo e der uma pequena ajuda, mas pequena mesmo a mascara sobe e pra descer ela desce tranquila.

vou mandar mais fotos das hastes laterais para você dar uma olhada.

como disse antes coloquei um regulador de tensão 8v ligados ao servos, deveria talvez queimar, mas na verdade tirou os ruídos dos servos e tirou a tremedeira agora estão funcionando silencioso, por enquanto ainda não queimaram 

desculpa ser repetitivo... mas estou errado que aumentando o duty cycle daria mais força e velocidade ?

Anexos

Marcos esta bem feito pretende colocar leds nos olhos da mascara, 

a pintura depois de acabado a parte eletronica voce pinta denovo.

Marcos , o duty cycle e a modulacao do PWM  que comanda o servo motor , um lado esta maior por que ele funciona um ao contrario do outro , a largura determina a posicao do servo,

no seu caso deve ser falta de torque no servo,  se tiver em duvida sobre duty cycle de uma pesquisada na internet.

o servo nao aconselho a usar 8V pois pode queimar, use no maximo 6V ou como manda as especificacoes do fabricante.

no YouTube tem sobre isso explicando.

https://www.youtube.com/watch?v=K8LjpW-QWvw

Nelson 

vou colocar leds nos olhos sim, já está funcionando os leds tirei para ajustar os servos.

no caso desse video que me mandou já tinha visto e até tentei, mas achei mais complicado por que ele não usa arduino.

valeu cara, mais uma vez muito obrigado!

Quando altera a largura do pulso , estará mudando a posição do eixo do motor. 

Se alterar a frequencia do PWM, não altera em nada - os servo motores tem alguma tolerância para essa alteração. 

Eles trabalham com a largura de pulso e não com a frequência. 

http://labdegaragem.com/profiles/blogs/tutorial-arduino-com-servomotor

Entendeu o tutorial da Adafruit ?

Estou achando que esta colocando peso excessivo para o motor, ou então a bateria não esta fornecendo corrente suficiente. 

Use uma fonte externa de 5V (ou 6V) 2A para testar os motores. 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço