Мазмұны:

FaceBot: 8 қадам
FaceBot: 8 қадам

Бейне: FaceBot: 8 қадам

Бейне: FaceBot: 8 қадам
Бейне: Құралай Ханым. Күйеуге шығуға арналған 8 қадам. Үшінші күн 2024, Қазан
Anonim
FaceBot
FaceBot

Бұл нұсқаулықта қаріпте беті бар, бағасы төмен ($ 39) соқтығысуды болдырмайтын роботты қалай жасау керектігін көрсетеді. Біз мұны жаңа арзан, жарқын OLED дисплейінің көмегімен жасаймыз. Біздің студенттер роботтарға беттер қосуды жақсы көреді. Олар роботтың әрекетіне байланысты өзгеретін смайликтер салуды ұнатады.

Информатика негіздерін үйретуге мүмкіндік беретін, бағасы 25 доллардан төмен болатын бірнеше шағын роботтар бар. Бұл роботтардағы проблемалардың бірі - олар сіз роботты жасап жатқан кезде оның ішінде не болып жатқанын ашықтықты қамтамасыз етпейді. 2018 жылы бәрі арзан OLED дисплейлерінің болуымен өзгере бастады. Бұл дисплейлер келесі артықшылықтарға ие:

  • Олар өте жарқын және жоғары контрастқа ие. Тіпті жарық бөлмеде оларды әр қырынан оқу оңай.
  • Олар жақсы ажыратымдылыққа ие. Мен қолданатындар - 168x64 пиксель. Бұл біз қолданған алдыңғы дисплейлерден 4 есе көп.
  • Олар аз қуатты және олар сіздің роботтың қуаты азайған кезде де тұрақты жұмыс істейді.
  • Олар салыстырмалы түрде төмен (әрқайсысы шамамен 16 доллар) және баға төмендейді.

Бұрын оларды бағдарламалау қиынға соқты және арзан жады Arduino Nanos-пен пайдалану үшін тым көп жадты қолданды. Нанода тек 2K немесе динамикалық жедел жады бар. Бұл нұсқаулық сізге осы мәселелерді қалай шешуге болатынын және балалар бағдарламалауды ұнататын робот жасауды көрсетеді.

1 -қадам: 1 -қадам: Негізгі роботты жасаңыз

1 -қадам: Негізгі роботты жасаңыз
1 -қадам: Негізгі роботты жасаңыз

FaceBot құру үшін біз әдетте негізгі роботтан бастаймыз. Бір мысал, мұнда сипатталған $ 25 CoderDojo робот. Бұл роботта арзан және танымал Arduino Nano, қарапайым мотор контроллері, 2 тұрақты ток қозғалтқышы және 4 немесе 6 АА батареялары қолданылады. Оқушылардың көпшілігі соқтығысуды болдырмайтын робот жасау үшін пинг сенсорын қолдана бастайды. Ол 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 пиксель (өлшемді)
  4. Төмен қуат (әдетте 10 мА)
  5. Монохромды (олар сары, жасыл, көк және ақ түсте келеді)
  6. Әдепкі SPI интерфейсі, бірақ егер қаласаңыз, оны I2C -ге өзгертуге болады
  7. SSD1309 драйвері (өте кең тараған дисплей драйвері)

SPI интерфейсінде жеті сым бар. Міне интерфейстегі әдеттегі белгілер:

  1. CS - чипті таңдау
  2. DC - Деректер/Пәрмен
  3. RES - қалпына келтіру
  4. SDA - Деректер - бұл Arduino Nano пин 11 -ге қосылуы керек
  5. SCL - Сағат - бұл Arduino Nano түйреуішіне 13 қосылуы керек
  6. VCC - +5 вольт
  7. GND - Жер

Дисплейді тақтаға қосу үшін сізге сым қажет болады. Дисплейлер әдетте дисплейге қосылатын 7 істікшелі тақырыппен келеді. Мен 20mc Dupont ерлерден ерлерге арналған 7 қосқышты қолдандым және сымдардың дисплейдің артқы жағына шығуы үшін оларды дәнекерледім.

3 -қадам: 3 -қадам: OLED -ді Arduino Nano -ға қосыңыз

3 -қадам: OLED -ді Arduino Nano -ға қосыңыз
3 -қадам: OLED -ді Arduino Nano -ға қосыңыз
3 -қадам: OLED -ді Arduino Nano -ға қосыңыз
3 -қадам: OLED -ді Arduino Nano -ға қосыңыз

Енді сіз OLED -ді тексеруге дайынсыз. Мен әр дисплей жұмыс істейтінін тексеру үшін басқа Arduino Nano қолданамын. Сынақтар жұмыс істегеннен кейін мен оны роботқа қосамын. Сынаушының сымдарының схемасы жоғарыдағы суретте көрсетілген. OLED қосылымдарын цифрлық шығуларды қолдайтын басқа түйреуіштерге жылжытуға болатынын ескеріңіз, бірақ егер SCL (сағат) Arduino Nano pin 13 -те, ал SDA (деректер) Arduino Nano pin 11 -де екеніне көз жеткізсеңіз, әдепкі параметрлерді қолдана аласыз. бағдарламалық қамтамасыз ету. Бұл сіздің кодты сәл жеңілдетеді.

4 -қадам: 4 -қадам: Дисплейді тексеріңіз

4 -қадам: Дисплейді тексеріңіз
4 -қадам: Дисплейді тексеріңіз

Дисплейді тексеру үшін біз u8g2 кітапханасын қолданамыз. Сіз пайдалана алатын басқа кітапханалар бар, бірақ менің тәжірибемде олардың ешқайсысы u8g2 кітапханасында жақсы емес. Маңызды факторлардың бірі - дисплейде Arduino жүйесінде қанша жедел жады қолданылатыны. U8g2 - мен тапқан жалғыз кітапхана, ол Arduino Nano -мен жұмыс істейтін «Бет режимін» қолданады.

Сіз бұл кітапхананы Arduino IED -ке «Кітапханаларды басқару» мәзірінен «u8g2» іздеу арқылы қоса аласыз. Сіз кодты gethub -тан тікелей жүктей аласыз.

github.com/olikraus/u8g2

Мен қолданатын тест коды мына жерде:

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

Назар аударатын бірнеше жайт бар. SCL және SDA пин нөмірлері түсіндіріледі, себебі олар нано бойынша әдепкі түйреуіштер болып табылады. U8g2 үшін конструктор негізгі жол болып табылады:

// Біз SSD1306, 128x64, бір беттік, атаусыз, 4 сымды, Жабдық, SPI қолданамыз, ол тек 27% динамикалық жадты пайдаланады

Біз бір беттік режимді қолданамыз, себебі бұл режимде жедел жады аз болады. Біз 4 сымды аппараттық интерфейсті қолданамыз және OLED әдепкі бойынша SPI-мен бірге келеді.

5 -қадам: 5 -қадам: OLED -ді роботқа қосыңыз

5 -қадам: OLED -ді роботқа қосыңыз
5 -қадам: OLED -ді роботқа қосыңыз

Енді бізде жұмыс істейтін OLED бар және біз u8g2 кітапханаларын қалай инициализациялау керектігін білеміз, біз OLED -ді негізгі роботпен біріктіруге дайынбыз. Қарастыруға болатын бірнеше нәрсе бар. OLED тестінде біз сымдарды жеңілдету үшін бір -біріне жақын түйреуіштерді қолдандық. Өкінішке орай, бізге роботты басқару үшін 9 түйреуіш қажет, себебі бұл мотор драйверіне аналогтық сигнал жіберу қажет PWM түйреуіштерінің бірі. Шешім-9 түйреуіштегі сымды басқа түйреуішке ауыстыру, содан кейін #define операторын жаңа түйреуішке өзгерту. OLED-ді роботтың алдыңғы жағына бекіту үшін мен екі үшбұрышты кесінділерді плексигласс пен ыстық желіммен қиып алдым. оларды шассиге. Бөлшектерді ыстық желіммен жапсырмас бұрын, олар оңай бөлініп кетпес үшін, мен плексиглассаның бетін тегістеу үшін әр түрлі тегістеу қағазын қолданғанды ұнатамын.

Әрі қарай, OLED туралы кейбір мәліметтерді алып, роботқа бірнеше беттерді сызайық!

6 -қадам: 6 -қадам: Робот параметрлерін көрсету

6 -қадам: робот параметрлерін көрсету
6 -қадам: робот параметрлерін көрсету

Дисплейдің жақсы жақтарының бірі - бұл роботтың айналасында жүріп жатқан нәрсені түзетуге көмектеседі. Әзірлеушілердің компьютерге қосылған кезде жұмыс үстелінде жұмыс істеуі сирек емес, тек робот айналасында жүргенде жұмыс істемейді. Пинг сенсорымен өлшенетін қашықтық сияқты мәнді көрсету робот параметрін көрсетудің жақсы мысалы болып табылады.

Жоғарыдағы фотода бірінші жолда (Эхо Time) дыбыстың ультрадыбыстық динамиктен шыққан уақыты мен микрофон қабылдаған уақыт арасындағы кідіріс уақыты көрсетілген. Содан кейін бұл сан екінші жолда сантиметрге айналады (Арақашықтық см). Есептегіш іздеу секундына жаңартылып, дисплей жаңартылып жатқанын көрсетеді. «Айналу …» қашықтығы бұрылу шегі деп аталатын белгілі бір саннан төмен болған жағдайда ғана көрсетіледі. Егер доңғалақ қашықтығы осы саннан жоғары болса, екі доңғалақ алға жылжиды. Егер сан бұрылу шегінен төмен болса, онда біз қозғалтқыштарды кері айналдырамыз (артқа қарай), содан кейін бағытты өзгертеміз.

Пинг сенсорынан мәндерді қалай алу керектігін және OLED экранында мәндерді көрсетуді көрсететін код үлгісі.

Міне, үш пинг сенсорын (сол, орта және оң жақ) тексеретін және дисплейдегі мәндерді көрсететін мысал:

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

7 -қадам: 7 -қадам: Кейбір тұлғаларды салыңыз

7 -қадам: Кейбір тұлғаларды салыңыз!
7 -қадам: Кейбір тұлғаларды салыңыз!

Енді бізде беттер салу үшін барлық бөлшектер бар. Біздің студенттер әдетте робот алға қарай келе жатса, оның жүзі бақытты болуы керек деп ойлайды. Алдында бірдеңені көргенде, ол таң қалу сезімін тіркейді. Содан кейін ол артқа шегініп, айналасына қарайды, мүмкін оның көздері қай жаққа бұрылатынын білдіретін болады.

Бетті салу үшін сурет салу командасы өте қарапайым. Біз бет контуры үшін шеңбер жасай аламыз және әр көзге шеңбер толтырамыз. Аузы күлімсіреу үшін жарты шеңбер және таңданыс үшін толтырылған дөңгелек шеңбер болуы мүмкін. Бұл жерде балалар өз шығармашылықтарын қолдана отырып, өрнектерді жекелендіре алады. Мен кейде әдейі жаман беттерді сызып, студенттерден оларды жақсартуға көмектесуін сұраймын.

Дисплей өлшемін алу үшін display.height () және display.width () функцияларын қолдануға болады. Төмендегі кодта біз айнымалыларды орнатамыз

half_width = display.width ()/2; half_height = display.height ()/2;

Егер сіз бұл есептеулерді бірнеше рет жасасаңыз, егер олар бір рет есептелсе және айнымалыда сақталса, код сәл жылдам болады. Міне, жоғарыдағы жалықтыратын тікелей бет қалай салынғанына мысал:

// біз мұны әр циклдың басында жасаймыз

display.clearDisplay (); // backgrounddisplay.fillCircle (жартылай ені, жартылай биіктігі, 31, АҚ) үшін ашық бетті сызыңыз; // оң жақ қараңғы дисплей.fillCircle (жартылай ені - 10, дисплей. биіктігі ()/3, 4, ҚАРА); // сол көздің қараңғы түсі.fillCircle (жартылай ені + 10, дисплейдің биіктігі ()/3, 4, BLACK); // ауызды көрсету үшін түзу сызық сызыңыз.drawLine (half_width - 10, display.height ()/3 * 2, half_width + 10, display.height ()/3 * 2, BLACK); // бұл жол біздің жаңа бетімізді OLED дисплейіне жібереді.display ();

8 -қадам: 8 -қадам: теңшеу

8 -қадам: теңшеу
8 -қадам: теңшеу

Негізгі бетті салу - бұл тек бастамасы. Оқушылар көптеген нұсқаларды жасай алады. Көптеген студенттер дыбыстарды немесе дыбыстарды айналдыра ойнайтын шағын динамикті қосты.

Сіз сонымен қатар сіздің студенттеріңізге қозғалтқыштарды дұрыс қосуға көмектесетін кішігірім тест бағдарламаларын құра аласыз. Мысалы, экрандағы көрсеткі (үшбұрыш) оқушыға қозғалтқышты қосқанда дөңгелектің қай бағытта бұрылуы керектігін айтады. Сынақ бағдарламасы қозғалтқыштың әр бағыты бойынша айналады:

  1. Оңға Алға
  2. Оңға кері
  3. Солға Алға
  4. Солға кері

Әр режим үшін экран жаңа дисплеймен жаңартылып, қай дөңгелектің қай бағытта бұрылуы керектігін көрсетеді.

Бұл бағдарламаның мысалы мына жерде

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

CoderDojo Robots GitHub FaceBot бетінде көптеген қосымша мысалдар мен бағдарламалау туралы мәліметтер бар.

Сондай -ақ, FaceBot роботының нұсқасы бар, ол студенттерге соқтығысудың алдын алудың барлық параметрлерін (алға жылдамдық, бұрылу қашықтығы, бұрылу уақыты, бұрылу жылдамдығы) дисплей көмегімен тікелей өзгертуге мүмкіндік береді. Бұл роботтарды «бағдарламалау» үшін ешқандай компьютер қажет емес! Бұл нұсқалар MakerFairs мен компьютерлерді айналдырғыңыз келмейтін оқиғалар үшін өте қолайлы.

Сізге және сіздің студенттеріңізге қандай жаңа тұлғалар келетінін бізге хабарлаңыз!

Бақытты кодтау!

Ұсынылған: