Სარჩევი:

FaceBot: 8 ნაბიჯი
FaceBot: 8 ნაბიჯი

ვიდეო: FaceBot: 8 ნაბიჯი

ვიდეო: FaceBot: 8 ნაბიჯი
ვიდეო: დავით კენჭაძე - ეფექტური დელეგირების 8 ნაბიჯი 2024, ნოემბერი
Anonim
FaceBot
FaceBot

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

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

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

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

ნაბიჯი 1: ნაბიჯი 1: შექმენით თქვენი ბაზის რობოტი

ნაბიჯი 1: შექმენით თქვენი ბაზის რობოტი
ნაბიჯი 1: შექმენით თქვენი ბაზის რობოტი

FaceBot– ის შესაქმნელად ჩვენ ჩვეულებრივ ვიწყებთ ძირითად რობოტს. ერთი მაგალითია $ 25 CoderDojo Robot, რომელიც აღწერილია აქ. ეს რობოტი იყენებს დაბალფასიან და პოპულარულ არდუინო ნანოს, უბრალო ძრავის კონტროლერს, 2 DC ძრავას და 4 ან 6 AA ბატარეას. სტუდენტების უმეტესობა პინგის სენსორის გამოყენებით იწყებს შეჯახების თავიდან აცილების რობოტის შექმნას. რადგან ის უზრუნველყოფს 5 ვ ენერგიის სისტემას, ის სრულყოფილია FaceBot– ისთვის. ხარჯების დაბალი შესანარჩუნებლად, მე ჩვეულებრივ ვთხოვ ჩემს სტუდენტებს შეუკვეთონ ნაწილები ონლაინ რეჟიმში e-Bay– დან. ნაწილების ჩამოსვლას ხშირად 2-3 კვირა სჭირდება და საჭიროებს მცირე რაოდენობის შედუღებას ძრავებისა და დენის გადამრთველისთვის. დანარჩენი კავშირები ხდება 400 ჰალსტუხიანი დაფის გამოყენებით. სტუდენტები ხშირად ცხელ წებოვან მავთულხლართებს ატარებენ, რომ არ ამოვარდეს.

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

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

ნაბიჯი 2: ნაბიჯი 2: იპოვეთ და შეუკვეთეთ თქვენი OLED დისპლეი

ნაბიჯი 2: იპოვეთ და შეუკვეთეთ თქვენი OLED დისპლეი
ნაბიჯი 2: იპოვეთ და შეუკვეთეთ თქვენი OLED დისპლეი

როდესაც გამოჩნდა OLED დისპლეი, დაბალი ღირებულება განკუთვნილი იყო საათებისთვის ან ფიტნეს მონიტორებისთვის. შედეგად ისინი იყვნენ პატარა, ჩვეულებრივ დაახლოებით 1 ინჩის სიგანეზე. კარგი ამბავი ის არის, რომ ისინი იაფი იყო, დაახლოებით 3 დოლარი. ჩვენ ავაშენეთ რამდენიმე რობოტი ამ დისპლეით, მაგრამ რადგან ეკრანის ზომა შეზღუდული იყო რისი გაკეთებაც ჩვენ ეკრანზე შეგვიძლია. შემდეგ 2018 წელს ჩვენ დავინახეთ, რომ უფრო დიდი 2.42 დიუმიანი OLED ეკრანების ფასი მცირდება. 2019 წლის იანვარში ფასები დაახლოებით 16 დოლარამდეა. ჩვენ საბოლოოდ გვქონდა შესანიშნავი ჩვენება, რომლის გამოყენებაც ჩვენი რობოტის სახეებისთვის შეიძლებოდა.

აქ მოცემულია ამ ეკრანის მახასიათებლები:

  1. 2.42 ინჩი (დიაგონალური გაზომვა)
  2. 128 პიქსელის სიგანე (x განზომილება)
  3. სიმაღლე 64 პიქსელი (y- განზომილება)
  4. დაბალი სიმძლავრე (ჩვეულებრივ 10 მ)
  5. მონოქრომული (ისინი გამოდიან ყვითელი, მწვანე, ლურჯი და თეთრი)
  6. ნაგულისხმევი SPI ინტერფეისი, თუ გსურთ, შეგიძლიათ შეცვალოთ იგი I2C– ზე
  7. SSD1309 დრაივერი (ძალიან გავრცელებული ჩვენების დრაივერი)

SPI ინტერფეისს აქვს შვიდი მავთული. აქ არის ტიპიური ეტიკეტები ინტერფეისზე:

  1. CS - ჩიპის არჩევა
  2. DC - მონაცემები/ბრძანება
  3. რესურსები - გადატვირთვა
  4. SDA - მონაცემები - ეს უნდა იყოს დაკავშირებული Arduino Nano pin 11 -თან
  5. SCL - საათი - ეს უნდა იყოს დაკავშირებული Arduino Nano pin 13 -თან
  6. VCC - +5 ვოლტი
  7. GND - გრუნტი

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

ნაბიჯი 3: ნაბიჯი 3: შეაერთეთ OLED არდუინო ნანოსთან

ნაბიჯი 3: შეაერთეთ OLED არდუინო ნანოსთან
ნაბიჯი 3: შეაერთეთ OLED არდუინო ნანოსთან
ნაბიჯი 3: შეაერთეთ OLED არდუინო ნანოსთან
ნაბიჯი 3: შეაერთეთ OLED არდუინო ნანოსთან

ახლა თქვენ მზად ხართ შეამოწმოთ თქვენი OLED. მე ვიყენებ სხვა Arduino Nano– ს მხოლოდ იმის შესამოწმებლად, რომ თითოეული ჩვენება მუშაობს. როგორც კი ტესტები იმუშავებს, მაშინ მას რობოტს ვუკავშირებ. ტესტერის გაყვანილობის სქემა ნაჩვენებია ზემოთ მოცემულ ფიგურაში. გაითვალისწინეთ, რომ თქვენ შეგიძლიათ OLED კავშირების გადატანა სხვა ქინძისთავებზე, რომლებიც უზრუნველყოფენ ციფრულ გამოსვლებს, მაგრამ თუ დარწმუნდებით, რომ SCL (საათი) არის Arduino Nano pin 13 -ზე და SDA (მონაცემები) არის Arduino Nano pin 11 -ზე, შეგიძლიათ გამოიყენოთ ნაგულისხმევი პარამეტრები პროგრამული უზრუნველყოფა ეს ინარჩუნებს თქვენს კოდს ცოტა უფრო მარტივად.

ნაბიჯი 4: ნაბიჯი 4: შეამოწმეთ თქვენი ჩვენება

ნაბიჯი 4: შეამოწმეთ თქვენი ჩვენება
ნაბიჯი 4: შეამოწმეთ თქვენი ჩვენება

თქვენი ეკრანის შესამოწმებლად ჩვენ გამოვიყენებთ u8g2 ბიბლიოთეკას. არსებობს სხვა ბიბლიოთეკები, რომელთა გამოყენებაც შეგიძლიათ, მაგრამ ჩემი გამოცდილებით, არცერთი მათგანი არ არის ისეთი კარგი u8g2 ბიბლიოთეკაში. ერთი კრიტიკული ფაქტორი არის ის, თუ რამდენ RAM- ს იყენებს Arduino– ს ეკრანი. U8g2 არის ერთადერთი ბიბლიოთეკა, რომელიც აღმოვაჩინე და იყენებს "გვერდის რეჟიმს", რომელიც იმუშავებს არდუინო ნანოსთან.

თქვენ შეგიძლიათ დაამატოთ ეს ბიბლიოთეკა თქვენს Arduino IED– ში „u8g2“- ის ძიებით „ბიბლიოთეკების მართვა“მენიუში. თქვენ ასევე შეგიძლიათ ჩამოტვირთოთ კოდი პირდაპირ gethub– დან.

github.com/olikraus/u8g2

ტესტის კოდი, რომელსაც მე ვიყენებ აქ არის:

github.com/dmccreary/coderdojo-robots/blob…

რამდენიმე რამ არის გასათვალისწინებელი. SCL და SDA პინ ნომრები კომენტარდება, რადგან ისინი არიან ნაგულისხმევი ქინძისთავები ნანოზე. კონსტრუქტორი u8g2– ისთვის არის მთავარი ხაზი:

