Управление Arduino через последовательный порт и PHP


Схема соединения

Подключаем резисторы напрямую к ножкам RGB и контактам Arduino. Используем общий анодный RGB-светодиод, поэтому общий вывод должен быть подключен к 5В. Если вы используете светодиод RGB с общим катодом, вам следует вместо этого подключить общий вывод (который является более длинным) к GND (земля).

Используем цифровые выходы 3, 4 и 5, но вы можете использовать другие контакты, если хотите.

Вещи, которые вам понадобятся

  • плата arduino
  • bluetooth serial module (в этой статье был использован модуль btm222 с встроенным регулятором)
  • Единственная проблемная часть здесь — модуль bluetooth. Существуют разные модули по всему Интернету, поэтому убедитесь, что вы проверили вывод в таблице данных, которые у вас есть, поскольку они могут отличаться. Также обратите внимание, что есть два общих класса модулей bluetooth: Class 1 имеет дальность около 100 метров . Класс 2 имеет дальность около 10 метров . Если вам интересно, что они полностью совместимы, и вы можете получить только 100 м, если оба устройства поддерживают такую дальность
  • Используемый здесь последовательный модуль bluetooth имеет следующие контакты слева направо (земля, RX, TX, не подключено, VCC). Очевидно, что земля и VCC идут соответственно на землю и + 5В контакт на arduino. Поскольку мы будем получать данные через модуль, а затем, в свою очередь, отправляя его на плату arduino, нам нужно только использовать вывод TX на модуле. Запустите провод от этого штыря к выходу RX на плате arduino. Led контролируется с помощью PIN 2 на ардуине.
  • светодиод
  • резистор (100 Ом)
  • провода
  • макетная плата

Тестирование соединений

Чтобы проверить правильность подключения, загрузите эскиз, представленный ниже. Эскиз будет в цикле проходить по цветам: красный, зеленый, синий, желтый, фиолетовый и голубой.

int redPin = 5; int greenPin = 4; int bluePin = 3; // раскомментируйте эту строку, если используете светодиод с общим анодом #define COMMON_ANODE void setup() { pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); } void loop() { setColor(255, 0, 0); // red delay(1000); setColor(0, 255, 0); // green delay(1000); setColor(0, 0, 255); // blue delay(1000); setColor(255, 255, 0); // yellow delay(1000); setColor(80, 0, 80); // purple delay(1000); setColor(0, 255, 255); // aqua delay(1000); } void setColor(int red, int green, int blue) { #ifdef COMMON_ANODE red = 255 — red; green = 255 — green; blue = 255 — blue; #endif analogWrite(redPin, red); analogWrite(greenPin, green); analogWrite(bluePin, blue); }

Вы должны увидеть мигание светодиода разными цветами. В данном случае мы подключили светодиод таким образом, чтобы красная нога была на выводе 5, зеленая нога была на выводе 4, а синяя нога на выводе 3. Если цвета выглядят неправильно, вы можете изменить числа, чтобы определить, какая нога какая.

Принципы работы проекта

Сначала нам необходимо скачать и установить на наш смартфон приложение Bluetooth Terminal App (можно использовать и другое аналогичное приложение) и подключить смартфон к Bluetooth модулю HC05. Затем сконфигурировать приложение Bluetooth Terminal как в этой статье.

После того, как мы выполним все это, мы сможем передавать данные с нашего смартфона (из приложения Bluetooth Terminal) на Bluetooth модуль HC05, который затем сможет передавать эти данные по последовательному порту плате Arduino Mega. ЖК дисплей 16×2 используется для отображения статуса (включен/выключен) управляемых нами электронных устройств. Микросхема L293D используется для управления двумя реле, к которым подключены электрические лампочки. Адаптер 12v используется для питания платы Arduino и всей схемы. Структурная схема работы устройства представлена на следующем рисунке.

Структурная схема работы нашего проекта

Всегда, когда мы будем передавать данные со смартфона, плата Arduino будет проверять поступивший символ и устанавливать на соответствующих контактах напряжение высокого или низкого уровня. Далее с помощью этих контактов через драйвер L293D управляются реле, которые включают и выключают лампочки.

В целом, наше устройство будет выполнять следующие операции:

  • если мы передаем символ ‘a’ через приложение Bluetooth Terminal, то электрическая лампочка № 1 включится, а электрическая лампочка № 2 выключится;
  • если мы передаем символ ‘b’ через приложение Bluetooth Terminal, то электрическая лампочка № 1 выключится, а электрическая лампочка № 2 включится;
  • если мы передаем символ ‘c’ через приложение Bluetooth Terminal, то обе электрические лампочки включатся;
  • если мы передаем символ ‘d’ через приложение Bluetooth Terminal, то обе электрические лампочки выключатся.

Более подробно все эти процессы вы можете посмотреть в видео в конце статьи.

Управление через Serial на Arduino

Теперь давайте реализуем последовательную связь, чтобы контролировать цвет светодиода. Мы собираемся использовать код, представленный ниже. Загрузите этот эскиз на свою плату:

// контакты для светодиодов: const int redPin = 5; const int greenPin = 4; const int bluePin = 3; void setup() { // инициализировать последовательную связь: Serial.begin(9600); // сделать пины выводами: pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); } void loop() { // если есть последовательная связь, прочитать: while (Serial.available() > 0) { // искать действительное целое число: int red = Serial.parseInt(); // сделать это снова: int green = Serial.parseInt(); // сделать это снова: int blue = Serial.parseInt(); // искать новую строку, окончание выражения: if (Serial.read() == ‘\n’) { // ограничить значения 0-255 и инвертировать: // если светодиод с общим катодом, то использовать «constrain(color, 0, 255);» red = 255 — constrain(red, 0, 255); green = 255 — constrain(green, 0, 255); blue = 255 — constrain(blue, 0, 255); // постепенное угасание красного, зеленого и синего: analogWrite(redPin, red); analogWrite(greenPin, green); analogWrite(bluePin, blue); // вывести три числа в одну строку в шестнадцатеричном виде: Serial.print(red, HEX); Serial.print(green, HEX); Serial.println(blue, HEX); } } }

После загрузки и запуска кода откройте Serial Monitor в Arduino IDE (Инструменты -> Serial Monitor). Выберите 9600 бод (скорость, что мы использовали в коде) и выберите «Newline» (Новая строка) в поле выбора окончания строки (это поле слева от выбора скорости). Это важно, потому что по умолчанию не происходит отправки перевода строки и нам нужно определить окончание строки.

Теперь наберите 255,0,0 и нажмите ввод, чтобы увидеть, как светодиод становится красным.

RoboCraft

В связи с тем что намечаю создание собственного робота управляемого через XBee, мозгом которого будет является компьютер, возникла надобность освоить заранее управление Arduino с помощью USB-интерфейса.

В результате будет создана программа управляющая светодиодом имеющая 4 режима — светиться, не светиться, помигать, помигать n раз.

Будет использоваться русская Qt библиотека qserialdevice. Скачать её можно здесь: qserialdevice

Просто введите в консоль git clone https://gitorious.org/qserialdevice

и она появится в текущей папке. Далее следуйте инструкциям в файле Readme_ru.txt.

Сразу стоит сказать что Arduino имеет встроенный преобразователь USB-UART FT232R который обеспечивает виртуальный COM-порт, поэтому управлять платой не сложно. Всю сложную работу по коммутации ПК->Arduino за вас сделает преобразователь и драйвер для него, который обычно уже есть на вашей ОС.

Ещё стоит наверное знать что если вы используете Linux вы можете посылать данные следующим образом: echo _SIGNAL_DATA_ >> /dev/ttyUSB0

Начнём создавать Qt приложение. Сперва нужно создать интерфейс, оболочку и потом реализация посылки данных в Arduino по запросу пользователя.

Заметка для пользователей Linux

1. В файл проекта .pro нужно будет дописать: LIBS += -lqserialdevice

Если при компиляции библиотека не будет найдена тогда зайдите в директорию библиотеки qserialdevice через терминал qserialdevice/src/build/release и скопируйте в папку с библиотеками /usr/lib/: sudo cp libqserialdevice.a /usr/lib

