RC car Robot

რობოტი  დაბრკოლაბათა გარშემოვლის უნარით არის ერთერთი მარტივი ასაწყობათ და ასევე შეჯიბრებებშიც გამოდგება. ასეთი რობოტის ასაწყობათ საჭირო იქნება:
1)შასი სერვო ძრავებით
2)აკუმულატორი
3)მიკროკონტროლერი ან მარტივი ალგორითმის შემთხვევაში ლოგიკური მიკროსქემები და ტაიმერი
(მაგალითად კარგათ ცნობილი 555 თაიმერი).
4)ძრავის დრაივერი მიკროსქემა
5)მიახლოვების სენსორები. ძირითადათ გამოიყენება ინფრაწითელი ან აკუსტიკური.

შასი შეიძლება გამოვიწეროთ რაიმე რობოკონსტრუქტორის, ან ჩვენთვითონ ავაწყოთ რაც არც თუ ისე მოხერხებულია მითუმეტეს თუ არ გაქვს აუცილებელი მასალები და ინსტრუმენტები. გარდა ამისა ყველაზე მარტივია იყიდო რომელიმე რადიომართვადი სათამაშო მანქანა და არსებული მიმღებისა და ძრავების მართვის სქემის ნაცვლად დააყენო საკუთარი მართვის მოდული მიკროკონტროლერზე. ქვემოთ განხილული რობოტი სწორედ რადიომართვადი მანქანის შასის ბაზაზე იქნება.  უნდა აღინიშნოს, რომ თუ გამოვიყენებთ არსებულ ძრავებს, აუცილებელია მივიღოთ დამატებითი ზემები მუდმივი დენის ძრავებისგან გამოწვეულ ელექტრო-მაგნიტურ ხელშეშლებთან საბრძოლველად (მოცემულ საკითხზე უფრო დეტალურად სქემის განხილვისას გვექნება საუბარი). ასევე იმ შემთხვევაში თუ მობრუნების სამართავად არის უბრალო მუდმივი დენის ძრავი, კარგი იქნება თუ გამოვცვლით და დავაყენებთ სერვოძრავას, ამით ერთი რომ შევამცირებთ ხელშეშლებს და მეორე შემცირდება მოხმარების დენი. მოცემულ შემთხვევაში სერვოძრავა არ არის გამოყენებული, და უბრალოთ მობრუნებისთვის თავისივე ძრავა ამოიყენება.                                                                                                                                                                                                                                                                                          აკუმულატორი შეიძლება გამოვიყენოთ არსებულივე, მაგრამ მანქანა ხშირ შემთხვევაში ან უბრალო ელემენტებზეა ან აკუმულატორის ტევადობა ძალიან მცირეა. ასეთ დროს კარგი იქნება თუ შევცვლით 4.5-6ვ და დაახლოვებით 2000Ah ის ტევადობის მცირე ზომის აკუმულატორით.
მართვისთვის გამოყენებულია ატმელის მიკროკოტროლერი კარგათ ცნობილი ATtiny2313.ძრავების დრაივერად გამოიყენება L293D მოკროსქემა, რომელიც ასრულებს ეწ. H bridge-ის როლს.

რაიმე ობიექტთან მიახლოვების დასაფიქსირებლათ გამოყენებულია ორი ინფრაწიტელი შუქდიოდებისგან და ერთი ფოტომიმღებისგან შედგენილი სენსორები.

იფრაწიტელი სენსორის მუშაობის პრინციპი განვიხილოთ დეტალურად.

იფრაწითელი სენსორის მთავარი კომპონენტია ფოტომიმღები, რომლის მოქმედების პრინციპი ნაჩვენებია ქვემოთ,

ფოტომიმღები არის გაუმჭვირვალე ხილული სპექტრის მიმართ და ატარებს მხოლოდ ინფრაწითელ სხივს. იმისათვის რომ ფოტომიმღებმა მიიღოს სიგნალი შუქდიოდი უნდა ასხივებდეს მოცემული ფოტომიმღებისთვის განსაზღვრულ სიხშირის სიგნალს ჩვეულებრივ ეს არის 36-55kHz შუალედში, ხოლო ფოტომიმღების გამოსასვლელზე ვიღებთ დეტექტირებულ სიგნალს.  ნახაზზე არსებული RC წრედი ასრულებს დაბალი სიხშირის ფილტრის მოვალეობას კვების წყაროდან წამოსული ხელშეშლების ჩასახშობათ.

როგორც სურათზე ჩანს, ფოტომიმღებში ხვდება მარცხენა მხრიდან არეკვლილი სიგნალი და მანქანაც ასრულებს შესაბამის მოძრაობას თვლები ტრიალდება მარცხნივ და მანქანა მოძრაობს უკან, ასეთი მოძრაობოთ მანქანა ტრიალდება თავისუფალ მარჯვენა მხარეს, და იმ შემთხვევაში თუ ფოტომიმღებში არ ხვდება სხივი არც ერთი ფოტოდიოდიდან მანქანა აგრძელებს პირდაპირ მოძრაობას.

წინა შემთხვევის საწინააღმდეგოდ, ამ შემთხვევაში მხოლოდ მარჯვენა მხრიდან არეკვლილი სხივები ხვდება ფოტომიმღებში, ხოლო შესაბამისად მანქანის თვლები ტრიალდება მარჯვენა მხარეს და მოძრაობს უკან. როდესაც მანქანა საკმარისად დაშორდება ობიექტს, ფოტომიმღებში არ მოხვდება არც ერთი სხივი და მანქანაც გადავა პირდაპირ მოძრაობაზე.

მოცემულ შემთხვევაში ფოტომიმღებში ხვდება ორივე სხივი, მაგრამ ცხადია პარარელურად ვერ მოხდება ორივე სიგნალზე რეაგირება, ასეთ დროს მანქანა შეასრულებს იმ მოძრაობას რომელი შუქდიოდიდანაც მოსული სიგალი შეხვდება პროგრამულ ციკლში პირველი.

მიკროკონტროლერის კოდი დაწერილია Atmel Studio 6.0-ში რომელიც უნდა აღინიშნოს რომ იგივე IDE-ია რაც Mocrosoft Visual Studio 2010.  პროგრამის დაწერის და დებაგირების პროცესი საკმაოდ გამარტივებულია და მოხერხებული.

განვიხილოთ პროგრამული კოდი დეტალურად, პროგრამა დაწერილია AVR GCC კომპილატორზე


#define F_CPU 1000000UL /*F_CPU მიუთითებს პროცესორის ტაქტური სიხშირეს 1Mhz */

#include <inttypes.h>
#include <avr/io.h>
#include <util/delay.h>
#include <stdbool.h>

void method(char p,char z){
  int i=0;   /*integer-ის ტიპის ცვლადის გამოცხადება || ზომა --- 16 ბიტი*/
  _Bool b=false/*დადებითი character-ის ტიპის ცვლადი || ზომა --- 8 ბიტი*/

  while (i<1000) {  /*უწყვეტი ციკლი სანამ i არ მიაღწევს 1000-ს*/
  if(!((PIND & (1<<PIND0))&&(PIND & (1<<PIND1)))){
    /*(PIND & (1<<PIND0)-ით მოწმდება თუ მიკროკონტროლერის PORTD-ს D0 პინზე არის ლოგიკური ნული
    მოცემულ შემთხვევაში გათვალისწინებულია რომ თუ ერთერთ PIND0 ან PIND1 იქნება ლოგიკური ერთი,
    მაშინ პროგრამა შევა if ოპერატორის ბლოკში და b-ს მიანიჭებს ერთს.*/
    b=true;
  }

  _delay_us(7);  /*ხდება პროგრამის დაყოვნება 7 მიკროწამით.*/

  PORTB = ~PORTB & z; /*PORTB_ზე ბიტების ინვერსია რომელიც ემთხვევა z ბაიტში არსებული ლიგიკური ერთიანების პოზიციას.*/
  PORTB |= _BV(PB6);
  /*PORTB-ს PB6-ი მიენიჭოს ლოგიკური ერთიანი. მოცემული პინიდან გამომავალი სიგნალით უზრუნველყოფილია
  ნამქანის პირდაპირ მოძრაობა*/
  i++;   /*i-ის ინკრემენტირება, ანუ ყოველი მიმართვისას i იზრდება ერთით*/
}

if(b==true){ /*იმ შემთხვევაში თუ PORTD-ს D0 ან D1 პინზე დაფიქსირდება ლოგიკური ნული მაშინ b იქნება 1 და შესრულდება შემდეგი მოქმედებები*/
PORTB=p;  /*p-ს მნიშვნელობა განაპირობებს რობოტის შესაბამის მოქმედებას*/
_delay_ms(1000); /*დაყოვნება 1 წამი*/
}
}

int main(){    /* მთავარი main ფუნქციის დასაწყისი*/

DDRB = 0b11111111;   /* PORTB იყოს გამომავალი პორტი*/
DDRD = 0x00;   /* PORTD იყოს შემავალი პორტი*/

while(1){ //უწყვეტი ციკლი

/*თანმიმდევრულად ამოიძახება method ფუნქცია სხვადასხვა მნიშვნელობის პარამეტრებით.*/
//.................................................................
method(0b10010000,0b00000001);
//0b00000001 --- ციმციმებს წინა სენსორის მარჯვენა შუქდიოდი                                                        
//0b10010000 --- თვლების მარჯვნივ მოტრიალება და მოძრაობა უკან
//.................................................................
method(0b10100000,0b00000010);
//0b00000010 --- ცომციმებს წინა სენსორის მარცხენა შუქდიოდი
//0b10100000 --- თვლების მარცხნივ მოტრიალება და მოძრაობა უკან
//.................................................................
method(0b01010000,0b00000100);
//0b00000100 --- ციმციმებს უკანა სენსორის მარჯვენა შუქდიოდი
//0b01010000 --- თვლების მარჯვნივ მოტრიალება და მოძრაობა პირდაპირ
//.................................................................
method(0b01100000,0b00001000);
//0b00001000 --- ციმციმებს უკანა სენსორის მარცხენა შუქდიოდი
//0b01100000 --- თვლების მარცხნივ მოტრიალება და მოძრაობა პირდაპირ
}

}

* This source code was highlighted with Source Code Highlighter.

როგორც ხედავთ სქემა საკმაოდ მარტივია და დეტალურად ახსნას არ საჭიროვებს, მაგრამ ზოგადათ მაინც გადავავლოთ თვალი

როგორც უკვე ავღნიშნეთ სენსორებისთვის გამოიყენება ინფრაწითელი ფოტომიმღებები ჩვენს შემთხვევაში ეს არის TSOP1738 აქ 38 მიუთითებს რომ მომღებს სიგნალის გაძლიერების მაქსიმალური მნიშვნელობა აქვს 38kHz სიხშირეზე. C1,R2 და C2,R1 წრედი ასრულებს დაბალი სიხშირის ფილტრის როლს და ამცირებს ძრავებიდან წამოსულ ხელშეშლებს. ნახაზზე მოცემული Front ფოტომიმღები და D3,D4 ინფრაწითელი შუქდიოდები შეადგენენ წინამდებარე სენსორს, როლო Back  ფოტომიმღები და D3,D4  შუქდიოდებისგან სედგენილი სენსორი დამაგრებულია მანქანის უკანა მხარეს. სენსორი მუშაობს შემდეგნაირად: შუქდიოდები ციმციმებენ მონაცვლეობით 38kHz ის მახლობელი სიხშირით ( შუქდიოდების ციმციმის სიხშირე დამდენადმე განსხვავდება 38kHz სიხშირისგან, რადგან ზუსტად 38kHz სიხშირეზე  ფოტომიმღების მგრძნობიარობა საკმაოდ მაღალია და რამოდენიმე მეტრის მანძილიდან არეკვლილი სხივებიც ახდენენ ფოტომიმღებზე ზემოქმედებას, ასეთ რეჟიმში მუშობა არ მოგვცემს არანაის შედეგს, გარდა იმ შემთხვევისა თუ შუქდიოდები გვექნება გაცილებით მიმართული მოქმედების და ასევე შევამცირებთ იმპულსების ხანგძლივობას რაც თავისთავად გამოიწვევს შუქდიოდების განათებულობის შემცირებას) შუქდიოდების თანმიმდევრული მუშაობით განისაზღვრება თუ რომელი მიმართულებიდან მოხდა სხივის არეკვლა. დრიოს ყოველ მომენტში მუშაობს მხოლოდ ერთი შუქდიოდი, და სიგნალის მიღების შემთხვევაში შესრულდება მისი შესაბმისი ბრძანება.
ძრავების დრაივერად გამოყენებულია L239D მიკროსქემა რომლის მართვის შესასვლელები ლოგიკურია და  პირდაპირ არის მიერთებიული მიკროკონტროლერის B პორტის გამომყვანებთან.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: