+7-960-0655211 (Билайн)
+7-987-4207734 (МТС)
интернет-магазин
доставка по России и СНГ
нам уже 10 лет!

Форум

Страницы: 1
Androbot, робот, управляемый с телефона под android
 
0) Принцип действия: робот управляется с телефона. Через вайфай, компьютер и ИК. Изначально хотелось adsl модем, а не комп, но потом передумал. Отлаживать там очень не удобно, да и освободить UART не так просто...

1)Начнём с самого простого этапа: программа под android. Берёт данные экранного джойстика и передаёт их через TCP Socket на компьютер. Разбивается на три класса: джойстик(реализован довольно примитивно в плане украшательств), объект передачи данных и основной апплет(в котором эти объекты, поле для ввода адреса сервера и кнопка подключения). Из особенностей: передавать класс(а не строчку как я) по сокету очень неоптимально: занимает порядка килобайта, вместо 10 байт максимум у меня и это для двух чисел. Также сразу необходимо координаты дисплея пересчитать в свои т.к. дисплеи бывают разные(по разрешению).
Проверяем на десктопе при помощи tcpserver+ скрипт:
Код
#!/bin/sh
cat > /tmp/tcp.log

Ссылка на исходный код программы внизу.
2)Wi-Fi ну тут нам ничего колдовать не приходится, всё реализовано.
3)Компьютер - программа. Тут разбить можно на 4 класса: работа с «джойстиком»(т.е. с сокетом), работа с ком портом, работа с девайсом ком(uart) порта и связывание всего этого. В работа с сокетом ничего сложного нету, если что не ясно исходники открыты, я не убежал. С ком портом мною взят пример SimpleWrite от Sun(помним, скорбим). Работа с девайсом заключается в выводе трёх байт. Формат следующий:
0 байт - направление(3 - вперёд или 0 - назад)
1 и 2 байт - скважность для двигателей. Связывание сделано по хитрому: с джойстика данные постоянно сыпятся, поэтому берётся текущее значение, обрабатывается и отправляется на девайс только 4 раза в секунду(можно поменять). Координаты джойстика в скважность ШИМ и направление преобразуются довольно легко:
Если y>0, то едем назад(я взял систему координат мониторную(0,0 - это левый _верхний_ угол), а не математическую), иначе вперёд
если x>0, то левый движок на всю(255), а правый на 255-x.
иначе наоборот:
правый движок на всю(255), а правый на 255+x.
и домножаем левый и правый на |y|/255.
Выводим на девайс.

Проверяется отладочной информацией(которая должна поступать на контроллер)
4)Девайс. Мне было лениво тут что-то большое делать, поэтому я взял Texas Instruments Launchpad и сделал свою платку с 4 ИК светодиодами и полевиком. Резисторы последовательно светодиодам значительно ухудшают приём сигнала роботом, они не нужны. светодиоды работают всего 4 раза в секунду и то менее 50% времени.



Сначала я хотел принимать девайсом эти три байта из UART(софтового, привет любителям экономии от TI), обрабатывать, модулировать(для TSOP), выводить. А потом поленился и подумал: «а, лан, продулирую UART, там TSOP продемодулирует и готово, + контроль стартовых/стоповых битов готовый». Сделал. Долго бился головой тут: if ((counter==0)&&(P1IN&BIT2==0)), потом дошло, что надо: if ((counter==0)&&((P1IN&BIT2)==0)). Две скобки, а сколько времени.
Проверяем: цепляем анализатор на RX, modulated, TSOP_out. Опа, а половина импульсов теряется, похоже затея с роботом очень под угрозой. Так, стоп, а почему стартовый бит менее миллисекунды, у меня BAUDRATE=300. Плясками с бубном обнаружил, что у USB2UART на launchpad минимальная скорость 1200. Так вот почему я недавно не смог сделать софтовый uart с 300 бод(но это отдельная история).
Для понимания принципа модуляции, две картинки с анализатора:



Готово! Данные безошибочно модулируются, демодулируются. Чувствительность TSOP очень порадовала. Светодиоды светят в потолок, он белый и почти всё отражает. А если ложное срабатывание - то получается очень короткий импульс, который UART'ом считывется как 0xFF, а первый байт должен быть равен 3 или первый байт должен быть равен 0. Значит это не первый байт, следующий байт будет первым.

5) Сам робот. Эта железка делалась очень давно. Но для других целей, поэтому разъём для TSOP пришлось приделать «на соплях». Интересного в железе ничего нету: mc34063(boost)+lm7803+avr+2xhip4020. Механика: вырезанная из оргстекла платформа, мотор-редуктор от TAMIYA(не подумали они: для движения вперёд движки в разные стороны крутятся, а трение щёток... В результате едет не прямо, когда напруга на обеих движках одинакова) и шаровая опора. С программой тоже всё очень просто получилось: получить байты из UART, проверить, разложить по регистрам. Ну и предварительно проинициализировать периферию. Ну и если около секунды нету сигнала по ИК, то пищать.
С питанием проблема: аккума у меня нету, батарейки поздно(ночь уже) и дорого. Поэтому пока от модифицированной зарядки телефона samsung(другого самсунга :) ): токоограничительные резисторы заменены перемычками.




Фотки:





Видеозаписи:

http://www.youtube.com/watch?v=DrA7IwbRQwM
http://www.youtube.com/watch?v=FjyM8ZrJmn8
http://www.youtube.com/watch?v=_hajEhfD0pk
http://www.youtube.com/watch?v=wgw-hnwcOIw
Исходники, схемы, платы(eagle cad):
http://files.fh-up.ru/sources.tar.gz Если что забыл, пишите выложу
зы я думаю прямо в посте все исходники выкладывать не обязательно ;)
Изменено: parus - 11.11.2012 21:31:04
Страницы: 1
Читают тему (гостей: 1)