Страница 1 из 1

Подключение клавиатуры PS/2 к Ардуино УНО

СообщениеДобавлено: 29 май 2015, 09:34
-=dp=-
Случайно наткнулся в интернете на статью по подключению клавиатуры PS/2 к Ардуино УНО и решил повторить конструкцию и разобраться как она работает.
Выпаял из старой системной платы клавиатурный разъем, прозвонил его мультиметром и выяснил его распиновку.
Для Ардуино ИДЕ нашел библиотеку для работы с клавиатурой PS/2 .
В тестовом скетче было не очень понятно что куда, и не было описания.
Что бы оживить клавиатуру мне пришлось перелопачивать горы интернет сайтов, читать и переводить документацию.
Первый результат я получил уже через пару часов "танцов с бубном" :D

В скетче я реализовал подключение клавиатуры PS/2 , опрос буквенных клавиш , включение выключение трех светодиодов и подачу звукового сигнала с различной частотой на Бузер.

Кстати, очень полезная штука оказалась, для подключения к Ардуино стандартной клавиатуры от ПК с 102 клавишами используются всего 2 цифровых входа :!:
А кнопок при этом огромное количество :shock:
Можно применять подобное решение в каких нибудь устройствах на Ардуино где возникает необходимость подключения большого количества кнопок управления.
Надписи на кнопках стандартной клавиатуры можно заклеить надписями со своими значениями.

Выкладываю распиновку разъема PS/2 от мат.платы , рабочую библиотеку и скетч

Re: Подключение клавиатуры PS/2 к Ардуино УНО

СообщениеДобавлено: 29 май 2015, 09:47
-=dp=-
Вот фотографии самодельного шилда для подключения клавиатуры PS/2 к Ардуино УНО.
Разъем для клавиатуры от материнской платы ПК запаян прямо на макетную плату.

Макетную плату, бузер, штырьки для стекирования к Ардуино я покупал в магазине http://newmar.ru/

Re: Подключение клавиатуры PS/2 к Ардуино УНО

СообщениеДобавлено: 29 май 2015, 09:57
-=dp=-
Пояснения и комментарии к скетчу:

Код: выделить все


#include <PS2Keyboard.h>


const int DataPin = 6; // подключение к разъему клавиатуры DATA
const int IRQpin =  2; // подключение к разъему клавиатуры CLK
const int LED1 = 3; // вывод для подключения светодиода
const int LED2 = 4; // вывод для подключения светодиода
const int LED3 = 5; // вывод для подключения светодиода

PS2Keyboard keyboard;

void setup() {
  pinMode(LED1,OUTPUT);  // установка порта в состояние выхода
  pinMode(LED2,OUTPUT);  // установка порта в состояние выхода
  pinMode(LED3,OUTPUT);  // установка порта в состояние выхода
  delay(1000); // задержка 1 сек
  keyboard.begin(DataPin, IRQpin);  // инициализация клавиатуры
  Serial.begin(9600); // настройка скорости COM порта
  Serial.println("Keyboard Test:");  // вывод данных с клавиатуры в COM порт, терминал в Ардуино ИДЕ
   digitalWrite(LED1,LOW); // установка состояния вывода светодиода в выключенное
   digitalWrite(LED2,LOW); // установка состояния вывода светодиода в выключенное
   digitalWrite(LED3,LOW); // установка состояния вывода светодиода в выключенное
}

void loop() {
  if (keyboard.available()) {
   
    // read the next key
      char c = keyboard.read(); // опрос клавиатуры
    // check for some of the special keys
    if (c == PS2_ENTER) {
      Serial.println();
    } else if (c == PS2_TAB) {
      Serial.print("[Tab]");
    } else if (c == PS2_ESC) {
      Serial.print("[ESC]");
    } else if (c == PS2_PAGEDOWN) {
      Serial.print("[PgDn]");
    } else if (c == PS2_PAGEUP) {
      Serial.print("[PgUp]");
    } else if (c == PS2_LEFTARROW) {
      Serial.print("[Left]");
    } else if (c == PS2_RIGHTARROW) {
      Serial.print("[Right]");
    } else if (c == PS2_UPARROW) {
      Serial.print("[Up]");
    } else if (c == PS2_DOWNARROW) {
      Serial.print("[Down]");
    } else if (c == PS2_DELETE) {
      Serial.print("[Del]");
    } else {
     
      // otherwise, just print all normal characters
      Serial.print(c);
      if (c=='1'){ digitalWrite(LED1,HIGH);}; // включение светодиода 1 если нажата клавиша 1
      if (c=='2'){ digitalWrite(LED1,LOW);}; // выключение светодиода 1 если нажата клавиша 2
      if (c=='3'){ digitalWrite(LED2,HIGH);}; // включение светодиода 2 если нажата клавиша 3
      if (c=='4'){ digitalWrite(LED2,LOW);}; // выключение светодиода 2 если нажата клавиша 4
      if (c=='5'){ digitalWrite(LED3,HIGH);}; // включение светодиода 3 если нажата клавиша 5
      if (c=='6'){ digitalWrite(LED3,LOW);}; // выключение светодиода 3 если нажата клавиша 6
      if (c=='q'){ tone(7, 500, 200);};  // подача тонального сигнала на вывод 7 с частотой 500 Гц и длительностью 200 мСек при нажатии на кнопку q
      if (c=='w'){ tone(7, 1500, 200);};   // подача тонального сигнала на вывод 7 с частотой 1500 Гц и длительностью 200 мСек при нажатии на кнопку w
      if (c=='e'){ tone(7, 2000, 200);};  // подача тонального сигнала на вывод 7 с частотой 2000 Гц и длительностью 200 мСек при нажатии на кнопку e
      if (c=='r'){ tone(7, 2200, 200);};  // подача тонального сигнала на вывод 7 с частотой 2200 Гц и длительностью 200 мСек при нажатии на кнопку r
      if (c=='t'){ tone(7, 2400, 200);};  // подача тонального сигнала на вывод 7 с частотой 2400 Гц и длительностью 200 мСек при нажатии на кнопку t
      if (c=='y'){ tone(7, 2600, 200);};  // подача тонального сигнала на вывод 7 с частотой 2600 Гц и длительностью 200 мСек при нажатии на кнопку y
    }
  }
}




Re: Подключение клавиатуры PS/2 к Ардуино УНО

СообщениеДобавлено: 29 май 2015, 10:13
-=dp=-
Да, и чуть не забыл,
При подключении бузера напрямую к выходу Ардуино мы рискуем сжечь выход, потому что он слаботочный и не сможет выдержать нагрузку в виде бузера.
Да и сам бузер работает очень тихо, его практически не слышно.
Поэтому я подключал бузер через усилитель на 1 транзисторе типа N-P-N , подойдет любой малогабаритный транзистор.
Выкладываю схему усилителя для бузера.

Все выводы расписаны на схеме.