Индикатор раскладки клавиатуры в виде цветного кубика на столе с помощью Arduino
Как известно, люди делятся на две категории: на тех, кто переключает раскладку с помощью Ctrl+Shift и тех, кто использует Alt+Shift. А еще есть счастливчики, кому это не нужно – те, у кого только одна раскладка (как правило, английская). Остальные завидуют им и мучаются с двумя, а то и с тремя раскладками: английский, русский, украинский (белорусский, казахский и т.д.).
Проблема в том, что, переключая язык, приходится постоянно смотреть на эту маленькую иконку языка. Есть и другие варианты:
- Использовать отдельные комбинации на разные языки (Ctrl+1(2.3)) – программисты, которые работают в разных IDE, согласятся, что это не вариант, так как такие комбинации часто же заняты и перекрываются, а использовать другие в IDE непривычно. Нюанс еще в том, что раскладка в операционной системе – это на самом деле раскладка на текущую программу, а не на все (не удивлюсь, если не все это замечали). Т.е, если сейчас активен Word c английской раскладкой, то, переключившись в браузер, там может быть другая раскладка. И приходится или смотреть на иконку снова или же повторно вбивать, например, Ctrl+1, даже если язык не менялся.
- Использовать программы типа Punto switcher, которые пытаются автоматически исправлять раскладку – не всегда это получается правильно и часто еще больше усложняет набор.
- Использовать программы, которые переключают темы Windows – не каждому понравятся разноцветные панель задач или окна.
Идея
А давайте сделаем на основе Arduino кубик с LED подсветкой, который будет стоять на столе и менять свой цвет в зависимости от раскладки. Каждый язык – разный цвет. Например, английский – зеленый, русский – красный, украинский – синий.

Сразу говорю, это не сложно сделать даже не электронщикам.
Аппаратная часть
Нужно:
- Arduino Micro – плюс платы в том, что есть micro-USB, что позволяет соединить его популярным кабелем с ПК. Можно использовать любую компактную плату с micro-USB.
- RGB-светодиод. Можно использовать вместо него и 3 разноцветных светодиода.
- 3 резистора 220 ом.
- “кубик”.
В качестве “кубика” можно использовать что угодно. Я купил часы-будильник с Aliexpress.com в виде кубика. Вот так выглядит сам куб:

Понравились размеры, цена и дополнительное использование в виде датчика температуры (сами часы в кубике не точные, потому бесполезные). На том же Aliexpress.com можно найти и другие варианты:
- пирамида-часы;
- просто кубик с подсветкой.
Учитывая сегодняшние возможности, можно и на 3D принтере что-то напечатать. Да и просто использовать рамку с фото.
Пишем код
Тут все просто, читаем в цикле COM-порт. При чтении значения 1 – включаем зеленый светодиод, остальные гасим. При получении 2 — включаем красный светодиод, остальные гасим. При получении 3 — включаем синий светодиод, остальные гасим.
int inByte = 0; int LED_R = 5;//красный пин int LED_G = 6;//зеленый пин int LED_B = 9;//синий пин int RV = 255; // яркость int GV = 255;// яркость int BV = 255;// яркость void setup() { Serial.begin(9600); pinMode(LED_R, OUTPUT); pinMode(LED_G, OUTPUT); pinMode(LED_B, OUTPUT); } void loop() { if (Serial.available() > 0) { delay(100); inByte = Serial.read(); if (inByte == '2') { // RU analogWrite(LED_R, RV); analogWrite(LED_G, 0); analogWrite(LED_B, 0); } else if (inByte == '1') { // EN analogWrite(LED_R, 0); analogWrite(LED_G, GV); analogWrite(LED_B, 0); } else if (inByte == '3') { //UA analogWrite(LED_R, 0); analogWrite(LED_G, 0); analogWrite(LED_B, BV); } } }
Паяем
Еще проще. Общий пин соединяем с землей (GND). Остальные через резистор 220 Ом с соответствующими пинами, как показано на рисунке.

Устанавливаем в куб, предварительно вырезав отверстие под разъем.

Программная часть
Тут немного сложней. При изменении языка нужно посылать на COM-порт соответствующее значение (1 или 2 или 3).
Для не программистов ниже есть ссылка на программу под Windows, которая это делает. Единственное, в программе нужно указать COM-порт, к которому подключена Arduino. Это не сложно узнать в диспетчере устройств. Программа после запуска сворачивается в трей, но ее нужно добавить в автозапуск при старте Windows.

Программа написана на Delphi, на данный момент не имеет:
- Функции автоматического поиска порта. Это легко сделать, Arduino при старте будет посылать некий код, программа будет перебирать порты и остановиться в случае его прочтения.
- Выбора языков. Программа работает только с русским, английским и украинским. Можно сделать возможность указывать по кодам любой язык.
- Автозапуска программы.
Результат

Интересно, что в Windows есть некоторая задержка после нажатия комбинации переключения языка. При этом кубик срабатывает быстрее, чем индикатор, что очень удобно. Больше года использую данную систему и уже не могу представить, как без этого работать.
Если пост понравится, доработаю программу, добавив описанный выше недостающий функционал.
Источник
Были ли динозавры теплокровными? Отвечают тираннозавры
Как мозг мухи помогает понять поведение человека
Научное исследование самоуверенности: когнитивный сбой или адаптивный механизм?
Как советские гики осваивали программирование? Часть 6 (Зарубежные ПК)
Анатомия Яндекс Дропс: микротомография первых наушников с ИИ от Яндекса
Пересадка мозга: как чужие нейроны изменят вашу личность
Вопреки последним новостям, у вас вовсе не два мозга