марсохід з конструктора makeblock на arduino

| комп'ютери, цікаве, ігри, linux, підказки, android, позитив, діти

цього року завчасу взявся вибирати подарунок синові до дванадцятого дня народження. шукав щось незвичне, щоби і його справді зацікавило, і користь від того якась йому ж була. майже одразу з'явилася думка придбати якийсь програмований конструктор — і збирати цікаво, і до програмування може інтерес викликати.

навіть і не пригадаю, звідки в мене таке в голові сиділо, але я приблизно уявляв собі, що треба шукати. трохи погугливши та почитавши, спинився на makeblock, а серед їх продуктів — на комплекті starter robot kit: в одній коробці все, що треба для збирання гусеничного «марсохода» на базі arduino, з керуванням по bluetooth, можливістю додавати модулі та з доступом до вихідних кодів програми. ну чи ж не мрія?
  • вам посилка! про вартість, замовлення, термін доставки;
  • перші враження. про півгодини концентрованого хлопчачого щастя;
  • прикрий фейл. про те, що зібраний марсохід не хоче їхати;
  • без паніки! про те, навіщо читати далі;
  • головна біда. про брак детальної покрокової підказки в інструкції makeblock;
  • діагностика проблеми. про спроби зрозуміти, чому дистанційне керування не працює;
  • нова надія. про дві невеликих, але важливих події;
  • на роздоріжжі. про вибір програми для завантаження прошивки робота;
  • майже готово? про важливі налаштування перед завантаженням прошивки;
  • компіляція і завантаження. про підступний нюанс і done uploading;
  • поїхали! про успішне випробування;
  • резюме і плани. про те, як ще можна вдосконалити марсохід.
допис довгий, містить багато ілюстрацій, одне відео, і має щасливий фінал.

вам посилка!

на початку листопада замовив. звісно, ціна трохи кусається ($150 за версію з bluetooth, не враховуючи пересилки), але… як там жартують у фейсбуках, купуючи дітям дорогі іграшки, батьки здійснюють власні мрії?

шостого листопада замовлення відравили поштою dhl, а вже дванадцятого я тримав у руках акуратний пакунок. неймовірна швидкість! я звик чекати місяцями дрібні покупки на ebay, тож був приємно здивований.

не втримався, і одразу зняв захисне пакування dhl, щоби поглянути на коробку makeblock: якісний фарбований картон, приємні кольори, акуратне оформлення. сподобалося.

однак далі не розпаковував: до дня народження лишалося більше місяця, тож подарунок переховувався в конторі й трохи катався в багажнику. аж ось нарешті день «д»!

перші враження

конструктор тимко отримав ще вранці, очі загорілися. але день для всієї родини видався метушливий. приготуванння, гості, все на купу. кілька разів звучало «тату, нумо збирати робота». аж нарешті торт зі свічками, чай, прощання. прибравши начиння й завантаживши посудомийку, всілися з сином разом і відкрили коробку.

опис пише, що в наборі є все необхідне, аби зібрати діючий марсохід, за винятком шести батарейок.

механічна складова конструктора бездоганна! легкі, міцні алюмінієві деталі шасі, якісні гумові сегменти гусениць, міцненька і зрозуміло промаркована плата з контролером, акуратне пакування, інструменти в комплекті й зрозуміла покрокова інструкція для збирання марсохода — що ще треба?

коротше: в коробці makeblock нам прислали півгодини концентрованого хлопчачого щастя!

прикрий фейл

аж ось нарешті наш марсохід готовий. «очиці» його ультразвукового сенсора випромінюють харизму, і найперше нагадують про волл-і: здаєтся, що робот живий, зараз здригнеться, крутонеться на місці й помчить пакувати сміття!

понишпоривши шухлядами, знайшли шість батарейок АА і запакували в робота, зайвий раз перевірили підключення двох моторів, ультразвукового сенсора і модуля bluetooth та кабеля живлення — врешті-решт перемикаємо головний тумблер на платі контролера і спостерігаємо магію світла: маленькими світлодіодами робот сигналізує, що готовий приймати команди.

щоправда, для цього потрібно завантажити спеціальний додаток на смартфон чи планшет (є версії для android та apple), згадка про це є і в інструкції. отже, завантажуємо програму на свої смартфони — я і син, — і по черзі пробуємо.

пристрої паруються по bluetooth, додаток підключається до конструктора makeblock і…

…дзуськи! марсохід не їде. чому?!

без паніки!

в цім місці хочу зробити невеличку оптимістичну інтерлюдію: робот таки працюватиме! ось шестисекундний відеопруф:


хоча, звісно, в ту мить я був дуже сприкрений, та й син трохи розчаровано дивився на щойно зібраного робота.

головна біда

на мою гадку головна біда конструктора makeblock в тім, що після складання шасі, встановлення плати контролера і підключеня всіх кабелів і посилання на додаток для керування по bluetooth, друкована інструкція з комплекту полишає вас сам на сам з можливими проблемами: не даючи покрокових підказок з діагностики.

звісно, я одразу ж попрямував на вебсайт makeblock.cc — але і там не все гаразд в плані доступності інформації: на перший погляд її багато, але вона досить плутана й неповна. але найгірше: на моє нещастя, саме в той вечір частина посилань на інформаційні ресурси чомусь викидала мені помилку «bad gateway» — певно, були проблеми з сервером, на якому хостяться форум, вікі й частина підказок. і хоч ти лусни.

а в основі ж цього конструктора — справжній мікроконтролер arduino uno (строго кажучи, мікроконтролер там atmega328p, а arduino uno — назва усієї плати з інтерфейсною обв’язкою та роз’ємами); наче й цяцька — але дванадцятирічного хлопця не полишиш, як з lego, мовляв, розбирайся. та й далеко не кожен дорослий розбереться з ходу, не маючи досвіду програмування для arduino.

приміром, на кожному електронному модулі в наборі — на основній платі, ультразвуковому сенсорі й модулі bluetooth, — є оті дрібненькі червоні й сині світлодіоди, котрі явно слугують для індикації стану. але в інструкції — ані слівця про те, що означає, якщо синій світлодіод bluetooth блимає, і що — коли неперервно світиться.

діагностика проблеми

хоча, звісно, голова в нас на плечах не лише для того, щоби шапку носити, і маючи навіть невеликий досвід взаємодії з електронними гаджетами, певних корисних висновків можна дійти. червоний світлодіод на кожному з модулів — ймовірно, банальний індикатор живлення. вони всі горять.

синій світлодіод модуля bluetooth блимає одразу після включення робота — ймовірно, це режим очікування підключення (ну логічно ж, ні? ви ж підключали колись бездротову гарнітуру?) відкривши додаток makeblock на смартфоні, включивши bluetooth і пошукавши сусідні пристрої, знаходжу makeblock. тобто принаймні модуль bluetooth працює.

пристрої паруються нормально, і наче з'єднуються — програма на смартфоні каже, що з'єднання встановлено, а синій світлодіод на модулі bluetooth робота припиняє блимати і горить постійно.


але ані на команди з пульта керування двигунами робот не реагує, ані притомної інформації від ультразвукового датчика не показує.

на цьому я вирішив, що час спати. наступного дня трапилися дві події, котрі дали мені надію.

нова надія

по-перше, наступного дня makeblock поремонтував свій сайт — я отримав доступ до форуму і пішов шукати підказок. виявилося, що ми не самі з такою ж проблемою: на форумі та в системі коментування discus на самому сайті чимало покупців звітують про дуже схожі симптоми (ще приклад). переважно працівники підтримки makeblock досить розгублено реагують на ці звернення, але кілька разів я натрапляв на пораду поновити прошивку робота.

по-друге, ввечері після роботи я ще раз взявся до проблеми, і почав з того, що перевірив усі з'єднання та ще раз спробував підключитися смартфоном до робота… зненацька ультразвуковий датчик видав щось схоже на відстань до стіни! я клацнув джойстик — марсохід закрутився на місці!

більше робот не реагував на команди, але це вже було щось: скоріш за все, з механічною та електричною частиною все гараз, а проблема або суто програмна, або ж якась вада модуля bluetooth. в будь-якім випадку для початку варто спробувати поновити програму.

але як?

на роздоріжжі

я ніколи не програмував мікроконтролерів, не мав справи з arduino. довелося розбиратися. на платі робота (me orion board на базі arduino uno) є роз’єм micro usb — отже, можна підключити до ноутбука. форуми наполегливо радять при цьому відключити модуль bluetooth від основної плати.

що далі? usb-інтерфейс — лише для програмування, чи дає ще якісь можливості? для когось, хто добре знайомий з платформою arduino, це смішні питання, але 12-річний хлопчина і 40-літній дядько без досвіду шукатимуть чітких і зрозумілих відповідей на сайті makeblock. див. вище розділ «головна біда»…

makeblock пропонує три варіанти для програмування робота (в тім порядку, як я їх розглядав):
  • scratch (або mblock, або scratchbot — і тут плутанина);
  • ardublock (додаток для візуального програмування);
  • arduino ide (середовище програмування для платформи arduino).
scratch (mblock)
найперше зацікавився цим варіантом, бо scratch — це яскраве і просте у використанні середовище для візуального програмування, яке я колись встановлював і ми трохи пробували з сином програмувати інтерактивну анімацію.

якби makeblock пропонували лише свій додаток до scratch, а саме середовище я міг би встановити з репозиторіїв arch linux (точніше, з aur) — я би, можливо, і спробував. але вони «вдосконалили» scratch, додавши свої бібліотеки та перейменувавши на mblock, і запакували це для windows та mac os. воно ще й вимагає adobe air для роботи?! в сад!

ardublock
винахідникам з arduino захотілося зробити щось подібне до scratch, але своє, і вони прикрутили до свого середовища розробки візуальний редактор, назвавши його ardublock.

виглядає симпатично (хоч і не так якісно, як scratch), має версію для linux. але — це лише додаток до середовище arduino ide. то чи не простіше одразу встановити…

arduino ide
логічний фінал роздумів: arduino ide, «рідне» середовище програмування для платформи arduino. це найближче до «заліза» і найближче до коду, це велика спільнота користувачів, є версія для linux і навіть «рідний» пакунок для arch linux в репозиторії aur та окрема сторінка у arch wiki! коротше кажучи, найкращі шанси розібратися і знайти підказку, коли що.

для тестування я завантажив і розпакував 64-бітну версію для linux з офіційного сайту arduino.

майже готово?

з цього місця вебсайт makeblock знову стає корисним, зокрема сторінка з інструкцією до використання arduino. зокрема зрозуміло, що до arduino потрібно додати бібліотеки makeblock для програмування основної плати та взаємодії з різними датчиками і моторами. тепер завантажую архів з github і руками переношу теку makeblock з архіва до теки libraries в інсталяції arduino на комп'ютері з linux (користувачам windows простіше — для них ці бібліотеки запаковано в інсталяцію arduino від makeblock).

далі треба підключити робота кабелем до usb комп'ютера, не забувши попередньо відключити модуль bluetooth (робот тихенько цвірінькне, якщо включено мікродинамік — див. малесенький білий перемикач біля 8 роз'єму), а на комп'ютері в терміналі перевірити, як називається відкритий для usb порт:

ls -l /dev/ttyUSB*

вивід матиме приблизно такий вигляд (якщо до комп'ютера підключений лише робот, буде лише один рядок):

crw-rw---- 1 root uucp 188, 0 Dec 30 22:51 /dev/ttyUSB0

червоним кольором позначено елемент (в моєму випадку uucp), котрий зараз знадобиться, щоби дати arduino права на доступ usb (тут tivasyk — ім'я користувача):

sudo usermod -a -G uucp tivasyk

запускаю arduino і перевіряю, що пунrкт tools > port в головному меню активний і показує потрібний порт (в моєму випадку ttyUSB0), а в меню tools >board вибрано саме ту платформу arduino, на якій зібрано робота (arduino uno).

тепер можна завантажити вихідний код програми для робота — шукаємо в головному меню пункт file > examples > makeblockdrive > example > firmware_for_starter > bluetooth_ultrasonic, і текст програми з'явиться у (новому вікні) arduino ide. згодом в цьом коді можна спробувати розібратися, щось додати чи прибрати, але наразі нічого не чіпаю.

компіляція і завантаження

я одразу спробував скомпілювати програму (меню sketch > verity/compile, або просто ctrl+r на клавіатурі) — і отримав повідомлення про успішну операцію. люблю цю мить, коли нарешті, після довгого куріння мануалів і танців з бубнами, щось таки вдається!

наступний логічний крок — завантажити скомпільований код на плату робота (меню sketch > upload, або ctrl+u на клавіатурі). зрозуміло, що кабель usb ще повинен бути підключений. але тут я отримав помилку:

error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory

arduino чомусь хоче специфічну версію бібліотеки libncurses. arch wiki одразу підказала рішення: можна його обдурити, підсунувши лінк на цю ж бібліотеку, але іншої версії (спершу підглянувши в теці /usr/lib/, яку саме бібліотеку libncurses встановлено, в мене знайшлася libncursesw.so.6.0):

sudo ln -s /usr/lib/libncursesw.so.6.0 /usr/lib/libncurses.so.5

друга спроба… декілька довгих секунд arduino показує мені тривожне «uploading» з індикатором поступу операції… і раптом: done uploading!

поїхали!

час від'днати кабель usb від робота, під'єднати модуль bluetooth до основної плати (роз'єм 5), включити головний чорний перемикач ліворуч від роз'єма живлення.

трохи хвилюючись, я включив bluetooth на смартфоні, знову запустив додаток makeblock і в переліку проектів вибрав «robot tank» (там є ілюстрація, помилитися неможливо). з'єднання з сусіднім пристроєм makeblock — жодних проблем.

і тепер ультразвуковий датчик справно звітує про відстань до об'єкта попереду (120 см на скріншоті)! легкий дотик до віртуально джойстика — і марсохід поїхав.

резюме і плани

перепрошую за довжелезну епопею — але традиційно роблю це для себе, на випадок, якщо колись доведеться згадувати, як все це робиться. а можливо й стане в пригоді комусь, для кого коротке резюме «поновіть прошивку» на форумі звучить трішечки надто лаконічно.

марсохід бомбезний, гасає квартирою, мов навіжений. в автоматичному режимі (кнопка з індикатором праворуч ультразвукового датчика на віртуальному пульті) намагається чемно обминати перешкоди. але…

…вже хочеться більшого! наприклад:
  • зробити простенький корпус для модуля bluetooth, бо надто він тендітний, а робот любить перекидатися, переїжджаючи через капці;
  • модифікувати шасі, щоби покращити прохідність і стійкість (як зробив ось цей чувачидло);
  • …або навіть взагалі переробити підвіску для кращого повторення рельєфу;
  • додати пару ліхтарів (і можливість їх вмикати-вимикати з віртуального пульта), щоби веселіше було катати в напівтемряві;
  • винести ультразвуковий датчик на платформу з сервомотором, і навчити робота «крутити головою», вибираючи вільний шлях (як зробив оцей хлопчина);
  • додати компас, гіроскоп і навчити робота долати чи оминати перешкоди, тримаючи курс;
  • додати модуль wifi, простеньку веб-камеру з wifi і керувати роботом дистанційно?
на сайті makeblock купа додаткових деталей, а сам конструктор — opensource, тож вигадати можна багато чого.

поновлення (2016-10-06). пан злий викладач теж спробував робота в дії й написав трохи менш детальний огляд, але з купою цікавих фотографій конструктора на різних стадіях збирання, читайте: іграшка, про яку ми колись мріяли: makeblock robot kit.