Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Эрон-дон-дон либо на что ещё может сгодится ваш Windows Phone

Anna | 17.06.2014 | нет комментариев
Здравствуй каждому програжителям!

Наверно, многим в детстве нравились машинки на радиоуправлении. Да и не только в детстве: я уверена, что и в возрастной категории 30 найдётся масса любителей бравый езды в крохотном масштабе. Вот и я с детства мечтала о такой машинке, впрочем девчонкам традиционно дарят не машинки, а кукол, и моя мечта оставалась невоплощённой до недавнего времени. Но сейчас я подросла, и простая радиоуправляемая машинка показалась мне довольно тоскливой. И в один очаровательный день мне в голову пришла идея, как себя развлечь и заодно модернизировать машинку: я решила организовать её управление со телефона по каналу WiFi.

Я загорелась этой идеей, тем больше что целевой телефон – Nokia Lumia 620, а программированием на C# я увлекалась и прежде. Работа над программной частью обещала быть ясной и интересной, но вот с аппаратной частью всё обстояло немножко труднее, и я стала гуглить и постигать матчасть.

Так как я не электрик, Дабы организовать работу аппаратной части моей машинки, пришлось довольно длинно шариться по просторам интернета в поисках гайдов по основам роботостроения для блондинок. Как неизменно, помог любимый Прогр, а именно данный пост, написанный языком, внятным даже для дюже далёкого от электроники человека. Там всё расписано дюже отлично, следственно на аппаратной части детально останавливаться не буду, расскажу лишь об различиях моей машинки от описанного там WiFi-бота:

• Так как машинка предуготовлена для веселия, а не для мониторинга помещений, ей ни к чему веб-камера (правда, может быть, в последующем стоит развить и эту тему…). То же касается и системы самостоятельной зарядки. Полного заряда аккумуляторов (я использовала Sanyo Eneloop AA ёмкостью 2500 мАч) абсолютно хватает по времени, Дабы вдоволь наиграться.

• Дабы каждая начинка влезла в корпус машинки, а также Дабы не исключительно маяться с пайкой (я же блондинка, всё-таки…) я использовала немножко меньший по размеру микроконтроллер Arduino Nano v3.0 с USB-интерфейсом. Присутствие USB-интерфейса, помимо подключения МК к роутеру без пайки, ещё и дюже облегчает процесс программирования ардуины: подключили к компьютеру -> залили скетч прямо из Arduino IDE -> наслаждаемся. Роутер я тоже брала иной, TP-LINK WR703N, он чуть поменьше TL-MR3020, но в остальном они фактически одинаковы.

• Так как МК к роутеру мы не припаиваем, а подключаем через USB, то и проброс UART’а производится виртуально, с поддержкой демона ser2net, тот, что по умолчанию присутствует в прошивке OR-WRT нашего роутера. Каждого-навсего необходимо добавить в файл ser2net.conf на роутере следующую строчку (либо заменить, если на 2000 порт теснее что-то прописано):
image
В тезисе, не непременно применять именно 2000 порт, дозволено взять всякий вольный.

Выходит, обобщу. Аппаратная часть машинки в моей версии кухонного роботостроения «подготавливается» по такому рецепту:

Ингредиенты:
Джипик на радиоуправлении, роутер TP-LINK TL-MR3020 либо WR703N, микроконтроллер Arduino Nano, драйвер моторов L293D, 2 недлинных microUSB кабеля, 4 аккумулятора.

Приготовление:
1. Перепрошить роутер прошивкой OR-WRT и провести первичную настройку.
2. Настроить связь с ардуиной с поддержкой ser2net.
3. Выдрать из машинки плату радиоуправления.
4. Подвести питание к роутеру. Как вариант, это дозволено сделать самым простым и явственным образом: так как запитка роутера производится через его microUSB интерфейс, отрезаем от одного кабеля ломтик надобного размера с тем концом, на котором небольшой разъём. Отрезанный конец подпаиваем к проводкам, идущим из батарейного отсека машинки (распиновка проводов: pin1 – V (5В), pin5 – V- (GND)), разъём втыкаем в соответствующее гнездо.
5. Подключить МК к роутеру с поддержкой второго microUSB кабеля и припаять надобные (см. дальше) выходы МК к соответствующим входам микросхемы-драйвера моторов, а её выходы – непринужденно к моторам машинки.

