Olá galera, estou montando um projeto de uma placa solar com 2 ldr's para o motor se movimentar mas ao ler os valores o motor só gira para direita. estou usando o driver drv8825 e um motor de passo ktc-kt23-394.  essa é a programação.

  

//DRIVER E MOTOR
int M0 = 4;
int M1 = 5;
int M2 = 6;
int DIR = 10;
int STEP = 11;
int PPR = 200;


//LDRS
int LDR1 = A0;
int LDR2 = A1;
int valorLDR1 = 0;
int valorLDR2 = 0;;

void setup()
{
pinMode(M0, OUTPUT);
pinMode(M1, OUTPUT);
pinMode(M2, OUTPUT);
pinMode(DIR, OUTPUT);
pinMode(STEP, OUTPUT);
Serial.begin(9600);
}

void loop()
{
FULL();
int valorLDR1 = analogRead(LDR1);
int valorLDR2 = analogRead(LDR2);

if (valorLDR1 > valorLDR2 && valorLDR1 - valorLDR2 > 100)
{
DIREITA();
}

if (valorLDR2 > valorLDR1 && valorLDR2 - valorLDR1 > 100)
{
ESQUERDA();
}

}


void FULL()
{
PPR = 200;
digitalWrite(M0, LOW);
digitalWrite(M1, LOW);
digitalWrite(M2, LOW);
}

//SENTIDOS MOTOR
void horario()
{
digitalWrite(DIR, LOW);
}

void a_horario()
{
digitalWrite(DIR, HIGH);
}

//PASSO DO MOTOR
void passo()
{
digitalWrite(STEP, HIGH);
delay(100);
digitalWrite(STEP, LOW);
delay(100);
}

//MOTOR PARADO
void motorparado()
{
digitalWrite(STEP, LOW);
}

//GIRAR PARA DIREITA
void DIREITA()
{
horario();
passo();
}

//GIRAR PARA ESQUERDA
void ESQUERDA()
{
a_horario();
passo();
}

Exibições: 359

Responder esta

Respostas a este tópico

Primeira tentantiva:

De uma organizada com parêntesis nas linhas:

"if (valorLDR1 > valorLDR2 && valorLDR1 - valorLDR2 > 100)"

Algo como:

if ((valorLDR1 > valorLDR2) && ((valorLDR1 - valorLDR2) > 100))

Toda linguagem tem uma rígida na ordem das operações. O nome disso é precedência. Os parêntesis ajudam a definir a ordem das operações.

Mas também uma ligação errada do pino dir ou outros fatores podem estar atrapalhando.

O pino que controla o sentido de rotação do motor é o pino DIR. No seu caso é o pino 10 do Arduino. 

Tutorial completo do driver DRV8825 (meu programa gira nos dois sentidos) - veja no video ;

https://jgamblog.wordpress.com/2016/09/24/tutorial-arduino-drv8825-...

O problema deve estar nos sensores LDR, meça as tensões nos sensores.  

if (valorLDR1 > valorLDR2 && valorLDR1 - valorLDR2 > 100)
{
DIREITA();
}

if (valorLDR2 > valorLDR1 && valorLDR2 - valorLDR1 > 100)
{
ESQUERDA();
}

Para testar o sentido do  motor , use a rotina  DIREITA();  depois a rotina ESQUERDA();

Faça as correções sugeridas pelo Eduardo. 

Muito obrigado pela ajuda!! Mas consegui solucionar o meu problema, era apenas um fio que não estava funcionando.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço