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

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

В этом проекте мы будем использовать ИК-пульт для управления движением робота на базе 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 повторите те же шаги, что и для установки библиотеки AlashIRControlRX, используя следующую ссылку на репозиторий: 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 для приема ИК-сигналов и управления моторами соответственно. Следуя инструкции по подключению компонентов и установке библиотек, вы сможете легко собрать этот проект и экспериментировать с различными командами ИК-пульта для управления роботом.

Предзаказ
Предзаказ успешно отправлен!
Имя *
Телефон *
Добавить в корзину
Название товара
100 тг
1 шт.
Перейти в корзину
Обратный звонок
Запрос успешно отправлен!
Имя *
Телефон *
Заказ в один клик
С помощью уведомлений о заказе можно не только получать актуальную информацию по заказу, но и иметь быстрый канал связи с магазином