Სარჩევი:

კარაქის რობოტი: არდუინოს რობოტი ეგზისტენციალური კრიზისით: 6 ნაბიჯი (სურათებით)
კარაქის რობოტი: არდუინოს რობოტი ეგზისტენციალური კრიზისით: 6 ნაბიჯი (სურათებით)

ვიდეო: კარაქის რობოტი: არდუინოს რობოტი ეგზისტენციალური კრიზისით: 6 ნაბიჯი (სურათებით)

ვიდეო: კარაქის რობოტი: არდუინოს რობოტი ეგზისტენციალური კრიზისით: 6 ნაბიჯი (სურათებით)
ვიდეო: robot, pasa la mantequilla #shorts #rickandmorty #rickymorty 2024, ივლისი
Anonim
Image
Image

ეს პროექტი დაფუძნებულია ანიმაციურ სერიალზე "რიკი და მორტი". ერთ -ერთ ეპიზოდში რიკი ქმნის რობოტს, რომლის ერთადერთი დანიშნულებაა კარაქის მოტანა. როგორც Bruface- ის (ბრიუსელის საინჟინრო ფაკულტეტი) სტუდენტები, ჩვენ გვაქვს დავალება მეჩატრონიკის პროექტზე, რომელიც გულისხმობს რობოტის შექმნას შემოთავაზებულ თემაზე დაყრდნობით. ამ პროექტის დავალებაა: გააკეთეთ რობოტი, რომელიც მხოლოდ კარაქს ემსახურება. მას შეიძლება ჰქონდეს ეგზისტენციალური კრიზისი. რასაკვირველია როკი და მორტის ეპიზოდში რობოტი საკმაოდ რთული რობოტია და რამდენიმე გამარტივებაა საჭირო:

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

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

შეგახსენებთ, რობოტს უნდა აკმაყოფილებდეს შემდეგ მოთხოვნებს:

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

ნაბიჯი 1: მთავარი კონცეფცია

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

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

დაბრკოლებების გამოვლენა შეიძლება მოხდეს ულტრაბგერითი სენსორის გამოყენებით, რომელიც ზომავს მანძილს, მიმაგრებულია სერვო ძრავაზე, რათა აირჩიოს გაზომვის მიმართულება. კიდეები შეიძლება გამოვლინდეს LDR სენსორების გამოყენებით. LDR სენსორების გამოყენება მოითხოვს მოწყობილობის კონსტრუქციას, რომელიც შეიცავს როგორც led სინათლეს, ასევე LDR სენსორს. LDR სენსორი ზომავს ასახულ შუქს და შეიძლება ჩაითვალოს, როგორც დისტანციის სენსორი. იგივე პრინციპი არსებობს ინფრაწითელი სინათლის შემთხვევაშიც. არსებობს ინფრაწითელი სიახლოვის სენსორები, რომლებსაც აქვთ ციფრული გამომუშავება: დახურვა ან არა დახურვა. ეს არის ზუსტად ის, რაც რობოტს სჭირდება კიდეების გამოსავლენად. ორი მწვერვალის სენსორის და ორი ულტრაბგერითი სენსორის მსგავსად, რობოტს უნდა შეეძლოს თავიდან აიცილოს დაბრკოლებები და კიდეები.

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

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

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

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

ნაბიჯი 2: მასალები

