สารบัญ:
- วัสดุ:
- ขั้นตอนที่ 1: กรอบหุ่นยนต์
- ขั้นตอนที่ 2: เซ็นเซอร์ Ir + Photoresistor
- ขั้นตอนที่ 3: ตัวควบคุมมอเตอร์
- ขั้นตอนที่ 4: การเขียนโปรแกรม Arduino
- ขั้นตอนที่ 5: การทดสอบ
สวัสดี!
ฉันสร้างหุ่นยนต์ผู้ติดตามบรรทัดที่สามารถใช้ได้หลายวิธีและฉันสรุปโครงการของฉันในบางขั้นตอน
เพื่อเริ่มต้นกับสิ่งที่คุณต้องมีคือส่วนต่อไปนี้:
ส่วนรายการ
-Robot frame
- สองล้อ
- มอเตอร์กระแสตรงสองตัว
มินิเขียงหั่นขนม
- ไฟ LED สองดวง
- สอง photoresistor
- ตัวต้านทาน 56k สองตัว
- ตัวต้านทาน 330 สองตัว
- ลวด
- ย่อยสลาย (ถ้าไม่ได้รวมอยู่ในตัวควบคุมมอเตอร์)
- ตัวควบคุมมอเตอร์ (ฉันใช้ L298)
- เขียงหั่นขนมขนาดใหญ่
- สามแบตเตอรี่ 1.5v
-Arduino UNO
วัสดุ:
ขั้นตอนที่ 1: กรอบหุ่นยนต์
ส่วนรายการ:
-Robot frame
- สองล้อ
- มอเตอร์กระแสตรงสองตัว
ทำอย่างไร:
ฉันใช้กรอบหุ่นยนต์เก่าที่มีล้อสองล้อซึ่งได้รับคำสั่งจากมอเตอร์ DC สองตัว แต่คุณสามารถใช้โซลูชันที่เทียบเท่าได้เช่นกัน
ขั้นตอนที่ 2: เซ็นเซอร์ Ir + Photoresistor
ส่วนรายการ:
มินิเขียงหั่นขนม
- ไฟ LED สองดวง
- สอง photoresistor
- ตัวต้านทาน 56k สองตัว
- ตัวต้านทาน 330 สองตัว
- ลวด
ทำอย่างไร:
คำนวณระยะห่างระหว่างไฟ LED และโฟโต้ตัวต้านทานสองคู่โดยพิจารณาจากความกว้างของเทป
จัดวางตำแหน่งโฟโตอิเล็กทริคและไฟ LED ตามที่เห็นในภาพ
เชื่อมต่อไฟ led กับตัวต้านทานสองตัวที่ 330 โอห์มแล้วใส่เทปที่ไม่มีความโปร่งแสงไว้รอบ ๆ เพื่อป้องกันการรบกวนจากโฟโต้
วาง breadboard ขนาดเล็กไว้ที่ส่วนล่างของเฟรม
ขั้นตอนที่ 3: ตัวควบคุมมอเตอร์
ส่วนรายการ:
- ลวด
- ย่อยสลาย (ถ้าไม่ได้รวมอยู่ในตัวควบคุมมอเตอร์)
- มอเตอร์ควบคุม
- เขียงหั่นขนมขนาดใหญ่
- สามแบตเตอรี่ 1.5v
เซ็นเซอร์ประกอบ:
เสียบหมุดอินพุตของบริดจ์ A บนหมุด 11 และ 12 ของ Arduino
เสียบหมุดอินพุตของบริดจ์ B บนหมุด 6 และ 5 ของ Arduino
เชื่อมต่อกับไดโอดขาออกของแต่ละบริดจ์กับมอเตอร์ถ้าจำเป็น
เชื่อมต่อแรงดันไฟฟ้าของแหล่งจ่ายตรรกะ (Vss) กับ 5v ของ Arduino และเชื่อมต่อกราวด์ของตัวควบคุมมอเตอร์เข้ากับ gnd ของ arduino
เชื่อมต่อแรงดันไฟฟ้า (Vs) กับแบตเตอรี่ขนาด AA 3 ก้อน
ขั้นตอนที่ 4: การเขียนโปรแกรม Arduino
ส่วนรายการ:
-Arduino UNO
- ลวด
ใช้รหัสนี้:
int PinSens_A = A5;
int PinSens_B = A4;
int ValSens_A = 0;
int ValSens_B = 0;
int Ris;
int PinMotorA_1 = 10;
int PinMotorA_2 = 11;
int PinMotorB_1 = 5;
int PinMotorB_2 = 6;
int SpeedMotor_A;
int SpeedMotor_B;
ความแตกต่าง int = 0;
int RoL (int A, int B)
{
ถ้า (A> B)
คืน 1
ถ้า (B> A)
กลับ 2;
ถ้า (A = B)
กลับ 0
}
เป็นโมฆะติดตาม (int val, int speedMax)
{
if (val == 2)
{
SpeedMotor_A = speedMax;
SpeedMotor_B = 0;
}
if (val == 1)
{
SpeedMotor_A = 0;
SpeedMotor_B = speedMax;
}
}
int Move (int dir)
{
ถ้า (dir == 0)
{
analogWrite (PinMotorA_1, SpeedMotor_A);
analogWrite (PinMotorB_1, SpeedMotor_B);
}
ถ้า (dir == 1)
{
analogWrite (PinMotorA_2, SpeedMotor_A);
analogWrite (PinMotorB_2, SpeedMotor_B);
}
}
int calcDiff ()
{
ValSens_A = analogRead (PinSens_A);
ValSens_B = analogRead (PinSens_B);
if (ValSens_A> ValSens_B)
{
int diff = ValSens_A - ValSens_B;
ผลตอบแทน diff;
}
ถ้า (ValSens_A <ValSens_B)
{
int diff = ValSens_B - ValSens_A;
ผลตอบแทน diff;
}
}
โมฆะ Debug ()
{
Serial.print (Ris);
Serial.print ("");
Serial.print (ValSens_A);
Serial.print ("");
Serial.print (ValSens_B);
Serial.println ("");
}
การตั้งค่าเป็นโมฆะ ()
{
Serial.begin (9600);
pinMode (PinMotorA_1, OUTPUT);
pinMode (PinMotorA_2, OUTPUT);
pinMode (PinMotorB_1, OUTPUT);
pinMode (PinMotorB_2, OUTPUT);
pinMode (PinSens_A, INPUT);
pinMode (PinSens_B, INPUT);
}
เป็นโมฆะห่วง ()
{
if (different == 0)
{
ความแตกต่าง = 1;
}
ValSens_A = analogRead (PinSens_A);
ValSens_B = analogRead (PinSens_B) +150; // ใช้หมายเลขตัวแปรเพื่อปรับสมดุลเซ็นเซอร์
Ris = RoL (ValSens_A, ValSens_B);
ติดตาม (Ris, 100);
ย้าย (0);
Debug ();
};