Проект 12: Управление роботом с помощью ИК-пульта на Arduino

В проекте «Управление роботом с помощью ИК-пульта на Arduino» используется ИК-пульт для управления движением робота на базе Arduino. С помощью библиотек AlashIRControlRX и AlashMotorControlLite мы принимаем команды с ИК-пульта и управляем моторами робота. Робот может выполнять команды для движения вперед, назад, поворотов налево и направо, а также остановки. Этот проект демонстрирует возможности использования ИК-пульта для управления робототехникой.

Управление роботом с помощью ИК-пульта

В этом проекте мы будем использовать ИК-пульт для управления движением робота на базе Arduino. Мы будем использовать библиотеку AlashIRControlRX для приема сигналов с ИК-пульта и библиотеку AlashMotorControlLite для управления моторами робота. В данном проекте мы подключим ИК-приемник к аналоговому пину A2.

Необходимые компоненты

  • Arduino Uno

  • Моторы и мотор-шилд (или драйвер моторов)

  • ИК-приемник (например, VS1838B)

  • ИК-пульт

  • Соединительные провода

  • Макетная плата

Установка библиотек

Установка библиотеки AlashIRControlRX

  1. Перейдите на официальный репозиторий библиотеки AlashIRControl на GitHub по следующей ссылке: AlashIRControl GitHub

  2. На странице репозитория нажмите кнопку «Code» и выберите «Download ZIP» для скачивания архива с библиотекой.

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

  4. Откройте Arduino IDE.

  5. Перейдите в меню «Скетч» -> «Подключить библиотеку» -> «Добавить .ZIP библиотеку…».

  6. В открывшемся окне проводника найдите и выберите скачанный и распакованный архив с библиотекой AlashIRControl. Нажмите «Открыть».

  7. Arduino IDE автоматически установит библиотеку, и внизу окна появится сообщение “Библиотека добавлена. Проверьте меню „Подключить библиотеку“”.

Установка библиотеки AlashMotorControlLite

Перейдите на официальный репозиторий библиотеки AlashMotorControlLite на GitHub по следующей ссылке: AlashMotorControlLite GitHub

Пример кода для управления роботом с помощью ИК-пульта

#include <AlashIRControlRX.h>
#include <AlashMotorControlLite.h>
// Определение пинов для моторов
const int pinLB = 9;         // задний левый мотор
const int pinLF = 8;         // передний левый мотор
const int pinRB = 7;         // задний правый мотор
const int pinRF = 6;         // передний правый мотор
const int Lpwm_pin = 10;     // ШИМ для левого мотора
const int Rpwm_pin = 5;      // ШИМ для правого мотора
// Определение пина для ИК-приемника
const int RECV_PIN = A2;
// Определение кода для кнопки ESC
#define IR_ESC     0x00ff52ad
unsigned char Lpwm_val = 200;
unsigned char Rpwm_val = 200;
int Car_state = 0;
// Инициализация ИК приемника
AlashIRControlRX irrecv(RECV_PIN);
// Создаем объект motorLeft с режимом DIR_DIR_PWM и пинами inA = 9, inB = 8, PWM = 10
AlashMotorControlLite motorLeft(DIR_DIR_PWM, 9, 8, 10);
// Создаем объект motorRight с режимом DIR_DIR_PWM и пинами inA = 6, inB = 7, PWM = 9
AlashMotorControlLite motorRight(DIR_DIR_PWM, 7, 6, 5);

void advance() {     // движение вперед
    motorLeft.setSpeed(Lpwm_val); // Установка скорости вращения вперед для левого мотора
    motorRight.setSpeed(Rpwm_val); // Установка скорости вращения вперед для правого мотора
    Car_state = 1;
    show_state();
}

void turnR() {        // поворот направо
    motorLeft.setSpeed(Lpwm_val); // Установка скорости вращения вперед для левого мотора
    motorRight.setSpeed(-Rpwm_val); // Установка скорости вращения назад для правого мотора
    Car_state = 4;
    show_state();
}

void turnL() {        // поворот налево
    motorLeft.setSpeed(-Lpwm_val); // Установка скорости вращения назад для левого мотора
    motorRight.setSpeed(Rpwm_val); // Установка скорости вращения вперед для правого мотора
    Car_state = 3;
    show_state();
}

void stopp() {         // остановка
    motorLeft.setSpeed(0); // Остановка левого мотора
    motorRight.setSpeed(0); // Остановка правого мотора
    Car_state = 5;
    show_state();
}

void back() {          // движение назад
    motorLeft.setSpeed(-100); // Установка скорости вращения назад для левого мотора
    motorRight.setSpeed(-100); // Установка скорости вращения назад для правого мотора
    Car_state = 2;
    show_state();
}

void show_state(void) {
    switch (Car_state) {
        case 1: Serial.print("\n GO"); break;
        case 2: Serial.print("\n Back"); break;
        case 3: Serial.print("\n Left"); break;
        case 4: Serial.print("\n Right"); break;
        case 5: Serial.print("\n Stop"); break;
        default: break;
    }
}

void IR_Control(void) {
    unsigned long Key;
    while (Key != IR_ESC) {
        if (irrecv.check()) { // Проверка наличия данных от ИК-пульта
            Key = irrecv.data;
            switch (Key) {
                case 0xFF18E7: advance(); break;  // движение вперед
                case 0xFF4AB5: back(); break;   // движение назад
                case 0xFF10EF: turnL(); break;  // поворот налево
                case 0xFF5AA5: turnR(); break; // поворот направо
                case 0xFF38C7: stopp(); break;  // остановка
                default: break;
            }
        }
    }
    stopp();
}

void setup() {
    irrecv.begin(); // Запуск ИК приемника
    Serial.begin(9600); // Инициализация серийного порта
    stopp();
}

void loop() {
    if (irrecv.check()) {
        Serial.println(irrecv.data, HEX);
        IR_Control();
    }
}

Заключение

Этот проект демонстрирует, как использовать ИК-пульт для управления движением робота на базе Arduino. Мы использовали библиотеки AlashIRControlRX и AlashMotorControlLite для приема ИК-сигналов и управления моторами соответственно. Следуя инструкции по подключению компонентов и установке библиотек, вы сможете легко собрать этот проект и экспериментировать с различными командами ИК-пульта для управления роботом.