image
Структурная схема

Вуаля, сама машинка готова! Повторюсь, это дюже схематическое и упрощённое изложение порядка действий, больше подробные инструкции , SocketType.Stream, ProtocolType.Tcp); //создание и инициализация сокета SocketAsyncEventArgs socketEventArgs = new SocketAsyncEventArgs();//создание объекта-довода способов соединения и передачи данных сокета byte[] buf = new byte[1]; //буфер – массив байтов для передачи (в нашем случае имеет размер 1 байт)
Позже этого исполним подключение:

socketEventArgs.RemoteEndPoint = routerPort; //инициализация сделанного удалённого узла как финальной точки сокета
            S.ConnectAsync(socketEventArgs); //подключение к удалённому узлу
            socketEventArgs.SetBuffer(buf, 0, 1); //инициализация буфера данных для передачи

Функции улавливания нажатия и отпускания руководящих кнопок реализуются, соответственно, способамиMouseEnter и MouseLeave. Для исключения аварийных обстановок, связанных, скажем, с одновременным нажатием кнопок противоположных направлений, введём для всякой кнопки флаг, тот, что будет индикатором движения машинки в соответствующем направлении. Функции нажатия и отпускания у всех кнопок-стрелочек имеют идентичную конструкцию.

Нажатие:

private void [название кнопки]_MouseEnter (object sender, System.Windows.Input.MouseEventArgs e)
        {
            if (![флаг выбранного направления] && ![флаг противоположного направления])
            {
                buf[0] = [цифра-команда начала движения для выбранного направления];
                Socket.SendToAsync(socketEventArgs);
                [флаг выбранного направления] = true;
            }
        }

Отпускание:

private void [название кнопки]_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
        {
            if ([флаг энергичного направления])
            {
                buf[0] = [команда заключения движения для выбранного направления];
                Socket.SendToAsync(socketEventArgs);
                [флаг энергичного направления] = false;
            }
        }

Тут стоит подметить, что пересылку данных удалённому узлу следует изготавливать именно с поддержкой способа SendToAsync и не спутать его с сходственным способом, SendAsync. Разница состоит в том, чтоSendAsync посылает данные с нашего сокета на иной сокет, а SendToAsync – легко на удалённый узел, что нам и необходимо, следственно если спутать способы – данные не будут пересланы.

Также подмечу, что при тест-драйве машинки с ноутбука я нашла, что при одновременной работе обоих моторов, маршевого и поворотного, время от времени происходят аварийные обстановки как бы потери связи с роутером. Подозреваю, что это происходит из-за проседания напряжения на внутренностях машинки, потому что сходственные баги также были подмечены при низком заряде аккумуляторов. Как-никак, столько покупателей питаются от горемычных 4 батареек. Следственно я сняла с поворотных колёс пружинку, которая возвращала их в изначальное расположение, Дабы дозволено было запускать моторы ступенчато, и в мобильном приложении вероятность одновременной работы обоих моторов специально не предусматривала. Пока так, а когда найдётся метод улучшить систему питания машинки – тогда дозволено будет задуматься и о растяжении её функциональных врзможностей.
Сейчас дело осталось за малым: реализовать закрытие сокетного подключения и возврат на стартовую страницу, когда мы накатаемся. У меня эти функции исполняет кнопка в виде ключа зажигания:

private void key_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
        {
            S.Close(); //отключение и закрытие сокетного подключения
            NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
        }

Вот, в всеобщем-то, и всё, сейчас дозволено спокойно играться! Для полного погружения дозволено ещё добавить кнопку включения/отключения музыки, и поставить на проигрывание какую-нибудь подходящую песенку. Я, скажем, не удержалась, и моя машинка ездит под Lil Jon & the Eastside Boyz — Get Low.

Предлагаю вашему вниманию короткий видеоролик о итогах моего вдохновенного труда:

P.S.: Буду дюже рада конструктивной критике и оптимизационным предложениям. Но не судите сурово, пожалуйста, это мой 1-й план такого масштаба.

P.P.S.: Большое спасибо svavan за поддержка с аппаратной частью! Так как я с электроникой и процессом перепрошивки роутеров была знакома дюже туманно, я бы не совладала без этой помощи.

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB