Я уже давно увлекаюсь Arduino и понемногу делаю небольшие проекты. В прошлом году я начал собирать свою машинку, у которой в качестве мозга выступала бы плата Arduino. Для этого я купил пластмассовую платформу, на которую можно крепить все остальные детали, четыре двигателя и четыре колеса.
Плата Arduino у меня уже была. Но когда я начала изучать, как заставить колеса крутиться, то выяснилось, что нужна еще одна плата, которая и будет управлять двигателем. Пришлось заказывать ее.
Сейчас у меня уже все есть, и я начал понемногу собирать машинку. Я не эксперт в электронике, но решил поделиться своим опытом изучения этой темы.
Я могу долго показывать в картинках, как что-то подключить, но лучше все же показать это в видео, поэтому все подключение лучше взять из видео.
Эта статья служит дополнительным материалом, потому что некоторые вещи проще показать в текстовой версии. Например, исходный код программы для машины Arduino.
В видео для создания машинки на базе Ardiono использовались:
- для управления двигателями я использовал плату L298N
- какой-то безымянный IR Receiver, у которого нет на плате никакого номера. Я вообще не знаю, там ставят какие-то номера или нет.
В видео использовался следующих исходный код программы для машинки на базе Arduino:
#include <IRremote.h> // константы const int RECEIVER_PIN = 12; const int LEFT_MOTOR_IN = 11; const int RIGHT_MOTOR_IN = 10; const int LEFT_MOTOR1 = 8; const int LEFT_MOTOR2 = 7; const int RIGHT_MOTOR1 = 4; const int RIGHT_MOTOR2 = 3; // IR ресивер IRrecv irrecv(RECEIVER_PIN); decode_results results; void setSpeed(int LeftSpeed, int RightSpeed) { analogWrite(LEFT_MOTOR_IN, LeftSpeed); analogWrite(RIGHT_MOTOR_IN, RightSpeed); } // Инициализация void setup() { Serial.begin(9600); setupMotors(); irrecv.enableIRIn(); } // Функция инициализации управления моторами. void setupMotors() { pinMode(LEFT_MOTOR1, OUTPUT); pinMode(LEFT_MOTOR2, OUTPUT); pinMode(RIGHT_MOTOR1, OUTPUT); pinMode(RIGHT_MOTOR2, OUTPUT); pinMode(LEFT_MOTOR_IN, OUTPUT); pinMode(RIGHT_MOTOR_IN, OUTPUT); setSpeed(255, 255); } // движение void setMotors(bool l1, bool l2, bool r1, bool r2) { digitalWrite(LEFT_MOTOR1, l1); digitalWrite(LEFT_MOTOR2, l2); digitalWrite(RIGHT_MOTOR1, r1); digitalWrite(RIGHT_MOTOR2, r2); } // движение вперед. void forward() { setMotors(HIGH, LOW, HIGH, LOW); } // Поворот налево с блокировкой левых колес. void forward_left() { setMotors(LOW, LOW, HIGH, LOW); } // Поворот направо с блокировкой правых колес. void forward_right() { setMotors(HIGH, LOW, LOW, LOW); } void left() { setMotors(LOW, HIGH, HIGH, LOW); } // Поворот направо с блокировкой правых колес. void right() { setMotors(HIGH, LOW, LOW, HIGH); } // Включаем движение назад. void backward() { setMotors(LOW, HIGH, LOW, HIGH); } // Останавливаемся void _stop() { setMotors(LOW, LOW, LOW, LOW); } void processIrInput() { if (!irrecv.decode(&results)) { return; } Serial.println(results.value, HEX); switch (results.value) { // Вперед case 0xFF18E7: forward(); break; // Назад case 0xFF4AB5: backward(); break; // Влево case 0xFF10EF: left(); break; // Вправо case 0xFF5AA5: right(); break; // Прямо и влево case 0xFF30CF: forward_left(); break; // Прямо и вправо case 0xFF7A85: forward_right(); break; // Стоп case 0xFF38C7: case 0xFF6897: _stop(); break; } irrecv.resume(); } // Главный цикл void loop() { processIrInput(); }
Внимание!!! Если ты копируешь эту статью себе на сайт, то оставляй ссылку непосредственно на эту страницу. Спасибо за понимание
здравствуйте, а можно узнать, почему программа пишет ошибку?
Какая ошибка?
Привет. Сейчас я пытаюсь собрать внуку машинку с управлением как у вас. Но у меня только 2 колеса , телега. Я использую пульт от Ардуино и при считывании кода кнопок идут разные показания при нажатии. Пример я жму стрелку вперед код 0xFF18E7 , жму еще раз код другой.
Если беру от телевизора , сколько не нажимай на кнопку код стабильный , одинаковый.
мне нужно програма машина