2. Файлы заголовков тоже нужно скопировать. Создайте директорию sudo mkdir /usr/include/qserialdevice . Зайдите в /qserialdevice/src/qserialdevice и скопируйте в /usr/include/: sudo cp * /usr/include/qserialdevice

Потом переходите на уровень выше и копируете другой важный файл: cd .. && sudo cp qserialdevice_global.h /usr/include/

Теперь можно полноценно использовать библиотеку.

Создаём Qt GUI проект обычным методом без формы. В конструктор MainWindow пишем:

widget = new QWidget(); grid = new QGridLayout(); button_show = new QPushButton(«Show»); button_hide = new QPushButton(«Hide»); button_blink = new QPushButton(«Blink»); button_blink_n = new QPushButton(«Blink 0»); editLine = new QLineEdit(«0»); connect(editLine, SIGNAL(textChanged(QString)), this, SLOT(setButtonBlinkN(QString))); editLine->setInputMask(«9»); grid->addWidget(button_show, 0, 0); grid->addWidget(button_hide, 0, 1); grid->addWidget(button_blink, 0, 2); grid->addWidget(editLine, 0, 3); grid->addWidget(button_blink_n, 0, 4); widget->setLayout(grid); setCentralWidget(widget);

Будем считать GUI готовым. Весь код целиком с комментариями доступен по этой ссылке:

исходный код

Теперь пора реализовывать работу с USB-интерфейсом. Сначала я хотел сделать для работы свой класс-обёртку, но библиотека qserialdevice и так достаточно абстрагирована поэтому нужды в этом нет.

Начнём с создания функции инициализации initSerial():

AbstractSerial* serial; … bool MainWindow::initSerial(QString dev, int baudRate) { serial = new AbstractSerial(); serial->setDeviceName(dev); if(serial->open(AbstractSerial::ReadWrite)) { serial->setBaudRate(baudRate); } else { return false; } return true; }

Функция инициализирует объект AbstractSerial — указывается устройство dev, скорость baudRate. В случае успеха возвращает — true, иначе — false.

