В этом проекте мы будем использовать ИК-пульт для управления движением робота на базе Arduino. Мы будем использовать библиотеку AlashIRControlRX для приема сигналов с ИК-пульта и библиотеку AlashMotorControlLite для управления моторами робота. В данном проекте мы подключим ИК-приемник к аналоговому пину A2.
Необходимые компоненты
- Arduino Uno
- Моторы и мотор-шилд (или драйвер моторов)
- ИК-приемник (например, VS1838B)
- ИК-пульт
- Соединительные провода
- Макетная плата
Установка библиотек
Установка библиотеки AlashIRControlRX
-
Перейдите на официальный репозиторий библиотеки AlashIRControl на GitHub по следующей ссылке: AlashIRControl GitHub
-
На странице репозитория нажмите кнопку "Code" и выберите "Download ZIP" для скачивания архива с библиотекой.
-
После скачивания архива с библиотекой, распакуйте его в удобное для вас место на вашем компьютере.
-
Откройте Arduino IDE.
-
Перейдите в меню "Скетч" -> "Подключить библиотеку" -> "Добавить .ZIP библиотеку...".
-
В открывшемся окне проводника найдите и выберите скачанный и распакованный архив с библиотекой AlashIRControl. Нажмите "Открыть".
-
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 для приема ИК-сигналов и управления моторами соответственно. Следуя инструкции по подключению компонентов и установке библиотек, вы сможете легко собрать этот проект и экспериментировать с различными командами ИК-пульта для управления роботом.