Arduino แผงควบคุมแสงอาทิตย์ตามแสงอาทิตย์
ส่วนประกอบที่จำเป็น:
- เซอร์โวมอเตอร์ (sg90)
- แผงเซลล์แสงอาทิตย์
- Arduino Uno
- LDR ของ X 2 (Light Resendent Resistor)
- ตัวต้านทาน 10K X 2
- แบตเตอรี่ (6 ถึง 12V)
มันทำงานอย่างไร:
ในโครงการนี้ LDR กำลังทำงานเป็นเครื่องตรวจจับแสง ก่อนที่เราจะเข้าสู่รายละเอียดเราจะต้องทำความเข้าใจกับผลงานของ LDR LDR (Light Resendent Resistor)หรือที่เรียกว่าResistor Resistorคืออุปกรณ์ที่ไวต่อแสง ความต้านทานลดลงเมื่อแสงลดลงและนั่นคือเหตุผลที่มันใช้บ่อยในวงจรตรวจจับความเข้มหรือแสง ตรวจสอบต่างๆวงจรบนพื้นฐานของ LDR ที่นี่
LDR ทั้งสองตัวถูกวางไว้ที่แผงเซลล์แสงอาทิตย์ทั้งสองด้านและServo Motorใช้หมุนแผงพลังงานแสงอาทิตย์ เซอร์โวจะเลื่อนแผงโซลาร์เซลล์ไปยัง LDR ที่มีความต้านทานต่ำจะหมายถึง LDR ที่มีแสงลดลงซึ่งจะทำให้แสงต่อไป และถ้ามีจำนวนแสงเท่ากันทั้ง LDR จากนั้น servo จะไม่หมุน เซอร์โวจะพยายามขยับแผงเซลล์แสงอาทิตย์ในตำแหน่งที่ทั้ง LDR จะมีค่าความต้านทานเดียวกันซึ่งหมายความว่าปริมาณของแสงเท่ากันจะลดลงทั้งตัวต้านทานและถ้าความต้านทานหนึ่งของ LDR เปลี่ยนไปแล้วจะหมุนไปทาง LDR ความต้านทานต่ำ ตรวจสอบวิดีโอสาธิตที่ท้ายบทความนี้
วิธีการสร้างต้นแบบ:
ในการสร้างต้นแบบคุณจะต้องทำตามขั้นตอนด้านล่าง:
ขั้นตอนที่ 1:
ก่อนอื่นให้เอากระดาษแข็งแผ่นเล็ก ๆ และทำเป็นรูที่ปลายข้างหนึ่ง เราจะใส่สกรูเข้าไปเพื่อแก้ไขในเซอร์โวในภายหลัง
ขั้นตอนที่ 2:
ตอนนี้แก้ไขสองชิ้นเล็ก ๆ ของกระดาษแข็งกับแต่ละอื่น ๆ ในรูปร่าง V ด้วยความช่วยเหลือของกาวหรือปืนร้อนและสถานที่แผงเซลล์แสงอาทิตย์ในนั้น
ขั้นที่ 3:
จากนั้นแนบด้านล่างของรูป V กับปลายอีกด้านของกระดาษแข็งชิ้นเล็ก ๆ ที่คุณทำเป็นรูในขั้นตอนแรก
ขั้นตอนที่ 4:
ตอนนี้ใส่สกรูลงในรูที่คุณทำไว้ในแผ่นการ์ดและใส่เข้าไปในรูที่เซอร์โว สกรูมาพร้อมกับเซอร์โวมอเตอร์เมื่อคุณซื้อ
ขั้นตอนที่ 5:
วางเซอร์โวลงบนกระดาษแข็งอีกชิ้นหนึ่ง ขนาดของกระดาษแข็งควรมีขนาดใหญ่พอเพื่อให้คุณสามารถวาง Arduino Uno, breadboard และแบตเตอรี่ได้
ขั้นตอนที่ 6:
แนบ LDR ที่ด้านข้างของแผงเซลล์แสงอาทิตย์ด้วยกาว ตรวจสอบให้แน่ใจว่าคุณได้ต่อสายไฟกับขาของ LDR แล้ว คุณจะต้องเชื่อมต่อเหล่านี้กับ resistors ในภายหลัง
ขั้นตอนที่ 7:
ตอนนี้วาง Arduino, แบตเตอรี่และ breadboard บนกระดาษแข็งและทำการเชื่อมต่อตามที่อธิบายไว้ในแผนภาพวงจรและส่วนคำอธิบายด้านล่าง ต้นแบบสุดท้ายจะแสดงด้านล่าง
แผนผังวงจรและคำอธิบาย:
คำอธิบายโค้ด:
รหัสสำหรับเครื่องติดตามแผงโซลาร์เซลล์ของ Arduinoนี้เป็นเรื่องง่ายและสามารถอธิบายได้ด้วยความคิดเห็น ก่อนอื่นเราจะรวมไลบรารีสำหรับเซอร์โวมอเตอร์ จากนั้นเราจะเริ่มต้นตัวแปรสำหรับตำแหน่งเริ่มต้นของเซอร์โวมอเตอร์ หลังจากนั้นเราจะเริ่มต้นตัวแปรที่จะอ่านจากเซ็นเซอร์ LDR และเซอร์โว
#include <Servo.h> // รวมทั้งไลบรารีของเซอร์โวมอเตอร์
Servo sg90; / / การเริ่มต้นตัวแปรสำหรับ servo ชื่อ sg90
int initial_position = 90; // ประกาศตำแหน่งเริ่มต้นที่ 90
int LDR1 = A0; // ขาที่เชื่อมต่อ LDR
int LDR2 = A1; // ขาที่เชื่อมต่อ LDR
ข้อผิดพลาด int = 5; / / การเริ่มต้นตัวแปรสำหรับข้อผิดพลาด
int servopin = 9;
sg90.atach (servopin)จะอ่าน servo จาก pin 9 ของ Arduino ต่อไปเราจะตั้งค่าหมุด LDR เป็นขาเข้าเพื่อให้เราสามารถอ่านค่าจากเซ็นเซอร์และเลื่อนแผงเซลล์แสงอาทิตย์ตามที่ จากนั้นเราจะตั้งมอเตอร์เซอร์โวไว้ที่ 90 องศาซึ่งเป็นตำแหน่งเริ่มต้นของเซอร์โว
การตั้งค่าเป็นโมฆะ ()
{
sg90.attach (servopin); // ยึดเซอร์โวบนพิน 9
pinMode (LDR1, INPUT); // การสร้างขา LDR เป็นอินพุต
pinMode (LDR2, INPUT);
sg90.write (initial_position); // เลื่อนเซอร์โวที่ 90 องศา
ล่าช้า (2000); // ให้ความล่าช้า 2 วินาที
}
จากนั้นเราจะอ่านค่าจาก LDRs และจะบันทึกใน R1 และ R2 จากนั้นเราจะใช้ความแตกต่างระหว่าง LDR สองตัวเพื่อย้ายเซอร์โวตามลำดับ หากความแตกต่างระหว่างพวกเขาจะเป็นศูนย์นั่นหมายความว่าปริมาณของแสงเท่ากันจะลดลงทั้ง LDR ดังนั้นแผงเซลล์แสงอาทิตย์จะไม่เคลื่อนที่ เราได้ใช้ตัวแปรชื่อข้อผิดพลาดและค่าของมันคือ 5 การใช้ตัวแปรนี้ก็คือถ้าความแตกต่างระหว่างสอง LDRs จะอยู่ภายใต้ 5 แล้ว servo จะไม่ย้าย ถ้าเราไม่ทำเช่นนี้ servo จะหมุนเวียนอยู่ และถ้าความแตกต่างมากกว่าค่าความผิดพลาด (5) เซอร์โวจะเลื่อนแผงโซลาร์เซลล์ไปในทิศทางของ LDR ซึ่งไฟตกลง ตรวจสอบรหัสฉบับสมบูรณ์และวิดีโอสาธิตด้านล่าง
int R1 = analogRead (LDR1); // ค่าอ่านจาก LDR 1
int R2 = analogRead (LDR2); // อ่านค่าจาก LDR 2
int diff1 = abs (R1 - R2); // การคำนวณความแตกต่างระหว่าง LDR
int diff2 = abs (R2 - R1);
if ((diff1 <= error) || (diff2 <= ข้อผิดพลาด)) {
/ / ถ้าความแตกต่างอยู่ภายใต้ข้อผิดพลาดแล้วไม่ทำอะไรเลย
} else {
ถ้า (R1> R2)
{
initial_position = - แรกเริ่ม; // เลื่อนเซอร์โวไปทาง 0 องศา
}
ถ้า (R1 <R2)
{
initial_position = ++ initial_position; // เลื่อนเซอร์โวไปทาง 180 องศา
}
}
ดังนั้นนี่คือวิธีที่คุณสามารถสร้างเครื่องมือติดตามแผงโซลาร์เซลล์ที่เรียบง่ายซึ่งจะเคลื่อนที่ไปทางแสงอย่างดอกทานตะวันโดยอัตโนมัติ ที่นี่เราได้ใช้แผงเซลล์แสงอาทิตย์พลังงานต่ำเพื่อลดน้ำหนักถ้าคุณกำลังวางแผนที่จะใช้พลังงานสูงหรือแผงเซลล์แสงอาทิตย์หนักแล้วคุณต้องเลือกมอเตอร์เซอร์โวตาม
รหัส
#include <Servo.h> // รวมทั้งไลบรารีเซอร์โวเซอร์โว
เซอร์ sg90; / / การเริ่มต้นตัวแปรสำหรับ servo ชื่อ sg90
int initial_position = 90; / ประกาศตำแหน่งเริ่มต้นที่ 90
int LDR1 = A0; // ขาที่ LDR เชื่อมต่อ
int LDR2 = A1; // ขาที่ LDR เชื่อมต่อ
ข้อผิดพลาด int = 5; // เริ่มต้นตัวแปรสำหรับข้อผิดพลาด
int servopin = 9;
การตั้งค่าเป็นโมฆะ ()
{
เซอร์ sg90; / / การเริ่มต้นตัวแปรสำหรับ servo ชื่อ sg90
int initial_position = 90; / ประกาศตำแหน่งเริ่มต้นที่ 90
int LDR1 = A0; // ขาที่ LDR เชื่อมต่อ
int LDR2 = A1; // ขาที่ LDR เชื่อมต่อ
ข้อผิดพลาด int = 5; // เริ่มต้นตัวแปรสำหรับข้อผิดพลาด
int servopin = 9;
การตั้งค่าเป็นโมฆะ ()
{
sg90.attach (servopin); // ติดตั้งเซอร์โวบน pin 9
pinMode (LDR1, INPUT); / / การทำ PIN LDR เป็น input
pinMode (LDR2, INPUT);
sg90.write (initial_position); / / ย้ายเซอร์โวที่ 90 องศา
ล่าช้า (2000); // ให้ความล่าช้า 2 วินาที
}
void loop ()
{
int R1 = analogRead (LDR1); // อ่านค่าจาก LDR 1
int R2 = analogRead (LDR2); // อ่านค่าจาก LDR 2
int diff1 = abs (R1 - R2); // การคำนวณความแตกต่างระหว่าง
int ของ LDR diff2 = abs (R2 - R1);
ถ้า ((diff1 <= ข้อผิดพลาด) || (diff2 <= ข้อผิดพลาด)) {
// ถ้าความแตกต่างที่อยู่ภายใต้ข้อผิดพลาดแล้วไม่ทำอะไรเลย
} else {
if (R1> R2)
{
initial_position = - แรกเริ่ม; // เลื่อนเซอร์โวไป 0 องศา
}
ถ้า (R1 <R2)
{
initial_position = ++ initial_position; // เลื่อนเซอร์โวไปทาง 180 องศา
}
}
sg90.write (initial_position); / / เขียนตำแหน่งเพื่อ
ล่าช้าservo (100);
}
pinMode (LDR1, INPUT); / / การทำ PIN LDR เป็น input
pinMode (LDR2, INPUT);
sg90.write (initial_position); / / ย้ายเซอร์โวที่ 90 องศา
ล่าช้า (2000); // ให้ความล่าช้า 2 วินาที
}
void loop ()
{
int R1 = analogRead (LDR1); // อ่านค่าจาก LDR 1
int R2 = analogRead (LDR2); // อ่านค่าจาก LDR 2
int diff1 = abs (R1 - R2); // การคำนวณความแตกต่างระหว่าง
int ของ LDR diff2 = abs (R2 - R1);
ถ้า ((diff1 <= ข้อผิดพลาด) || (diff2 <= ข้อผิดพลาด)) {
// ถ้าความแตกต่างที่อยู่ภายใต้ข้อผิดพลาดแล้วไม่ทำอะไรเลย
} else {
if (R1> R2)
{
initial_position = - แรกเริ่ม; // เลื่อนเซอร์โวไป 0 องศา
}
ถ้า (R1 <R2)
{
initial_position = ++ initial_position; // เลื่อนเซอร์โวไปทาง 180 องศา
}
}
sg90.write (initial_position); / / เขียนตำแหน่งเพื่อ
ล่าช้าservo (100);
}
วีดีโอ
ไม่มีความคิดเห็น:
แสดงความคิดเห็น