// ჩვენ ვიყენებთ SSD1306, 128x64, ერთ გვერდზე, უსახელო, 4 მავთულს, აპარატურას, SPI ბრუნვის გარეშე, რომელიც იყენებს დინამიური მეხსიერების მხოლოდ 27% U8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI u8g2 (U8G2_R0, CS_PIN, DC_PIN), RDS_

ჩვენ ვიყენებთ ერთ გვერდიან რეჟიმს, რადგან ის იყენებს მინიმალურ ოპერატიულ მეხსიერებას. ჩვენ ვიყენებთ 4 მავთულის აპარატურის ინტერფეისს და OLED სტანდარტულად მოყვება SPI.

ნაბიჯი 5: ნაბიჯი 5: დაამატეთ თქვენი OLED რობოტს

ნაბიჯი 5: დაამატეთ თქვენი OLED რობოტს
ნაბიჯი 5: დაამატეთ თქვენი OLED რობოტს

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

შემდეგი, მოდით მივიღოთ მონაცემები ჩვენს OLED– ზე და დავხატოთ რამდენიმე სახე რობოტზე!

ნაბიჯი 6: ნაბიჯი 6: რობოტის პარამეტრების ჩვენება

ნაბიჯი 6: აჩვენეთ რობოტის პარამეტრები
ნაბიჯი 6: აჩვენეთ რობოტის პარამეტრები

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

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

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

აქ არის მაგალითი, რომელიც ამოწმებს სამ პინგ სენსორს (მარცხნივ, ცენტრში და მარჯვნივ) და აჩვენებს მნიშვნელობებს ეკრანზე:

github.com/dmccreary/coderdojo-robots/blob…

ნაბიჯი 7: ნაბიჯი 7: დახაზეთ რამდენიმე სახე

ნაბიჯი 7: დახაზეთ რამდენიმე სახე!
ნაბიჯი 7: დახაზეთ რამდენიმე სახე!

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

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

თქვენ შეგიძლიათ გამოიყენოთ display.height () და display.width () ფუნქციები ეკრანის ზომის მისაღებად. ქვემოთ მოცემულ კოდში ჩვენ ვაყენებთ ცვლადებს

ნახევარი_სიგანე = ჩვენება. სიგანე ()/2; ნახევარი სიმაღლე = ჩვენება. სიმაღლე ()/2;

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

// ჩვენ ამას ვაკეთებთ თითოეული მარყუჟის დასაწყისში

display.clearDisplay (); // დახაზეთ ღია სახე backgrounddisplay.fillCircle (half_width, half_height, 31, WHITE); // მარჯვენა თვალის მუქი ჩვენება. შეავსეთ წრე (half_width - 10, ჩვენება. სიმაღლე ()/3, 4, შავი); // მარცხენა თვალი darkdisplay.fillCircle (half_width + 10, display.height ()/3, 4, BLACK); // დახაზეთ პირის ღრუს ჩვენების სწორი ხაზი. DrawLine (half_width - 10, display.height ()/3 * 2, half_width + 10, display.height ()/3 * 2, BLACK); // ეს ხაზი აგზავნის ჩვენს ახალ სახეს OLED ეკრანის ჩვენებაზე. ჩვენება ();

ნაბიჯი 8: ნაბიჯი 8: პერსონალურად მორგება

ნაბიჯი 8: პერსონალურად მორგება
ნაბიჯი 8: პერსონალურად მორგება

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

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

  1. მარჯვენა წინ
  2. მარჯვენა უკანა
  3. მარცხნივ წინ
  4. მარცხენა უკანა მხარე

თითოეული რეჟიმისთვის ეკრანი განახლდება ახალი დისპლეით, რათა აჩვენოს რომელი ბორბალი უნდა იყოს შემობრუნებული და რა მიმართულებით.

ამ პროგრამის მაგალითი აქ არის

github.com/dmccreary/coderdojo-robots/blob…

ბევრი დამატებითი მაგალითი და პროგრამირების დეტალია CoderDojo Robots GitHub FaceBot გვერდზე.

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

გთხოვთ შეგვატყობინოთ რა ახალი სახეებით გამოჩნდით თქვენ და თქვენი სტუდენტები!

ბედნიერი კოდირება!

გირჩევთ: