Tramite la libreria “PS2KeyBoard” per arduino è possibile ricevere i dati da una comune tastiera per computer PS2, così tramite questa libreria ho fatto in modo di controllare un servomotore con i tasti direzionali.

Il link che porta al playground di arduino è il seguente: http://www.arduino.cc/playground/Main/PS2Keyboard, tuttavia per scaricare l’ultima versione della libreria è necessario seguire questo link: http://www.pjrc.com/teensy/td_libs_PS2Keyboard.html.

I collegamenti da effettuare sono molto semplici e sono mostrati in un immagine nel precedente link, ma che riporto di seguito:

Se non disponete di un connettore, come nel mio caso, basta semplicemente comprare una prolunga PS2 (potrà costare al massimo 3€), tagliare la parte maschio del connettore, spellare i fili e verificarli tramite una resistenza e un multimetro.

Video:

Arduino – Controllo servomotore tramite tastiera PS2

Ecco il codice sorgente:

#include <PS2Keyboard.h>
#include <Servo.h>

const int DataPin = 4;
const int IRQpin = 3;

PS2Keyboard keyboard;
Servo servo;

int pos = 90;
int passo = 10;
long wait = 0;

void setup() {
  delay(1000);
  keyboard.begin(DataPin, IRQpin);
  Serial.begin(9600);
  Serial.println("Controllo Servo tramite tastiera PS2:");

  servo.attach(5);
  servo.write(pos);
}

void loop() {
  if (keyboard.available()) {

    // Leggo il valore ricevuto dalla tastiera
    char c = keyboard.read();

    // Controllo fra i tasti speciali (Es. BKSP, DEL, ESC)
    if (c == PS2_LEFTARROW) {
      Serial.print("[Left]");
      pos -= passo;
    } 
    else if (c == PS2_RIGHTARROW) {
      Serial.print("[Right]");
      pos += passo;
    } 
    else if (c == PS2_UPARROW) {
      Serial.print("[Up]");
      passo += 10;
    } 
    else if (c == PS2_DOWNARROW) {
      Serial.print("[Down]");
      passo -= 10;
    } 
    else {
      // Altrimenti mostro il carattere
      Serial.print(c);
    }

    if (pos > 180)
      pos = 180;

    if(pos < 0)
      pos = 0;

    Serial.println();
    Serial.println("--------------------------");
    Serial.print("Posizione servo: ");
    Serial.print(pos);
    Serial.print("\tPasso: ");
    Serial.println(passo);
    Serial.println("--------------------------");
  }

  if (wait < millis()){
    wait = millis() + 50;
    servo.write(pos);
  }
}

Come si può notare dal codice, tramite le frecce direzionali SU e GIU’ è possibile aumentare o decrementare (+10/-10) la variabile passo ovvero l’incremento/decremento che daremo alla variabile pos (posizione del servomotore) una volta premute le frecce direzionali DESTRA/SINISTRA.

Controllo di un servomotore tramite tastiera PS2 con Arduino
Tags: