Резистивная клавиатура на Arduino

Резистивную клавиатуру на Arduino можно применить для расширения функций основной клавиатуры на компьютере, так и для управления с клавиатуры практический любым Android устройством имеющим OTG интерфейс.

Аппаратная часть

Для реализации данного проекта нам понадобится любой контроллер Arduino на чипе ATmega32u4, например Arduino Leonardo. Этот микроконтроллер позволяет делать HID устройства.

Подойдёт и более компактный вариант от AlashEd — Лео-микро, подходящий для встраиваемой установки. Например, в автомобиль — для управления планшетом. Так же будет нужен набор резисторов различного номинала (к примеру 10 кОм) и набор кнопок.

Примечание

Для сборки потребуются: контроллер Arduino Leonardo (или совместимый на ATmega32u4), набор резисторов (например, 10 кОм) и набор тактовых кнопок.

Количество кнопок и резисторов зависит от того, сколько требуется сделать кнопок.

Программа и схема

Для начала соберем простенькую схему. Сама клавиатура будет подключена к аналоговому входу A0, что не особо принципиально. Можно использовать любой другой.

Схема резистивной клавиатуры на Arduino

После сборки схемы получаем

Собранная резистивная клавиатура на Arduino

После подключаем контроллер к компьютеру и загружаем в плату следующий скетч:

byte key(){
    int val = analogRead(0); // считываем значение с аналогового входа и записываем в переменную val
        if (val < 50) return 1; // сверяем переменную, если val меньше 50 возвращаем 1 (первая кнопка)
        else if (val < 150) return 2; // если val меньше 150 вторая кнопка
        else if (val < 350) return 5; // если val меньше 350 третья кнопка
        else if (val < 500) return 4; // если val меньше 500 четвертая кнопка
        else return 0;
}
void setup() {
    Serial.begin(9600);
}
void loop() {
    int sensorValue = analogRead(A0); //считываем кнопку
        Serial.print(key()); // выводим номер кнопки в serial
        Serial.print(" ");
        Serial.println(sensorValue);
        delay(1);
}

После того, как загрузили скетч, открываем «Монитор порта» и нажимая на кнопки видим их значения в мониторе порта.

Значения кнопок в мониторе порта Arduino IDE

Программа для управления Android устройством на Ардуино

Теперь попробуем сделать клавиатуру для управления планшетом или телефоном на базе Android. Схема устройства остается та же, что и была. Но теперь контроллер будет распознаваться устройством как USB HID, в нашем случае клавиатурой.

Важно

Для работы в режиме USB HID требуется контроллер на чипе ATmega32u4 (Arduino Leonardo, Pro Micro, Лео-микро). Платы на ATmega328 (Uno, Nano) не подойдут — они не умеют эмулировать HID-устройства.

Загружаем следующий скетч:

int analogPin=0;
int data;
void setup(){
    Keyboard.begin();
    Serial.begin(9600);
}
void loop(){
    data=analogRead(analogPin); //чтение нажатой кнопки
    Serial.println(data); // вывод кода нажатой кнопки в монитор порта
    if (data==614)  Keyboard.write(176); //ENTER код 614
    if (data==122)  Keyboard.write(216); //стрелка влево
    if (data==165)  Keyboard.write(215); //стрелка вправо
    if (data==216)  Keyboard.write(218); //стрелка вверх
    if (data==276)  Keyboard.write(217); //стрелка вниз
    delay(100);
}
Резистивная клавиатура подключена к Android-устройству через OTG

Теперь Android устройство распознает нашу клавиатуру, и мы можем управлять, например, медиаплеером.

Совет

Значения analogRead зависят от номиналов резисторов в делителе. Перед загрузкой HID-скетча обязательно прогоните первый скетч и запишите фактические значения для каждой кнопки на вашей сборке — затем подставьте их в условия if (data==…).

Заключение

Данный пример клавиатуры можно реализовать для управления компьютером, установленным в автомобиль, или добавить внешнее устройство к своему смартфону.