მექანიკური ნაწილები

  • 3D პრინტერი და ლაზერული ჭრის მანქანა

    • PLA გამოყენებული იქნება 3D ბეჭდვისთვის, მაგრამ ასევე შეგიძლიათ გამოიყენოთ ABS
    • 3 მმ არყის პლაივუდის ფირფიტა გამოყენებული იქნება ლაზერული ჭრისთვის, რადგანაც ის იძლევა შესაძლებლობას მოგვიანებით ადვილად შეცვალოთ ცვლილებები, ასევე შესაძლებელია პლექსიგლასის გამოყენება, მაგრამ უფრო ძნელია მისი შეცვლა ლაზერული ჭრისას მისი განადგურების გარეშე
  • ჭანჭიკები, თხილი, საყელურები

    კომპონენტების უმეტესობა გაერთიანებულია M3 ღილაკებით, საყელურებითა და თხილით, მაგრამ ზოგიერთ მათგანს M2 ან M4 ჭანჭიკების ნაკრები სჭირდება. ჭანჭიკების სიგრძეა 8-12 მმ დიაპაზონში

  • PCB გამყოფი, 25 მმ და 15 მმ
  • 2 სერვო ძრავა თავსებადი ბორბლებით
  • ზოგიერთი სქელი ლითონის მავთული დაახლოებით 1-2 მმ დიამეტრის

Ელექტრონული ნაწილები

  • მიკროკონტროლერი

    1 arduino UNO დაფა

  • სერვო ძრავები

    • 2 დიდი სერვო ძრავა: გააგრძელეთ უწყვეტი 6 კგ 360 გრადუსი
    • 2 მიკრო სერვო ძრავა: Feetech FS90
  • სენსორები

    • 1 ულტრაბგერითი სენსორი
    • 2 IR სიახლოვის სენსორი
    • 2 IR ფოტოდიოდი
  • ბატარეები

    • 1 9V ბატარეის დამჭერი + ბატარეა
    • 1 4AA ბატარეის დამჭერი + ბატარეები
    • 1 9V ბატარეის ყუთი + ბატარეა
  • დამატებითი კომპონენტები

    • ზოგიერთი ხტომა მავთულები, მავთულები და soldering ფირფიტები
    • ზოგიერთი წინააღმდეგობა
    • 1 IR LED
    • 3 გადამრთველი
    • 1 ზუზუნი
    • 1 ღილაკი
    • 1 არდუინოდან 9 ვ ბატარეის კონექტორი

ნაბიჯი 3: ელექტრონიკის ტესტირება

ელექტრონიკის ტესტირება
ელექტრონიკის ტესტირება
ელექტრონიკის ტესტირება
ელექტრონიკის ტესტირება

ღილაკის შექმნა:

ღილაკს უბრალოდ ამუშავებს გადამრთველი, ინფრაწითელი LED და 220 ოჰმიანი რეზისტორი სერიულად, იკვებება 9 ვ ბატარეით. იგი მოთავსებულია 9 ვ ბატარეის პაკეტში, კომპაქტური და სუფთა დიზაინისთვის.

ინფრაწითელი მიმღების მოდულების შექმნა:

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

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

  • უწყვეტი სერვო ძრავები;
  • ულტრაბგერითი სენსორი;
  • უწყვეტი სერვო ძრავები;
  • ბუზერი;
  • IR ღილაკის მიმართულების გამოვლენა;
  • კიდეების გამოვლენა სიახლოვის სენსორებით;

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

ნაბიჯი 4: 3D ნაბეჭდი და ლაზერული ნაწილის დიზაინი

3D ნაბეჭდი და ლაზერული ნაწილის დიზაინი
3D ნაბეჭდი და ლაზერული ნაწილის დიზაინი
3D ნაბეჭდი და ლაზერული ნაწილის დიზაინი
3D ნაბეჭდი და ლაზერული ნაწილის დიზაინი
3D ნაბეჭდი და ლაზერული ნაწილის დიზაინი
3D ნაბეჭდი და ლაზერული ნაწილის დიზაინი

ლაზერული ნაჭრები

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

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

მცირე ზომის ნაჭრები იჭრება დიდი სერვოს ზომებზე, რათა დააფიქსიროს ისინი ასამბლეაზე.

3D ნაბეჭდი ნაწილები

ლაზერული ჭრის გარდა, ზოგიერთი ნაწილის 3D ბეჭდვაა საჭირო:

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

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

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

ყველა SOLIDWORKS ფაილი შეგიძლიათ იხილოთ zipped საქაღალდეში.

ნაბიჯი 5: შეკრება და გაყვანილობა

Image
Image
შეკრება და გაყვანილობა
შეკრება და გაყვანილობა
შეკრება და გაყვანილობა
შეკრება და გაყვანილობა
შეკრება და გაყვანილობა
შეკრება და გაყვანილობა

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

ქვედა ფირფიტა

ქვედა ფირფიტა აწყობილია 4AA ბატარეის პაკეტით, სერვო ძრავით, ნაბეჭდი ნაწილით (ფირფიტის ქვეშ ბურთის მიმაგრებით), ორი პირას სენსორით და 6 მამრობითი-მდედრობითი გამყოფებით.

შუა ფირფიტა

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

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

ზედა ფირფიტა

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

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

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

ზღვარზე სენსორების ბარიერი უნდა მოერგოს მოთავსებულ პოტენომეტრს (ბრტყელი ხრახნიანი მანქანის გამოყენებით) მაგიდის სხვადასხვა ზედაპირისთვის. მაგალითად, თეთრ მაგიდას უნდა ჰქონდეს უფრო დაბალი ბარიერი, ვიდრე ყავისფერ მაგიდას. ასევე სენსორების სიმაღლე გავლენას მოახდენს საჭირო ზღურბლზე.

ამ ნაბიჯის ბოლოს, შეკრება დასრულდება და ბოლო დარჩენილი ნაწილი არის დაკარგული კოდები.

ნაბიჯი 6: კოდირება: ყველაფრის ერთად შედგენა

ყველა საჭირო კოდი რობოტის მუშაობისათვის არის zipped ფაილში, რომლის გადმოწერაც შესაძლებელია. ყველაზე მნიშვნელოვანი არის "მთავარი" კოდი, რომელიც მოიცავს რობოტის კონფიგურაციას და ფუნქციურ მარყუჟს. სხვა ფუნქციების უმეტესობა ჩაწერილია ქვე ფაილებში (ასევე zipped საქაღალდეში). ეს ქვე ფაილები უნდა იყოს შენახული იმავე საქაღალდეში (რომელსაც ჰქვია "მთავარი"), როგორც მთავარი სკრიპტი, სანამ არდუინოში ატვირთავთ

ჯერ რობოტის ზოგადი სიჩქარე განისაზღვრება ცვლადი "შეხსენება" ერთად. ეს "შეხსენება" არის მნიშვნელობა, რომელსაც ახსოვს, რა მიმართულებით ბრუნავდა რობოტი. თუ "შეხსენება = 1", რობოტი იყო/ბრუნავს მარცხნივ, თუ "შეახსენე = 2", რობოტი იყო/ბრუნავს მარჯვნივ.

int სიჩქარე = 9; // რობოტის საერთო სიჩქარე

int შეხსენება = 1; // საწყისი მიმართულება

რობოტის დაყენებისას ინიციალიზებულია პროგრამის სხვადასხვა ქვე ფაილი. ამ ქვე-ფაილებში არის დაწერილი ძრავების, სენსორების და … კონტროლის ძირითადი ფუნქციები. კონფიგურაციაში მათი ინიციალიზაციით, თითოეულ ამ ფაილში აღწერილი ფუნქციები შეიძლება გამოყენებულ იქნას მთავარ მარყუჟში. ფუნქციის გააქტიურებით r2D2 (), რობოტი გახდის ხმაურს, როგორც R2D2 რობოტი ვარსკვლავური ომების ფილმის ფრენჩაიზიდან, როდესაც ის იწყება აქ r2D2 () ფუნქცია გამორთულია, რათა ზუზერმა არ დაუშვას ზედმეტი დენი.

// დაყენება @ გადატვირთვა // ----------------

void setup () {initialize_IR_sensors (); ინიციალიზაცია_ბრკოლებები_და_ კიდეები (); ინიციალიზაცია_მოძრაობა (); initialize_lid (); initialize_buzzer (); // r2D2 (); int შეხსენება = 1; // საწყისი მიმართულება შემქმნელი (შეხსენება); }

შემქმნელის (შეხსენების) ფუნქცია პირველად იძახება კონფიგურაციაში. ეს ფუნქცია აიძულებს რობოტს შემოტრიალდეს და მოძებნოს ერთ -ერთი ღილაკის IR სიგნალი. მას შემდეგ რაც იპოვის ღილაკს, პროგრამა გამოვა Starter ფუნქციადან ცვლადის 'cond' ცრუ შეცვლით. რობოტის ბრუნვისას მან უნდა იცოდეს თავისი გარემოს შესახებ: უნდა გამოავლინოს კიდეები და დაბრკოლებები. ეს შემოწმებულია ყოველ ჯერზე სანამ ის აგრძელებს შემობრუნებას. მას შემდეგ, რაც რობოტი აღმოაჩენს დაბრკოლებას ან ზღვარს, შესრულდება პროტოკოლი ამ დაბრკოლებების თავიდან აცილების მიზნით. ეს პროტოკოლები მოგვიანებით იქნება განმარტებული ამ ნაბიჯში. შემქმნელის ფუნქციას აქვს ერთი ცვლადი, რომელიც არის შეხსენების ცვლადი, რომელიც ადრე იყო განხილული. შემქმნელის ფუნქციისთვის შეხსენების მნიშვნელობის მინიჭებით, რობოტმა იცის რა მიმართულებით უნდა მოტრიალდეს იმისათვის, რომ მოძებნოს ღილაკი.

// შემქმნელი მარყუჟი: შემოტრიალდით და მოძებნეთ ღილაკი // ------------------------------------ ----------------

void Starter (int შეხსენება) {if (isedgeleft () || isedgeright ()) {// ზღვარის ზღვარის გამოვლენა აღმოჩენილი (შეხსენება); } else {bool cond = true; while (cond == true) {if (buttonleft () == false && buttonright () == false && isButtonDetected () == true) {cond = false; } else {if (შეხსენება == 1) {// ჩვენ ვუხვევდით მარცხნივ, თუ (isobstacleleft ()) {stoppeed (); თავიდან აცილება_ბრკოლებას (შეხსენება); } else if (isedgeleft () || isedgeright ()) {// კიდეების ზღვარის გამოვლენა აღმოჩენილი (შეხსენება); } else {ბრუნვა (სიჩქარე); }} else if (შეხსენება == 2) {if (isobstacleright ()) {stoppeed (); თავიდან აცილება_ბრკოლებას (შეხსენება); } else if (isedgeleft () || isedgeright ()) {// კიდეების ზღვარის გამოვლენა აღმოჩენილი (შეხსენება); } else {turnright (სიჩქარე); }}}}}}

თუ რობოტი იპოვის ღილაკს, მაშინ პირველი Starter მარყუჟი გამოდის და იწყება რობოტის ძირითადი, ფუნქციური მარყუჟი. ეს მთავარი მარყუჟი საკმაოდ რთულია, ვინაიდან ყოველ ჯერზე რობოტს სჭირდება იმის დადგენა, არის თუ არა მის წინ რაიმე დაბრკოლება ან ზღვარი. მთავარი იდეა ის არის, რომ რობოტი მიჰყვება ღილაკს მისი პოვნით და ყოველ ჯერზე დაკარგვით. ორი IR სენსორის გამოყენებით, ჩვენ შეგვიძლია განვასხვავოთ სამი სიტუაცია:

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

ბილიკის რუტინა მუშაობს შემდეგნაირად: როდესაც ღილაკს აღმოაჩენენ, რობოტი მოძრაობს ღილაკისკენ, იმავე მიმართულებით ბრუნვით (შეხსენების ცვლადის გამოყენებით) და ამავე დროს ოდნავ წინ. თუ რობოტი ძალიან შორს გადატრიალდება, ღილაკი კვლავ დაიკარგება და ამ დროს რობოტს ახსოვს, რომ მას სხვა მიმართულებით უნდა შეექცეს. ეს ასევე კეთდება ოდნავ წინსვლისას. ამით რობოტი მუდმივად ბრუნავს მარცხნივ და მარჯვნივ, მაგრამ ამასობაში მაინც მიიწევს ღილაკზე. ყოველ ჯერზე, როდესაც რობოტი აღმოაჩენს ღილაკს, ის მხოლოდ აგრძელებს ბრუნვას მანამ, სანამ არ დაკარგავს მას, ამ შემთხვევაში ის იწყებს მოძრაობას სხვა მიმართულებით. ყურადღება მიაქციეთ ფუნქციებს შორის განსხვავებას, რომლებიც გამოიყენება შემქმნელის მარყუჟში და მთავარ მარყუჟში: შემქმნელის მარყუჟი იყენებს "turnleft ()" ან "turnright ()", ხოლო მთავარი მარყუჟი იყენებს "moveleft ()" და "moveright ()". მოძრავი მარცხენა/მარჯვენა ფუნქციები არა მხოლოდ რობოტს ატრიალებს, არამედ აიძულებს მას წინსვლა ამავე დროს.

/ * ფუნქციური მარყუჟი ---------------------------- აქ არის მხოლოდ სიმღერის რუტინა */

int დაკარგული = 0; // თუ დაიკარგა = 0 ღილაკი მოიძებნა, თუ დაიკარგა = 1 ღილაკი დაიკარგა void loop () {if (isedgeleft () || isedgeright ()) {

თუ (! isobstacle ()) {

გადაადგილება (სიჩქარე); დაგვიანება (5); } else {აცილება_ბრკოლებას (შეხსენება); } else {if (შეხსენება == 1 && დაკარგული == 1) {// ჩვენ ვტრიალებდით მარცხნივ ჩამკეტის (); if (! isobstacleright ()) {გადაადგილება (სიჩქარე); // შემოტრიალდი ღილაკის საპოვნელად} სხვაგან {აცილება_ბრკოლებას (შეხსენება); } შეხსენება = 2; } else if (შეხსენება == 2 && დაკარგული == 1) {stoppeed (); if (! isobstacleleft ()) {moveleft (სიჩქარე); // ჩვენ მარჯვნივ ვუხვევდით} სხვაგან {აცილება_ბრკოლებას (შეხსენება); } შეხსენება = 1; } else if (დაკარგული == 0) {if (შეხსენება == 1) {// ჩვენ მარცხნივ ვუხვევდით, თუ (! isobstacleleft ()) {moveleft (სიჩქარე); // ჩვენ მარჯვნივ ვუხვევდით} else {stoppeed (); თავიდან აცილება_ბრკოლებას (შეხსენება); } //} სხვა შემთხვევაში (შეხსენება == 2) {if (! isobstacleright ()) {გადაადგილება (სიჩქარე); // შემოტრიალდი რომ იპოვო ღილაკი} else {stoppeed (); თავიდან აცილება_ბრკოლებას (შეხსენება); }}} შეფერხება (10); დაკარგული = 0; }} //}}

ახლა კი მოცემულია ორი ყველაზე რთული რუტინის მცირე ახსნა:

მოერიდეთ კიდეებს

კიდეების თავიდან აცილების ოქმი განისაზღვრება ფუნქციით სახელწოდებით "edgeDetection ()", რომელიც ჩაწერილია "მოძრაობის" ქვე ფაილში. ეს პროტოკოლი ემყარება იმ ფაქტს, რომ რობოტს მხოლოდ მაშინ უნდა შეექმნას ზღვარი, როდესაც მიაღწევს დანიშნულების ადგილს: ღილაკს. მას შემდეგ, რაც რობოტი აღმოაჩენს ზღვარს, პირველი რაც ის აკეთებს არის ის, რომ ცოტათი უკან დაიხიოს, რათა ზღვიდან იყოს უსაფრთხო დაშორება. ამის დასრულების შემდეგ, რობოტი ელოდება 2 წამს. თუ ვინმე ამ ორ წამში დააჭერს ღილაკს რობოტის წინა მხარეს, რობოტმა იცის, რომ მან მიაღწია იმ ადამიანს, ვისაც კარაქი სურს და ხსნის კარაქის განყოფილებას და წარუდგენს კარაქს.ამ დროს ვინმეს შეუძლია რობოტისგან წაიღოს კარაქი. რამდენიმე წამის შემდეგ რობოტი დაიღლება ლოდინით და უბრალოდ დახურავს კარაქის სახურავს. სახურავის დახურვის შემდეგ რობოტი შეასრულებს Starter მარყუჟს სხვა ღილაკის მოსაძებნად. თუ მოხდება, რომ რობოტი შეხვდება ზღვარს დანიშნულების ადგილამდე მისვლამდე და რობოტის წინა მხარეს ღილაკი არ არის დაჭერილი, რობოტი არ გახსნის კარაქის სახურავს და დაუყოვნებლივ შეასრულებს Starter მარყუჟს.

მოერიდეთ დაბრკოლებებს

Evin_obstacle () ფუნქცია ასევე მდებარეობს "მოძრაობის" ქვე ფაილში. დაბრკოლებების თავიდან აცილების ყველაზე რთული ფაქტია ის, რომ რობოტს აქვს საკმაოდ დიდი ბრმა წერტილი. ულტრაბგერითი სენსორი მოთავსებულია რობოტის წინა მხარეს, რაც იმას ნიშნავს, რომ მას შეუძლია დაბრკოლებების გამოვლენა, მაგრამ არ იცის როდის გადაეცემა მას. ამის გადასაჭრელად გამოიყენება შემდეგი პრინციპი: მას შემდეგ, რაც რობოტი შეხვდება დაბრკოლებას, ის იყენებს reming ცვლადს სხვა მიმართულებით გადასაბრუნებლად. ამ გზით რობოტი თავიდან აიცილებს დაბრკოლებას. რობოტი ბრუნავს მანამ, სანამ ულტრაბგერითი სენსორი აღარ აღმოაჩენს დაბრკოლებას. იმ დროის განმავლობაში, როდესაც რობოტი ბრუნავს, მრიცხველი იზრდება მანამ, სანამ დაბრკოლება აღარ გამოჩნდება. ეს მრიცხველი იძლევა დაბრკოლების სიგრძის მიახლოებას. წინსვლით და ამავე დროს მრიცხველის შემცირებით დაბრკოლების თავიდან აცილება შესაძლებელია. მას შემდეგ, რაც მრიცხველი მიაღწევს 0 -ს, შემქმნელის ფუნქცია კვლავ შეიძლება გამოყენებულ იქნას ღილაკის გადასატანად. რასაკვირველია, რობოტი ასრულებს შემქმნელის ფუნქციას იმ მიმართულებით, რომელიც მას ახსოვს, სანამ ის დაბრკოლებას შეხვდებოდა (ისევ შეხსენების ცვლადის გამოყენებით).

ახლა, როდესაც თქვენ სრულად ესმით კოდს, შეგიძლიათ დაიწყოთ მისი გამოყენება!

დარწმუნდით, რომ ადაპტირებთ ზღურბლებს თქვენს გარემოსთან (მაგალითად, IR ასახვა უფრო მაღალია თეთრ მაგიდებზე) და ადაპტირებთ სხვადასხვა პარამეტრებს თქვენს საჭიროებებზე. ასევე, დიდი ყურადღება უნდა მიექცეს სხვადასხვა მოდულის ენერგიას. უმთავრესია, რომ სერვო ძრავები არ იკვებებოდეს Arduino 5V პორტით, ვინაიდან ისინი ბევრ დენს იღებენ (ამან შეიძლება დააზიანოს მიკროკონტროლერი). თუ სენსორებისთვის გამოიყენება ენერგიის იგივე წყარო, როგორც სერვერის კვების წყარო, შეიძლება წარმოიშვას გაზომვის ზოგიერთი პრობლემა.

გირჩევთ: