[Arduino] Linefollower พร้อม Photoresistor: 5 ขั้นตอน

[Arduino] Linefollower พร้อม Photoresistor: 5 ขั้นตอน

สารบัญ:

Anonim

บทนำ:

สวัสดี!

ฉันสร้างหุ่นยนต์ผู้ติดตามบรรทัดที่สามารถใช้ได้หลายวิธีและฉันสรุปโครงการของฉันในบางขั้นตอน

เพื่อเริ่มต้นกับสิ่งที่คุณต้องมีคือส่วนต่อไปนี้:

ส่วนรายการ

-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 ();

};

ขั้นตอนที่ 5: การทดสอบ

สุดท้ายทดสอบการกำหนดค่าของคุณเพื่อประสิทธิภาพที่ดีที่สุด