Alguém poderia me fornecer um código que faça o teste em 4 Sensores LDR e posicione um motor servo conforme o que apresente a maior luminosidade. Obs.(O projeto vai ter somente um motor e vai somente fazer o movimento para cima e para baixo).

Tentei adaptar um código que eu encontrei na internet, porem não sei como poderia fazer o teste nos 4 sensores no mesmo if, nesse código abaixo testo somente 2 ldrs

#include <Servo.h>// Inclui biblioteca de servos

Servo servoRotacao;// Cria variaveis para controlar servos

int ldr01 = A2;// Ldr 01 pino 2
int ldr02 = A3;// Ldr 02 pino 3
int ldr03 = A0;// Ldr 03 pino 4
int ldr03 = A1;// Ldr 04 pino 5

int valRotacao = 90;// Posicao inicial dos servos

int val01; // Variaveis para pegar valor analogico dos pinos
int val02; // Variaveis para pegar valor analogico dos pinos
int val03; // Variaveis para pegar valor analogico dos pinos
int val04; // Variaveis para pegar valor analogico dos pinos

int delayMovimento= 100;// Tempo de delay dos servos

void setup()
{
servoRotacao.attach(10);// Atribui ao pino 6 o servo rotacao

}

void loop()
{
val01 = analogRead(ldr01); // Faz leitura analogica do ldr 01 de acordo com a incidencia de luz
val02 = analogRead(ldr02);// Faz leitura analogica do ldr 02 de acordo com a incidencia de luz
val03 = analogRead(ldr03);// Faz leitura analogica do ldr 03 de acordo com a incidencia de luz
val04 = analogRead(ldr04); // Faz leitura analogica do ldr 04 de acordo com a incidencia de luz


if (val01 - val02 > 2 || val01 - val02 < -2)
// Comparando os LDR's da 01 e 02 com threshold de "2" para evitar tremer os servos (jitter)

{
if (val01 > val02 && valRotacao > 0)
// Luz vindo da 01, prepara para virar servo para 02 (valor de travamento menor que 0)
{
valRotacao--;
// Decrementa variavel
}
if (val01> val02 && valRotacao < 180)
// Luz vindo da 02, prepara para virar servo para 02 (valor de travamento maior que 180)
{
valRotacao++;
// Incrementa variavel
}

}

servoRotacao.write(valRotacao);// Coloca a posicao do servo de acordo com valor calculado

delay(delayMovimento);// Espera o servo se mover até a posicao
}

Exibições: 243

Responder esta

Respostas a este tópico

Quais valores dos outros LDRs deseja testar ?

Traduzindo :

if (val01 - val02 > 2 || val01 - val02 < -2) 

valRotacao--

Se o valor do LDR1  menos o valor de LDR2 for maior do que 2  OU (OR)  valor de LDR1 menos valor de LDR2 for menor do que 2 , decremente a  Rotação 

if (val01> val02 && valRotacao < 180) 

valRotacao++; 

Se o valor do LDR1 for maior do que valor de LDR2 E (AND)  Rotação for menor do que 180, incremente Rotação 

https://www.arduino.cc/en/Reference/Boolean

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço