POWER SERVO COM ATTINY85

Projetos de arduino
SIDNEI77
Membro
Mensagens: 3
Registrado em: 24/Ago/2018, 17:55

POWER SERVO COM ATTINY85

Mensagem por SIDNEI77 » 01/Mai/2020, 16:45

E estou tentando fazer um super servo com o microcontrolador attiny85 nao tenho muito conhecimento em programação , pedi para um amigo programar o attiny85 , só que ele esta com um simples problema que e o seguinte .

Quando eu desligo o sistema Fonte de alimentação e depois e religo o super servo volta para a posição zero, o certo seria ele ficar na posição do servo teste


Seguem o link do video e o codigo do attyiny85

https://youtu.be/tDeEXzKxIvg



se alguen poder me ajudar eu agradeço blz.
==================================================================

Código:

#include <PID_v1.h>

#define Potenciometro A2 // pot 10k
#define Saida_1 1 // saída pwm 1 (direita)
#define Saida_2 0 // saída pwm 2 (Esquerda)
#define Canal_Radio 3 // entrada PWM (Radio)


double Pk1 = 4; //Velocidade de resposta do PID
double Ik1 = 0;
double Dk1 = 0;

double Setpoint1, Leitura_Potenciometro, PWM1, PWM2; // Variaveis PID

PID PID1(&Leitura_Potenciometro, &PWM1, &Setpoint1, Pk1, Ik1 , Dk1, DIRECT); // PID Setup

volatile unsigned long Tempo_Canal;
volatile boolean done;
volatile boolean Valida_Sinal = false;

unsigned long start;

int pot;

unsigned long currentMillis;

long previousMillis = 0; // set up timers
long interval = 20; // time constant for timers

int TMax_Radio = 1700,
TMin_Radio = 1300;// Tempo de radio varia de 1000 mili segundos a 2000 milisegundos






void setup()
{
pinMode(Canal_Radio, INPUT_PULLUP);
pinMode(Potenciometro, INPUT);
pinMode(Saida_1,OUTPUT);
pinMode(Saida_2,OUTPUT);
//attachInterrupt(0, timeit, CHANGE);


PID1.SetMode(AUTOMATIC); // PID Setup - trousers SERVO
PID1.SetOutputLimits(-255, 255);
PID1.SetSampleTime(20);

}

void loop()
{
Tempo_Canal = pulseIn(Canal_Radio,HIGH);



if (Tempo_Canal > 0 )
{
done = true;
Valida_Sinal = true;
if (Tempo_Canal < TMin_Radio )
TMin_Radio = Tempo_Canal;

if (Tempo_Canal > TMax_Radio )
TMax_Radio = Tempo_Canal;


}
else
{
done = false;
Valida_Sinal = false;
}

currentMillis = millis();
if (currentMillis - previousMillis >= interval)
{

previousMillis = currentMillis;

pot = analogRead(Potenciometro);



Setpoint1 = map(Tempo_Canal,TMin_Radio,TMax_Radio,-255,255);
Leitura_Potenciometro = map(pot,0,1023,-255,255);
PID1.Compute();


if (done == true )
{
if (PWM1 > 0)
{
if (Valida_Sinal == true)
{
analogWrite(Saida_1, PWM1);
analogWrite(Saida_2, 0);
Valida_Sinal = false;
}
else
{
analogWrite(Saida_1, 0);
analogWrite(Saida_2, 0);
}

}
else
if (PWM1 < 0)
{
if (Valida_Sinal == true )
{
PWM2 = abs(PWM1);
analogWrite(Saida_1, 0);
analogWrite(Saida_2, PWM2);
}
else
{
analogWrite(Saida_1, 0);
analogWrite(Saida_2, 0);
}
}
}
else
{
analogWrite(Saida_1, 0);
analogWrite(Saida_2, 0);
}
if (!done)
return;
done = false;

}

}

Responder