Въведение
Днес заменяме един от модулите със сензор за допир, с лостов модул. Ще програмираме робота да усеща кога играча е оставил лоста и автоматично да го връща в началното му положение. За да можем да прилагаме една промяна на много места, ще се запознаем и приложим DRY принципа за структуриране на код.
Конструиране
Днешният нов модул представя ръчка на играча, която той трябва да дръпне. Този модул има по-малко места, за които може да бъде закрепен, защото изисква свободно място пред себе си, за да може да се движи свободно дългата дръжка. Повече няма да имаме повтарящи се модули, за това не конструирайте модула със сензор за допир два пъти.
Базов модул на EV3 Тактилна игра за памет
Това е базовия модул за тактилната игра за памет. Целта на този модул е да предостави широк избор на позиции за прикрепяне на останалите модули от играта.
Лостов модул на EV3 Тактилната игра за памет
Този модул е предназначен за тактилната игра за памет и се прикрепя за базата на робота. Този модул използва сензора за завъртане (енкодер), вграден във всеки мотор, за да засече кога играчът е дръпнал лоста.
Модул със сензор за допир на EV3 Тактилната игра за памет
Този модул е предназначен за тактилната игра за памет и се прикрепя за базата на робота. Той е най-простият модул за програмиране и конструиране. На дъното му е оставен канал, от който да се изведе кабелът на сензора.
Сега, след като построихте робота, затворете кутията, за да не ви пречи.
- Приберете всички части, които не ви трябват за робота, в кутията.
- Затворете кутията и я отместете, така че да не ви пречи повреме на следващите задачи.
Програмиране
Днес ще отделим повече време на структурирането на програмата така, че да можем в бъдеще да програмираме новите модули само веднъж и този код да се използва за всеки ход от играта. За целта трябва да си припомним собствените блокчета.
Изтеглете програмата, която създадохте в миналото занятие от тук. Ако сте забравили да запазите програмата си, може да изтеглите примерното решение представено отдолу, но внимавайте да не забравите и днес да я запазите когато сте готови.
Примерно решение на задачите в занятие 1 от курс 4.0
Тази програма представлява много базова версия на играта предназначена за робот EV3 Кинетична игра за памет. За целта, робота трябва да има два модула със сензори за допир, прикачени към порт 1 и порт 2. Останалите модули не са необходими за тази програма.
Принцип на програмирането DRY
Анди Хънт и Дейв Томас са писателите на книгата "Прагматичният програмист". Тази книга е променила начинът по-който програмираме днес. В нея е представен принцип наречен DRY("don't repeat yourself" - не се повтаряй), който вече се счита за правило в програмирането. Този принцип гласи, че всяко действие на една програма трябва да бъде описано само веднъж. В програмните езици, това се постига чрез функции и библиотеки, а в LEGO MINDSTORMS това се прилага чрез собствени блокчета. Когато имаме част от програма, която трябва да копираме на друго място, трябва да се спрем и да създадем собствено блокче от нея, което ще ни върши работа и на двете места.
DRY принципа не може да се приложи в генериращия модул на програмата, защото повтарящата се част от кода е съставена от едно блокче за генериране на произволни числа. Забележете обаче, че в подсказващия модул на програмата има няколко повтарящи се блокчета. Опитайте се да приложите този принцип, за да оптимизирате програмата си.
Ако сте направили всичко правилно до сега, подсказващия модул на програмата ви трябва да изглежда по следния начин:
Нека разгледаме проверяващия модул на програмата. Блокчето за повторение "Game" се повтаря 3 пъти. За да го заменим със собствено блокче, трябва създадем блокчето с променлива "Action", както направихме в подсказващия модул. Уверете се, че задавате стойността на променливата "Action" преди да започнете да я проверявате в блокчето за повторение "Game"!
Ако сте направили всичко правилно до сега, проверяващия модул на програмата ви трябва да изглежда по следния начин:
Сега имаме собствено блокче, в което можем да добавим нова проверка за лостовия модул и тази проверка ще се приложи и за трите хода на играча. В следващите занятия ще над-градим играта да работи с повече ходове и повече модули, и тогава ще сме благодарни, че сме приложили този метод.
Следващите задачи се извършват вътре собствените блокчета, които създадохте. Вече нямаме два сензора за допир и повече няма да имаме повтарящи се модули в този курс. Проверката за модула със сензор за допир на порт 2 ще променим да работи с лостовия модул на порт B.
Ако сме направили всичко коректно, следните две грешки трябва да са възникнали в програмите:
- Робота все още ви казва "Two" като подсказка за лост. Това не е добра подсказка за това действие и трябва да се промени.
- Когато играча дръпне лоста, робота засича правилното действие, но след това играча не връща лоста в началното му положение и това обърква робота. Вместо да обесняваме на играча, че трябва да връща лоста обратно, нека програмираме робота да го прави.
За да програмираме мотора да се връща в начално положение БЕЗ да се чупи модула, трябва да се уверим, че ръчката е била оставена от играча. За тази цел трябва да проверим дали мотора е спрял да се движи.
Сензор за мощност
LEGO моторите имат в вграден сензор за мощност. Той измерва мощността на мотора от 0 до 100. Когато завъртим мотор с ръка, този сензор засича каква мощност предаваме на робота и това може да бъде използвано в много ситуации.
Сензора за мощност може да бъде използван с чакащото, където изисква два входни параметъра:
Първия е условието, което чака да се изпълни. Това условие може да бъде надхвърляне на мощността над или падане под определена от нас граница:
Втория входен параметър е границата, с която работи избраното от нас условие. То може да бъде стойност от 0 до 100:
По подобен начин работят и условните оператори със същите два входни параметъра:
Внимавайте, когато робота връща мотора в начално положение, да не спира със спирачка!
Спирането със спирачка ще накара мотора да се съпротивлява на играча, когато отново се опита да дръпне ръчката.
Задачи по приключване на урока.
- Направете снимки и клипове на роботите
- Разглобете и подредете робота
- Подредете работното си място
- Важно е да подредите електрониката на роботите върху капака на кутията.
- Навийте кабела за програмиране, така че да е събран.
- Поставете кабелите за робота до електрониката.
- Навийте кабела на мишката около мишката.
- Навийте кабела на зарядното на лаптопа така, както преподавателят ви ще ви покаже.
- Когато изключите компютъра, оставете го до кутията по роботика.
- Изключете всички програми на компютъра
- Излезте от FLLCasts
- Изключете компютъра
- Приберете столовете си под масата