Сегодня сделаем пульт для презентаций своими руками на базе Arduino (DigiSpark). Данный девайс отличная вещь и пригодиться может в самый неожиданней момент. Благо собрать недорогой вариант беспроводного управления презентацией достаточно просто. Подробно рассматривать техническую часть не будем. Разберём, какая электроника нужна и основные настройки скетча. Более подробнее о прошивке и электронике вы можете почитать в предыдущем проекте и уроке.
Для пульта управления презентацией понадобится следующая электроника:
Как видим, для проекта нужно минимум комплектующих и если их покупать в Китае, то можно уложиться в 2-5 $.
Рассмотрим два варианта схем пульта для проведения презентаций. Первая схема подключения состоит из 2 модулей, и собрать ее можно без пайки элементов. Но при этом будет не очень красивая реализация.
Второй вариант без пайки не собрать. Припаять нужно всего 3 ножки IR приемника. В данном варианте получим небольшое USB устройство, которое можно подключать к компьютеру.
Для более красивого и эстетичного вида можно напечатать на 3D принтере корпус для устройства. Также данный вариант выйдет немного дешевле.
Сперва, необходимо настроить среду Arduino IDE для работы с платой DigiSpark.
Пошаговую инструкцию вы можете посмотреть в статье DigiSpark ATtiny85 настройка Arduino IDE и установка драйвера. А в данном уроке вкратце расскажу про данные настройки.
Все материалы, используемые в данном проекте, вы можете скачать внизу статьи в разделе «Файлы для скачивания».
Библиотека Adafruit Trinket USB содержит различные функции позволяющие использовать микроконтроллер, такой как DigiSpark, Arduino Micro, Arduino Leonardo в качестве клавиатуры, мышки для ПК. В данном уроке будем использовать библиотеку TrinketHidCombo, которая идет в составе набора библиотек Adafruit Trinket USB. Давайте приступим к её установке.
Для того чтобы установить библиотеку Adafruit Trinket USB необходимо её скачать с сайта GitHub.
После чего с помощью инструмента «Скетч -> Подключить библиотеку -> Добавить ZIP библиотеку..». Загружаем библиотеку в среду разработки.
Для этого выбираем скаченный архив. После чего мы увидим, что установка прошла успешно. Сейчас можно перейти к написанию кода. Также с библиотекой устанавливаются примеры, которые помогут лучше понять возможности данного инструмента.
А затем загрузить код в плату.
//отладка. Установите значение 0 после поиска ваших кодов #define DEBUG 0 //Укажите свои коды здесь: #define REMOTE_OK 0x61D66897 // Enter (подтвердить действие) #define REMOTE_LEFT 0x61D618E7 // Left (стрелка влево на клавиатуре) #define REMOTE_RIGHT 0x61D630CF // Right (стрелка вправо на клавиатуре) #define REMOTE_DOWN 0x61D6A857 // Down (стрелка вниз на клавиатуре) #define REMOTE_UP 0x61D6D02F // Up (стрелка вверх на клавиатуре) #define REMOTE_MOUSE_SWITCH 0x61D68877 // Mouse On/Off (включить или выключить Мышь. Аналогов на клавиатуре нет) #define REMOTE_ESC 0x61D638C7 // Esc (отмена) #define REMOTE_VOL_UP 0x61D650AF // увеличит звук #define REMOTE_VOL_DOWN 0x61D628D7 // уменьшить звук #define REMOTE_BACKSPACE 0x61D6B04F // BACKSPACE (удалить) #define REMOTE_PLAYPAUSE 0x61D6D827 // Play/Pause (пуск / пауза воспроизведения) #define REMOTE_NEXT 0x61D67887 // Next (след композиция) #define REMOTE_PREV 0x61D6F807 // Prev (Предыдущая композиция) #define REMOTE_F5 0x61D6F00F // F5 (Развернуть презентацию) #define MOUSE_SENSITIVITY 1 #define REPEAT_DELAY 220 volatile uint8_t m = 0, tcnt = 0, startflag = 0; uint32_t irdata = 0, keydata = 0 ; bool mouse = false; bool pressed = false; bool complete = false; int lastMouseX = 0, lastMouseY = 0; #include <avr/delay.h> #include "TrinketHidCombo.h" void setup() { DDRB |= (1 << DDB1); //P1 (LED) OUT в скетче не использован PORTB |= 1 << PB2; // подтяжка PB2 не помешает. GIMSK |= 1 << INT0; //прерывание int0 включить MCUCR |= 1 << ISC00; //Любое логическое изменение в INT0 генерирует запрос на прерывание GTCCR |= 1 << PSR0; TCCR0A = 0; TCCR0B = (1 << CS02) | (1 << CS00); TIMSK = 1 << TOIE0; //таймер прерывания TrinketHidCombo.begin(); // запустите механизм USB-устройства } void loop() { if (complete) { // если код был получен if (keydata != 0) //если код новый { Action(keydata); pressed = true; } else if (mouse) //Ускоряем движения мыши { lastMouseX *= 2; if (lastMouseX > 64) lastMouseX = 64; else if (lastMouseX < -64) lastMouseX = -64; lastMouseY *= 2; if (lastMouseY > 64) lastMouseY = 64; else if (lastMouseY < -64) lastMouseY = -64; } TrinketHidCombo.mouseMove(lastMouseX, lastMouseY, 0); complete = false; ms_delay(REPEAT_DELAY); // для балансировки задержки повторения/ввода пульта дистанционного управления } else if (pressed) { digitalWrite(1, LOW); if (mouse) TrinketHidCombo.mouseMove(0, 0, 0); else TrinketHidCombo.pressKey(0, 0); pressed = false; } else { _delay_ms(1);//ограничьте опрос USB на пустых циклах TrinketHidCombo.poll(); // проверьте, не нужно ли что-нибудь сделать с USB } } ISR (INT0_vect) { if (PINB & 1 << 2) { TCNT0 = 0; } else { tcnt = TCNT0; if (startflag) { if (30 > tcnt && tcnt > 2) { if (tcnt > 15 && m < 32) { irdata |= (2147483648 >> m); } m++; } } else startflag = 1; } } ISR (TIMER0_OVF_vect) { if (m) complete = true; m = 0; startflag = 0; keydata = irdata; irdata = 0; // if the index is not 0, then create an end flag } void ms_delay(uint16_t x) { for (uint16_t m = 0; m < (x / 10); m++) { _delay_ms(10); TrinketHidCombo.poll(); } } void Action(uint32_t keycode) { switch (keycode) { case REMOTE_OK: if (mouse) { lastMouseX = 0; lastMouseY = 0; TrinketHidCombo.mouseMove(lastMouseX, lastMouseY, MOUSEBTN_LEFT_MASK); } else TrinketHidCombo.pressKey(0, KEYCODE_ENTER); break; case REMOTE_LEFT: if (mouse) { lastMouseX = -MOUSE_SENSITIVITY; lastMouseY = 0; TrinketHidCombo.mouseMove(lastMouseX, lastMouseY, 0); } else TrinketHidCombo.pressKey(0, KEYCODE_ARROW_LEFT); break; case REMOTE_RIGHT: if (mouse) { lastMouseX = MOUSE_SENSITIVITY; lastMouseY = 0; TrinketHidCombo.mouseMove(lastMouseX, lastMouseY, 0); } else TrinketHidCombo.pressKey(0, KEYCODE_ARROW_RIGHT); break; case REMOTE_DOWN: if (mouse) { lastMouseX = 0; lastMouseY = MOUSE_SENSITIVITY; TrinketHidCombo.mouseMove(lastMouseX, lastMouseY, 0); } else TrinketHidCombo.pressKey(0, KEYCODE_ARROW_DOWN); break; case REMOTE_UP: if (mouse) { lastMouseX = 0; lastMouseY = -MOUSE_SENSITIVITY; TrinketHidCombo.mouseMove(lastMouseX, lastMouseY, 0); } else TrinketHidCombo.pressKey(0, KEYCODE_ARROW_UP); break; case REMOTE_ESC: TrinketHidCombo.pressKey(0, KEYCODE_ESC); break; case REMOTE_F5: TrinketHidCombo.pressKey(0, KEYCODE_F5); break; case REMOTE_BACKSPACE: TrinketHidCombo.pressKey(0, KEYCODE_BACKSPACE); break; case REMOTE_MOUSE_SWITCH: mouse = !mouse; lastMouseX = 0; lastMouseY = 0; break; case REMOTE_VOL_UP: TrinketHidCombo.pressMultimediaKey(MMKEY_VOL_UP); break; case REMOTE_VOL_DOWN: TrinketHidCombo.pressMultimediaKey(MMKEY_VOL_DOWN); break; case REMOTE_PREV: TrinketHidCombo.pressMultimediaKey(MMKEY_SCAN_PREV_TRACK); break; case REMOTE_NEXT: TrinketHidCombo.pressMultimediaKey(MMKEY_SCAN_NEXT_TRACK); break; case REMOTE_PLAYPAUSE: TrinketHidCombo.pressMultimediaKey(MMKEY_PLAYPAUSE); break; /* case REMOTE_F5: TrinketHidCombo.pressKey(0, KEYCODE_F5); break;*/ default: if (DEBUG) TrinketHidCombo.println(keydata, HEX); else return; } digitalWrite(1, HIGH); }
Для начала нужно разобраться, какие клавиши мы будим использовать для управления презентацией. Вот список всех клавиш и описания их применения.
Добавил основные клавиши, которые понадобятся при управлении презентацией, а также добавил кнопки управления медиа файлами. При показе презентации часто требуется включать ролики и/или звуковое сопровождение. Также стоит выделить команду REMOTE_MOUSE_SWITCH - Mouse On/Off, данная команда переключает управление с клавиш стрелки перемещения влево, вправо, вверх, вниз. На перемещение курсора мыши. После чего, при нажатии на соответствующую клавишу у нас перемещается курсор мыши по экрану в нужном направлении. При частом нажатии скорость перемещения увеличивается, что позволяет достаточно быстро навести курсор на нужный элемент на экране.
После чего нам нужно получить код с пульта ДУ. Так как пульты у всех разные и коды у каждого уникальны.
//отладка. Установите значение 0 после поиска ваших кодов #define DEBUG 1
Для получения кода кнопок в скетче есть переменная DEBUG, если установить значение данной переменой 1 и загрузить прошивку в DigiSpark то при нажатии на клавиши на пульте в текстовом документе увидим код данной кнопки. Можно установить курсов в скетче, где нужно задать код кнопки пульта, и нажать на кнопку и у вас автоматически заполнятся нужные поля.
После повторной прошивки платы с отключенным режимом DEBUG, можно приступить к управлению презентацией.
//отладка. Установите значение 0 после поиска ваших кодов #define DEBUG 0
С помощью пульта можно перемещаться по элементам в папке и выбирать нужный файл.
Так как пульт нужен в первую очередь для управления презентацией. Давайте рассмотрим, как это происходит. По описанию клавиш понятно, что мы можем листать слайды. Разворачивать презентацию на весь экран. Также выходить из полноэкранного просмотра презентации. Но это еще не все, благодаря управлению курсором мыши можно закрыть презентацию и вернуться обратно в папку с материалами.
Второе, чем можно управлять это просмотр изображений. Открываем изображение и листаем. Также можно развернуть на весь экран и закрыть просмотр.
Третье, это воспроизведение мультимедийных файлов: видеоклипы или звуковые файлы. Одной приятной фишкой является фоновое управление медиафайлами благодаря горячим клавишам. Например, при просмотре презентации менять звуковое сопровождение и регулировать громкость.
Это набор функция которые, по моему мнению, пригодятся при показе презентаций. Возможно, что-то лишнее или чего-то не хватает. Свое мнение и предложения пишите в комментариях.
Планирую сделать еще пару интересных проектов управления ПК с помощью Arduino. Если данная тема вам интересна, пишите свои предложения и пожелания.
Понравился проект Пульт для презентаций своими руками на Arduino? Не забудь поделиться с друзьями в соц. сетях.
А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.
Спасибо за внимание!
Технологии начинаются с простого!
Фотографии к статье
Файлы для скачивания
![]() |
Прошивка для пульта управления презентацией на Arduino.ino | 7 Kb | 795 | Скачать |
![]() |
Библиотека Adafruit Trinket USB.zip | 3457 Kb | 863 | Скачать |
![]() |
DigiSpark Drivers.zip | 2861 Kb | 779 | Скачать |
Наверное лучше сделать на версии Леонардо.
Arduino проекты
21 сентября , 2021
Комментариев:1
Файлов для скачивания:3
Фото:5
Понравилась статья? Нажми
Виджеты для Easy HMI
Читайте также
Мы в соц сетях
Комментарии