Arduino-указатель для PowerPoint — беспроводное управление презентациями
Компоненты и материалы
- Arduino Leonardo — 1 шт.
- IR-приёмник (например, VS1838B) — 1 шт.
- Пульт от телевизора — 1 шт.
- Опционально: макетная плата для сборки шилда
О проекте
Во время последней презентации в PowerPoint мне было неудобно постоянно держать мышь — она не предназначена для такого управления. Надеясь провести введение в Arduino, я решил быстро собрать пульт для переключения слайдов на базе Arduino.
Идея проста: использовать пульт от телевизора — он эргономичнее мыши для этой задачи.

Подключение компонентов
Схема подключения элементарна:
- GND датчика → GND Arduino
- VCC датчика (5V) → 5V Arduino
- Data датчика → Digital Pin 2 Arduino

Программная часть
Работа делится на два этапа:
- Определение кодов пульта — загружаем скетч
PPT_Pointer_Code_1.ino, открываем Serial Monitor и нажимаем нужные кнопки. Записываем полученные числовые коды. - Назначение функций — в скетче
PPT_Pointer_Code_2.inoзаменяем примерные значения (18105 и -22951) на свои коды для кнопок «вперёд» и «назад».
Для работы нужна библиотека IRremote (установите через менеджер библиотек или с GitHub). Arduino Leonardo (как и Zero, Due) нативно эмулирует клавиатуру/мышь, поэтому после загрузки второго скетча нажатия кнопок пульта будут работать как стрелки клавиатуры.



Работа в PowerPoint
Откройте презентацию в режиме слайд-шоу — слайды будут переключаться при нажатии заданных кнопок пульта.
Другие платы Arduino
На платах вроде Uno (ATmega328P) для эмуляции HID-устройства нужно перепрошивать чип ATmega8U2/16U2. Подробнее — на forum.arduino.cc. Если реализуете — делитесь опытом!
Код
PPT_Pointer_Code_2.ino (основной скетч)
#include <IRremote.h>
#include <Keyboard.h>
int RECV_PIN = 2;
IRrecv irrecv(RECV_PIN);
decode_results results;
int key_pressed;
int last_key_pressed;
void setup() {
Serial.begin(9600);
irrecv.enableIRIn();
Keyboard.begin();
}
void loop() {
if (irrecv.decode(&results)) {
key_pressed = results.value;
Serial.println(key_pressed);
irrecv.resume();
}
if (key_pressed == last_key_pressed) key_pressed = 0; // защита от повторов
if (key_pressed == 18105) { // ВПЕРЁД — замените на свой код
Keyboard.press(KEY_RIGHT_ARROW);
Keyboard.releaseAll();
}
if (key_pressed == -22951) { // НАЗАД — замените на свой код
Keyboard.press(KEY_LEFT_ARROW);
Keyboard.releaseAll();
}
last_key_pressed = key_pressed;
}
PPT_Pointer_Code_1.ino (сканер кодов)
#include <IRremote.h>
int RECV_PIN = 2;
IRrecv irrecv(RECV_PIN);
decode_results results;
int key_pressed;
void setup() {
Serial.begin(9600);
irrecv.enableIRIn();
}
void loop() {
if (irrecv.decode(&results)) {
key_pressed = results.value;
Serial.println(key_pressed);
irrecv.resume();
}
delay(100);
}
Схемы


Производственный процесс
- Лазерный указатель: дизайн, производство и обзор безопасности
- Создание профессионального универсального пульта на Raspberry Pi с LIRC
- Сборка Bluetooth-робота-шпиона на Arduino с управлением с телефона
- FlickMote: жестовое IR-пульт для умного дома на Arduino 101 и ультразвуковом датчике
- DIY Arduino TV-B-Gone: универсальный пульт для выключения любого телевизора
- Универсальный Android-пульт на Arduino, 1Sheeld и ИК-управлении
- Создание пользовательских LED-часов с будильником — видно с 12 метров
- Find Me: Умный поисковик вещей на Arduino и Bluetooth
- Оптимизированные решения питания для проектов на Arduino
- Крестики-нолики на Arduino с матрицей MAX7219 и картонным корпусом