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();
}
Tags:
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.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por