Paso 9: código
Les dejo el código de control, espero que no me he perdido nada, porque el editor volvió mi todo jaja XD.
Seguidor Solar Motor de paso a paso por hectorhhg
#include //Integrating biblioteca para tratar Stepper.h motores
#include //Integrating biblioteca de math.h de diseño para las operaciones matemáticas básicas
Declaración de constantes
#define motorStephor 200 //steps para motor horizontal
#define motorStepver 200 //steps para el motor vertical
Digitales pins
#define motor1hor 6
#define motor2hor 7
#define motor1ver 8
#define motor2ver 9
Variables
int prom; Promedio de cuatro LDR
pyr int; Fotodiodo BPW34
int h = 60; Pasos ejecutados por el motor horizontal
int v = 5; Pasos ejecutados por el motor vertical
int ltsensor; Valor de la LDR izquierda superior
int rtsensor; Valor de la LDR derecho superior
int rdsensor; Valor de la parte inferior derecha LDR
int ldsensor; Valor de la parte inferior izquierda LDR
sen int = 50; Sensibilidad
int dil; Promedio conjunto de LDR izquierda
int dit; Promedio conjunto de top LDR
dir int; Promedio conjunto de derecho de la LDR
int lo hizo; Medio conjunto de la parte inferior de la LDR
int diff; Diferencia entre LDR por encima del fondo
int diff2; Diferencia entre LDR de izquierda a derecha
int pup; superior del interruptor
int pdown; interruptor de baja
Paso a paso horStep (motorStephor, motor1hor, motor2hor);
Paso a paso paso a paso verStep (motorStepver, motor1ver, motor2ver);
Inicialización del programa
void setup)
{
horStep.setSpeed (30); Motor horizontal de RPM
verStep.setSpeed (10); Motor vertical de RPM
Puerto serie
Serial.Begin(9600);
Configuración de pines
pinMode (pyr, entrada);
pinMode (ltsensor, entrada);
pinMode (rtsensor, entrada);
pinMode (ldsensor, entrada);
pinMode (rdsensor, entrada);
pinMode (pup, entrada);
pinMode (pdown, entrada);
}
void loop)
{
hacer
{
Pyr = analogRead(0); Lectura de entradas analógicas
ltsensor = analogRead (1) * 1.022; (constante es para calibrar la LDR)
rtsensor = analogRead (2) * 1.007;
ldsensor = analogRead(3);
rdsensor = analogRead (4) * 1.013;
perrito = digitalRead (3); Lectura de interruptores
pdown = digitalRead(4);
prom = (ltsensor + ldsensor + rtsensor + rdsensor) / 4; LDR promedio
DIT = (ltsensor + rtsensor) / 2; Sensores de promedio para arriba
= (ldsensor + rdsensor) / 2; Sensores de media hacia abajo
diff = (dit - lo); Diferencia entre el nivel de radiación
Delay (50);
Si ((pyr==0) & &(pup==HIGH) & & (prom < = 8) || (Pyr==0) & &(pdown==HIGH) & & (prom < = 8)) //If el valor de pyr es cero y la media de los sensores es igual o inferior a 8 y los interruptores tienen la gama de
MOV(); función de MOV
}
mientras que ((pyr == 0) & &(pup==HIGH) & & (prom < = 8) || (Pyr==0) & &(pdown==HIGH) & & (prom < = 8));
Si (-1 * sen > diff || diff > sen) //If la diferencia medida entre el sistema de sensores es mayor o menor que el valor de sensibilidad
{
if(DIT < DID) //If el valor medio de los sensores de arriba es más pequeño que los sensores de la parte inferior
{
Si (pdown == HIGH)
{
verStep.step (0); Parar motor vertical
Delay (10);
}
otra cosa
Si (pdown == LOW)
{
verStep.step (v); Girar motor arriba
Delay (50);
}
}
otra cosa if(dit > did) //If el valor medio de los sensores de la parte inferior es más pequeño que los anteriores sensores
{
Si (cachorro == HIGH)
{
verStep.step (0); Parar motor vertical
Delay (10);
}
else if (cachorro == LOW)
{
verStep.step (-v); Girar motor abajo
Delay (50);
}
}
otro //any otro caso
{
verStep.step (0); Parar motor vertical
Delay (10);
}
}
Delay (10);
Pyr = analogRead (0); Lecturas del sensor nuevo para posible cambio
ltsensor = analogRead (1) * 1.022;
rtsensor = analogRead (2) * 1.007;
ldsensor = analogRead(3);
rdsensor = analogRead (4) * 1.013;
DIL = (ltsensor + ldsensor) / 2; Sensores de media izquierda
DIR = (rtsensor + rdsensor) / 2; Derecha media sensores
diff2 = (dil - dir); Diferencia entre el nivel de radiación
Delay (50);
Si (-1 * sen > diff2 || diff2 > sen) //If la diferencia medida entre el sistema de sensores es mayor o menor que el valor de sensibilidad
{
if(DIL < dir) //If el promedio del sensor izquierdo es más pequeño que el sensor derecho
{
horStep.step (h); A la derecha motor
Delay (10);
}
otra cosa
if(DIL > dir) //If el promedio del sensor izquierdo es más grande que el sensor derecho
{
horStep.step (-h); Apague el motor izquierda
Delay (10);
}
otro //any otro caso
{
horStep.step (0); Parar motor horizontal
Delay (10);
}
}
Delay(10);
}
"función mov"
mov vacío)
{
Si (cachorro == HIGH)
{
verStep.step (72); Subir 72 pasos (son los pasos para cambiar de posición una vez ocultan el sol)
Delay (50);
}
else if (pdown == HIGH)
{
verStep.step-(72); Baje 72 pasos
Delay (50);
}
Delay (10);
}