Я уже давно увлекаюсь 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 , жму еще раз код другой.
Если беру от телевизора , сколько не нажимай на кнопку код стабильный , одинаковый.
мне нужно програма машина