Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Создание кастомного Android-приложения для управления Arduino с MIT App Inventor

В этом уроке Arduino мы научимся создавать собственные Android-приложения для управления Arduino с помощью онлайн-приложения MIT App Inventor. Вы можете посмотреть следующее видео или прочитать письменное руководство ниже.

Обзор

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

Код Arduino

Вот краткий обзор того кода. Через последовательный порт мы принимаем входящие данные от смартфона и сохраняем их в переменную 'state'. Если мы получаем символ '0', который отправляется со смартфона при нажатии кнопки 'LED: OFF', мы выключаем светодиод и отправляем обратно на смартфон строку «LED: OFF». С другой стороны, если получаем символ '1', включаем светодиод и отправляем обратно строку «LED: ON».

/* Arduino and HC-05 Bluetooth Module Tutorial
 * by Dejan Nedelkovski, www.HowToMechatronics.com
 */
#define ledPin 7
int state = 0;
void setup() {
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);
  Serial.begin(38400);
}
void loop() {
  if (Serial.available() > 0) {
    state = Serial.read();
  }
  if (state == '0') {
    digitalWrite(ledPin, LOW);
    Serial.println("LED: OFF");
    state = 0;
  } else if (state == '1') {
    digitalWrite(ledPin, HIGH);
    Serial.println("LED: ON");
    state = 0;
  }
}Язык кода: Arduino (arduino)

Теперь нам нужно создать наше собственное Android-приложение, которое будет отправлять эти символы '0' и '1' при нажатии определенной кнопки, а также принимать входящие строки от Arduino.

MIT App Inventor

На сайте MIT App Inventor нужно войти в онлайн-приложение для создания, нажав кнопку «Create apps!». Для входа нужен аккаунт Gmail. После входа можно создать первый проект. Вот как выглядит окно дизайна, и теперь мы можем начать создавать наше приложение.

Создание кастомного Android-приложения для управления Arduino с MIT App Inventor

Но перед этим мы можем подключить наш смартфон к этому проекту, чтобы видеть, как приложение принимает форму прямо на смартфоне в реальном времени. Для этого сначала нужно скачать приложение MIT AI2 Companion из Play Store и установить его на смартфон. Затем в меню Connect онлайн-редактора выберем AI Companion, и появится штрих-код, который нужно просто отсканировать или ввести код в приложении на смартфоне, и соединение между онлайн-редактором и приложением на смартфоне будет установлено.

Создание кастомного Android-приложения для управления Arduino с MIT App Inventor

Теперь, например, если мы вставим кнопку на экране онлайн-редактора, кнопка появится в реальном времени на смартфоне. Аналогично, если вы не хотите использовать смартфон во время создания приложения, можно установить Android-эмулятор на компьютер и использовать его так же. Больше деталей о настройке эмулятора можно найти на их сайте.

Создание приложения — Пример 1

Теперь мы готовы создать первый пример. Начнем с макета программы. Сначала добавим несколько HorizontalArrangements из палитры Layout и настроим их свойства: высоту, ширину и выравнивание, чтобы они соответствовали желаемому виду программы. Затем из палитры UserInterface добавим ListPicker и прикрепим к нему изображение. ListPicker будет использоваться для выбора Bluetooth-устройства, к которому подключится наш смартфон.

Создание кастомного Android-приложения для управления Arduino с MIT App Inventor

Затем добавим еще один HorizontalArrangements, в который поместим Label. Этот label будет указывать, подключен смартфон к Bluetooth-модулю или нет, поэтому установим начальный текст этого label на «Not Connected». Следующий label будет использоваться для отображения состояния светодиода — выключен или включен. Начальное состояние — «LED: OFF». Затем добавим две кнопки: 'Turn On' и 'Turn Off' для управления светодиодом. В этот момент хорошо переименовать компоненты, чтобы легче их узнавать и использовать в редакторе Blocks позже. Осталось добавить BluetoothClient — невидимый компонент, а также часы (Clock), которые будут использоваться для индикации статуса подключения в реальном времени.

Редактор блоков (Blocks Editor)

Теперь в редакторе блоков мы готовы оживить нашу программу. Слева у нас все блоки и функции, связанные с ранее добавленными компонентами.

Создание кастомного Android-приложения для управления Arduino с MIT App Inventor

Начнем с BluetoothList ListPicker. Оттуда сначала добавим блок 'BeforePicking' и присоединим к нему блок 'set Bluetooth Elements'. Затем из блоков BluetoothClient добавим блок 'BluetoothClient AddressesAndNames'. Этот набор блоков установит список Bluetooth-устройств, уже сопряженных с нашим телефоном, так что когда мы нажмем на ListPicker «Connect Button», появится список всех сопряженных устройств.

Создание кастомного Android-приложения для управления Arduino с MIT App Inventor

Далее нужно установить, что произойдет после того, как мы выберем наш конкретный Bluetooth-модуль. Из блоков BluetoothClient добавим блок 'call BluetoothClient .Connect address' и добавим к нему блок 'BluetoothList Selection', что означает, что наш телефон подключится к Bluetooth-адресу, который мы ранее выбрали.

Создание кастомного Android-приложения для управления Arduino с MIT App Inventor

Затем из блоков Clock добавим блок «.Timer». Внутри этого блока мы сделаем индикацию в реальном времени, подключен телефон к Bluetooth-модулю или нет, используя блок «set Text» label с именем «Connected».

Создание кастомного Android-приложения для управления Arduino с MIT App Inventor

Теперь нужно оживить две кнопки. Когда будет нажата кнопка «TurnOn_Button», мы используем функцию Bluetooth client «Send1ByteNumber», чтобы отправить число в Bluetooth-модуль Arduino. В нашем случае это число 49, которое соответствует символу '1' по таблице ASCII, и это включит светодиод. Сразу после этого используем функцию «ReceiveText» BluetoothClient, чтобы принять входящую строку, которую отправляет обратно Arduino на телефон. Эта строка устанавливается в label «LED_Status».

Создание кастомного Android-приложения для управления Arduino с MIT App Inventor

Та же процедура для кнопки «TurnOff_Button», где отправляемое число должно быть изменено на 48, соответствующее символу '0'. Что осталось — скачать и установить программу на наш смартфон. Можно сделать это из меню «Build», либо сохранив на компьютер и перенеся на телефон, либо отсканировав QR-код для онлайн-загрузки программы. Вот демонстрация примера.

Вот файл загрузки вышеуказанного проекта MIT App Inventor:

Создание кастомного Android-приложения для управления Arduino с MIT App Inventor

BluetoothTest.aia

1 file(s) 5.16 KB Download

Пример управления шаговым двигателем


Теперь посмотрим на второй пример — управление шаговым двигателем. В верхней части экрана у нас те же компоненты для Bluetooth-подключения, что и в предыдущем примере. Далее у нас есть компонент Canvas, используемый для рисования и вставки изображений. Я вставил два прозрачных изображения, которые ранее нарисовал. Первое — изображение шкалы, которое будет зафиксировано на месте, а второе — изображение стрелки, которое будет вращаться. Далее у нас есть CheckBox для переключения между ручным и автоматическим (непрерывным) режимом и кнопка для смены направления вращения. Внизу у нас есть ползунок для изменения скорости вращения шагового двигателя.

Создание кастомного Android-приложения для управления Arduino с MIT App Inventor

Вот блоки и код Arduino за этим примером. В редакторе блоков снова есть те же блоки для Bluetooth-подключения, что и в предыдущем примере.

Создание кастомного Android-приложения для управления Arduino с MIT App Inventor

Для вращения изображения стрелки используем функцию ImageSprite «.PointInDirection», которая поворачивает изображение от позиции 0° до координат X и Y, где Canvas был нажат. Одновременно устанавливаем направление (heading) повернутого ImageSprite в текстовую метку выше. После этого вызываем специально созданную процедуру, или функцию, которая на самом деле является задержкой 10 мс.

В конце отправляем значение heading как текст в Arduino с помощью функции Bluetooth «SendText». Это значение будет принято Arduino, и он повернет шаговый двигатель соответствующим образом.

Создание кастомного Android-приложения для управления Arduino с MIT App Inventor

Далее — блок CheckBox. Если CheckBox отмечен, мы отправим текст «Auto» в Arduino, который активирует непрерывное вращение шагового двигателя. Пока мы в этом режиме, если нажмем кнопку «Reverse», отправим текст «Reverse» в Arduino, который сменит направление вращения мотора. Также, пока мы в этом режиме, можем менять скорость вращения. Если изменим положение ползунка, текущее значение позиции ползунка будет отправлено в Arduino, которое изменит скорость вращения шагового двигателя. Если снимем галочку с CheckBox, вернемся в ручной режим. Вот демонстрация примера.

Создание кастомного Android-приложения для управления Arduino с MIT App Inventor

Вот файл загрузки вышеуказанного проекта MIT App Inventor, а также два изображения, использованные в проекте:

Создание кастомного Android-приложения для управления Arduino с MIT App Inventor

StepperMotorTest.aia

1 file(s) 60.96 KB Download Создание кастомного Android-приложения для управления Arduino с MIT App Inventor

Stepper Motor Gauge and Pointer Images

1 file(s) 27.34 KB Download

Вот код Arduino второго примера:

/* Stepper Motor Control via HC-05 Bluetooth Module
 * by Dejan Nedelkovski, www.HowToMechatronics.com
 */
const int stepPin = 7;
const int dirPin = 6;
String state = "";
int currentHeading = 0;
int currentAngle = 0;
int lastAngle = 0;
int angle = 0;
int rotate = 0;
int runContinuously = 0;
String mode = "Manual";
boolean dirRotation = HIGH;
int rotSpeed = 1500;
void setup() {
  pinMode(stepPin, OUTPUT);
  pinMode(dirPin, OUTPUT);
  Serial.begin(38400);
}
void loop() {
  delayMicroseconds(1);
  if (Serial.available() > 0) {
    state = Serial.readString();
  }
  if (mode == "Auto") {
    if (state == "Reverse") {
      delay(10);
      if (dirRotation == HIGH) dirRotation = LOW;
      else dirRotation = HIGH;
      digitalWrite(dirPin, dirRotation);
      delay(10);
      state = "";
    }
    rotSpeed = state.toInt();
    if (rotSpeed >= 300 && rotSpeed <= 3000) {
      digitalWrite(stepPin, HIGH);
      delayMicroseconds(rotSpeed);
      digitalWrite(stepPin, LOW);
      delayMicroseconds(rotSpeed);
    } else {
      digitalWrite(stepPin, HIGH);
      delayMicroseconds(1500);
      digitalWrite(stepPin, LOW);
      delayMicroseconds(1500);
    }
    if (state == "Manual") mode = state;
  } else if (mode == "Manual") {
    currentHeading = state.toInt();
    if (currentHeading < 0) currentHeading = 360 + currentHeading;
    currentAngle = map(currentHeading, 0, 359, 0, 200);
    digitalWrite(dirPin, HIGH);
    if (currentAngle != lastAngle) {
      if (currentAngle > lastAngle) {
        rotate = currentAngle - lastAngle;
        for (int x = 0; x < rotate; x++) {
          digitalWrite(stepPin, HIGH);
          delayMicroseconds(500);
          digitalWrite(stepPin, LOW);
          delayMicroseconds(500);
        }
      }
      if (currentAngle < lastAngle) {
        rotate = lastAngle - currentAngle;
        digitalWrite(dirPin, LOW);
        for (int x = 0; x < rotate; x++) {
          digitalWrite(stepPin, HIGH);
          delayMicroseconds(500);
          digitalWrite(stepPin, LOW);
          delayMicroseconds(500);
        }
      }
    }
    lastAngle = currentAngle;
    if (state == "Auto") mode = state;
  }
}Язык кода: Arduino (arduino)

Производственный процесс

  1. Проектирование баллистической парашютной системы восстановления для БПЛА
  2. Выбор правильного материала для вашего проекта: практическое руководство
  3. Создание потрясающей системы Ambilight для монитора на Arduino
  4. Универсальный Android-пульт на Arduino, 1Sheeld и ИК-управлении
  5. 7 шагов к построению успешной дорожной карты автоматизации
  6. Выбор правильного сплава: магний против алюминия для индивидуальных литейных проектов
  7. Выбор идеального крана для вашего строительного проекта: практическое руководство
  8. Как подготовить ваш проект кастомной обработки для конкурентоспособной котировки
  9. Точная оценка стоимости стали: пошаговое руководство для вашего проекта
  10. Почему пескоструйка улучшает проекты кастомной металлофаabricации