สารบัญ:
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-13 06:58
ในบทเรียนนี้ เราจะใช้เซอร์โวมอเตอร์ โฟโตรีซีสเตอร์ และตัวต้านทานแบบดึงลงเพื่อประกอบระบบแหล่งกำเนิดแสงติดตามอัตโนมัติ
ขั้นตอนที่ 1: ส่วนประกอบ:
- บอร์ด Arduino Uno * 1
- สาย USB * 1
- เซอร์โวมอเตอร์ * 1
- โฟโตรีซีสเตอร์ * 1
- ตัวต้านทาน (10k) * 1
- เขียงหั่นขนม * 1
- สายจัมเปอร์
ขั้นตอนที่ 2: หลักการ
เซอร์โวมอเตอร์และโฟโตรีซีสเตอร์จะสแกนหาแหล่งกำเนิดแสงใน 180 องศาและบันทึกตำแหน่งของแหล่งกำเนิดแสง หลังจากเสร็จสิ้นการสแกน เซอร์โวมอเตอร์และโฟโตรีซีสเตอร์จะหยุดที่ทิศทางของแหล่งกำเนิดแสง
ขั้นตอนที่ 3: ขั้นตอน:
ขั้นตอนที่ 1:
สร้างวงจร.
ขั้นตอนที่ 2:
ดาวน์โหลดโค้ดจาก
ขั้นตอนที่ 3:
อัปโหลดภาพร่างไปยังบอร์ด Arduino Uno
คลิกไอคอนอัปโหลดเพื่ออัปโหลดรหัสไปยังแผงควบคุม
หาก "เสร็จสิ้นการอัปโหลด" ปรากฏที่ด้านล่างของหน้าต่าง แสดงว่าอัปโหลดภาพร่างสำเร็จแล้ว
ตอนนี้ หากคุณใช้ไฟฉายส่องโฟโตรีซีสเตอร์ คุณจะเห็นเซอร์โวมอเตอร์และโฟโตรีซีสเตอร์หมุน และสุดท้ายหยุดที่ทิศทางของแหล่งกำเนิดแสง
ขั้นตอนที่ 4: แผนผังไดอะแกรม
ขั้นตอนที่ 5: รหัส
/********************************************************************
* ชื่อ:
ติดตามแหล่งกำเนิดแสงโดยอัตโนมัติ
* การทำงาน
: หากคุณใช้ไฟฉายส่องโฟโตรีซีสเตอร์
* แล้วคุณจะได้เห็น
เซอร์โวมอเตอร์และโฟโตรีซีสเตอร์หมุน
* และในที่สุดก็
หยุดที่ทิศทางของแหล่งกำเนิดแสง
***********************************************************************
/อีเมล: [email protected]
//เว็บไซต์: www.primerobotics.in
#รวม
const int photocellPin = A0;
/************************************************/
Servo myservo; // สร้างวัตถุเซอร์โวเพื่อควบคุมเซอร์โว
int outputValue = 0;
มุม int = {0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180};
int maxVal = 0;
int maxPos = 0;
/*************************************************/
การตั้งค่าเป็นโมฆะ ()
{
Serial.begin(9600);
myservo.attach(9);//แนบเซอร์โวบนพิน 9 กับวัตถุเซอร์โว
}
/*************************************************/
วงเป็นโมฆะ ()
{
สำหรับ(int i = 0;
ฉัน < 19; ฉัน ++)
{
myservo.write(มุม);//เขียนมุมไปยังเซอร์โว
มูลค่าส่งออก
= analogRead (photocellPin); // อ่านค่าของ A0
Serial.println(outputValue);//พิมพ์
if(outputValue > maxVal)//ถ้าค่าปัจจุบันของ A0 มากกว่าค่าก่อนหน้า
{
maxVal = outputValue; // เขียนค่า
maxPos
=i;//
}
ล่าช้า(200);
}
myservo.write (มุม [maxPos]); // เขียนมุมไปยังเซอร์โวซึ่ง A0 มีค่ามากที่สุด
ในขณะที่(1);
}