"ЖЕЛЕЗЯКА 1" - ИЛИ РОБОТ ИЗ "ОБЫЧНОГО" МЕТАЛЛИЧЕСКОГО КОНСТРУКТОРА - ЧАСТЬ 5
Предыдущая часть
На деле это самая простая часть — в Интернет полно примеров, как заставить такую тележку «бегать» управляя ей со смартфона или другим способом.
Для этого используется передача через Serial порт команды в виде буквы и ее последующая обработка.
Используя данные производителя платы драйвера двигателей по разводке
и таблицу истинности
легко задать скетч для Arduino. Конечно легко на словах — я потратил 4 часа, пытаясь найти проблему работы скетча. Как оказалось для Arduino Leonardo (что кстати написано в документации на сайте) надо использовать Serial1, вместо простого Serial. Поэтому если у вас плата, отличная от Leonardo, используйте нужную подпрограмму для вашей платы (для UNO к примеру замените все Serial1 на Serial в тексте).
Как видно мы используем стандартную раскладку wasd для движения и T для остановки.
После того как зальете программу в плату, проверьте что моторы подключены правильно и крутятся в нужную сторону, открыв терминал в Arduino IDE и передавая символы команд. Также можете поэкспериментировать со значением PWM.
Теперь приложение для Android. Тут тоже все достаточно просто — мы воспользуемся конструктором приложений MIT AppInventor 2 и создадим вот такую программу (вы можете просто взять мой проект за основу)
ai2.appinventor.mit.edu/#4506360365449216
Как видно у нас есть кнопки движения, поворота и кнопка STOP.

В самой программе мы используем события TouchUp и TouchDown к элементам управления, передавая символ движения при его касании и остановки при отпускании.

Вы можете установить на смартфон специальное приложение для отладки или сформировать пакет для установки на Android смартфон, подключить к тележке батарею (я использовал внешний аккумулятор для смартфона), подключить bluetooth устройство (HC-06 в моем случае) и наслаждаться тем, что вы сами создали радиоуправляемую игрушку.

Как превратить эту игрушку в робота мы поговорим в следующих частях.
Программное обеспечение
На деле это самая простая часть — в Интернет полно примеров, как заставить такую тележку «бегать» управляя ей со смартфона или другим способом.
Для этого используется передача через Serial порт команды в виде буквы и ее последующая обработка.
Используя данные производителя платы драйвера двигателей по разводке
Motor Control Interface
Pin Description
B-IA Motor B Input A (IA)
B-IB Motor B Input B (IB)
GND Ground
VCC Operating Voltage 2.5-12V
A-IA Motor A Input A (IA)
A-IB Motor A Input B (IB)
и таблицу истинности
Motor Truth Table
IA IB Motor State
L L Off
H L Forward
L H Reverse
H H Off
легко задать скетч для Arduino. Конечно легко на словах — я потратил 4 часа, пытаясь найти проблему работы скетча. Как оказалось для Arduino Leonardo (что кстати написано в документации на сайте) надо использовать Serial1, вместо простого Serial. Поэтому если у вас плата, отличная от Leonardo, используйте нужную подпрограмму для вашей платы (для UNO к примеру замените все Serial1 на Serial в тексте).
// wired connections
#define MOTOR_A_PWM 5 // Motor A Input A --> MOTOR A +
#define MOTOR_A_IB 6 // Motor A Input B --> MOTOR A -
#define MOTOR_B_PWM 9 // Motor B Input A --> MOTOR B +
#define MOTOR_B_IB 10 // Motor B Input B --> MOTOR B -
#define DIR_DELAY 300 // brief delay for abrupt motor changes
#define PWM_SPEED 255
int val;
void setup()
{
Serial1.begin( 9600 );
while (!Serial1) {
; // wait for serial port to connect. Needed for Leonardo only
}
pinMode( MOTOR_A_PWM, OUTPUT );
pinMode( MOTOR_A_IB, OUTPUT );
pinMode( MOTOR_B_PWM, OUTPUT );
pinMode( MOTOR_B_IB, OUTPUT );
digitalWrite( MOTOR_A_PWM, LOW );
digitalWrite( MOTOR_A_IB, LOW );
digitalWrite( MOTOR_B_PWM, LOW );
digitalWrite( MOTOR_B_IB, LOW );
Serial1.println( "Ready..." );
}
void loop()
{
// if we get a valid byte, read analog ins:
if (Serial1.available() > 0) {
val = Serial1.read();
// execute the menu option based on the character recieved
if (val == 'W' or val == 'w') // При нажатии клавиши "W"
{
Serial1.println( "Forward..." );
// set the motor speed and direction
digitalWrite( MOTOR_A_PWM, LOW ); // direction = forward
digitalWrite( MOTOR_B_PWM, LOW ); // direction = forward
analogWrite( MOTOR_B_IB, PWM_SPEED ); // PWM speed
analogWrite( MOTOR_A_IB, PWM_SPEED ); // PWM speed
}
if (val == 'S' or val == 's') // При нажатии клавиши "S"
{
Serial1.println( "Backward..." );
// set the motor speed and direction
digitalWrite( MOTOR_A_IB, LOW ); // direction = backward
digitalWrite( MOTOR_B_IB, LOW ); // direction = backward
analogWrite( MOTOR_B_PWM, PWM_SPEED ); // PWM speed
analogWrite( MOTOR_A_PWM, PWM_SPEED ); // PWM speed
}
if (val == 'A' or val == 'a') // При нажатии клавиши "A"
{
Serial1.println( "Left..." );
// set the motor speed and direction
digitalWrite( MOTOR_A_PWM, PWM_SPEED ); // direction = forward
digitalWrite( MOTOR_B_PWM, LOW ); // direction = forward
analogWrite( MOTOR_B_IB, PWM_SPEED ); // PWM speed
analogWrite( MOTOR_A_IB, LOW ); // PWM speed
}
if (val == 'D' or val == 'd') // При нажатии клавиши "D"
{
Serial1.println( "Right..." );
// set the motor speed and direction
digitalWrite( MOTOR_A_PWM, LOW ); // direction = forward
digitalWrite( MOTOR_B_PWM, PWM_SPEED ); // direction = forward
analogWrite( MOTOR_B_IB, LOW ); // PWM speed
analogWrite( MOTOR_A_IB, PWM_SPEED ); // PWM speed
}
if (val == 'T' or val == 't') // При нажатии клавиши "T" STOP
{
digitalWrite( MOTOR_A_IB, HIGH );
digitalWrite( MOTOR_A_PWM, HIGH );
digitalWrite( MOTOR_B_IB, HIGH );
digitalWrite( MOTOR_B_PWM, HIGH );
}
}
}
Как видно мы используем стандартную раскладку wasd для движения и T для остановки.
После того как зальете программу в плату, проверьте что моторы подключены правильно и крутятся в нужную сторону, открыв терминал в Arduino IDE и передавая символы команд. Также можете поэкспериментировать со значением PWM.
Теперь приложение для Android. Тут тоже все достаточно просто — мы воспользуемся конструктором приложений MIT AppInventor 2 и создадим вот такую программу (вы можете просто взять мой проект за основу)
ai2.appinventor.mit.edu/#4506360365449216
Как видно у нас есть кнопки движения, поворота и кнопка STOP.

В самой программе мы используем события TouchUp и TouchDown к элементам управления, передавая символ движения при его касании и остановки при отпускании.

Вы можете установить на смартфон специальное приложение для отладки или сформировать пакет для установки на Android смартфон, подключить к тележке батарею (я использовал внешний аккумулятор для смартфона), подключить bluetooth устройство (HC-06 в моем случае) и наслаждаться тем, что вы сами создали радиоуправляемую игрушку.

Как превратить эту игрушку в робота мы поговорим в следующих частях.
1 комментарий