Как управлять ардуино с телефона
Перейти к содержимому

Как управлять ардуино с телефона

  • автор:

Умный дом 1 (управление с Android-смартфона)

В данной статье речь пойдет о создании системы «Умный дом» на контроллере Arduino UNO с управлением через Android смартфон и Bluetooth модуль HC-05. На просторах интернета есть много статей по созданию такой системы но их функционал меня не устраивал.

У меня была задача создать Arduino скетч и программу для Android, которые бы соответствовали моим требованиям. После того как функционал был продуман я начал закупать оборудование для сборки.

Из аппаратной части мне понадобилось не много:

  • Arduino UNO
  • Bluetooth модуль HC-05
  • Модуль 2-х канального реле 5В 10А
  • Датчик влажности и температуры DHT-22

Затем я занялся созданием скетча для Arduino SMARTHOUSE.ino. В интернете был найден готовый пример но он не подходил по функционалу и я взялся дописывать его. Моя задача, чтобы скетч принимал команду для включения определённого реле и в это же время передавал показания датчика влажности и температуры. Имея минимальные знания программирования у меня всё получилось и программа была написана.

Оставалось самое сложное создать приложения для Android, для этого я использовал программу AppInventor 2.

Общий вид программы:

Facing

Особенностями программы являются: возможность автоматически подключаться к выбранному ранее bluetooth-устройству, голосовое распознавание текста, отображение температуры и влажности в реальном времени. Перед началом использования голосовых команд нужно с клавиатуры смартфона вписать саму команду в разноцветные поля и нажать кнопку сохранить (кнопка сохранить также запоминает подключённое устройство).

Далее следовала сборка сборка всех компонентов в единую систему.

HC-05

DHT-22

Нагрузка подключается к выводам 8, 9, 10. Если вдруг что не понятно с подключением, то вы можете посмотреть все пины по самом скетче. После соединения всех компонентов нужно установить и запустить мою программу SMARTHOUSE.apk

После установки включаем Bluetooth на смартфоне и подключаемся к модулю HC-05, и включаем нашу программу.

Bluetooth connection

После запуска жмем кнопку поиск и видим окно с списком доступных устройств, выбрать нужно HC-05.

Когда выбор сделан нужно нажать кнопку ПОДКЛЮЧИТЬ и СОХРАНИТЬ, в зелёном окне появится адрес bluetooth устройства.

App-face

И вот теперь при нажатии на красные выключатели, мы можем подавать сигнал на нужный нам pin (длинное нажатие на кнопку выключателя посылает команду для отключения нагрузки). Под кнопками «enable all» и «switch off all» появятся показания температуры и влажности с датчика DHT-22.

Я с удовольствием отвечу на вопросы связанные с данным проектом!

Ссылки к статье:

Огромное спасибо сайту Arduino.ua за отличное качество товаров и быструю доставку компонентов!:)

Управляем Arduino-машинкой при помощи G-сенсора со смартфона

В данной статье вы узнаете, как при помощи данного сервиса RemoteXY очень легко настроить дистанционное управление робо-платформой или машинкой. Робомашинкой мы будем управлять при помощи элемента управления «Джойстик», который умеет работать от G-сенсора вашего смартфона. В конце статьи вы найдете видео и можете посмотреть, что же у нас получилось.

Управляем машинкой со смартфона

Мы собрали очень простую двухколесную тележку, что бы продемонстрировать вам, как построить систему дистанционного управления. В тележке использованы следующие компоненты (мы не претендуем на качество изготовления, тележка собрана для демонстрации возможностей ресурса RemoteXY):

  • Платформа — ее мы вырезали из листового материала. Для простоты использовали ДВП;
  • Переднее колесо — поворотное колесико от кресла;
  • Мотор-редукторы 2 шт.;
  • Колеса, с осью подходящей к мотор-редукторам 2 шт. Колеса мы приобретали совместно с мотор редукторами;
  • Батарейный отсек с выключателем, на 4-е пальчиковые батарейки (тип АА);
  • Arduino, мы использовали все тот же клон Seeeduino;
  • Модуль Bluetooth HC-06;
  • Драйвер моторов на чипе L298N;

Электрическая часть и схема подключения всех модулей машинки представлена на следующем рисунке.

Схема подключения машинки

Программа управления

Войдите в редактор на этом ресурсе и сконструируйте следующий интерфейс управления:

Установите по центру экрана «Джойстик». В свойствах джойстика выберите установку дополнительного элемента управления «Включить G сенсор». Выберите положение переключателя G-сенсора «Низ-лево». Так же в настройках можете изменить цвет на красный. В дальнейшем джойстиком мы будем управлять движением машинки.

Установите «Переключатель». Разместите его левее джойстика. Можете так же изменить его цвет. Переключателем мы будем управлять светодиодом на плате Arduino на пине 13.

