Arduino Solar Tracker

Qu'est-ce que ça fait:

Il recherche la source de lumière la plus brillante comme le soleil.

Il existe une version plus récente et meilleure de ce projet: //www.instructables.com/id/Dual-Axis-300W-IOT-Solar-Tracker/

Étape 1: Comment ça marche

Comment ça fonctionne:
J'avais fait un capteur de 4 LDR avec des feuilles entre eux

Les points blancs sont les LDR

Lorsque le bâton sur le dessus est orienté vers le soleil ou le point le plus lumineux
les quatre LDR reçoivent la même quantité de lumière sur eux.


Exemple1 lorsque la lumière est laissée en haut:
droite en haut, droite en bas, gauche en bas sont dans l'ombre
et en haut à gauche obtenir le plus de lumière

Exemple2 lorsque la lumière est au dessus
gauche et droite vers le bas sont dans l'ombre et le haut est dans la lumière

Étape 2: Liste des pièces

  • 2 x lien Ebay du servo 1, 5 $ / pièce
  • 4 x résistances dépendant de la lumière (ldr) LDR bon marché sur Ebay 0.78 $ pour 20 pcs
  • 4 x résistances 10K Résistances sur Ebay 0.78 $ pour 50pcs livraison gratuite
  • 1 x Arduino Arduino UNO Ebay link 3.5 $ livraison gratuite
  • 2 x potentiomètres 10k (la valeur n'a pas d'importance) Lien Ebay

Étape 3: La configuration

Coller juste chaud ensemble !!!

Étape 4: Le circuit

Étape 5: Le code

vous pouvez télécharger le code sur cette page

/ * ce code est écrit par geobruce
pour plus d'informations consultez mon site //xprobe.net
* /
#include // inclut la bibliothèque Servo

Servo horizontal; // servo horizontal
int servoh = 90; // support servo horizontal

Servo vertical; // servo vertical
int servov = 90; // support servo vertical

// Connexions des broches LDR
// name = analogpin;
int ldrlt = 0; // LDR en haut à gauche
int ldrrt = 1; // LDR top rigt
int ldrld = 2; // LDR en bas à gauche
int ldrrd = 3; // ldr down rigt

void setup()
{
Serial.begin (9600);
// connexions servo
// name.attacht (pin);
horizontal.attach (9);
attache verticale (10);
}

boucle vide ()
{
int lt = analogRead (ldrlt); // en haut à gauche
int rt = analogRead (ldrrt); // en haut à droite
int ld = analogRead (ldrld); // en bas à gauche
int rd = analogRead (ldrrd); // down rigt

int dtime = analogRead (4) / 20; // lire les potentiomètres
int tol = analogRead (5) / 4;

int avt = (lt + rt) / 2; // valeur moyenne supérieure
int avd = (ld + rd) / 2; // valeur moyenne en baisse
int avl = (lt + ld) / 2; // valeur moyenne restante
int avr = (rt + rd) / 2; // valeur moyenne droite

int dvert = avt - avd; // vérifie la différence de haut en bas
int dhoriz = avl - avr; // vérifie la diffirence og left et rigt

if (-1 * tol> dvert || dvert> tol) // vérifier si la différence est dans la tolérance sinon changer l'angle vertical
{
si (avt> avd)
{
servov = ++ servov;
if (servov> 180)
{
servov = 180;
}
}
sinon si (avt <avd)
{
servov = --servov;
si (servov <0)
{
servov = 0;
}
}
vertical.write (servov);
}

if (-1 * tol> dhoriz || dhoriz> tol) // vérifier si la différence est dans la tolérance sinon changer l'angle horizontal
{
si (avl> avr)
{
servoh = --servoh;
si (servoh <0)
{
servoh = 0;
}
}
sinon si (avl <avr)
{
servoh = ++ servoh;
si (servo> 180)
{
servoh = 180;
}
}
sinon si (avl == avr)
{
// rien
}
horizontal.write (servoh);
}
retard (dtime);
}

Pièces jointes

  • solar_tracker__english_.pde Télécharger

Articles Connexes