Создание кастомного Android-приложения для управления Arduino с MIT App Inventor
В этом уроке Arduino мы научимся создавать собственные Android-приложения для управления Arduino с помощью онлайн-приложения MIT App Inventor. Вы можете посмотреть следующее видео или прочитать письменное руководство ниже. Для этого урока у нас два примера. Первый пример — управление простым светодиодом, а второй — управление шаговым двигателем с помощью смартфона. В моем предыдущем уроке мы уже научились делать Bluetooth-связь между платой Arduino и смартфоном с помощью модуля HC-05 Bluetooth и объяснили код Arduino, необходимый для первого примера. Вот краткий обзор того кода. Через последовательный порт мы принимаем входящие данные от смартфона и сохраняем их в переменную 'state'. Если мы получаем символ '0', который отправляется со смартфона при нажатии кнопки 'LED: OFF', мы выключаем светодиод и отправляем обратно на смартфон строку «LED: OFF». С другой стороны, если получаем символ '1', включаем светодиод и отправляем обратно строку «LED: ON». Теперь нам нужно создать наше собственное Android-приложение, которое будет отправлять эти символы '0' и '1' при нажатии определенной кнопки, а также принимать входящие строки от Arduino. На сайте MIT App Inventor нужно войти в онлайн-приложение для создания, нажав кнопку «Create apps!». Для входа нужен аккаунт Gmail. После входа можно создать первый проект. Вот как выглядит окно дизайна, и теперь мы можем начать создавать наше приложение. Но перед этим мы можем подключить наш смартфон к этому проекту, чтобы видеть, как приложение принимает форму прямо на смартфоне в реальном времени. Для этого сначала нужно скачать приложение MIT AI2 Companion из Play Store и установить его на смартфон. Затем в меню Connect онлайн-редактора выберем AI Companion, и появится штрих-код, который нужно просто отсканировать или ввести код в приложении на смартфоне, и соединение между онлайн-редактором и приложением на смартфоне будет установлено. Теперь, например, если мы вставим кнопку на экране онлайн-редактора, кнопка появится в реальном времени на смартфоне. Аналогично, если вы не хотите использовать смартфон во время создания приложения, можно установить Android-эмулятор на компьютер и использовать его так же. Больше деталей о настройке эмулятора можно найти на их сайте. Теперь мы готовы создать первый пример. Начнем с макета программы. Сначала добавим несколько HorizontalArrangements из палитры Layout и настроим их свойства: высоту, ширину и выравнивание, чтобы они соответствовали желаемому виду программы. Затем из палитры UserInterface добавим ListPicker и прикрепим к нему изображение. ListPicker будет использоваться для выбора Bluetooth-устройства, к которому подключится наш смартфон. Затем добавим еще один HorizontalArrangements, в который поместим Label. Этот label будет указывать, подключен смартфон к Bluetooth-модулю или нет, поэтому установим начальный текст этого label на «Not Connected». Следующий label будет использоваться для отображения состояния светодиода — выключен или включен. Начальное состояние — «LED: OFF». Затем добавим две кнопки: 'Turn On' и 'Turn Off' для управления светодиодом. В этот момент хорошо переименовать компоненты, чтобы легче их узнавать и использовать в редакторе Blocks позже. Осталось добавить BluetoothClient — невидимый компонент, а также часы (Clock), которые будут использоваться для индикации статуса подключения в реальном времени. Теперь в редакторе блоков мы готовы оживить нашу программу. Слева у нас все блоки и функции, связанные с ранее добавленными компонентами. Начнем с BluetoothList ListPicker. Оттуда сначала добавим блок 'BeforePicking' и присоединим к нему блок 'set Bluetooth Elements'. Затем из блоков BluetoothClient добавим блок 'BluetoothClient AddressesAndNames'. Этот набор блоков установит список Bluetooth-устройств, уже сопряженных с нашим телефоном, так что когда мы нажмем на ListPicker «Connect Button», появится список всех сопряженных устройств. Далее нужно установить, что произойдет после того, как мы выберем наш конкретный Bluetooth-модуль. Из блоков BluetoothClient добавим блок 'call BluetoothClient .Connect address' и добавим к нему блок 'BluetoothList Selection', что означает, что наш телефон подключится к Bluetooth-адресу, который мы ранее выбрали. Затем из блоков Clock добавим блок «.Timer». Внутри этого блока мы сделаем индикацию в реальном времени, подключен телефон к Bluetooth-модулю или нет, используя блок «set Text» label с именем «Connected». Теперь нужно оживить две кнопки. Когда будет нажата кнопка «TurnOn_Button», мы используем функцию Bluetooth client «Send1ByteNumber», чтобы отправить число в Bluetooth-модуль Arduino. В нашем случае это число 49, которое соответствует символу '1' по таблице ASCII, и это включит светодиод. Сразу после этого используем функцию «ReceiveText» BluetoothClient, чтобы принять входящую строку, которую отправляет обратно Arduino на телефон. Эта строка устанавливается в label «LED_Status». Та же процедура для кнопки «TurnOff_Button», где отправляемое число должно быть изменено на 48, соответствующее символу '0'. Что осталось — скачать и установить программу на наш смартфон. Можно сделать это из меню «Build», либо сохранив на компьютер и перенеся на телефон, либо отсканировав QR-код для онлайн-загрузки программы. Вот демонстрация примера. Вот файл загрузки вышеуказанного проекта MIT App Inventor: Теперь посмотрим на второй пример — управление шаговым двигателем. В верхней части экрана у нас те же компоненты для Bluetooth-подключения, что и в предыдущем примере. Далее у нас есть компонент Canvas, используемый для рисования и вставки изображений. Я вставил два прозрачных изображения, которые ранее нарисовал. Первое — изображение шкалы, которое будет зафиксировано на месте, а второе — изображение стрелки, которое будет вращаться. Далее у нас есть CheckBox для переключения между ручным и автоматическим (непрерывным) режимом и кнопка для смены направления вращения. Внизу у нас есть ползунок для изменения скорости вращения шагового двигателя. Вот блоки и код Arduino за этим примером. В редакторе блоков снова есть те же блоки для Bluetooth-подключения, что и в предыдущем примере. Для вращения изображения стрелки используем функцию ImageSprite «.PointInDirection», которая поворачивает изображение от позиции 0° до координат X и Y, где Canvas был нажат. Одновременно устанавливаем направление (heading) повернутого ImageSprite в текстовую метку выше. После этого вызываем специально созданную процедуру, или функцию, которая на самом деле является задержкой 10 мс. В конце отправляем значение heading как текст в Arduino с помощью функции Bluetooth «SendText». Это значение будет принято Arduino, и он повернет шаговый двигатель соответствующим образом. Далее — блок CheckBox. Если CheckBox отмечен, мы отправим текст «Auto» в Arduino, который активирует непрерывное вращение шагового двигателя. Пока мы в этом режиме, если нажмем кнопку «Reverse», отправим текст «Reverse» в Arduino, который сменит направление вращения мотора. Также, пока мы в этом режиме, можем менять скорость вращения. Если изменим положение ползунка, текущее значение позиции ползунка будет отправлено в Arduino, которое изменит скорость вращения шагового двигателя. Если снимем галочку с CheckBox, вернемся в ручной режим. Вот демонстрация примера. Вот файл загрузки вышеуказанного проекта MIT App Inventor, а также два изображения, использованные в проекте: Вот код Arduino второго примера:Обзор
Код Arduino
/* 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)MIT App Inventor


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

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





BluetoothTest.aia
1 file(s) 5.16 KB Download
Пример управления шаговым двигателем




StepperMotorTest.aia
1 file(s) 60.96 KB Download
Stepper Motor Gauge and Pointer Images
1 file(s) 27.34 KB Download
/* 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)
Производственный процесс
- Проектирование баллистической парашютной системы восстановления для БПЛА
- Выбор правильного материала для вашего проекта: практическое руководство
- Создание потрясающей системы Ambilight для монитора на Arduino
- Универсальный Android-пульт на Arduino, 1Sheeld и ИК-управлении
- 7 шагов к построению успешной дорожной карты автоматизации
- Выбор правильного сплава: магний против алюминия для индивидуальных литейных проектов
- Выбор идеального крана для вашего строительного проекта: практическое руководство
- Как подготовить ваш проект кастомной обработки для конкурентоспособной котировки
- Точная оценка стоимости стали: пошаговое руководство для вашего проекта
- Почему пескоструйка улучшает проекты кастомной металлофаabricации