Если вы все правильно сделали, у вас должен получиться примерно такой интерфейс управления:

Интерфейс управления машинкой

В настройках проекта выберите целевую платформу, для которой мы получаем исходный код «Arduino (SoftwareSerial), library version». Нажимаем кнопку «Получить код» и загружаем исходный код на свой компьютер. Так же по ссылке загружаем библиотеку RemoteXY и устанавливаем ее в Arduino IDE.

Откроем загруженный скетч в IDE Arduino. Скетч прекрасно компилируется без ошибок. Однако, в нем конечно же нет кода для управления нашей машинкой. Наша задача написать этот код. Для образца мы будем использовать загруженный пример.

Обратите внимание на определение структуры RemoteXY в скетче проекта. Структура содержит поля, полностью соответствующие установленным на интерфейсе управления элементам управления. Мы видим переменные joystick_1_x и joystick_1_y, отражающие координаты x и y нашего джойстика, а так же переменную switch_1, отражающую переключатель.

/* структура определяет все переменные вашего интерфейса управления */ struct < /* input variable */ signed char joystick_1_x; /* =-100..100 координата x положения джойстика */ signed char joystick_1_y; /* =-100..100 координата y положения джойстика */ unsigned char switch_1; /* =1 если переключатель включен и =0 если отключен */ /* other variable */ unsigned char connect_flag; /* =1 if wire connected, else =0 */ >RemoteXY;

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

В самом начале определяются номера пинов, которые будут использованы для управления моторами. Далее номера пинов группируются в два массива, для правого и левого мотора соответственно. Для управления каждым мотором через драйвер на чипе L298N необходимо использовать 3 сигнала: два дискретных, указывающих направление вращения мотора, и один аналоговый, определяющий скорость вращения. Данными преобразованиями у нас занимается функция Wheel. На вход функции передаем ссылку на массив пинов выбранного мотора, и скорость вращения как знаковое число от -100 до 100. Если передали скорость 0, то мотор отключается.

В предопределенной функции setup настраиваются пины на работу как выходы. Для аналогового сигнала используются пины, которые могут работать как ШИМ преобразователи. Это пины 9 и 10. Они не требуют настройки в среде Arduino.

В предопределенной функции loop в каждой итерации работы программы вызывается обработчик модуля RemoteXY. Далее происходит управление зажиганием светодиода, далее управление моторами. Для управления моторами из структуры RemoteXY считываются поля по координатам джойстика X и Y, на основе координат выполняется математическая операция расчета скорости для каждого мотора, и вызывается функция Wheel, задающая скорость мотора. Данные вычисления выполняются в каждом цикле работы программы, обеспечивая непрерывность вычисления управляющих импульсов моторов на основе координат джойстика.

Залейте получившейся скетч Arduino в контроллер. Загрузите и запустите мобильное приложение на ваш смартфон или планшет. Соединитесь с вашим устройством и можете им управлять. Джойстиком можно управлять в обычном режиме, перемещая движок пальцем. Можно включить G-сенсор, и движок джойстика будет перемещаться сам в зависимости от наклона вашего смартфона.

Если после сборки вашего устройства, один или оба мотора вращаются в противоположном направлении, поменяйте провода местами при подключении мотора.

Управление Arduino со смартфона по Wifi

Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно.
Вам необходимо обновить браузер или попробовать использовать другой.

RamasTex

11 Ноя 2020 23 3

Всем привет. Хочу связать arduino nano с телефоном через wifi. В качестве модуля связи использовать ESP8266-01. А приложение для управления со смартфона сделать в Processing.Знаю что можно использовать Blynk и NodeMCU. Но это не мой вариант. Может у кого есть идеи как это реализовать

PiratFox

13 Фев 2020 1,684 466
@RamasTex, а какова цель подобной возни, если уже есть куча работоспособных решений?

RamasTex

11 Ноя 2020 23 3
И какие например?

PiratFox

13 Фев 2020 1,684 466
@RamasTex, что значит

Вы самим их перечисли, да и другие есть. Например, посмотрите здесь. Или Вам вот прям хочется в Processing делать, а остальное по барабану?

RamasTex

11 Ноя 2020 23 3

Нет дело не в Processing я пытался в Delphi что то реализовать.Просто тема актуальная она сейчас активно развивается на канале . ESP8266 запрограммировать как модем я могу, а дальше никак. Те что я перечислил, платные решения

Старик Похабыч

14 Авг 2019 4,145 1,262 Москва

Ну если в дельфи, то я бы сделал так. А я так уже делал.
ESP либо подключается к локальной сети , либо делает свою. Так или иначе у нее есть IP и это IP в одной сети с приложением на дельфи.
На ESP открываем порт UDP, на дельфи ставим клиент UDP и соединяем их вместе. Все.

Создаем мобильное приложение для управления «Умной теплицей» на Arduino

На 5 уроке про Умную теплицу на Ардуино, мы создадим свое собственное мобильное приложение для устройств на Андроиде. Для этого мы используем редактор визуального программирования Android App Invertor 2

В следующей статье про перенос « функции мониторинга и управления теплицей на телефон или планшет с ОС Androi d» мы установили связь нашей системы с телефоном (или планшетом) с операционной системой Android по Bluetooth, что позволило нам отправлять данные мониторига данных нашей теплицы на телефон и получать команды управления с телефона. Но для связи теплицы с телефоном мы использовали на телефоне приложение Bluetooth Terminal, что совсем неудобно. Нам нужно полноценное приложение. В этом уроке мы и займемся его созданием.
Глубоко внимать в вопросы программирования для операционной системы Android не входит в наши планы, поэтому нам нужна простая и понятная система создания кода для Android, наподобие системы Sctratch для Arduino, которую мы рассматривали на этом уроке – Программируем с Arduino… К счастью подобный визуальный редактор есть. Это онлайн визуальный редактор для визуального программирования для Android App Invertor 2. Страница проекта – http://ai2.appinventor.mit.edu.

Страница онлайн-редактора App Invertor 2 01

Рисунок 1. Страница онлайн-редактора App Invertor 2.

Рисунок 2 Ваш профиль программы App Invertor 2 Создание проекта для ардуино 02

После авторизации (можно использовать профиль google) или регистрации попадаем в свой профиль программы, где можем создать новый проект.

Рисунок 2. Ваш профиль программы. Создание проекта.

создаем моб приложение Создание интерфейса в Design 03

Сначала в панети Design создаем интерфейс нашего приложения, перетаскивая на экран необходимые компоненнты. Кроме визуальных компонентов необходимо добавить 3 невизуальных:
Bluetooth client из раздела Connectivity;
Clock из раздела Sensors (для получения данных из Bluetooth c периодичностью, установленной в Clock);
Notifer из UserInterface.

Рисунок 3. Создание интерфейса в Design.

Код для инициализации Bluetooth соединения и создания Bluetooth клиента 04

Теперь создаем код. Переходим в раздел Block. Сначала создаем код для инициализации Bluetooth соединения и создания Bluetooth клиента (рисунок 4).

Рисунок 4. Код для инициализации Bluetooth соединения и создания Bluetooth клиента.

Затем код для отправки сообщений при изменениии состояний chexckbox-ов для насоса, вентилятора и лампы (рисунок 5).

Код для отправки сообщений при изменениии состояний chexckbox-ов 05

Рисунок 5. Код для отправки сообщений при изменениии состояний chexckbox-ов.

И код получения по таймеру сообщений, поступающих по Bluetooth из Arduino (рисунок 6).

Код получения по таймеру сообщений поступающих из Arduino 06

Рисунок 6. Код получения по таймеру сообщений, поступающих из Arduino

Создаем app приложение (рисунок 7) и загружаем его на телефон.

Генерация app приложения 07

Рисунок 7. Генерация app приложения

Нам надо внести самые маленькие изменения в наш предыдущий скетч, заменив разделитель с пробела на символ ‘*’ при отправке данных с Arduino на Android.
Создадим в Arduino IDE новый скетч, занесем в него код из листинга 1 и загрузим скетч на на плату Arduino. Напоминаем, что в настройках Arduino IDE необходимо выбрать тип платы (Arduino UNO) и порт подключения платы.

