مشروع Arduino لتتبع الطاقة الشمسية ثنائي المحور باستخدام محركات LDR و Servo

أهلا ومرحبا بكم في tech-hme. في هذا المشروع ، سوف تتعلم كيفية إنشاء مشروع Arduino لتتبع الطاقة الشمسية ثنائي المحور باستخدام LDR و Servo Motors بطريقة خطوة بخطوة. في هذا المشروع ، سنستخدم بعض المستشعرات الحساسة للضوء مثل (LDR) لتتبع ضوء الشمس وتوجيه الألواح الشمسية نحو المناطق التي تزيد من كفاءتها. لقد قسمت المقالة إلى 7 أقسام على النحو التالي: 

 

مخطط المشروع 


قم بتوصيل دبوس 5 فولت من Arduino إلى الصف الأفقي السفلي من اللوح.
    وبالمثل ، قم بتوصيل دبوس GND من Arduino بصف أفقي سفلي ثانٍ من اللوح.
    قم بتمديد صفوف 5 فولت و GND إلى الصفوف الأفقية العلوية للوح على التوالي.
    قم الآن بتوصيل دبابيس الطاقة لكل من المحرك المؤازر الرأسي والأفقي بـ 5 فولت.
    وبالمثل ، قم بتوصيل دبوس GND لمحرك المؤازرة الأفقي والرأسي بالأرض.
    الآن ، قم بتوصيل دبوس الإشارة للمحرك الرأسي المؤازر بالرقم الرقمي رقم 10 في Arduino.
    مرة أخرى ، قم بتوصيل دبوس الإشارة الخاص بمحرك المؤازرة الأفقي بالرقم الرقمي رقم 9 في Arduino.
    قم بتوصيل أحد طرفي كل من مقاييس الجهد بالطرف الأرضي والأطراف الطرفية الأخرى لكلا مقياس الجهد بـ VCC 5 فولت.
    الآن ، قم بتوصيل جميع محطات LDRs أحادية الطرف بجهد 5 فولت والأطراف الأخرى بالأرض من خلال مقاومات 10 كيلو أوم.
    لنقم بتوصيل دبوس الماسحة الخاص بمقياس الجهد -1 واحد بالدبوس التناظري A4 و A5 بدبوس ممسحة آخر من مقياس الجهد -2.
    قم بتوصيل نقطة مقسم الجهد السفلي الأيسر LDR بـ A1 دبوس من Arduino.
    مرة أخرى ، قم بتوصيل نقطة مقسم الجهد العلوي الأيسر LDR إلى دبوس A0 من Arduino.
    وبالمثل ، يشير مقسم الجهد العلوي الأيمن LDR إلى دبوس A2.
    أخيرًا ، قم بتوصيل نقطة مقسم الجهد السفلي الأيمن من LDR بدبوس A3 من Arduino.

كود اردوينو
#include <Servo.h> 

Servo horizontal; // horizontal servo
int servoh = 180;
int servohLimitHigh = 175;
int servohLimitLow = 5;
// 65 degrees MAX

Servo vertical; // vertical servo
int servov = 45;
int servovLimitHigh = 60;
int servovLimitLow = 1;

// LDR pin connections
// name = analogpin;
int ldrlt = A0; //LDR top left - BOTTOM LEFT <--- BDG
int ldrrt = A3; //LDR top rigt - BOTTOM RIGHT
int ldrld = A1; //LDR down left - TOP LEFT
int ldrrd = A3; //ldr down rigt - TOP RIGHT

void setup(){
horizontal.attach(9);
vertical.attach(10);
horizontal.write(180);
vertical.write(45);
delay(2500);
}
void loop() {
int lt = analogRead(ldrlt); // top left
int rt = analogRead(ldrrt); // top right
int ld = analogRead(ldrld); // down left
int rd = analogRead(ldrrd); // down right
int dtime = 10; int tol = 90; // dtime=diffirence time, tol=toleransi
int avt = (lt + rt) / 2; // average value top
int avd = (ld + rd) / 2; // average value down
int avl = (lt + ld) / 2; // average value left
int avr = (rt + rd) / 2; // average value right
int dvert = avt - avd; // check the diffirence of up and down
int dhoriz = avl - avr;// check the diffirence og left and rigt

if (-1*tol > dvert || dvert > tol)
{
if (avt > avd)
{
servov = ++servov;
if (servov > servovLimitHigh)
{servov = servovLimitHigh;}
}
else if (avt < avd)
{servov= --servov;
if (servov < servovLimitLow)
{ servov = servovLimitLow;}
}
vertical.write(servov);
}
if (-1*tol > dhoriz || dhoriz > tol) // check if the diffirence is in the tolerance else change horizontal angle
{
if (avl > avr)
{
servoh = --servoh;
if (servoh < servohLimitLow)
{
servoh = servohLimitLow;
}
}
else if (avl < avr)
{
servoh = ++servoh;
if (servoh > servohLimitHigh)
{
servoh = servohLimitHigh;
}
}
else if (avl = avr)
{
delay(5000);
}
horizontal.write(servoh);
}

delay(dtime);

}
 


 



 

2 تعليقات

أحدث أقدم