أهلا ومرحبا بكم في 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);
}
جيد حدا
ردحذفجيدا جدا
ردحذف