// подключение библиотеки SoftwareSerial #include // подключение библиотеки DHT #include "DHT.h" // тип датчика DHT #define DHTTYPE DHT11 // контакты подключения bluetooth-модуля HC-05 int pinBlRx=17; int pinBlTx=18; // контакт подключения входа данных модуля DHT11 int pinDHT11=9; // контакт подключения аналогового выхода модуля влажности почвы int pinSoilMoisture=A0; // контакт подключения аналогового выхода датчика температуры TMP36 int pinTMP36=A1; // контакт подключения аналогового выхода фоторезистора int pinPhotoresistor=A2; // пины светодиодов индикации #define LED_TEMP 5 #define LED_MOISTURE 6 #define LED_LIGHT 7 // значения для условий #define TEMP_DETECT 30 #define MOISTURE_DETECT 500 #define LIGHT_DETECT 250 // реле int pinRelays[]=; // статусы полива, освещения, вентилятора boolean statusRelays[]=; // создание экземпляра объекта SoftwareSerial SoftwareSerial HC05Serial(pinBlRx,pinBlTx); // создание экземпляра объекта DHT DHT dht(pinDHT11, DHTTYPE); unsigned long millisupdate=0; // для получения данных из SoftwareSerial String inputString0 = ""; // признак конца полученной строки boolean stringComplete0 = false; void setup() < // запуск последовательного порта Serial.begin(9600); // pinMode(LED_TEMP,OUTPUT);digitalWrite(LED_TEMP,LOW); pinMode(LED_MOISTURE,OUTPUT);digitalWrite(LED_MOISTURE,LOW); pinMode(LED_LIGHT,OUTPUT);digitalWrite(LED_LIGHT,LOW); // инициализация dht dht.begin(); // запуск SoftwareSerial HC05Serial.begin(9600); // резервирование 50 bytes для the inputString: inputString0.reserve(50); >void loop() < // ожидание конца строки для анализа поступившего запроса: serialEvent0(); if (stringComplete0) < Serial.println(inputString0); parse_string0(inputString0); // очистить : inputString0 = ""; stringComplete0 = false; >// каждые 5 сек - получение показаний датчиков // и вывод на дисплей if(millis()-millisupdate>5000) < millisupdate=millis(); // получение данных с DHT11 float h = dht.readHumidity(); if (isnan(h)) < Serial.println("Failed to read from DHT"); HC05Serial.println("H1=101"); delay(10); >else < Serial.print("HumidityDHT11= "); Serial.print(h);Serial.println(" %"); HC05Serial.print("aH=");HC05Serial.print(h);HC05Serial.print("*"); delay(10); >// получение значения с аналогового вывода модуля влажности почвы int val0=analogRead(pinSoilMoisture); Serial.print("SoilMoisture= "); Serial.println(val0); HC05Serial.print("SM=");HC05Serial.print(h);HC05Serial.print("*"); delay(10); // получение значения с аналогового вывода датчика температуры TMP36 int val1=analogRead(pinTMP36); // перевод в мВ int mV= val1*1000/1024; // перевод в градусы цельсия int t=(mV-500)/10+75;//t=23; Serial.print("TempTMP36= "); Serial.print(t);Serial.println(" C"); HC05Serial.print("aT=");HC05Serial.print(t);HC05Serial.print("*"); delay(10); // получение значения с аналогового вывода фоторезистора int val2=analogRead(pinPhotoresistor); Serial.print("Light= "); Serial.println(val2); HC05Serial.print("Ph=");HC05Serial.print(val2);HC05Serial.print("*"); delay(10); // обновить // вывод состояние полива, лампы, вентилятора Serial.print("pump - "); Serial.println(statusRelays[2]); Serial.print("fun - "); Serial.println(statusRelays[1]); Serial.print("lamp - "); Serial.println(statusRelays[0]); HC05Serial.print("PM=");HC05Serial.print(statusRelays[2]);HC05Serial.print("*"); delay(10); HC05Serial.print("FN=");HC05Serial.print(statusRelays[1]);HC05Serial.print("*"); delay(10); HC05Serial.print("LM=");HC05Serial.print(statusRelays[0]); delay(10); //// проверка условий // увлажненность почвы if(val0 > MOISTURE_DETECT) digitalWrite(LED_MOISTURE,HIGH); else digitalWrite(LED_MOISTURE,LOW); // температура воздуха if(t > TEMP_DETECT) digitalWrite(LED_TEMP,HIGH); else digitalWrite(LED_TEMP,LOW); // освещенность if(val2 < LIGHT_DETECT) digitalWrite(LED_LIGHT,HIGH); else digitalWrite(LED_LIGHT,LOW); // пауза 5 секунд Serial.println(); >> // SerialEvent для HC05 void serialEvent0() < while (HC05Serial.available()) < // получить очередной байт: char inChar = (char)HC05Serial.read(); // добавить в строку inputString0 += inChar; // /n - конец передачи if (inChar == '#') < stringComplete0 = true; >> > // парсинг строки из android void parse_string0(String inputString) < // длина строки int length1=inputString.length(); if(length1!=5) if(inputString.charAt(2)!='=') if(inputString.charAt(4)!='#') String param1=inputString.substring(0,2); int param2=inputString.substring(3,4).toInt(); Serial.print("param1=");Serial.println(param1); Serial.print("param2=");Serial.println(param2); if(param1=="PM") doCommand(2,min(param2,1)); else if(param1=="FN") doCommand(1,min(param2,1)); else if(param1=="LM") doCommand(0,min(param2,1)); > // исполнение команды от смартфона void doCommand(int relay, int status1) < // изменить статус statusRelays[relay]=status1; // изменить состояние реле digitalWrite(pinRelays[relay],statusRelays[relay]); >

Загружаем скетч на Arduino, на телефоне запускаем приложение.

08 Рисунок Приложение в работе 09 Рисунок Приложение в работе10 Рисунок Приложение в работе

Рисунок 8, 9, 10. Приложение в работе.
На следующем уроке рассмотрим вопрос превращения нашей теплицы в объект IoT (Интернет вещей).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *