Управляем arduino-машинкой при помощи g-сенсора со смартфона
Содержание
- 1 Download the mobile app and connect to our Arduino
- 2 Качаем приложение и подключаемся к нашему Arduino
- 3 Подключение через Software Serial
- 4 Графический интерфейс управления
- 5 Шаг 7. Загрузите скетч в Arduino.
- 6 Функция loop
- 7 Connection via Hardware Serial
- 8 Generate source code
- 9 Программа управления
- 10 Connection via Software Serial
- 11 Connection scheme
- 12 Data structure of control interface
- 13 Корпус робота
- 14 Step 3. Create a device token
- 15 Connecting the Bluetooth module
- 16 Описание
- 17 Если не подключается…
- 17.1 Проверьте, подключилось ли ваше устройство к облачному серверу
- 17.2 Проверьте наличие правильно загруженной программы
- 17.3 Проверьте связь между Arduino и ESP8266
- 17.4 Проверьте, подключается ли ESP8266 к точке доступа
- 17.5 Проверьте, подключается ли ESP8266 к облачному серверу
- 17.6 Проверьте прошивку ESP8266
- 17.7 Проверьте питание ESP8266
Download the mobile app and connect to our Arduino
Go to the section of the site «Download mobile application» and download to your smartphone or tablet the application. Of course your smartphone/tablet should have a built Bluetooth.
Run the application. Turn on Bluetooth, if it is off. Automatically begins searching for devices. All devices found will be listed.
Default modules HC-04 (05/06/07) are programmed name «INVOR» or «HC-04» («HC-05», «HC-06»). If the list of devices there is this name — it is your devise. We click on it. After some time required for connection to the module, you will be prompted to enter the password for pairing. The modules of HC-04 (05/06/07) have programmed password is «1234». Enter it. And end, we have opened our interface with a big button on the full screen!
Click on this button and look, as LED is blink on the board Arduino! Quite simply, it works!
Качаем приложение и подключаемся к нашему Arduino
Заходим в раздел сайта «Скачать мобильное приложение» и загружаем на смартфон или планшет приложение. Конечно же ваш смартфон/планшет должен иметь встроенный Bluetooth.
Запускаем приложение. Включаем Bluetooth, если он не включен. Автоматически начинается поиск устройств. Все найденные устройства будут показаны в списке.
По умолчанию модули HC-04 (05/06/07) имеют запрограммированное имя «INVOR» или «HC-04» («HC-05″,»HC-06»). Если в списке устройств появилось такое — то это ваше. Щелкаем в него. После некоторого времени, необходимого на соединение с модулем, вам будет предложено ввести пароль для сопряжения. Опять же модули серии HC-04 (05/06/07) имеют запрограммированный пароль «1234». Вводим его. И ВУА-ЛЯ, нам открылся наш интерфейс с большущей кнопкой на весь экран!
Нажимаем на эту огромную кнопку и наблюдаем, как загорается светодиод на плате Arduino! Все просто, все работает!
Подключение через Software Serial
Позволяет подключить модуль к произвольным контактам микроконтроллера. Какие контакты использовать, необходимо указать в панели настроек подключения модуля. Так же в панели настроек указывается скорость передачи данных для порта. Модуль ESP8266 по умолчанию настроен на скорость 115200 бит/сек. Для работы через SoftwareSerial необходимо предварительно настроить скорость передачи данных ESP8266 на более низкую скорость. Стабильная работа модуля возможна на скорости не более 19200 бит/сек. Для изменения скорости работы последовательного интерфейса модуля, необходимо его подключить к консоли для возможности выполнения AT команд. Скорость работы модуля может быть изменена при помощи AT команды «AT+UART_DEF=19200,8,1,0,0».
Есть некоторые ограничения на использование контакта RX для плат Arduino. Ограничения связаны с поддержкой прерываний на соответствующих контактах микроконтроллера.
- Arduino UNO и Nano для RX нельзя использовать контакт 13(LED);
- Arduino Mega и Mega2560 для RX можно использовать только следующие контакты: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8(62), A9(63), A10(64), A11(65), A12(66), A13(67), A14(68), A15(69);
- Arduino Leonardo и Micro для RX можно использовать только следующие контакты: 8, 9, 10, 11, 14, 15, 16;
Так же при использовании SoftwareSerial вы должны принять следующие ограничения:
- Нет возможности работы на больших скоростях передачи данных. Не рекомендуем использовать скорость соединения более 19200 бит/сек.
- Некоторые библиотеки, которые так же используют прерывания, могут работать не корректно, или же их использование может сделать неработоспособным данный способ подключения. Например библиотека Servo будет подергивать сервоприводы.
Пример подключения модуля ESP8266 для SoftwareSerial к контактам 2(RX) и 3(TX) на рисунке
Обратите внимание, что необходимо контакты подключить перекрестием, т.е. контакт Arduino 2(RX) к контакту TX модуля, и контакт 3(TX) к контакту RX модуля
Графический интерфейс управления
Откройте редактор интерфейса на сайте RemoteXY.com и создайте интерфейс управления, приведенный на рисунке ниже. На интерфейсе расположите правый и левый слайдер для правой и левой руки, слайдер для вращения головы. Установите две кнопки для управления глазами. Так же установите переключатель. Его мы будем использовать для включения режима автоматического моргания глазами.
Переименуйте слайдеры, назовите их slider_left, slider_right и slider_head соответственно. Так же переименуйте кнопки. Назовите их button_left и button_right соответственно.
Так как наш проект подразумевает использование библиотеки servo.h, выберите в настройках проекта формирование исходного кода для Arduino (Serial), library version. Напомню, что библиотека servo.h конфликтует с библиотекой SoftwareSerial.h, по этому мы ее использовать не будем.
Сформируйте и загрузите исходный код проекта графического интерфейса к себе на компьютер. Не забудьте загрузить и установить библиотеку RemoteXY для Arduino IDE. Скомпилируйте и загрузите скетч в плату Arduino. Используя мобильное приложение RemoteXY проверьте, что ваш смартфон может соединиться с вашим новым проектом. Не забудьте, что модуль Bluetooth необходимо подключить к аппаратному последовательному порту к пинам 0(RX) и 1(TX). Если смартфон соединился успешно, тогда идем дальше.
Сформированная структура для переменных RemoteXY в скетче проекта должна выглядеть следующим образом.
Шаг 7. Загрузите скетч в Arduino.
Скетч загружается в Arduino обычным способом. Однако из за того что модуль ESP8266 подключен к контактам 0 и 1, программирование становится невозможным. Компилятор будет показывать ошибку.
Перед программированием отсоедините провода идущие к ESP8266 от контактов 0 и 1. Произведите программирование. Затем верните контакты на место. Нажмите кнопку сброса Arduino.
Примечание: Первый признак того, что программирование прошло успешно, это мерцание синего светодиода на модуле ESP8266 сразу после сброса. Мерцание синего светодиода означает обмен данными между Arduino и ESP8266. В эти полсекунды Arduino производит настройку ESP8266 для подключения к точке доступа. Через некоторое время светодиод снова моргнет, что означает попытку зарегистрироваться на облачном сервере RemoteXY.
Функция loop
Функция loop() имеет вызов обработчика RemoteXY_Handler (). Не удаляйте этот код. Обработчик RemoteXY_Handler должен вызываться в каждом цикле программы. Вызов необходим для того, что бы библиотека RemoteXY могла обработать очередную порцию данных об элементах управления, переданных со смартфона и предать на смартфон новые данные о состоянии элементов индикации.
В функции loop вы реализуете программу, решающую вашу задачу с использованием графического интерфейса. Для взаимодействия с графическим интерфейсом вы должны использовать поля структуры RemoteXY, которые соответствуют элементам управления и индикации интерфейса. Для того, что бы узнать состояние элемента управления, вы должны причитать поле данных, соответствующее этому элементу. Что бы изменить состояние элемента индикации на графическом интерфейсе, вы должны записать новое значение в поле структуры RemoteXY, соответствующее этому элементу.
Внимание. Не рекомендуется в процедуре loop использовать задержки delay () и другие
Если обработчик RemoteXY_Handler не сможет во время передать необходимую информацию на смартфон, произойдет разрыв соединения.
Пример кода для взаимодействия с элементами управления и индикации
Connection via Hardware Serial
It allows to connect the module to the microcontroller pins, supporting one of the hardware serial ports. For different Arduino boards are different ports and contacts. Hardware serial allows to work motule at a maximum connection speed of 115200 baud. The baud rate for Arduino is selected in the module interface settings of editor. ESP8266 must be to pre-configured to work at the same speed as the Arduino. The baud rate setting of module can be made via AT commands. Next Arduino serial ports are available:
- Arduino UNO and Nano: Serial (RX-0, TX-1);
- Arduino MEGA and MEGA2560: Serial (RX-0, TX-1), Serial1 (RX-19 и TX-18), Serial2 (RX-17 и TX-16), Serial3 (RX-15 и TX-14);
>Which port to use, and therefore the pins should be connected to the module, you must select in interface settings of editor. It should also be borne in mind that for Arduino boards Serial port enabled for the microcontroller programming, and if you decide to use this port, you must disconnect the ESP8266 module when programming it. A good solution is to use the boards Arduino MEGA any port other than Serial.
Example of HC-05(06) module connecting via HardwareSerial by pins 0(RX) and 1(TX) on the picture. Please note that you must connect to pins the cross hairs, pin 0(RX) of Arduino to TX of ESP8266 module and pin 1(TX) to the RX pin of module.
Generate source code
Our interface design is ready. Before you get the source code for our microcontroller, you must specify for which platform we want to get it. Our platform — Arduino. To communicate with the Bluetooth module will use SoftwareSerial. This will give us an opportunity to connect the Bluetooth module to virtually any microcontroller pins. This setting must be selected in project configuration field.
Now press the button «Get source code». If you are not registered, you must register to get a project source code.
On the download page of the source code is the code of the sketch program for the Arduino microcontroller. This code implements a graphical management interface that was created in the editor. To compile this sketch also need to install the RemoteXY library. Download library by link and install in the Arduino IDE using instruction.
Click the «Download» link and download the source code of a zip archive. Unzip it and open the file project.ino in the IDE Arduino.
Note that in the project (function main) already as an example our button connected to the pin 13. This pin is standard for Arduino board is a LED that allows testing program. Them we are going to blink. We do not need to fix anything in this part of the code.
We generally do not need to be corrected. The code compiles without errors completely. But do not be in a hurry, we still need to set up a connection with the Bluetooth module.
Программа управления
Войдите в редактор на этом ресурсе и сконструируйте следующий интерфейс управления:
Установите по центру экрана «Джойстик». В свойствах джойстика выберите установку дополнительного элемента управления «Включить G сенсор». Выберите положение переключателя G-сенсора «Низ-лево». Так же в настройках можете изменить цвет на красный. В дальнейшем джойстиком мы будем управлять движением машинки.
Установите «Переключатель». Разместите его левее джойстика. Можете так же изменить его цвет. Переключателем мы будем управлять светодиодом на плате Arduino на пине 13.
Если вы все правильно сделали, у вас должен получиться примерно такой интерфейс управления:
Откроем загруженный скетч в IDE Arduino. Скетч прекрасно компилируется без ошибок. Однако, в нем конечно же нет кода для управления нашей машинкой. Наша задача написать этот код. Для образца мы будем использовать загруженный пример.
Обратите внимание на определение структуры RemoteXY в скетче проекта. Структура содержит поля, полностью соответствующие установленным на интерфейсе управления элементам управления
Мы видим переменные joystick_1_x и joystick_1_y, отражающие координаты x и y нашего джойстика, а так же переменную switch_1, отражающую переключатель.
Далее приводится основной код программы, в который уже встроено управление моторами нашей машинки. Вы можете просто скопировать данный код в свой скетч, или же выборочно добавить необходимые куски кода в загруженный пример.
В самом начале определяются номера пинов, которые будут использованы для управления моторами. Далее номера пинов группируются в два массива, для правого и левого мотора соответственно. Для управления каждым мотором через драйвер на чипе L298N необходимо использовать 3 сигнала: два дискретных, указывающих направление вращения мотора, и один аналоговый, определяющий скорость вращения. Данными преобразованиями у нас занимается функция Wheel. На вход функции передаем ссылку на массив пинов выбранного мотора, и скорость вращения как знаковое число от -100 до 100. Если передали скорость 0, то мотор отключается.
В предопределенной функции setup настраиваются пины на работу как выходы. Для аналогового сигнала используются пины, которые могут работать как ШИМ преобразователи. Это пины 9 и 10. Они не требуют настройки в среде Arduino.
В предопределенной функции loop в каждой итерации работы программы вызывается обработчик модуля RemoteXY. Далее происходит управление зажиганием светодиода, далее управление моторами. Для управления моторами из структуры RemoteXY считываются поля по координатам джойстика X и Y, на основе координат выполняется математическая операция расчета скорости для каждого мотора, и вызывается функция Wheel, задающая скорость мотора. Данные вычисления выполняются в каждом цикле работы программы, обеспечивая непрерывность вычисления управляющих импульсов моторов на основе координат джойстика.
Залейте получившейся скетч Arduino в контроллер. Загрузите и запустите мобильное приложение на ваш смартфон или планшет. Соединитесь с вашим устройством и можете им управлять. Джойстиком можно управлять в обычном режиме, перемещая движок пальцем. Можно включить G-сенсор, и движок джойстика будет перемещаться сам в зависимости от наклона вашего смартфона.
Если после сборки вашего устройства, один или оба мотора вращаются в противоположном направлении, поменяйте провода местами при подключении мотора.
Connection via Software Serial
It allows to connect the module to an arbitrary microcontroller pins. The pins used must be select in the module interface settings of editor. Also in the settings must be select the baud rate for serial port. ESP8266 default configured to 115200 baud. To work through SoftwareSerial, must configure the transmission speed ESP8266 to a lower speed. Stable operation of the module is possible at a speed of no more than 19200 baud. To change the speed of module serial interface, must to connect it to the console to the possibility of the AT commands. Module serial interface speed can be changed with the AT command «AT+UART_DEF=19200,8,1,0,0».
There are some limitations on the use of the RX pin for Arduino boards. Limitations associated with do not support to pins interrupt of the microcontroller.
- On Arduino RX doesn’t work on pin 13;
- On Mega and Mega2560 only the following can be used for RX: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8(62), A9(63), A10(64), A11(65), A12(66), A13(67), A14(68), A15(69);
- On Leonardo and Micro only the following can be used for RX: 8, 9, 10, 11, 14, 15, 16;
Also, when using SoftwareSerial you should take the following limitations:
- No ability to work at high baud rates. It is not recommended to use a baud rate of more than 19200.
- Some libraries, which also uses interrupt may not work correctly. For example Servo library, the servos will twitch.
Example of ESP8266 module connecting via SoftwareSerial by pins 2(RX) and 3 (TX) on the picture. Please note that you must connect to pins the cross hairs, pin 2(RX) of Arduino to TX of ESP8266 module and pin 3(TX) to the RX pin of module.
Connection scheme
We used micro servo which power is connected directly to the + 5V power supply board Arduino. This is not the right solution, since the servo consumes large enough current under load, and can interfere with the operation of the microcontroller. The correct solution is to power the servos from a separate power. The scheme shows the servo and the Bluetooth module connection to the board Arduino. Bluetooth module HC-06 is connected to the hardware serial port. It should be switched off when programming the microcontroller.
If you have collected a scheme, you have to download the sketch in your Arduino. Next download mobile app RemoteXY, and can connect to your Arduino. By moving the slider on the screen of smartphone/tablet, you can control servo.
Data structure of control interface
This part of the code define the structure of RemoteXY designed to interact with the graphical interface. This is the structure you should use when developing their solutions using the interface. The structure contains the definition of data in each element of the interface. You can read the state of an element. For example, to find out, pressed the button on the graphical interface or not pressed, you should be read the value of the field of RemoteXY structure, responsible for this button. You can also see the position of the joystick or slider, reading the value from the corresponding field of RemoteXY structure. You can easily transfer data to the display elements, such as LEDs. It is sufficient to record the new value in the field of RemoteXY structure corresponding to that element.
The example code fragment below.
Корпус робота
Робот состоит из четырех деталей, вырезанных из гофро-картона. Это туловище, голова и две руки. Все детали вырезаны при помощи ножа. Так же ножом необходимо надрезать места сгибов. Детали можно склеить пластиковым клеем используя пистолет для его разогрева. Для установки сервоприводов на туловище необходимо прорезать прямоугольные отверстия. Для закрепления сервоприводов в отверстиях используется тот же пластиковый клей. На голове и руках, там, где присоединяется вал сервопривода, установлены качалки, которые клеятся изнутри к корпусу при помощи все того же пластикового клея. Мы не будем приводить точных размеров и чертежей, у вас не должно вызвать трудности повторить конструкцию.
В голове прорежьте два отверстия, в которые установите два светодиода. Это будут глаза. Глаза так же будут зажигаться дистанционно
Step 3. Create a device token
Press the button «My tokens». To register the device token, registration on the site is required.
Notice. Each device that is registered on the RemoteXY cloud server, must have a unique registered token. To connect to the device from a mobile application, you must also specify this token. Tokens are created in the personal cabinet of the RemoteXY site.
On the list of your tokens, press the «Create new token» button. In the window that opens, specify the name of the device for which the token is created, and select one of the available cloud servers. Then press the «Create» button.
A new token should appear in the list of tokens.
Notice. In the list of device tokens in your account, you can monitor the status of your device in the «Device Status»column. The status can be one of the three following:
- disconnected — which means the device is not connected to the cloud server;
- connected — which means the device has been registered on the cloud server and is ready to connect from the mobile application;
- used — which means the fact that the device is used by the mobile application;
- ? — which means the fact that the cloud server is not available.
Return to the editor and select your newly generated token in the «Token» field.
Connecting the Bluetooth module
Now we need to physically connect a Bluetooth module to the board Arduino. Module HC-04 has the 4th contact (they are signed directly on the board). Two of them — the power. For module used a standard Power + 5V from Arduino board.
The other two — a UART interface: RX and TX, responsible for receiving and transmitting data. RX is necessary to connect to pin on the Arduino, which we have function TX, TX and pin to pin on the Arduino, having a function RX. How do you know which pins on the Arduino are responsible for the RX and TX module communication? Very simple.
In the sketch code there are two definitions pins, it connected to the Bluetooth module. It has two definitions, find these lines of code. They defined, what pins will be used when configuring SerialSoftware:
Thus, contact RX of Bluetooth module connected to pin number 3 of board Arduino, and contact TX — to pin number 2 of the board. Of course you can change the pin numbers of your choice (see the documentation at SerialSoftware, since not all the pins can be used in emulation software UART).
Now you can download code to microcontroller. Do it!
Описание
График отображает изменение значений переменных на оси времени. График работает с числами с плавающей точкой типа float.
График строится на основе текущих значений, передаваемых из контроллера, когда установлено соединение. Архивирование значений выводимых на график производится на стороне смартфона. Данный элемент индикации не предусматривает какого либо архива данных на стороне контроллера. Текущие значения заносятся в архив на стороне смартфона и в дальнейшем участвуют в построении графика. В архиве на смартфоне так же хранятся данные из предыдущих сеансов связи с контроллером, они так же выводятся на график. Для каждого подключаемого устройства в мобильном приложении можно указать количество дней для сохранения исторических данных.
График позволяет изменять масштабы осей и перемещать оси в обоих направлениях.
Для перемещения оси установите палец в поле графика и двигайте его вдоль оси в нужном направлении.
Для изменения масштаба оси необходимо установить два пальца в поле графика и далее сдвигая или раздвигая пальцы вдоль необходимой оси установить необходимый масштаб.
Выбор масштаба оси времени может быть выполнен выбором из меню. Для вызова меню настроек графика быстро коснитесь пальцем в поле графика. Вы можете установить один из доступных масштабов оси времени от 15 секунд до 7 дней.
Так же через меню графика вы можете включить авто-масштаб оси значений и передвинуть ось времени на текущее время.
Если вы существенно изменили конфигурацию интерфейса устройства, то архивные данные графика будут удалены автоматически при установке связи. К существенным изменениям относится добавление, удаление, замена элементов управления, а так же изменения влияющие на список переменных в структуре RemoteXY.
Если не подключается…
Проверьте, подключилось ли ваше устройство к облачному серверу
Зайдите на страницу списка токенов в личном кабинете сайта RemoteXY. В списке токенов посмотрите какое значение указано в колонке «Состояние устройства». Если устройство подключилось к облачному серверу, значение должно быть «Connected». Попробуйте обновить страницу.
Время между стартом устройства и подключением к облачному серверу может составлять до одной минуты.
Если устройство подключилось к облачному серверу но мобильное приложение не подключается, проверьте правильность указания токена в мобильном приложении.
Если устройство не подключилось к облачному серверу, ошибку необходимо искать в самом устройстве или его настройках.
Примечание: При ошибке подключения мобильного приложения к облачному серверу выводится диалоговое окно с описанием ошибки. Основные ошибки следующие:
- токен не зарегистрирован на сервере — скорее всего вы неверно указали токен;
- устройство не подключено к серверу — по каким то причинам устройство не подключается к серверу, возможно ошибка в настройках конфигурации устройства.
Проверьте наличие правильно загруженной программы
Вы можете проверить наличие связи между Arduino и ESP8266 используя Serial Monitor, который можно открыть во вкладке Tools в Arduino IDE.
Откройте Serial Monitor и установите скорость 115200. Нажмите кнопку сброса на плате Arduino.
Если после сброса Arduino в Serial Monitor нет никаких сообщений, это скорее всего означает, что Arduino не выполнят вашу программу. Возможно:
- нужный скетч не был загружен;
- ваша Arduino не включена;
- Serial Monitor не подключился к Arduino;
- с вашей Arduino что то не так.
Проверьте связь между Arduino и ESP8266
Если после сброса Arduino в Serial Monitor вы видите следующую последовательность команд, это означает, что инициализация ESP8266 проходит успешно и связь между Arduino и ESP8266 есть, устройство зарегистрировалось на сервере:
Если вы видите только повторяющиеся команды «AT», это означает что нет связи между Arduino и ESP8266.
Связь может отсутствовать по разным причинам. Ниже перечислены основные:
- контакты RX и TX подключены не верно, перепутаны контакты, или подключены не к тем контактам, или не подключены совсем;
- нет питания на ESP8266, при подаче питания на ESP8266 должен светиться красный светодиод;
- не хватает мощности источника питания 3.3 В для ESP8266;
- модуль ESP8266 неисправен.
Проверьте, подключается ли ESP8266 к точке доступа
Если после сброса Arduino в Serial Monitor вы видите последовательность команд, но последняя команда, это AT+CWJAP и далее ничего не происходит, это означает что модуль не может зарегистрироваться в вашей WiFi сети с указанным SSID и паролем:
Проверьте, подключается ли ESP8266 к облачному серверу
Если после сброса Arduino в Serial Monitor вы видите последовательность команд, но последняя команда, которую вы видите является AT+CIPSTART и далее она периодически повторяется примерно раз в минуту, это означает что недоступен облачный сервер. Возможно указан неверно URL сервера или порт. Возможно ваша точка доступа WiFi не подключена к интернету.
Если периодически раз в минуту повторяются две команды AT+CIPSTART и AT+CIPSEND, это означает, что сервер доступен, но токен был отклонен сервером, как незарегистрированный.
Проверьте прошивку ESP8266
Если после сброса Arduino в Serial Monitor вы видите только начало последовательности команд, но нет завершающей команды AT+CIPSERVER=1,6377 это означает, что модуль ESP8266 имеет устаревшую прошивку. Требуется обновление прошивки.
Проверьте питание ESP8266
Так же возможно, что вашей ESP8266 не хватает мощности источника питания. Некоторые платы Arduino имеют слабый стабилизатор напряжения 3.3 В, который не способен выдавать 200-300 мА в пиковых режимах. В этом случае в Serial Monitor вы так же увидите обрыв последовательности команд.