Seguidor Solar con fenor en paso + Arduino (9 / 11 steg)
Steg 9: Código
Les dejo el código de kontroll, espero ingen haber omitido nada, ya que el redaktör mig revolvió todo jaja XD.
Stepper Motor Solar Tracker av HHG
#include //Integración de la librería Stepper.h para manejar fenor en pasos
#include //Integración de la librería math.h para diseño de operaciones matemáticas básicas
Declaración de constantes
#define motorStephor 200 //Número de pasos del motor horisontella
#define motorStepver 200 //Número de pasos del motor vertikala
USO de las inlägg digitales de Arduino
#define motor1hor 6
#define motor2hor 7
#define motor1ver 8
#define motor2ver 9
Declaración de variabler
int prom; Promedio de los cuatroLDR
int pyr; Valor del fotodiodo
int h = 60. Pasos ejecutados por el motor horisontella
int v = 5; Pasos ejecutados por el motor vertikala
int ltsensor; Valor del LDR överlägsen izquierdo
int rtsensor; Valor del LDR överlägsen derecho
int rdsensor; Valor del LDR sämre izquierdo
int ldsensor; Valor del LDR sämre derecho
int sen = 50; Sensibilidad
int dil; Promedio del conjunto de LDR izquierdo
int dit; Promedio del conjunto de LDR arriba
int dir; Promedio del conjunto de LDR derecho
int gjorde; Promedio del conjunto de LDR abajo
int diff; Diferencia entre los LDR de arriba con los abajo
int diff2; Diferencia entre los LDR de la izquierda con los de la Izquierda
int pup; Interruptor superior
int pdown; Interruptor inferior
Stepper horStep (motorStephor, motor1hor, motor2hor); Inicia la librería Stepper
Stepper verStep (motorStepver, motor1ver, motor2ver);
Inicialización del programa
Ogiltiga inställningar)
{
horStep.setSpeed (30); RPM del motor horisontella
verStep.setSpeed (10). RPM del motor vertikala
Inicialización del puerto seriell COM
Serial.BEGIN(9600);
Configuración de tallar como inlägg
pinMode (pyr, ingång);
pinMode (ltsensor, ingång);
pinMode (rtsensor, ingång);
pinMode (ldsensor, ingång);
pinMode (rdsensor, ingång);
pinMode (valp, mata);
pinMode (pdown, ingång);
}
Inicialización del bucle
Ogiltig loop)
{
//Comienza la estructura de kontroll repetitiva gör-medan
{
pyr = analogRead(0); Lectura de las inlägg analógicas
ltsensor = analogRead (1) * 1.022; (La constante es para calibrar las fotorresistencias)
rtsensor = analogRead (2) * 1.007;
ldsensor = analogRead(3);
rdsensor = analogRead (4) * 1.013;
valp = digitalRead (3). Lectura de los interruptores
pdown = digitalRead(4);
prom = (ltsensor + ldsensor + rtsensor + rdsensor) / 4; Promedio de los cuatro sensores
dit = (ltsensor + rtsensor) / 2; Promedio de los sensores de arriba
= (ldsensor + rdsensor) / 2; Promedio de los sensores de abajo
diff = (dit - gjorde); Diferencia entre el nivel de radiación
fördröjning (50);
om ((pyr==0) & &(pup==HIGH) & & (prom < = 8) || (pyr==0) & &(pdown==HIGH) & & (prom < = 8))
SI el valor de pyr es cero y el promedio de los sensores es igual o menor a 8 y los interruptores tengan el rango
MOV(); Ejecutar la función "mov"
}
medan ((pyr == 0) & &(pup==HIGH) & & (prom < = 8) || (pyr==0) & &(pdown==HIGH) & & (prom < = 8));
Mientras el valor de pyr havet cero y el promedio de los sensores havet igual o menor en 8 y los interruptores tengan el rango, sigue ejecutándose el bucle
om (-1 * sen > diff || diff > sen) //Si la diferencia medida entre el conjunto de sensores es borgmästare o menor al valor de la sensibilidad
{
IF(dit < DID) //Si el valor medio de los sensores de arriba es más pequeña que la de los sensores de abajo
{
om (pdown == hög) //Si pdown se activa
{
verStep.step (0); Parar el motor sv el sentido vertikala
fördröjning (10).
}
annat if (pdown == låg) //Si pdown esta inactivo
{
verStep.step (v). Gira el motor hacia arriba
fördröjning (50);
}
}
annat if(dit > did)
SI el valor medio de los sensores de abajo es más pequeña que la de los sensores de arriba
{
om (pup == hög) //Si valp se activa
{
verStep.step (0); Para el motor sv el sentido vertikala
fördröjning (10).
}
annars om (pup == låg) //Si pup esta inactivo
{
verStep.step (-v); Gira el motor hacia abajo
fördröjning (50);
}
}
annat //Para cualquier otro caso
{
verStep.step (0); Parar el motor sv el sentido vertikala
fördröjning (10).
}
}
fördröjning (10).
pyr = analogRead (0); Lectura de los sensores nuevamente por posible cambio
ltsensor = analogRead (1) * 1.022;
rtsensor = analogRead (2) * 1.007;
ldsensor = analogRead(3);
rdsensor = analogRead (4) * 1.013;
DIL = (ltsensor + ldsensor) / 2; Promedio de los sensores de la izquierda
dir = (rtsensor + rdsensor) / 2; Promedio de los sensores de la Izquierda
diff2 = (dil - dir); Diferencia entre el nivel de radiación
fördröjning (50);
om (-1 * sen > diff2 || diff2 > sen) //Si la diferencia medida entre el conjunto de sensores es borgmästare o menor al valor de la sensibilidad
{
IF(DIL < dir) //Si el valor medio de los sensores de la izquierda es más pequeña que la de los sensores de la Izquierda
{
horStep.step (h); Girar motor hacia la Izquierda
fördröjning (10).
}
annat if(dil > dir)
SI el valor medio de los sensores de la izquierda es más grande que la de los sensores de la Izquierda
{
horStep.step (-h); Girar el motor hacia la izquierda
fördröjning (10).
}
annat //Para cualquier otro caso
{
horStep.step (0); Parar el motor sv el sentido horisontella
fördröjning (10).
}
}
Delay(10);
}
Función "mov"
void mov)
{
om (pup == hög) //Si pup está activo
{
verStep.step (72); Gira 72 pasos hacia arriba
fördröjning (50);
}
annat if (pdown == hög) //Si pdown está activo
{
verStep.step (-72); Gira 72 pasos hacia abajo
fördröjning (50);
}
fördröjning (10).
}