Управление машинкой осуществляется с телефона с андроидом через блутуф. Внутри arduino nano управляет двумя парами двигателей (одна пара состоит из левых переднего и заднего колес, другая - из правых). Непосредственно включение питания на электромагнитные двигатели идет через диодный мост на базе платы драйвера двигателей L293D без радиатора.
Фото, схема, таблица подключений:
1) верх:
3) схема (fritzing):
4) сводные таблицы подключений и требуемого питания (ods):
Скетчи для arduino ide:
1) для начала просто проверим подключение телефона через bluetooth-терминал android через управление светодиодом на ноге 13 платы arduino_nano (ino):
// bluetooth value
// 0 - led13 off, 1 - led13 on
int val = '0';
// arduino nano led13
int OUT_LED_13 = 13;
void setup()
{
Serial.begin(9600);
pinMode (OUT_LED_13, OUTPUT);
digitalWrite (OUT_LED_13, LOW);
}
void loop()
{
if (Serial.available())
{
val = Serial.read();
if (val == '1')
{
digitalWrite (OUT_LED_13, HIGH);
}
else if (val == '0')
{
digitalWrite (OUT_LED_13, LOW);
}
else
{
digitalWrite (OUT_LED_13, HIGH);
}
}
}
2) движение машины вперед с интервалами машины без управления (4dc motors through l293d) (ino):
//! two right wheels
int IN1 = 2;
int IN2 = 3;
//! enable right move
int EN2 = 12;
//! two left wheels
int IN3 = 4;
int IN4 = 5;
//! enable left move
int EN1 = 11;
//int i;
void setup()
{
//! right pins
pinMode (EN2, OUTPUT);
pinMode (IN1, OUTPUT);
pinMode (IN2, OUTPUT);
//! left pins
pinMode (EN1, OUTPUT);
pinMode (IN4, OUTPUT);
pinMode (IN3, OUTPUT);
// left-forward
digitalWrite (IN3, LOW);
digitalWrite (IN4, HIGH);
// right-forward
digitalWrite (IN1, LOW);
digitalWrite (IN2, HIGH);
}
void loop()
{
// left-right
digitalWrite (EN1, HIGH);
digitalWrite (EN2, HIGH);
delay(2000);
digitalWrite (EN1, LOW);
digitalWrite (EN2, LOW);
delay(2000);
}
3) движение машины вперед и назад с увеличивающейся скоростью через ШИМ (схема l293d очень сильно греется, в данном случае лучше использовать motor sheild с радиатором) (4dc motors through l293 pwm) (ino):
//! two right wheels
int IN1 = 2;
int IN2 = 3;
//! enable right move
int EN2 = 12;
//! two left wheels
int IN3 = 4;
int IN4 = 5;
//! enable left move
int EN1 = 11;
void setup()
{
//! right pins
pinMode (EN2, OUTPUT);
pinMode (IN1, OUTPUT);
pinMode (IN2, OUTPUT);
//! left pins
pinMode (EN1, OUTPUT);
pinMode (IN4, OUTPUT);
pinMode (IN3, OUTPUT);
}
void pwm_increase()
{
int i;
//! pwm increase
for (i = 50; i <= 180; ++i)
{
analogWrite(EN1, i);
analogWrite(EN2, i);
delay(200);
}
}
void pwm_decrease()
{
int i;
//! pwm decrease
for (i = 180; i > 0; --i)
{
analogWrite(EN1, i);
analogWrite(EN2, i);
delay(200);
}
}
void forward_gpios()
{
// left-forward
digitalWrite (IN3, LOW);
digitalWrite (IN4, HIGH);
// right-forward
digitalWrite (IN1, LOW);
digitalWrite (IN2, HIGH);
}
void backward_gpios()
{
// left-backward
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW);
// right-backward
digitalWrite (IN1, HIGH);
digitalWrite (IN2, LOW);
}
void all_stop()
{
//! stop
analogWrite (EN1, 0);
analogWrite (EN2, 0);
delay(2000);
}
void loop()
{
//! warning hotting the l293d
forward_gpios();
pwm_increase();
pwm_decrease();
all_stop();
backward_gpios();
pwm_increase();
pwm_decrease();
all_stop();
}
4) управление движением машины вперед и назад без ШИМ через bluetooth-терминал ('0' - стоп, '1' - вперед, '2' - назад) (ino):
// bluetooth value
// 0 - stop, 1 - forward, 2 - backward
int val = '0';
//! two right wheels
int IN1 = 2;
int IN2 = 3;
//! enable right move
int EN2 = 12;
//! two left wheels
int IN3 = 4;
int IN4 = 5;
//! enable left move
int EN1 = 11;
// arduino nano led13
int OUT_LED_13 = 13;
void setup()
{
Serial.begin(9600);
//! right pins
pinMode (EN2, OUTPUT);
pinMode (IN1, OUTPUT);
pinMode (IN2, OUTPUT);
//! left pins
pinMode (EN1, OUTPUT);
pinMode (IN4, OUTPUT);
pinMode (IN3, OUTPUT);
all_stop();
}
void forward_gpios()
{
// left-forward
digitalWrite (IN3, LOW);
digitalWrite (IN4, HIGH);
// right-forward
digitalWrite (IN1, LOW);
digitalWrite (IN2, HIGH);
}
void backward_gpios()
{
// left-backward
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW);
// right-backward
digitalWrite (IN1, HIGH);
digitalWrite (IN2, LOW);
}
void all_stop()
{
//! stop
digitalWrite (EN1, LOW);
digitalWrite (EN2, LOW);
}
void all_go()
{
//! go
digitalWrite (EN1, HIGH);
digitalWrite (EN2, HIGH);
}
void led13_light_up()
{
digitalWrite (OUT_LED_13, HIGH);
delay(2000);
digitalWrite (OUT_LED_13, LOW);
}
void loop()
{
if (Serial.available())
{
val = Serial.read();
if (val == '1')
{
//! forward
forward_gpios();
all_go();
led13_light_up();
}
else if (val == '2')
{
//! backward
backward_gpios();
all_go();
led13_light_up();
}
else
{
//! stop
all_stop();
led13_light_up();
}
}
}
Этот вариант является рабочим, но с оговорками: l293d очень сильно греется, нужен радиатор для рассеивания оседающего на транзисторе тепла, подключенного в ключевом режиме; во-вторых, соединение драйвера двигателей через макетку выливается в то, что в машинке работают не все колеса, надо постоянного поправлять провода для восстановления корректной связи с драйвером.
Для установки соединения с телефоном по bluetooth мы используем модуль HC-06. Для его подключения используются стандартные tx, rx-пины, которые использует usb-контроллер CH340, присутствующий на плате Arduino Nano в частности для взаимодействия с компом для заливки новых скетчей. То есть при подключенной схеме для заливки скетчей приходится на время отключать контакты rx, tx модуля HC-06.
На телефоне я использую приложение KvushCo Bluetooth Terminal, который позволяет передавать отдельные символы, например "1" означает "ехать вперед". В идеале же я бы хотел видеть своё приложение, которое позволяет более тонко управлять машинкой с поворотами, ШИМом, например, как сделано в этом проекте.
Следующий вариант машинки я делаю с использованием модуля драйвера двигателя l298d, выполненного на отдельной плате с радиатором. Из-за проблем с контактами на breadboard я буду использовать распайку на макетной плате.
Ссылки:
1) plastic case, arduino, bluetooth, android https://habr.com/ru/post/426097/
3) motor driver L293D http://zelectro.cc/L293D
4) L293D datasheet http://www.ti.com/lit/ds/symlink/l293.pdf
5) LG 18650D1 3.7V 3000mAh Rechargeable Li-Ion Batteries unprotected
https://mysku.ru/blog/aliexpress/30357.html
6) Зарядка-защита лития + применение (TP4056) https://mysku.ru/blog/aliexpress/30210.html
7) Arduino Nano 3.0 http://arduino.ru/Hardware/ArduinoBoardNano
8) lego, arduino, bluetooth, android https://habr.com/ru/post/424087/
9) old car, two arduino card, radio modules https://usamodelkina.ru/5239-delaem-mashinku-na-radioupravlenii-na-arduino-uno.html
10) https://www.instructables.com/id/Smartphone-Controlled-Arduino-Rover (перевод на русский https://masterclub.online/topic/15343-mashinka-na-arduino)
11) How to Use the L293D Motor Driver - Arduino Tutorial https://www.instructables.com/id/How-to-use-the-L293D-Motor-Driver-Arduino-Tutorial/
12) Control the speed and direction of a DC Motor using a L293D
https://playground.arduino.cc/Main/DirectionalMotorControlWithAL293D/
13) Bluetooth танк - powerbank своими руками https://alexgyver.ru/bluetooth-car/
14) Модуль драйвера двигателей L298N и Arduino http://zelectro.cc/motor_shield_l298n_arduino
4) L293D datasheet http://www.ti.com/lit/ds/symlink/l293.pdf
5) LG 18650D1 3.7V 3000mAh Rechargeable Li-Ion Batteries unprotected
https://mysku.ru/blog/aliexpress/30357.html
6) Зарядка-защита лития + применение (TP4056) https://mysku.ru/blog/aliexpress/30210.html
7) Arduino Nano 3.0 http://arduino.ru/Hardware/ArduinoBoardNano
8) lego, arduino, bluetooth, android https://habr.com/ru/post/424087/
9) old car, two arduino card, radio modules https://usamodelkina.ru/5239-delaem-mashinku-na-radioupravlenii-na-arduino-uno.html
10) https://www.instructables.com/id/Smartphone-Controlled-Arduino-Rover (перевод на русский https://masterclub.online/topic/15343-mashinka-na-arduino)
11) How to Use the L293D Motor Driver - Arduino Tutorial https://www.instructables.com/id/How-to-use-the-L293D-Motor-Driver-Arduino-Tutorial/
12) Control the speed and direction of a DC Motor using a L293D
https://playground.arduino.cc/Main/DirectionalMotorControlWithAL293D/
13) Bluetooth танк - powerbank своими руками https://alexgyver.ru/bluetooth-car/
14) Модуль драйвера двигателей L298N и Arduino http://zelectro.cc/motor_shield_l298n_arduino