Home > Technologie > Hand gehaltener PC

Hand gehaltener PC

0
Advertisement

Hand gehaltener PC

Hallo zusammen..

Dies ist eine meiner Kreationen aus Langeweile, besteht sie aus:

  • Vtech V Lächeln (Fall)
  • 5.6 "TFT LCD
  • Dell Thin Client PC FX130 (1Ghz VIA, 1 GB RAM, 1GB SSD, Win XP nlited)
  • Arduino Mini Klon
  • 12V Lithium Wiederaufladbare Batterie
  • Einige Kitt
  • Heißes Messer
  • Handgelenk (Schleifen !!)
  • Gebrochene PS3 Auflage
  • Heißkleber

Schritt 1: Holen Sie sich Ihre Bestellung!

Hand gehaltener PC

Hand gehaltener PC

Hand gehaltener PC

Ich habe die Vsmile von Amazon für rund £ 20, die Arduino mich zurück £ 6 und bekam es aus ebay zusammen mit dem Thin Client-PC für 20 €. Der Bildschirm kostete mich um £ 30 und die 12V Batterie 10 und bekam sie von ebay auch. Ich hatte eine fehlerhafte PS3-Pad, die ich für die Tasten und den Analog-Stick verwendet.

Schritt 2: Rippen Sie alles auseinander, Schnitt, Form, Stock und Sand!

Hand gehaltener PC

Hand gehaltener PC

Hand gehaltener PC

Hand gehaltener PC

Hand gehaltener PC

Ich hatte einen alten PSP-Bildschirm herumliegen, so dass ich diese als Vorlage verwendet, um den Bildschirm auszuschneiden. Ich schneide die Tasten auf Analog-Stick aus der PS3-Pad aus und verwendet die überschüssige Kunststoff, um die Lücken in der Vtech-Shell zu füllen ..

Schritt 3: Tweaks & Testing

Hand gehaltener PC

Hand gehaltener PC

Der Ardunio-Klon hatte keinen Bootloader, so musste ich den alten treuen GQ4-X-Programmierer zu bekommen und blitzte den Klon, obwohl der ICSP-Port.

Die Arduino Mikro-Klon hatte ich nicht die Funktionalität der Änderung der USB-Funktion außer einer seriellen Schnittstelle Emulation hatte ich so zwei Programme anstelle von einem schreiben.

Das Arduino Programm grundsätzlich erfasst die Tasten und Analog-Stick und sendet die Daten über seriell

Analog X-> A0

AnalogY- & gt; A1

Andere Tasten D0 <-> D8

Hier ist der Code für den Micro

  // Diese Konstanten werden sich nicht ändern.  Sie werden verwendet, um Namen zu // den verwendeten Pins zu geben: const int analogInPinY = A0;  // Analoger Eingangspin, an den das Potentiometer an const int analogInPinX = A1 angehängt wird;  // Analogeingangspin, an den das Potentiometer an int outputValueY = 0 angeschlossen ist;  // Wertausgabe an das PWM (analog out) int outputValueX = 0;  // Wertausgabe an PWM (analog out) int centreY = 0;  // Int centreX = 0 kalibrieren;  // Callibrate int Ypos = 0;  Int TempY = 0;  Int NegY = 0;  Int Xpos = 0;  Int TempX = 0;  Int NegX = 0;  // Konstanten werden sich nicht ändern.  Sie werden hier verwendet, um // Pin-Nummern festzulegen: const int buttonup = 2;  // die Zahl des Druckknopfstiftes const int buttonright = 3;  // die Nummer des Drucktastenstiftes const int buttonleft = 4;  // die Nummer des Drucktastenstifts const int buttondown = 5;  // die Nummer des Drucktastenstifts const int buttonDiamond = 9;  // die Nummer des Drucktastenstifts const int buttonTriangle = 8;  // die Nummer des Drucktastenstifts const int buttonRed = 7;  // die Nummer des Druckknopfes const int buttonYellow = 6;  Const int buttonAnalog = 10;  Const int buttonMode = 11;  Const int führtePin = 13;  // die Nummer des LED-Pins const int led2Pin = A2;  // Variablen ändern sich: int dirState = 0;  // Variable zum Lesen des Drucktastenstatus int buttonState = 0;  // Variable zum Lesen des Tasterstatus int CTX;  Int AnalogNegs = 0;  Int PadMode;  Int Fader = 0;  Int FaderDir = 0;  Void setup () {Serial.begin (19200);  // Den LED-Pin als Ausgang initialisieren: pinMode (ledPin, OUTPUT);  PinMode (led2Pin, OUTPUT);  // Initialisieren Sie den Taster als Eingang: pinMode (buttonup, INPUT_PULLUP);  PinMode (buttondown, INPUT_PULLUP);  PinMode (Knopfleiste, INPUT_PULLUP);  PinMode (buttonright, INPUT_PULLUP);  PinMode (buttonTriangle, INPUT_PULLUP);  PinMode (buttonDiamond, INPUT_PULLUP);  PinMode (buttonYellow, INPUT_PULLUP);  PinMode (buttonRed, INPUT_PULLUP);  PinMode (buttonAnalog, INPUT_PULLUP);  PinMode (buttonMode, INPUT_PULLUP);  CTX = analogRead (analogInPinX);  CentreY = map (analogRead (analogInPinY), 0, 1023, 0, 254);  CentreX = map (analogRead (analogInPinX), 0, 1023, 0, 254);  Callib () {// TRY !!  Callibrate Center centreY = map (analogRead (analogInPinY), 0, 1023, 0, 254);  CentreX = map (analogRead (analogInPinX), 0, 1023, 0, 254);  } Void loop () {// lese den Zustand des Drucktastenwertes: outputValueY = map (analogRead (analogInPinY), 0, 1023, 0, 254);  OutputValueX = map (analogRead (analogInPinX), 0, 1023, 0, 254);  Ypos = 0;  NegY = 0;  TempY = (outputValueY - centreY);  Wenn (TempY> 5 || TempY <-5) {digitalWrite (ledPin, HIGH);  NegY = TempY <-5;  Ypos = Tempy & amp; 254;  };  Xpos = 0;  NegX = 0;  TempX = (outputValueX - centreX);  Wenn (TempX> 5 || TempX <-5) {digitalWrite (ledPin, HIGH);  NegX = TempX <-5;  // Wenn (TempX <-83) {TempX = -84;} // if (TempX> 83) {TempX = 84;} Xpos = TempX & 254;  };  // Serial.println (TempX);  //Serial.println (Xpos);  DirState = 0;  DirState | = (digitalRead (buttonup) ^ 1) << 0;  DirState | = (digitalRead (buttondown) ^ 1) << 1;  DirState | = (digitalRead (Knopfleiste) ^ 1) << 2;  DirState | = (digitalRead (buttonright) ^ 1) << 3;  ButtonState = 0;  ButtonState | = (digitalRead (buttonTriangle) ^ 1) << 0;  ButtonState | = (digitalRead (buttonDiamond) ^ 1) << 1;  ButtonState | = (digitalRead (buttonYellow) ^ 1) << 2;  ButtonState | = (digitalRead (buttonRed) ^ 1) << 3;  ButtonState | = (digitalRead (buttonAnalog) ^ 1) << 4;  Int d = (digitalRead (ButtonMode) ^ 1);  If (PadMode> 0) {// delay (30);  DigitalWrite (led2Pin, HIGH);} else {digitalWrite (led2Pin, LOW);  } // if (PadMode = 0) {analogWrite (A2, 0);} if (d> 0) {PadMode = (PadMode ^ 1);  // // PadMode = 1;  // digitalWrite (A2, HIGH);} // return;} while ((digitalRead (buttonMode) ^ 1)> 0) {} Verzögerung (3);} buttonState | = PadMode << 5;  AnalogNegs = NegX << 0;  AnalogNegs | = NegY << 2;  Serial.write (0xFF);  // sync Serial.write (dirState);  Serial.write (buttonState);  Serial.write (AnalogNegs);  Serial.write (Xpos);  Serial.write (Ypos);  // Prüfen, ob die Drucktaste gedrückt wird.  // if it is, ist der buttonState HIGH: if (dirState> 0 || buttonState> 0) {// LED einschalten: digitalWrite (ledPin, HIGH);  // analogWrite (A2, 20);  } Else {// LED ausschalten: digitalWrite (ledPin, LOW);  Callib;  // delay (3);  Verzögerung (2);  aufrechtzuerhalten.

Ich habe ein Synchronisationsbyte verwendet, um die seriellen Daten mit dem FreeBasic-Programm zu synchronisieren. Ich habe auch eine LED, die in der Mitte-Taste sitzt, die als "Mode" -Taste verwendet wird, um eine weitere Ebene der Kontrolle zu geben.

Das FreeBasic-Programm konvertiert die seriellen Daten vom Arduino in Tastatur-Tastatureingaben, es wird beim Start von Windows als Hintergrund-Task ausgeführt.

Danke an Ben Heck für die Inspiration !!

Related Reading