+7 (495) 749-9116 Перезвоните мне Перезвоните мне
0 Корзина
0 Сравнение
0 Избранное

Работа моторов с ускорением

Проведем первый эксперимент. Проверим, как отрабатывает робот простые команды, написанные в коде.
 
Определимся с подключением моторов.
 
Пин ESP32 – 32. Подключается к входу драйвера MR_EN. Этот  вход предназначен для разрешения вращения мотора. Его необходимо установить в  HIGH. При подаче на этот пин сигнала ШИМ регулируется скорость вращения вала мотора.
Пин ESP32 – 33.  Подключается к входу драйвера MR_IN. Уровень HIGH – вращение вала вперед. Уровень LOW – вращение вала назад.
Пин ESP32 – 25. Подключается к входу драйвера ML_EN. Этот  вход предназначен для разрешения вращения мотора. Его необходимо установить в  HIGH. При подаче на этот пин сигнала ШИМ регулируется скорость вращения вала мотора.
Пин ESP32 – 26. Подключается к входу драйвера ML_IN. Уровень HIGH – вращение вала вперед. Уровень LOW – вращение вала назад.

моторы робота
Напишем код для движения робота вперед, назад, влево, вправо. Здесь всё так же, как и в Ардуино уно.
 
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
//********************************************************************
/*
Проверяем работу электронных компонентов робота.
 Робот движется вперед, назад, влево, вправо, останов.
*/ 

// По схеме определяем, к каким пинам подключен драйвер моторов
#define ML_IN  26 //пин, отвечающий за направление вращения левого мотора
#define ML_EN  25 //пин, отвечающий за разрешение вращения.
#define MR_IN  33 //направления вращения правого мотора
#define MR_EN  32  // пин, отвечающий за разрешение вращения.

{
  pinMode(MR_IN,OUTPUT);
  pinMode(ML_IN,OUTPUT);
  pinMode(MR_EN,OUTPUT);
  pinMode(ML_IN,OUTPUT); 
}
void loop()
{ 
  //движение вперед
  digitalWrite(ML_IN,HIGH);
  digitalWrite(MR_IN,HIGH);     
  digitalWrite(MR_EN,HIGH);
  digitalWrite(ML_EN,HIGH);  
 delay(2000);
  
  //движение назад
  digitalWrite(ML_EN,HIGH);
  digitalWrite(ML_IN,LOW);
  digitalWrite(MR_EN,HIGH);
  digitalWrite(ML_IN,LOW); 
  delay(2000);
  
  //движение влево
  digitalWrite(ML_EN,HIGH);
  digitalWrite(ML_IN,LOW); 
  digitalWrite(MR_EN,HIGH);
  digitalWrite(MR_IN,HIGH);
  delay(2000);
  
  //движение вправо
  digitalWrite(ML_EN,HIGH); 
  digitalWrite(ML_IN,HIGH); 
  digitalWrite(MR_IN,LOW);
  digitalWrite(ML_EN,HIGH); 
  delay(2000);
  
  //Остановка
  digitalWrite(ML_EN,LOW);
  digitalWrite(ML_IN,HIGH); 
  digitalWrite(MR_EN,LOW);
  digitalWrite(MR_IN,HIGH);
  delay(2000);
}
//**************************************************

Загрузим и проверим работу робота


Теперь немного усложним код. Добавим изменение скорости.
В отличие от плат Ардуино уно или Ардуино нано в ESP32 нет команды analogWrite().
Для формирования ШИМ сигнала необходимо выполнить ряд операций.
 
ledcSetup(канал, частота, разрешение);   
В этой функции мы выбираем канал, частоту ШИМ и разрешение. ESP32 предоставляет нам 16 независимых каналов, каждый из которых может быть настроен независимо от других.
При выборе значения разрешения равного 8, коэффициент заполнения будет от 0 до 255
 
ledcAttachPin(пин, канал);   
Здесь мы указываем пин, который будет работать в режиме ШИМ и номер канала
 
ledcWrite(канал, коэффициент заполнения);  
Указываем номер канала и коэффициент заполнения.

 
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
//********************************************************************
/*
 Следующий эксперимент. Проверяем работу электронных компонентов робота.
 Робот движется вперед, назад, влево, вправо с изменением скорости
*/ 

// По схеме определяем, к каким пинам подключен драйвер моторов
#define ML_IN  26 //пин, отвечающий за направление вращения левого мотора
#define ML_EN  25 //пин, отвечающий за скорость вращения. ШИМ
#define MR_IN  33 //направления вращения правого мотора
#define MR_EN  32  //скорость вращения правого мотора

void setup()
{
 /* В ESP32 для задания параметров ШИМ необходимо предварительно задать   
  Номер канала ШИМ, частоту и разрешение. 
  Эти параметры мы устанавливаем в следующие функции.
  ledcSetup(channel, frequency, resolution)
  ledcAttachPin(gpio, channel)
  
  0 - номер канала
  1200 частота
  8 - разрешение. Значение 8 позволяет нам задать значение ШИМ в пределах 0-255
  */
  pinMode(ML_IN,OUTPUT); //устанавливаем пин направления как OUTPUT
  ledcSetup(0, 1200, 8); //Задаем параметры для первого канала ШИМ 
  ledcAttachPin(25, 0);  //пин 25 подключен к первому ШИМ каналу.
  pinMode(MR_IN,OUTPUT); // устанавливаем пин направления как OUTPUT
  ledcSetup(1, 1200, 8); //Задаем параметры для первого канала ШИМ 
  ledcAttachPin(32, 1); //пин 32 подключен ко второму ШИМ каналу.
}

void loop()
{ 
  //движение вперед
  digitalWrite(ML_IN,HIGH);
  ledcWrite(0, 255); // Первый канал. Значение 255 ШИМ    
  digitalWrite(MR_IN, HIGH);
  ledcWrite(1, 255); // Второй канал. Значение 255 ШИМ  delay(2000);
  
  //движение назад
  digitalWrite(ML_IN,LOW);
  ledcWrite(0, 90);
  digitalWrite(MR_IN,LOW); //set control pins of the right motor to HIGH..
  ledcWrite(1, 90); 
  delay(2000);
  
  //движение влево
  digitalWrite(ML_IN,LOW);
  ledcWrite(0, 100); 
  digitalWrite(MR_IN,HIGH);
  ledcWrite(1, 200);
  delay(2000);
  
  //движение вправо
  digitalWrite(ML_IN,HIGH); 
  ledcWrite(0, 200); 
  digitalWrite(MR_IN,LOW);
  ledcWrite(1, 100); 
  delay(2000);
  
  //Остановка
  digitalWrite(ML_IN,LOW);
  ledcWrite(0, 0); 
  digitalWrite(MR_IN,LOW);
  ledcWrite(1, 0);
  delay(2000);
}
//**************************************************

 
Открываем среду Arduino IDE, копируем код, подключаем USB кабелем плату М1 к компьютеру, проверяем настройки, выбираем COM порт и нажимаем кнопку загрузки.
При загрузке кода обратите внимание, что после компиляции для загрузки необходимо нажать кнопку IO0  на плате М1. После загрузки для запуска программы надо нажать кнопку EN.
Отключаем робота от компьютера, включаем питание от аккумуляторов и проверяем движение робота.


 
К разделу Робот ESP32