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: 985

Responder esta

Respostas a este tópico

Bom dia, José Gustavo

cara obrigado pela força, eu estava com uma linha de raciocinio que aumentando pulsos e diminuindo delay iria dar mais força ao servo, mas eu estava equivocado com esse tutorial clareou mais meu raciocinio, eu estou usando uma batéria 9v 800 mah ligado a um regulador de 6v para os servos, mas vou fazer isso vou usar uma fonte 6v 2A e também trocar os servos.

mais uma vez obrigado pela força

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço