Индикатор раскладки клавиатуры в виде цветного кубика на столе с помощью Arduino

в 12:26, , рубрики: 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 есть некоторая задержка после нажатия комбинации переключения языка. При этом кубик срабатывает быстрее, чем индикатор, что очень удобно. Больше года использую данную систему и уже не могу представить, как без этого работать.

Скачать программу

Если пост понравится, доработаю программу, добавив описанный выше недостающий функционал.

Автор: sapient

Источник


  1. Анри:

    Привет. Есть предложение.
    Идея: Для двух языков (рус и англ).
    Вариант 1. Активна русская раскладка:
    – русские буквы – яркого красного цвета;
    – английские буквы – тусклого синего цвета.
    Вариант 2. Активна английская раскладка:
    – русские буквы – тусклого красного цвета;
    – английские буквы – яркого синего цвета.
    Возможность регулировать яркость и выбор цвета для раскладок.

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js