Robotяга arduino - 3

З моменту останнього запису (www.drive2.ru/b/2540618/) з роботом відбулися зміни - він став повноцінним чотириколісним. І це дозволило спробувати найпростіше, що він може - їздити по «програмі».

Найпростіше, що спадає на думку - змусити виписувати «вісімки», «квадрати», «кола» ...
Немає причин не спробувати!

Але перш ніж починати писати, я б радив почитати:
- про те з чого повинен складатися скетч;
- які контакти є у ARDUINO і як вони можуть використовуватися;
- що таке ШІМ.
Та й взагалі добре б познайомитися з правилами хорошого тону при написанні скетчів - вони виявляється є!
Для цього в першу чергу рекомендую книгу Саймон Монк «Програмуємо ARDUINO».

На додаток до цієї книги можна і потрібно рекомендувати книгу відомого «ардуінщіка» Джеремі Блум «Вивчаємо ARDUINO»: www.bhv.ru/books/book.php?id=193070.

Ми з сином, після прочитання книг, написали простий «скетчік», щоб змусити їздити роботяга по квадрату.
Алгоритм «квадрата»:
- прямо;
- поворот наліво;
- прямо;
- поворот наліво;
- прямо;
- поворот наліво;
- прямо;
- стоп!

Сам скетч простий:
1. Задаємо номера висновків ARDUINO для управління двигуна - нагадую, у нашого драйвера моторів команди руху вперед, назад, швидкість обертання задаються окремими «каналами» - все це прописуємо на початку скетчу.
ПРИМІТКА: Висновки підключення драйвера моторів у всіх моїх скетчах одні і ті ж, як і підключення більшості датчиків.
2. У SETUP:
- Налаштовуємо параметри висновків ARDUINO - визначаємо їх як «виходи» - OUTPUT.
- Пишемо «алгоритм» руху робота по квадрату, як писав вище ...
Особливістю даного скетчу є те, що розділ LOOP порожній! Бо якби ми помістили «алгоритм» руху не в SETUP, який виконується тільки раз при запуску скетчу, а в LOOP -робота б рухався по «квадрату» бесконечноооооо ...

скетч:
[Code]
// Їдемо по квадрату
// *********************** Установка висновків моторів ********************** ***
int MotorLeftSpeed ​​= 5; // Лівий (А) мотор ШВИДКІСТЬ - ENA
int MotorLeftForward = 4; // Лівий (А) мотор ВПЕРЕД - IN1
int MotorLeftBack = 2; // Лівий (А) мотор НАЗАД - IN2
int MotorRightForward = 8; // Правий (В) мотор ВПЕРЕД - IN3
int MotorRightBack = 7; // Правий (В) мотор НАЗАД - IN4
int MotorRightSpeed ​​= 6; // Правий (В) мотор ШВИДКІСТЬ - ENB

pinMode (MotorRightForward, OUTPUT);
pinMode (MotorRightBack, OUTPUT);
pinMode (MotorRightSpeed, OUTPUT);

// ***************************** Рухаємося по "Квадрата" ************** *************
digitalWrite (MotorRightForward, HIGH);
digitalWrite (MotorLeftForward, HIGH);
digitalWrite (MotorRightBack, LOW);
digitalWrite (MotorLeftBack, LOW);
analogWrite (MotorRightSpeed, 200);
analogWrite (MotorLeftSpeed, 200);
delay (1000);
>
digitalWrite (MotorRightForward, HIGH);
digitalWrite (MotorLeftForward, LOW);
digitalWrite (MotorRightBack, LOW);
digitalWrite (MotorLeftBack, HIGH);
analogWrite (MotorRightSpeed, 140);
analogWrite (MotorLeftSpeed, 140);
delay (700); // Час "повороту" - потрібно налаштувати під конкретний РОБОТ!
>
digitalWrite (MotorRightForward, HIGH);
digitalWrite (MotorLeftForward, HIGH);
digitalWrite (MotorRightBack, LOW);
digitalWrite (MotorLeftBack, LOW);
analogWrite (MotorRightSpeed, 200);
analogWrite (MotorLeftSpeed, 200);
delay (1000);
>
digitalWrite (MotorRightForward, HIGH);
digitalWrite (MotorLeftForward, LOW);
digitalWrite (MotorRightBack, LOW);
digitalWrite (MotorLeftBack, HIGH);
analogWrite (MotorRightSpeed, 140);
analogWrite (MotorLeftSpeed, 140);
delay (700); // Час "повороту" - потрібно налаштувати під конкретний РОБОТ!
>
digitalWrite (MotorRightForward, HIGH);
digitalWrite (MotorLeftForward, HIGH);
digitalWrite (MotorRightBack, LOW);
digitalWrite (MotorLeftBack, LOW);
analogWrite (MotorRightSpeed, 200);
analogWrite (MotorLeftSpeed, 200);
delay (1000);
>
digitalWrite (MotorRightForward, HIGH);
digitalWrite (MotorLeftForward, LOW);
digitalWrite (MotorRightBack, LOW);
digitalWrite (MotorLeftBack, HIGH);
analogWrite (MotorRightSpeed, 140);
analogWrite (MotorLeftSpeed, 140);
delay (700); // Час "повороту" - потрібно налаштувати під конкретний РОБОТ!
>
digitalWrite (MotorRightForward, HIGH);
digitalWrite (MotorLeftForward, HIGH);
digitalWrite (MotorRightBack, LOW);
digitalWrite (MotorLeftBack, LOW);
analogWrite (MotorRightSpeed, 200);
analogWrite (MotorLeftSpeed, 200);
delay (1000);
>
digitalWrite (MotorRightForward, HIGH);
digitalWrite (MotorLeftForward, HIGH);
digitalWrite (MotorRightBack, HIGH);
digitalWrite (MotorLeftBack, HIGH);
analogWrite (MotorRightSpeed, 0);
analogWrite (MotorLeftSpeed, 0);
>
>
// ***************************** ЦИКЛ ****************** ***************
void loop ()
// Просто порожньо - цикл не виконуємо
>
[/ Code]

У «ідеалі» повинне вийти, щось типу цього:

А в житті ... ваш робот буде витворяти, що завгодно ... «ромби», «трапеції», «трикутник», але не «квадрат»!
І у мене так було ... і те, що ви бачите - це результат безлічі спроб і дублів!

Причин безліч!
Починаючи з потужності батареї!
Потужність батареї поступово знижується ... і якщо здавалося, що робот вже налаштований ... То через пару поїздок він починає «Не доворачивать» в поворотах ... при заміні батареї починає «перевертати» ...
Тому в скетчі позначена рядок «часу» виконання повороту:
delay (700); // Час "повороту" - потрібно налаштувати під конкретний РОБОТ!
УВАГА! Час в дужках потрібно підбирати індивідуально для кожного робота!

Але і це не все! Є ще проблеми ...
Коефіцієнт зчеплення ...
Наш роботяга, що то типу танка, але ось тільки дуже легкий і на гумових колесах, які по різному зчіплюються з покриттям ... і тут вже нічим не допоможеш - буксують!

Ну і ще одна причина - різниця характеристик моторів!
Не всі мотори однаково «корисні» ... Причини - можливе він народився таким ... можливо коли ви паялі дроти до контактів мотора перегріли і щітки зрушили ...
Але цю проблему можна вирішити - заміною моторів.

Резюме.
В силу своїх особливостей даний робот не може «якісно» їздити по програмі.
Але це не означає, що не потрібно спробувати цей скетч!
По-перше - це один з найпростіших способів пожвавити робота!
По друге - це найпростіший скетч, який показує, як управляти моторами.
По-третє - це гра з дитиною - його прилучення до процесу - даєш йому завдання підібрати «час» повороту, що б кут повороту був прямий ... Починаєш придумувати нові фігури ...

Ну і як освоїте такий рух можна переходити далі ...
Думаю до ІК управління.
www.drive2.ru/b/2818339/

Схожі статті