навіть і не пригадаю, звідки в мене таке в голові сиділо, але я приблизно уявляв собі, що треба шукати. трохи погугливши та почитавши, спинився на 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 робота припиняє блимати і горить постійно.
але ані на команди з пульта керування двигунами робот не реагує, ані притомної інформації від ультразвукового датчика не показує.
на цьому я вирішив, що час спати. наступного дня трапилися дві події, котрі дали мені надію.
нова надія

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

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