Машинка управляемая через Bluetooth

    Давно хотел приобщить к программированию своего сына, но как это сделать?
    Прошли те времена, когда учились на бейсиках и паскалях. Пытался показать ему TurboPascal — даже кое-что вроде бы начало получаться, но как-то дальше не пошло…

    Решил сделать следующую попытку, когда познакомился с детским языком-конструктором Scratch. Это даже не язык — это средство создания скриптов путем перетаскивания на экране «блоков» и соединения их друг с другом. Теперь дело пошло получше. Ребенок смог сделать даже какую-то простую игру. Но ведь нужно двигаться дальше?



    Что бы как-то разнообразить «программирование» я придумал сделать машинку, но что бы ее поведением можно было управлять с компьютера программой на Scratch. То есть что бы ребенок смог бы как-то программировать логику поведения машинки.

    В самой среде программирования Scratch вроде бы даже есть средства для этого: видимо где-то существуют специальные платы ScratchBoard или SesorBoard подключаемые к компьютеру через последовательный порт.



    Эта ScratchBoard плата может посылать в компьютер значения некоторых датчиков (четыре аналоговых датчика A,B,C,D, датчик света, датчик звука, кнопка и т.д.). Из компьютера в плату могут подаваться команды одному мотору: «вкл»/«выкл», направление «туда»/«назад» и мощность от 0 до 100. Программа (скрипт) управления мотором в среде Scratch может выглядеть, например, вот так:



    Чем-то напоминает кубики лего — соединяешь разные блоки и получается программа. Ребенок вполне может освоить.

    Собственно была идея сделать что-то движущееся, но управляемое из Scratch программы.

    Сразу возникает несколько проблем. Первая проблема — как соединить двигающуюся машинку с компьютером — провода явно не подходят. Вторая проблема — это соединение должно быть в виде «последовательного порта», потому что программа Scratch понимает только так. Третья проблема, нужно знать протокол передачи данных в обе стороны. Четвертая проблема — как управлять машинкой если Scratch знает только один мотор? В пятых… Ну хватит перечислять проблемы! Нужно их решать!

    1. Приобрел модуль Bluetooth LMX9838. Этот чип хорош тем, что при подаче питания он сразу готов к работе и с компьютера можно сразу установить связь в виде виртуального последовательного порта. Решается сразу 2 проблемы — беспроводная связь и COM-порт. Как припаять этот модуль к платке можно почитать здесь. Чип BGA — все контакты снизу, но к счастью большинство ног не используется. Если перевернуть микросхему и подпаивать проводки сверху, то это сильно упрощает работу. Получился вот такой модуль:



    2. С помощью гугла нашел описание протокола Scratch на каком-то японском сайте. Теперь вы можете с ним поближе познакомиться сами, уже на русском языке.

    3. Взял плату «Марсоход» — это такой «электронный конструктор» на ПЛИС Альтера. Сделал и зашил в ПЛИС платы проект который реализует последовательный приемопередатчик и принимает и посылает данные по протоколу Scratch, управляет моторами. Еще к плате «Марсоход» подключил два фото-транзистора — это будут «глаза» машинки. Я направил их вниз к земле. Планировал, что бы машинка двигалась по белому листу бумаги, на котором будут нарисованы, например, какие-то препятствия. Собственно эти датчики дают значения «темно» или «светло», а я их передаю в Scratch, как показания сенсоров «C» и «D».



    4. Для управления двумя моторами было решено использовать такой параметр как «мощность». Скрипты языка Scratch могут задавать подключенному через ScratchBoard мотору «мощность». Я решил так. Если мощность равна нулю, то первый мотор может работать, а второй нет. Если мощность 50, то могут работать оба мотора. Если мощность установлена 100, то может работать второй мотор, но не первый. Конечно не совсем изящно, но какой-то выход из положения. Включаются же они по команде «мотор вкл», а выключаются по команде «мотор откл».

    Ну вот в общем и все.
    Вся машинка в сборе выглядит как-то так: два мотора на платформе на гусенечном ходу, плата «Марсоход», оптические датчики-глаза, модуль Bluetooth. На большом листе бумаги рисуем восьмерку черной гуашью (и чтоб высохла).

    Ребенок делает программу на Scratch — примерно вот такую:



    Потом включаем машинку, устанавливаем Bluetooth связь между компьютером и машинкой. И запускаем Scratch программу: Машинка двигается по полосе, и эту логику задает наша Scratch программа!



    ЗЫ: Уже на следующий день мне пришла в голову мысль. Есть машинка с Bluetooth. Может можно управлять ею с сотового телефона? К вечеру программа на Java для моей nokia была готова!



    Я написал ее с помощью Sun Wireless Toolkit. Об этом проекте можно подробнее почитать здесь. Там же есть и исходники java программы.
    Поделиться публикацией
    Ой, у вас баннер убежал!

    Ну. И что?
    Реклама
    Комментарии 88
      +81
      Повезло ребенку с папой! =)
        +40
        Вы уверены что это всё делалось только для ребенка? =)
          +34
          Когда у меня родился сын меня тоже посетила мысль «теперь точно можно будет купить вертолет! или не, большую железную дорогу, так чтобы на всю комнату ;) »
            +1
            А я думаю так — нужен сын — чтобы ему купить железную дорогу на всю комнату и играть, играть! И жена ничего не возразит))
          0
          У нас на втором курсе была задача смастерить робота, который гоняет по черной полоске белом фоне. Потом оказалось, что даже есть такое соревнование. Может для него такую игрушку и сделали
            0
            Я на одной конференции для школьников видела похожую штуку, только управление осуществлялось голосом. Есть куда развиваться дальше!)
          +2
          О, так это тот же, что показывали на StartupPoint в Ростове-на-Дону (26.01)! Классная штука :)
            0
            Да, я тоже был и помню эту машинку, сделанную на Марсоходе (marsohod.org).
            +1
            В моём детстве таких игрушек не было, да и отец не программист :)
              0
              Добавлено: А какова финальная стоимость машинки?
                +8
                Bluetooth микросхема LMX9838 ~1000рублей
                плата «Марсоход» ~1000рублей
                два мотора с редукторами ~400рублей
                колеса с гусеницами -???
                  +14
                  PROFIT
                    0
                    Можешь ссылкой поделиться, где механику брал?
                +6
                Об аналоге: Lego Mindstorms
                  0
                  Можете еще попробовать LEGO Mindstorms — всё просто собирается, модернизируется и работает. Из языков доступны визуальные NXT-G (родной), ROBOLAB, а также текстовые RobotC, NXC/NQC, Lejos (Java).
                  Рекомендую. То, что можно собрать (осторожно, почти реклама): раз и два.
                    +2
                    Хотя цена, конечно… Это минус.
                    Но это единственный конструктор, который можно официально закупить в школе и использовать на уроках.
                      0
                      Сталкивались. Здесь именно DIY, а там конструктор. Это больший минус чем цена (ИМХО).
                      0
                      Эта «почти реклама» собрана как минимум из 3-х LEGO Mindstorms (3 x ~12 т.р. = ~36 т.р.) — дороговато будет для игрушки.
                      Три я не потяну — родные не поймут. Хотя на один набор я разорился, и теперь мы с сыном (8,5 лет) активно осваиваем основы LEGO-строительства и LEGO-программирования.

                      PS: Сам всегда мечтал о самодельном роботе, но, к сожалению, моё детство прошло без него. Теперь вот у меня «второе» детство, вместе с сыном. Конечно LEGO Mindstorms это ни разу ни DIY, но сын с паяльником дружит пока не очень, а у папы (т.е. у меня) банально не хватает на всё времени.
                        0
                        Там используется 2xNXT и шесть моторов — как раз два набора. Деталей почти нет — каркас сделан из водопроводных труб.
                        Это, конечно, дорого. Я просто привёл пример, что можно собирать не только машинки с человечками, а сложных роботов и использовать в них ТАУ,
                      –18
                      Мне это все напомнило, как детей отправляли во всякие спортивные секции или учиться играть на муз инструменте.

                      А вы спрашивали вашего сына, что ему хочется или интересно ли ему вообще программировать?

                      От спортивных секций хоть какой то толк, здоровья больше будет, осанка, зрение не испортятся.

                        +12
                        От программирования тоже будет серьезный толк. Умение мыслить логически, выстраивать алгоритмы, проектировать и вообще работать башкой.
                          –20
                          Ага, в очках, тощий и прыщавый.

                          Для этого надо учить не программированию, а развивать навыки, которые вы описали. Например, шахматы, логические игры и тп.

                          Вот что-то люди в раннем возрасте не начинали программировать но были и развиты и логически, и выстраивали алгоритмы и тп.
                            +11
                            А вы, я вижу, эксперт.
                            Я вот, с ранних лет увлекаюсь программированием, но под ваши эпитеты не подхожу.
                            Может, дело просто в том, что родителям неплохо бы контролировать чадо во избежание перегибов, а?
                            Или это я просто что-то не так делаю?
                              –19
                              [А вы, я вижу, эксперт.]
                              Не эксперт, опыт подсказывает.

                              [Я вот, с ранних лет увлекаюсь программированием, но под ваши эпитеты не подхожу.]
                              Ну это еще надо доказать.

                              [Может, дело просто в том, что родителям неплохо бы контролировать чадо во избежание перегибов, а?]
                              Не противоречит ни одному моему слову.

                              [Или это я просто что-то не так делаю?]
                              Может быть
                                +4
                                >Не эксперт, опыт подсказывает.

                                Какой такой опыт?
                                Сколько программистов вы воспитали?
                                  –12
                                  [Какой такой опыт?]
                                  И свой и чужой

                                  [Сколько программистов вы воспитали?]
                                  Ну по крайней мере одного — себя.

                                    +8
                                    irony:
                                    Тощий, прыщавый, с плохим зрением и ужасной осанкой? И спорт наверное не любите?
                                      +5
                                      >Ну по крайней мере одного — себя.

                                      Не стоит, наверное, экстраполировать личные проблемы и переживания на всех вокруг.
                                      Люди — разные.
                                      Среди моих знакомых айтишников задротов вообще в принципе мало. Не нужно быть программистом чтобы быть задротом и наоборот.
                                +4
                                Что мешает заниматься с ранних лет и спортом и программированием?
                                  +1
                                  Мне ничего не мешает.
                                  Думаю, что оратор либо адски стереотипичен, либо у него есть сын/друг/сын друга/он сам, подходящий под это определение.
                                    0
                                    Да и думаю, тут вообще много кто занимается спортом (даже на работе, в какой-то мере)
                                    0
                                    Неумение планировать свое свободное время?
                                    Желание заниматься другими вещами?

                                    Меня тоже заставляли спортом заниматься, но мне не хватало времени на свои интересы и через короткий промежуток времени я бросил это.

                                    Это идеальный случай, если человек может и хочет совмещать и то и другое.
                                      +1
                                      >Это идеальный случай, если человек может и хочет совмещать и то и другое.

                                      Боюсь, вам это кажется идеальным только от того, что у вас у самого это не получается.
                                      Сколько вам лет, если не секрет?
                                        –1
                                        [Боюсь, вам это кажется идеальным только от того, что у вас у самого это не получается.]
                                        В детстве у меня это не получалось. Это правда.

                                        [Сколько вам лет, если не секрет?]
                                        Не секрет, 24.
                                        0
                                        Многие люди совмещают и работу, и спорт, и детей растят, и досуг, и еще время на хобби и на всякое самообучение остается. А как вы хотели, заниматься по жизни надо многими вещам и работать над этим надо много. Нравятся физические упражнения или не нравятся — неважно, все-равно без них нельзя, а значит хочешь не хочешь, а надо под них выделять время и силы. А если с ранних лет этого не понимаешь и не умеешь планировать время, родители должны заставлять.
                                          –1
                                          Я со всем согласен. НО, это с точки хрения прожитых лет. Сегодня я занимаюсь спортом, хоть и не испытываю к нему любви. У меня есть хобби, личная жизнь и сегодня я стараюсь все совмещать.

                                          Сегодня я понимаю, что были правы родители, когда заставляли ходить на спортсекции.

                                          Но вопрос в том, нужно ли ребенка заставлять учить программирование, понимаете?
                                      +2
                                      Насчёт шахмат. У меня есть друг — у него родители оба играют в шахматы и его младшего брата тоже приучили. Брат особым умением выстраивать алгоритмы и думать башкой, объективно, не блещет. И это не в силу возраста — это факт. Да, он неплохо играет в шахматы, но они научили его только играть в игру, а не думать башкой.

                                      А вот программирование (а программист всё же должен в первую очередь придумывать алгоритмы, а не писать код, ибо, по готовым алгоритмам и машинистка код напишет. знание синтаксиса — это лишь малая часть программирования) — как раз развивает логику и умение, простите, юзать мозг, а оно пригодится везде, даже если ребёнок — гуманитарий. А то сейчас ситуация такая, что фраза «Гуманитарным складом ума называется отсутствие технического» имеет место быть.

                                      И да, сразу скажу, что программиста я не воспитал ни одного, да и сам я — вчерашняя школота (18 лет мне, первый курс). Но мне это всё представляется как-то так.
                                        –1
                                        Да, что вы все налетели на этот комментарий.

                                        Извините, если обидел, но я и сам был таким и знаю что это такое.
                                        0
                                        И опять же, вопрос в том, а ХОЧЕТ ли этого ребенок?

                                        У меня родители хотели, чтобы я был врачом, и что теперь им надо было мне с самого детства приучать хирургии?
                                          +7
                                          а что делать если ребенок хочет часами сидеть «вконтакте»? это он кем хочет стать?
                                            –1
                                            Социологом?

                                            А если серьёзно, то сколько лет вашему ребенку? Я с раннего возраста пристал к компьютеру, я был помешан на игрушках, в 8 классе начал увлекаться программированием. Но в итоге я заработал искревление позвоночника, плоскостопие и проблемы с суставами. Ну и зрение ниже единицы.

                                            И сейчас мне приходится тратить время силы и деньги, чтобы хоть немного восстановить здоровье.
                                              0
                                              *искривление
                                                +2
                                                А как плоскостопие связано с компьютером?
                                                  +2
                                                  С отсутствием физической нагрузки.
                                                    +1
                                                    у меня была нагрузка. а плоскостопие все равно есть :)
                                                      0
                                                      а меня в детстве заставляли на пианино играть. А когда я реально этим загорелся — уже давно бросил муз школу — о чем сейчас дико сожалею. Да и музыка мозги развивает — факт. все равно, что то же программирование, имхо.

                                                      да, не все могут найти 100500 доводов для ребенка, почему ему нужно тем или иным заниматься, так что приходится не спрашивать. Зато в плане развития полезно.

                                                0
                                                надо отдавать в секции по спорту, гитаре, чему угодно, чтобы не было много свободного времени на просирание его в этих гребаных соцсетях.
                                                мр. фримэн правильно сказал, что сейчас людям хочется только «ржать, жрать и срать». и особенно быстро этот подход приживается в молодом поколении.
                                                  0
                                                  А еще можно научить планировать своё время. Это будет в несколько раз полезнее, чем, извините, просирание этого самого времени в школе и гитара вместе взятые.
                                                  Хотя это, наверное, не в пять лет. Но начать можно.
                                                  Просто стоит показать, что есть еще гитара, спорт и пр.

                                                  p.s. Хабр тоже в какой-то мере «соцсеть».
                                                    0
                                                    ну это продолжение того, что я сказал.
                                                    а хабр все же сеть для более взрослых, которым полегче избежать искушения просрать время, потому что иначе нечего будет жрать.
                                                      0
                                                        0
                                                        это статистическая погрешность, подтверждающая правило. :)
                                                +1
                                                Если один родитель — программист, то надо, конечно, думать.
                                                Если если программисты оба, то тут даже выбора быть не может :). Яркий пример — Гена Короткевич, про которого тут уже пару раз писали. После его победы в одиночку (!) над всеми студенческими командами на четвертьфинале NEERC, школьникам запретили в нём участвовать.
                                                  0
                                                  Во первых, он гений (по крайней мере так считаю я)

                                                  Во-вторых, посмотрите на его фотографии, на вид он очень хлюпкий, у него не развита мускулатура, неужели вы хотели бы, что ваш сын так выглядел?
                                                    0
                                                    1)Гений — не спорю. Мне кажется, что если оба родителя — программисты (в какой-то мере), то это не просто совпадение.
                                                    2)По мне и моему отцу тоже не скажешь, что мышцы присутствует не только на пальцах — просто такой склад тела и такие гены. Однако, разница со мной, каким я был 4 года назад (когда вообще не занимался), очень существенна. По крайней мере, так считаю я и мой тренер.
                                                  +1
                                                  Если хочет, то он потом все равно даст понять, что ему нужно. Пока маленький все равно не сможет нормально осмыслить и сформулировать свои желания (по крайней мере такие «дальновидные»). Вот если он вырастет и не захочет быть программистом, то просто выберет что-то другое. Меня родители всю жизнь в гуманитарные специальности пихали. В итоге когда компьютер появился, я понял что IT — это именно то, чем я хочу заниматься и как родители не пытались, не смогли заставить меня пойти работать по специальности.
                                                0
                                                Мне вас искренне жаль. у вас видимо было тяжелое детство с аккордеоном из под палки.
                                                Так может мыслить только человек с старой детской травмой.
                                                0
                                                Если кто-то захочет заняться подобным с помощью ардуино — есть уже готовые наборы, например такой. Сам я правда решил попробовать сваять судно на воздушной подушке. Если кто-то сможет по моторам/пропеллерам проконсультировать буду рад)
                                                  +1
                                                  По тематике двигателей, винтов, и прочих интересных вещей — рекомендую обратиться на форум моделистов forum.rcdesign.ru
                                                  Купить двигатели, регуляторы к ним, винты и прочие радости можно у китайцев www.hobbyking.com
                                                  Там не дорого, качество вполне нормальное.
                                                  Если хочется магазин в России, то вот есть например такой www.pilotage-rc.ru
                                                  По Украине не в теме, сорри.
                                                  ЗЫ. Не реклама! Просто поделился тем, чем пользуюсь.
                                                    0
                                                    Спасибо, буду смотреть.
                                                  0
                                                  Когда я был относительно маленький, мне подарили один из первых Lego Mindstorms. Собрал похожее шасси (в комплекте было два мотора, датчик освещённости и два сенсора-кнопки), в аналогичном конструкторе собрал программу и какое-то время с ним игрался. Очень печалило отсутствие циклов и убогие возможности «языка». Интернета тогда у меня не было, поэтому конструктор я забросил.
                                                  А совсем недавно узнал про альтернативные прошивки для контроллера и возможность писать программы для него на куче нормальных языков. Теперь жду не дождусь возможности добраться до набора и продолжить с ним развлекаться.
                                                    0
                                                    Добавлю, что на «программирование», по моим тогдашним личным впечатлениям, процесс сборки инструкций для робота походил мало.
                                                      0
                                                      сейчас там уже можно довольно сносные циклы делать :) и это чудесно :)
                                                      –1
                                                      охренеть
                                                        +12
                                                        Куда писать, чтобы стать Вашим сыном?
                                                          0
                                                          Красота! Осталось только поставить видеокамеру с радиопередатчиком — а там можно и распознавание образов прикрутить, и прочие штуки, ну и отправлять исследовать луну :)
                                                            +1
                                                            Движения по восьмёрке, мне кажется, могли бы быть более плавными — на телефоне-то бегает очень неплохо. Возможно, не стоит совсем останавливать один из двигателей, а просто замедлять его?
                                                              0
                                                              Проблема не в типе управления, а в характере.
                                                              Релейные регуляторы:
                                                              if (abs(v1 - v2) < 8) {
                                                                motorB = motorC = 100;
                                                              } else if (v1 < v2) {
                                                                motorB = 100; motorC = 0;
                                                              } else {
                                                                motorB = 0; motorC = 100;
                                                              }
                                                              

                                                              очень резки и движение получается скачкообразным.
                                                              Надо понять, что робот на самом деле видит не только «черное» и «белое», но еще и кучу переходных цветов (так как датчик собирает свет с некоторой области). Тогда можно написать пропорциональный регулятор:
                                                              int u = (v1 - v2) * k;
                                                              motorB = 50 + u;
                                                              motorC = 50 - u;
                                                              

                                                              Это даст гораздо более плавное движение — если робот чуть-чуть съехал с линии, он чуть-чуть изменит воздействие на моторы и выправится. Попробуйте (k у нас обычно порядка 2-5).
                                                              А далее можно прикруть ПИД и пр. радости ТАУ.

                                                                0
                                                                Да там проблема в кодировании управляющих сигналов. Оно, как я понял, не различит 50+u и 50-u. А вообще, почему бы не кодировать именно так? Мощность-50 — это для первого мотора, 50-мощность — для второго. Или это сложно для ПЛИС? Но, вроде, в ПЛИС легче сделать вычитетели, чем if'ы.
                                                                  0
                                                                  К сожалению, я не знаю отличий ПЛИС от микроконтроллеров. Поэтому, увы, ничего сказать не могу.
                                                                  Но на МК LEGO NXT результаты выполнения этих двух кусков кода принципиально отличаются.
                                                                    0
                                                                    Для плис это просто. В 10-15 вентилей уместится.
                                                                  0
                                                                  возможно, дело в том, что роботу надо сначала увидеть черную полосу, а только потом изменить траекторию?
                                                                  0
                                                                  Сколько сыну лет?
                                                                    +11
                                                                    Чем отличается грудь женщины от игрушечной железной дороги?
                                                                    ОТВЕТ: Ничем: обе созданы для детей, а играют с ними папы.
                                                                      0
                                                                      почему-то вспомнился мульт «Wall-E», особенно когда смотрел видео с восьмеркой на бумаге :)
                                                                        0
                                                                        Теперь вам остается поставить на машинку веб-камеру, прикрутить WIFI и по сетке смотреть/гонять по комнате :)
                                                                          0
                                                                          И ссылку на WEB-морду на хабр!
                                                                          –2
                                                                          Мне когда мощности для игр не хватало, я просил родителей купить более крутую видеокарту для решение контрольных работ по информатики :D
                                                                            +1
                                                                            Все мужчины, большие дети.
                                                                            Первая девочка была.
                                                                            Второго уже как 20 недель жду, еще 20 осталось.
                                                                            Говорят, мальчик!
                                                                            Уже планирую, купить вертолет, железную дорогу и машинку на бензине с радио-пультом.
                                                                            Только вот не подраться бы за все эти прелести.

                                                                            Молодец, у моего друга, папа программист, сына научил.
                                                                            Теперь он высокооплачиваемый программист в Питере.
                                                                            Растит, программиста :)
                                                                              0
                                                                              Стоит найти ребенку набор старого советсткого конструктора. Если он им заинтересуется — то пойдет в развитии по правильному пути!
                                                                                0
                                                                                Блин, как же ребёнку повезло что у него такой отец!
                                                                                Снимаю шляпу!
                                                                                  0
                                                                                  Всегда интересовали подобные самоделки, но в силу своей криворукости к подобным вещам, ничего не выходит :)
                                                                                    0
                                                                                    Плохо, что написано как скрытая реклама. Почему просто не написать как есть? Вот мы такие, сделали это и продаем тут? А то ребенок, учить, взял плату, но при этом пол на видео тут и на сайте проекта одинаковый… Даже если и делали это все изначально для ребенка.

                                                                                    По теме проект заинтересовал, возможно приобрету у вас такую плату.
                                                                                      +2
                                                                                      Если можно, опишите подробнее или дайте ссылку почитать как работает микросхема блютуза.

                                                                                      Как можно мгновенно подсоеденить блютуз? Никакой авторизации нет? К нему может подключиться любой?
                                                                                      Могут ли пара и более подобных микросхем подключаться к друг к другу используя какой-то алгоритм авторизации, заранее прописанный? есть ли у микросхемы собственная память?
                                                                                        +1
                                                                                        Отвечу на примере модуля BTM-222.
                                                                                        Со стороны контроллера BT-модуль виден как обыкновенный COM-порт, т.е. подсоеденить его для односторонней связи можно только одним сигнальным проводом. Авторизация и другие опции настраиваются AT-командами со стороны контроллера. В простейшем случае авторизация нужна при «спаривании» один раз на хосте (вида «1111»). Два таких модуля могут связываться между собой. Последний раз такой модуль я покупал за 20$. Заявленные 100 метров отлично держит.
                                                                                        0
                                                                                        К слову, Scratch написан на Squeak Smalltalk
                                                                                          0
                                                                                          Смотрю на nokia 5500 тоже отклеилась наклейка под экраном ;)
                                                                                            0
                                                                                            а Wi-Fi можно прикрутить?
                                                                                              0
                                                                                              Можно, но гораздо сложнее и дороже.

                                                                                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                                            Самое читаемое