Überblick
PS 2 Keyboard + Arduino Ethernet + Twitter
Ziel
Das Projekt hat sich zum Ziel gesetzt eine Tastatur zu bauen die ihre Tastaturanschläge direkt nach Twitter schickt ohne dass ein PC angeschlossen sein muss. Man tippt blind auf der Tastatur, drückt Enter und tweetet damit die eingegebene Nachricht. Dem Benutzer wird kein Feedback über den Zustand des Systems gegeben.
Das Keyboard verwendet aktuell folgenden Twitter Account: http://twitter.com/ardutweet2
In die Tastatur wurde ein Arduino Ethernet [1] eingebaut und intern mit der Elektronik der Tastatur verbunden. Der Arduino versorgt die Tastatur mit Strom und wertet die Tastaturanschläge aus. Die gedrückten Zeichen werden in einem Puffer gespeichert. Wenn der Benutzer die Taste Enter drückt wird der Puffer getweetet. Mit der Taste ESC kann der Puffer geleert werden.
Wenn das Keyboard an Strom und LAN angeschlossen wird bezieht es über DHCP automatisch eine IP und ist nach wenigen Augenblicken bereit zu tweeten.
Die Hardware und Software wurde im Rahmen eines Seminars während eines Abends von mehreren Personen erstellt.
Bilder
-
Numblock abgeklemmt
-
Arduinoboard eingebaut
-
-
-
-
-
-
-
Hardware
- Arduino Ethernet
- altes PS2 Keyboard
Software
- Arduino IDE
- Twitter Library
- PS2 Keyboard Library
- http://arduino.cc/playground/Main/PS2Keyboard
- Die PS2 Tastatur kann ohne weitere Bauteile direkt an den Arduino angeschlossen werden.
Arduino Code
Der neueste Code ist bei GitHub.
#include <SPI.h> // needed in Arduino 0019 or later #include <Ethernet.h> #include <Twitter.h> #include <PS2Keyboard.h> const int DataPin = 8; const int IRQpin = 3; PS2Keyboard keyboard; // Ethernet Shield Settings byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // If you don't specify the IP address, DHCP is used(only in Arduino 1.0 or later). byte ip[] = { 10, 23, 42, 177 }; // Your Token to Tweet (get it from http://arduino-tweet.appspot.com/) Twitter twitter("TOKEN"); // Message to post char msg[141]; int msgPos = 0; void setup() { keyboard.begin(DataPin, IRQpin, PS2Keymap_German); delay(1000); //Ethernet.begin(mac, ip); // or you can use DHCP for autoomatic IP address configuration. Ethernet.begin(mac); Serial.begin(9600); } void loop() { if (keyboard.available()) { char c = keyboard.read(); if(c == PS2_ESC){ msgPos = 0; msg[0] = 0; return; } if(c == PS2_ENTER){ postTweet(); msgPos = 0; msg[0] = 0; return; } //append read charater msg[msgPos] = c; msgPos++; msg[msgPos] = 0; if(msgPos >= 139) postTweet(); } } void postTweet() { Serial.println("connecting ..."); if (twitter.post(msg)) { // Specify &Serial to output received response to Serial. // If no output is required, you can just omit the argument, e.g. int status = twitter.wait(); //int status = twitter.wait(&Serial); if (status == 200) { Serial.println("OK."); } else { Serial.print("failed : code "); Serial.println(status); } } else { Serial.println("connection failed."); } }