Использование функции в конструкторе MainWindow выглядит так:
if(initSerial(tr(«/dev/ttyUSB0»), 9600) == false) { qDebug() Далее создаём функцию для отправки данных. void MainWindow::send(QByteArray &ba) { serial->write(ba); } Очень простая функция. Всего-то навсего отправляет массив байтов QByteArray на порт. Массив данных QByteArray — очень удобный класс. Имеет много удобных методов для работы с байтовыми массивами — clear, resize и т.д. Теперь осталось только сделать обработчики нажатий на кнопки(слоты) и соединить их с кнопками. /* Not Light :) */ void MainWindow::ShowLigth() { ba[0] = ‘S’; send(ba); } void MainWindow::HideLigth() { ba[0] = ‘H’; send(ba); } void MainWindow::Blink() { ba[0] = ‘B’; send(ba); } void MainWindow::BlinkN() { ba[0] = ‘N’; send(ba); ba[0] = (char)editLine->text().toLocal8Bit().at(0); send(ba); } ShowLigth — включить светодиод, HideLigth — выключить, Blink — дать команду помигать(да, эта функция у меня реализована в самом arduino, но это не важно, каждый сам выбирает способ реализации), BlinkN — дать команду на мигание и послать требуемое количество миганий. Соединение кнопок с обработчиками в конструкторе MainWindow: connect(button_show, SIGNAL(clicked()), this, SLOT(ShowLigth())); connect(button_hide, SIGNAL(clicked()), this, SLOT(HideLigth())); connect(button_blink, SIGNAL(clicked()), this, SLOT(Blink())); connect(button_blink_n, SIGNAL(clicked()), this, SLOT(BlinkN())); Всё, теперь желаемая функциональность программы реализована! https://youtube.com/watch?v=Drf-hAPUkMY Теперь в качестве бонуса я создам обработчик получения данных и вывода их в терминал. Создаём слот для получения данных: void MainWindow::ReadData() { qDebug() readAll(); } Опять же очень просто. Я использовал функцию qDebug(), у неё немного специфический вывод, но для демонстрации подойдёт. Связываем слот с событием в функции initSerial: connect(serial, SIGNAL(readyRead()), this, SLOT(ReadData()));

Написание скетча

Данные, которые принимает Bluetooth-модуль, приходят через UART (он же Serial-соединение) на скорости 9600 бит/с. Настраивать Bluetooth-модуль нет никакой необходимости: он сразу готов к работе. Поэтому скетч должен уметь следующее:

Особенности заливки скетча

Для связи Bluetooth-Bee с контроллером используются те же пины (0 и 1), что и для прошивки. Поэтому при программировании контроллера переключатель «SERIAL SELECT» на «Wireless Shield» должен быть установлен в положение «USB», а после прошивки его надо вернуть в положение «MICRO».

Bluetooth Controller 8 Lamp

Платформа Arduino была создана в 2003 году. Всеобщего внимания она достигла, благодаря низкой цене, а также многомилионному сообществу, направленного на углубленное изучение программирования. Микропроцессоры и микроконтроллеры поставляются с платами. Самыми популярными считаются Arduino. Итальянские модели имеет много функций по расширению и исследованию встроенных Pro систем.

Bluetooth Controller 8 Lamp создан для регулировки функций Ардуино 8 канальным контроллером. Работает при помощи модулей Bluetooth HC-05, HC-06 и HC-07. 8 кнопочный интерфейс соответствует каждой лампочке.

Метод активен только в пределах видимости. В сравнении с другими беспроводными способами — этот самый дешевый. Комплектующие платы стоят менее 1 доллара. Для работы подходят даже подержанные варианты. Статичные девайсы, используя инфракрасный контроллер в потолочных светодиодных лентах, решают легко проблемы, возникшие в процессе.

Virtuino

Программа для Андроид, предназначенная для мониторинга сенсора. Управляет электро устройствами через Bluetooth, Wi-Fi или Интернет.

При помощи Виртуино создаются:

Приложение способно совмещать несколько проектов в один. Управляет отличными платформами единовременно через Bluetooth и Wi-fi. Бесплатно в использовании. Относится к подкатегории System Maintenance. Есть возможность проектировать внутреннее оформление с разной визуализацией.

Обучаться Virtuino можно по учебным пособиям и видео урокам с библиотечной поддержкой. Пока приложение работает в режиме английского языка.

BT Voice Control for Arduino

Главное предназначение данного софта – передача ультразвуковых сигналов сквозь преобразователи. Они соединены с платформой Arduino андроид благодаря Bluetooth порту. Главный модуль в работе — HC-05. Он передает интервал между объектами. Данные отображаются в смартфоне и на Hub диске портала, через это приложение.

BT Voice Control – это голосовое управление Ардуино. Владеет функцией распознавания команд: forward, back, left, right. Чувствительные датчики переадресовывают расстояние в объект Arduino. Далее при помощи модуля Bluetooth HC-05 направляет его в приложение. Программа сэкономит время, тратящееся на набор команд вручную.

Приложение Blynk

Этакий разработчик идей, имеющий открытый вход к запуску на платформе Ардуино. Главное требование в использовании – наличие интернета: Wi-Fi или мобильный трафик. Только в этом случае Blynk будет готов к выполнению. Начать использование можно спустя несколько минут, после окончания настроек. Программой поддерживается АО по выбору пользователя.

Основные функции приложения Blynk заключаются в управлении устройствами при помощи удаления и добавления протоколов HTTP, а также запросов GET и POST. Значения параметров можно обновлять и получать. Запросы обновляются в самом приложении.

Вариативность – важная точка программы. Имея связь с работающими платформами, можно соединиться с сервером любым удобным способом. Данный инстинктивный портал обладает простотой в использовании над проектом. Библиотека постоянно обновляется для всех приложений Arduino Blynk.

Клиентов, желающих включать кофе машинку со своего смартфона, заинтересует это приложение. Это, пожалуй, единственный сервис с подобными возможностями. И не смотря на, то, что он практически безлимитный, является трудным Openhab. В сравнении с другими сервисами обладает быстрой скоростью при запуске.

Установка Python на ваш компьютер

В данном разделе статьи будет рассмотрена установка языка программирования на компьютер с 32 или 64-битной windows. Установка Python на компьютеры под управлением MAC и Linux будет отличаться. Для установки Python выполните следующую последовательность шагов:

1. Установите 32-битную версию Python 2.7.9 IDLE на ваш компьютер. Не скачивайте 64-битную версию Python или его более свежую версию поскольку они могут быть не совместимы с используемыми нами библиотеками Arduino. Даже если ваш компьютер работает на 64-битной операционной системе, то вы все равно можете использовать на нем 32-битную версию Python.

Примечание: оригинал данной статьи был написан в 2022 году, поэтому, возможно, сейчас Arduino IDE уже поддерживает совместимость с более свежими версиями Python (этот вопрос будет уточняться в дальнейшем).

2. Запустите на выполнение скачанный установочный файл и установите эту версию языка Python на ваш компьютер. Не изменяйте каталог для установки Python, оставьте его по умолчанию — C:\Python27.

3. Возможно, во время установки Python на него будет “ругаться” антивирус – не обращайте на это внимание.

После установки Python вы можете проверить действительно ли он установлен на ваш компьютер введя в строке поиска Windows строку “Python IDLE”.

После его запуска вы должны увидеть на экране компьютера “Python shell” (оболочка Python) как показано на следующем рисунке.

Внешний вид оболочки Python

Вы можете непосредственно писать программу в этой оболочке или же создать новый файл и писать и проверять программу в нем. Теперь давайте удостоверимся в том, что Python работает. Для этого напечатайте “print (1+1)” и нажмите enter. Вы должны после этого увидеть в оболочке напечатанный результат вычислений – 2.

Проверка работоспособности Python

Пример получения

На рисунке ниже показан пример получения данных с телефона Android. Плата для разработки Arduino использует датчик температуры DS18B20 для получения значения температуры. Приложение Android обновляет значение температуры каждые 15 секунд. Чтобы лучше отобразить эффект, я реализовал голосовую трансляцию с мобильного телефона. Код Arduino и прикладная программа будут подробно описаны в следующих шагах 4, 5 и 6.

Далее я шаг за шагом представлю метод подключения, напишу скетч Arduino, который может отправлять и получать команды, и напишу приложение. Это руководство требует, чтобы вы имели базовые представления об Arduino, знакомы с его IDE, и лучше всего выполнить несколько небольших проектов. В этом случае содержимое этого руководства будет очень легко понять, и вам будет очень легко реализовать последовательную связь с Arduino.

Библиотека USB Serial

Настройка последовательного соединения в Android довольно трудоемка, так как требует от вас ручной настройки множества вещей, поэтому я нашел несколько библиотек, которые делают всё это автоматически. Я протестировал несколько из них и, наконец, остановился на библиотеке UsbSerial от Github пользователя felHR85. Среди подобных библиотек, что я нашел, она единственная до сих пор обновляется. Ее довольно легко настроить и использовать. Чтобы добавить библиотеку в свой проект, скачайте последнюю версию JAR файла на Github. Поместите его в подкаталог libs в каталоге вашего проекта. Затем в файловом проводнике в Android Studio кликните правой кнопкой мыши на JAR файле и выберите «Добавить как библиотеку» (Add as Library). Вот и всё!

Arduino Bluetooth Controller

Эта программа работает в 3 основных положениях:

Контроллер. Приложение демонстрируется в облике play идентификатора и управляется кнопками переключения. Работает одной клавишей, основная функция которой – дистанционное управление.

Диммер. На расстоянии регулирует настройки яркости и скорости.

Терминал. Осуществление отправления директива для дешифрирования.

Установка приложения Arduino Bluetooth Controller сводит несколько устройств по воздушному каналу. Сообщения передаются по датчикам, контроллерам и обратно. Управляя смартфоном при помощи блютуз модулей, также возможно организовать беспроводное соединение целого проекта. Программирование такого типа доступно всем желающим и не требует особых усилий.

Справочник по Arduino 2

Рейтинг на Google Play: 4.7 из 5

Количество скачиваний: более 50.000

Рейтинг
( 1 оценка, среднее 4 из 5 )
Понравилась статья? Поделиться с друзьями:
Для любых предложений по сайту: [email protected]