Управление 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://www.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 работает. Для этого напечатайте “print (1+1)” и нажмите enter. Вы должны после этого увидеть в оболочке напечатанный результат вычислений – 2.

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

На рисунке ниже показан пример получения данных с телефона 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]