Один из подписчиков решил сделать привод для телескопа, и попросил меня помочь с написанием скетча.
Раз уж скетч написан, то будет не лишним рассказать что для этого понадобится, и предоставить схему для сборки устройства.
Так выглядит устройство для управление двумя шаговыми двигателями с помощью джойстика на базе Arduino UNO.
Для его сборки понадобится:
Плата Arduino UNO, модуль двух осевой джойстик, два униполярных шаговых двигателя 28BYJ-48 5V, два драйвера на базе микросхемы ULN2003 и соединительные провода.
Загрузите на плату Arduino UNO этот скетч.
В скетче есть 4 настройки!
Переменная t12 отвечает за скорость вращения первого шагового двигателя при первоначальном отведении джойстика.
Переменная t11 отвечает за скорость вращения первого шагового двигателя при отведении джойстика в крайнее положение.
Переменная t22 отвечает за скорость вращения второго шагового двигателя при первоначальном отведении джойстика.
Переменная t21 отвечает за скорость вращения второго шагового двигателя при отведении джойстика в крайнее положение.
Чем больше значение этих переменных тем медленнее скорость вращения шагового двигателя!
//Начало скетча
- int i1=0;
- int i2=0;
- int t=0;
- int t12=14;//НАСТРОЙКА!!!//
- int t11=4;//НАСТРОЙКА!!!//
- int t22=14;//НАСТРОЙКА!!!//
- int t21=4;//НАСТРОЙКА!!!//
- void setup(){
- //4,5,6,7 контакты для 1 двигателя
- pinMode(4, OUTPUT);
- pinMode(5, OUTPUT);
- pinMode(6, OUTPUT);
- pinMode(7, OUTPUT);
- //12,13,10,11 контакты для 2 двигателя
- pinMode(12, OUTPUT);
- pinMode(13, OUTPUT);
- pinMode(10, OUTPUT);
- pinMode(11, OUTPUT);
- }
- void prodlit11(){ //функция для продления цикла
- if (analogRead (A0)<(520)){i1++;}
- if (analogRead (A0)>(521)&& analogRead (A0)<(999)){i1--;t=t12;}
- if (analogRead (A0)>(1000)){i1--;t=t11;}
- }
- void prodlit12(){ //функция для продления цикла
- if (analogRead (A0)>(490)){i1++;}
- if (analogRead (A0)>(51)&& analogRead (A0)<(489)){i1--;t=12;}
- if (analogRead (A0)<(50)){i1--;t=t11;}
- }
- void prodlit21(){ //функция для продления цикла
- if (analogRead (A1)<(520)){i2++;}
- if (analogRead (A1)>(521)&& analogRead (A1)<(999)){i2--;t=t22;}
- if (analogRead (A1)>(1000)){i2--;t=t21;}
- }
- void prodlit22(){ //функция для продления цикла
- if (analogRead (A1)>(490)){i2++;}
- if (analogRead (A1)>(51)&& analogRead (A1)<(489)){i2--;t=t22;}
- if (analogRead (A1)<(50)){i2--;t=t21;}
- }
- void stopPins() {digitalWrite(4, LOW);digitalWrite(5, LOW);digitalWrite(6, LOW);
- digitalWrite(7, LOW);digitalWrite(10, LOW);digitalWrite(11, LOW);
- digitalWrite(12, LOW);digitalWrite(13, LOW);delay(100);}
- void loop(){
- if (analogRead (A0) > (521)){t=t12;
- while (i1<1){ //цикл для вращения мотора 1 вправо
- digitalWrite(7, HIGH);digitalWrite(5, LOW);delay(t);
- digitalWrite(6, HIGH);digitalWrite(4, LOW);delay(t);
- digitalWrite(5, HIGH);digitalWrite(7, LOW);delay(t);
- digitalWrite(4, HIGH);digitalWrite(6, LOW);delay(t-2);
- i1++;prodlit11();}i1=0;stopPins();
- }
- if (analogRead (A0) < (489)){t=t12;
- while (i1<1){ //цикл для вращения мотора 1 влево
- digitalWrite(4, HIGH);digitalWrite(6, LOW);delay(t);
- digitalWrite(5, HIGH);digitalWrite(7, LOW);delay(t);
- digitalWrite(6, HIGH);digitalWrite(4, LOW);delay(t);
- digitalWrite(7, HIGH);digitalWrite(5, LOW);delay(t-2);
- i1++;prodlit12();}i1 = 0;stopPins();
- }
- if (analogRead (A1) > (521)){t=t22;
- while (i2<1){ //цикл для вращения мотора 2 вправо
- digitalWrite(13, HIGH);digitalWrite(11, LOW);delay(t);
- digitalWrite(12, HIGH);digitalWrite(10, LOW);delay(t);
- digitalWrite(11, HIGH);digitalWrite(13, LOW);delay(t);
- digitalWrite(10, HIGH);digitalWrite(12, LOW);delay(t-2);
- i2++;prodlit21();}i2=0;stopPins();
- }
- if (analogRead (A1) < (489)){t=t22;
- while (i2<1){ //цикл для вращения мотора 2 влево
- digitalWrite(10, HIGH);digitalWrite(12, LOW);delay(t);
- digitalWrite(11, HIGH);digitalWrite(13, LOW);delay(t);
- digitalWrite(12, HIGH);digitalWrite(10, LOW);delay(t);
- digitalWrite(13, HIGH);digitalWrite(11, LOW);delay(t-2);
- i2++;prodlit22();}i2 = 0;stopPins();
- }}
//Конец скетча
После настройки и загрузки скетча соберите все согласно этой схемы.
Проверьте! И если все верно, то можете подключить устройство к блоку питания, павербанку или USB компьютера.
Так как устройство в режиме вращения вала шагового двигателя потребляет около 350 миллиампер, то источник питания должен быть минимум на 500 миллиампер.
Чтобы инвертировать направление вращения вала шагового двигателя:
Поменяйте местами контакты 5, 6 или 4, 7 для 1 шагового двигателя.
Поменяйте местами контакты 11, 12 или 10, 13 для 2 шагового двигателя.
Чтобы поменять местами оси X, Y поменяйте местами контакты A0, A1.