Мазмуну:

FaceBot: 8 кадам
FaceBot: 8 кадам

Video: FaceBot: 8 кадам

Video: FaceBot: 8 кадам
Video: Qadam (o'zbek serial) | Кадам (узбек сериал) 8-qism 2024, Октябрь
Anonim
FaceBot
FaceBot

Бул колдонмо сизге шрифтте жүзү бар, баасы төмөн ($ 39) кагылышууну болтурбоочу роботту кантип жасоону көрсөтөт. Биз муну жаңы арзан, жаркыраган OLED дисплейди колдонуу менен жасайбыз. Биздин студенттер роботторуна жүз кошууну жакшы көрүшөт. Алар роботтун кылып жаткан иштерине жараша өзгөргөн смайликтерди тартууну жакшы көрүшөт.

25 доллардан төмөн баада бир нече кичинекей арзан роботтор бар, алар сизге информатиканын негиздерин үйрөтүүгө мүмкүндүк берет. Бул роботтордун көйгөйлөрүнүн бири, алар роботту куруп жатканда ичинде эмне болуп жатканын ачык -айкындуулук менен камсыз кылбайт. 2018-жылы баары арзан баада сапаттуу OLED дисплейлердин болушу менен өзгөрө баштады. Бул дисплейлер төмөнкү артыкчылыктарга ээ:

  • Алар абдан жарык жана жогорку контрастка ээ. Жарык бөлмө болсо дагы аларды ар тараптан окуу оңой.
  • Алар жакшы чечимге ээ. Мен колдонгондор 168x64 пиксел. Бул биз колдонгон мурунку дисплейлерден дээрлик 4 эсе көп.
  • Алар аз кубаттуулукта жана роботуңуздун күчү азайып баратканда да туруктуу иштешет.
  • Алар салыштырмалуу арзан (ар бири 16 доллардын тегерегинде) жана баалар түшүп жатат.

Мурда аларды программалоо кыйын болгон жана арзаныраак Arduino Nanos менен колдонуу үчүн өтө көп эстутумду колдонушкан. Нанодо 2K же динамикалык RAM гана бар. Бул колдонмо бул көйгөйлөрдү кантип чечүү керектигин жана балдар программалоону жакшы көргөн роботту курууну көрсөтөт.

1 -кадам: 1 -кадам: Негизги роботту түзүңүз

1 -кадам: Негизги роботту түзүңүз
1 -кадам: Негизги роботту түзүңүз

FaceBotту куруу үчүн биз негизинен роботтон баштайбыз. Бир мисал - бул жерде сүрөттөлгөн $ 25 CoderDojo роботу. Бул робот арзан жана популярдуу Arduino Nano, жөнөкөй мотор контроллерин, 2 DC моторун жана 4 же 6 АА батареяларын колдонот. Көпчүлүк студенттер кагылышууну болтурбоочу роботту куруу үчүн пинг сенсорун колдоно башташат. 5V кубаттуулук системасын камсыз кылгандыктан, ал 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. RES - баштапкы абалга келтирүү
  4. SDA - Маалыматтар - бул Arduino Nano пин 11ге туташтырылышы керек
  5. SCL - Саат - бул Arduino Nano pin 13 менен туташышы керек
  6. VCC - +5 вольт
  7. GND - Жер

Дисплейди нан тактасына туташтыруу үчүн сизге дагы зым керек болот. Дисплейлер, адатта, сиз 7 дисктин башы менен келет, аны сиз дисплейге кошо аласыз. Мен 7 эркектен эркекке 20мк Dupont коннекторлорун колдондум жана аларды зымдардын дисплейдин арткы жагына чыгып кетиши үчүн, аларды lehimде иштеттим.

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 ичинде канча RAM колдонулганы. U8g2 - бул мен тапкан жалгыз китепкана, ал "Барактын режимин" колдонот, ал Arduino Nano менен иштейт.

Сиз бул китепкананы "Китепканаларды башкаруу" менюсунда "u8g2" издеп Arduino IEDге кошо аласыз. Ошондой эле кодду gethubдан түз жүктөп алсаңыз болот.

github.com/olikraus/u8g2

Мен колдонгон тест коду бул жерде:

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

Белгилей турган бир нече нерсе бар. SCL жана SDA пин номерлери комментарийленген, анткени алар нанодогу демейки казыктар. U8g2 үчүн конструктор негизги линия болуп саналат:

// Биз SSD1306, 128x64, бир барак, аты аталбаган, 4 зым, Аппаратура, SPI колдонуп жатабыз, ал 27% динамикалык эс тутумду гана колдонот

Биз бир барактык режимди колдонуп жатабыз, анткени бул режим эң аз RAM колдонот. Биз 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) үн ультрадыбыштуу динамиктен чыккандан микрофонго алынган убакыттын ортосундагы кечигүү убактысы көрсөтүлөт. Бул сан экинчи сапта сантиметрге айландырылат (Аралык см менен). Эсептегич экинчисинде экрандын жаңыртылып жатканын көрсөтүү үчүн издөө жаңыртылган. "Бурулууда …" аралык аралык бурулуш босогосу деп аталган белгилүү бир сандан төмөн болгондо гана көрсөтүлөт. Пинг аралыгы бул сандан жогору болсо, эки дөңгөлөк тең алдыга жылат. Эгерде сан бурулуш босогосунан төмөн болсо, анда биз моторлорду артка кайтарабыз (артка), анан багытын өзгөртөбүз.

Бул жерде ping сенсорунан баалуулуктарды кантип алууну жана 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 (); // фон үчүн жарык жүздү тарткыла.fillCircle (жарым кеңдик, жарым бийиктик, 31, АК); // оң көздүн караңгы дисплейи.fillCircle (жарымдын туурасы - 10, дисплейдин бийиктиги ()/3, 4, КАРА); // сол көз darkdisplay.fillCircle (жарым кеңдик + 10, дисплей бийиктик ()/3, 4, КАРА); // оозду көрсөтүү үчүн түз сызык тартуу.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 жана иш -чаралар үчүн идеалдуу, алар сиз компьютерлерди айланып өтүүнү каалабайт.

Сураныч, сиз жана студенттериңиз кандай жаңы жүздөрдү ойлоп тапканын бизге билдириңиз!

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

Сунушталууда: