Машинка Arduino – как собрать и программа

Я уже давно увлекаюсь 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();
}


Внимание!!! Если ты копируешь эту статью себе на сайт, то оставляй ссылку непосредственно на эту страницу. Спасибо за понимание

Комментарии

родион

26 Октября 2021

здравствуйте, а можно узнать, почему программа пишет ошибку?


Михаил Фленов

26 Октября 2021

Какая ошибка?


Игнатов Виктор

19 Января 2023

Привет. Сейчас я пытаюсь собрать внуку машинку с управлением как у вас. Но у меня только 2 колеса , телега. Я использую пульт от Ардуино и при считывании кода кнопок идут разные показания при нажатии. Пример я жму стрелку вперед код 0xFF18E7 , жму еще раз код другой.
Если беру от телевизора , сколько не нажимай на кнопку код стабильный , одинаковый.


нұрислам

18 Aпреля 2023

мне нужно програма машина


Добавить Комментарий

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне