مشروع خط أتباع روبوت هو روبوت بسيط ولكنه رائع بالنسبة لمعظم الطلاب / الهواة. في هذا البرنامج التعليمي سوف نتعلم كيف يعمل روبوت تابع الخط وكيف يمكننا بناء واحد باستخدام PIC16F877A.
المكونات المطلوبة:
مخطط المشروع وشرحها:
تستخدم الدائرة مستشعرين للأشعة تحت الحمراء وزوجًا من محركات التروس DC جنبًا إلى جنب مع وحدة تشغيل المحرك كما هو موضح أعلاه. وحدة محرك المحرك المستخدمة في هذا المشروع هي L293D ، سنحتاج إلى سائق محرك لأن دبوس خرج متحكم PIC لا يمكن أن يصدر تيارًا كافيًا للمحركات لقيادة. سيتم تشغيل هذه الوحدة مباشرة من مصدر الطاقة (5 فولت) كما هو موضح في الدائرة. تحتوي الوحدة على أربعة دبابيس (اثنان لكل محرك) متصلة بـ PIC للتحكم في اتجاه المحركات. لدينا أيضًا مستشعران يعملان بالأشعة تحت الحمراء يعملان كمدخل للميكروكونترولر PIC. سترتفع هذه المستشعرات (1) إذا كانت فوق سطح أبيض وستنخفض (0) عندما تكون فوق سطح أسود.
يتم عرض مخطط الدائرة الكاملة لروبوت المتابع الخطي المستند إلى الموافقة المسبقة عن علم أدناه
لقد استخدمنا منبع طاقة يعطي ناتجًا + 5 فولت مباشرة من خلال منفذ USB الخاص به ؛ ومن ثم فقد تجاوزت منظم الجهد 7805 وقمت بتشغيل PIC وأجهزة الاستشعار والمحركات باستخدام نفس الشيء. يمكنك أن تفعل الشيء نفسه باستخدام بطارية 12 فولت مع منظم كما هو موضح في الدائرة.
كود مشروع خط أتباع روبوت باستخدام PIC16F877A
#include <xc.h>
#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled)
#pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
void main()
{
TRISD2 = 1; TRISD3 = 1; //Bath the IR sensor pins are declared as input
TRISC4 = 0; TRISC5 = 0; //Motor 1 pins declared as output
TRISC6 = 0; TRISC7 = 0; //Motor 2 pins declared as output
while(1)
{
if (RD2==1 && RD3==1) //Both sensor not over balck line
{
RC4=0; RC5=1; //Motor 1 forward
RC6=1; RC7=0; //Motor 2 forward
}
else if (RD2==0 && RD3==1) //Left sensor is over black line
{
RC4=1; RC5=1; //Motor 1 stop
RC6=1; RC7=0; //Motor 2 forward
}
else if (RD2==1 && RD3==0) //Right sensor is over black line
{
RC4=0; RC5=1; //Motor 1 forward
RC6=1; RC7=1; //Motor 2 stop
}
else //Both Sensor over black line
{
RC4=1; RC5=1; //Motor 1 stop
RC6=1; RC7=1; //Motor 2 stop
}
}
}