infoCentrale

Projekt-Team: Ralf, Lilli

Aus bekannter Quelle haben wir dieses schöne Stück erhalten und so vor der Verschrottung gerettet. Während die beiden LED Großanzeigen mit 433MHz-Schnittstelle noch auf eine Verwendung warten, werden wir aus der Mechanik ein Infoterminal bauen, das unsere Webseite anzeigt, so dass sich Besucher über C-Hack informieren können.

Die Zutaten

  • Gehäuse wie auf dem Bild zu sehen
  • Ausgeschlachteter 21″ Monitor
  • Alter Shuttle PC, den wir von WindowXP auf Lubuntu aufgerüsten werden
  • Ein rustikale Handkurbel, mit der die Webseite auf und ab gerollt wird
  • Eine Arduino Leonardo, der sich als Maus ausgibt
  • Ein Fächerrad mit Gabellichtschranken um die Kurbelumdrehungen zu zählen

Mechanische Arbeiten

Die Frontseite kann verwendet werden, da der Monitor groß genug ist, um beide bestehenden Ausschnitte zu überdecken.

Mit der Stichsäge haben wir erst mal den groben Ausschnitt ausgesägt. Wir haben den auf Untermaß gemacht, so dass wir den Monitor noch etwas einlassen können von der Rückseite.

Damit der Bildschirm nicht so tief sitzt (die Platte ist 21mm dick), haben wir von der Rückseite 7.5mm mit der Oberfräse weggenommen. So sitzt der Monitor fest und wird seitlich geführt.

Passt in die Aussparung…

Die grob zugesägten Kanten müssen natürlich noch sauber verkleidet werden. Wir haben uns für eloxierte Aluprofile aus dem Baumarkt entschieden: 20mm x 15mm, 1.5mm Materialstärke.
Innen sind die also 18.5mm x 13.5mm, so wird exakt die offene Holzkante abgedeckt.

Die Aluprofile haben wir auf eine Holzleiste gelegt, um mit der Kreissäge die Gerungen zu schneiden.

Damit man keine Schrauben sieht, haben wir die Profile mit 5min Epoxy angeklebt.

Die Elektronik

Wir verwenden einen Shuttle-PC aus der WindowsXP-Ära, der mit Lubuntu wieder ziemlich zügig läuft. Ein Arduino-Leonardo meldet sich als HID an, so dass man ihn zur Emulation des Mausrades einsetzen kann.
Dazu muss er die Umdrehungen des Handrades abtasten und ich Mausrad-Befehle umwandeln.
Hier schon mal der prototypische Aufbau:

Montage des Shuttle-PCs

Damit der PC und der Bildschirm vom Arduino eingeschaltet werden können, war hier auch ein Hack nötig. Die Schalter haben wir herausgeführt, so dass der Arduino diese per Optokoppler aktivieren kann.
Sobald das Terminal bestromt wird, schaltet der Arduino dann den Monitor ein und bootet das Linux auf dem PC.

Im Bild sieht man schon die schöne Handkurbel, mit der die Seite nach oben und unten gerollt werden kann.

Mausrademulation

Um die Drehungen der Welle zu detektieren, werden wir ein Fächerrad auf die Welle der Kurbel montieren, dass zwei Gabellichtschranken unterbricht. So kann die Drehgeschwindigkeit und -richtung bestimmt werden.

Das Fächerrad fräsen wir auf der Stepcraft CNC Fräse.

Ja ja, man sollte den richtigen Fräser verwenden…

Wir haben einen Schaftfräser verwendet mit Rechtsspiralschneide. Dadurch werden zwar die Späne ganz toll abgeführt aber leider auch das dünne Alublech angehoben und dadurch ist der Fräser gleich in einem Arbeitsgang ganz durch das Blech gefahren. Bei einem Fräser mit Linksdrall wäre das Blech nach unten gedrückt worden.
Anfängerfehler…

Naja sieht nicht ganz so sauber aus aber wir werden die Grate wegfeilen und das ganze fein schleifen.

Elektronik

Das Mousrad wird mit einem Arduino Leonardo emuliert, der dabei auch gleich noch per Optokoppler den PC und den Bilschirm einschaltet. Der Optokoppler schließt dabei jeweils die Einschalter kurz, die sonst der Benutzer manuell drücken müsste.
Es gibt auch noch einen manuellen Ein-/Ausschalter, der auf der Rückseite des Gehäuses sitzt.

Hier die Verdrahtung:

Dieselpunk Optik

Die Arduino-Leonardo Software


//==============================================================
//      C-Hack Infoterminal    C-Hack/Surasto 2019
//--------------------------------------------------------------
//
// Arduino code zur Mausrademulation, die für die externe Kurbel
// gebraucht wird.
// Außerdem wird hier auch der PC und der Monitor ein- und aus-
// geschaltet.
// Da jeweils nur ein Impuls gesendet wird, um den Schalterdruck 
// zu emulieren, muss es auch eine Rückmeldung geben, ob der PC
// bzw. der Monitor auch wirklich an oder aus ist.
//
//==============================================================

#include "Mouse.h"
#include "Keyboard.h"

#define WHEEL_A A0        // Lichtschranke Codierscheibe
#define WHEEL_B A1
#define STRT 11           // Externer Startknopf
#define SCREEN_ON 4       // Ausgang zum Bildschirm ein/aus-Schalter
#define PC_ON 8           // Ausgang zum PC ein/aus-Schalter
#define CHECK_SCREEN A2   // 5V vom Bildschirm
#define CHECK_PC A3       // 5V vom PC (USB Buchse)
#define ON 1
#define OFF 0

int lastState;

void setup() {
   pinMode(WHEEL_A, INPUT);
   pinMode(WHEEL_B, INPUT);
   pinMode(STRT, INPUT_PULLUP);
   pinMode(CHECK_SCREEN, INPUT_PULLUP);
   pinMode(CHECK_PC, INPUT_PULLUP);
   
   pinMode(SCREEN_ON, OUTPUT);
   pinMode(PC_ON, OUTPUT);
   digitalWrite(PC_ON, LOW);
   digitalWrite(SCREEN_ON, LOW);
   
//   Serial.begin(9600);
   Mouse.begin();
   Keyboard.begin();
   
   delay(2000);
   switchPC(ON);
   switchScreen(ON);
}

void loop() {
   // Auswertung des Fächerrads
   if ((digitalRead(WHEEL_A) > lastState) && (digitalRead(WHEEL_B) == 1)) Mouse.move(0,0,1);   // mouserad ab
   if ((digitalRead(WHEEL_A) > lastState) && (digitalRead(WHEEL_B) == 0)) Mouse.move(0,0,-1);   // mouserad auf
   lastState = digitalRead(WHEEL_A);

   // An-/Aus-Taste gedrückt?
   if (digitalRead(STRT) == 0) {
      toggleScreenPC();
      delay(2000);
   }

   delay(10);
}

void switchPC(bool state) {
  if (state == ON) {
    if (digitalRead(CHECK_PC) != 0) {      // 0V vom PC detektiert (Optokoppler invertiert das zu HIGH
      digitalWrite(PC_ON, HIGH);
      delay(3000);
      digitalWrite(PC_ON, LOW);
    } 
  } else {
    if (digitalRead(CHECK_PC) == 0) {      // 5V vom PC detektiert (Optokoppler invertiert das zu LOW
//      digitalWrite(PC_ON, HIGH);
//      delay(3000);
//      digitalWrite(PC_ON, LOW);
       Keyboard.press(KEY_LEFT_CTRL);
       Keyboard.press(KEY_LEFT_ALT);
       Keyboard.press('s');
       delay(100);
       Keyboard.releaseAll();

    }  
  }
}

void switchScreen(bool state) {
  if (state == ON) {
    if (digitalRead(CHECK_SCREEN) != 0) {      // 0V vom Monitor detektiert (Optokoppler invertiert das zu HIGH
      digitalWrite(SCREEN_ON, HIGH);
      delay(1000);
      digitalWrite(SCREEN_ON, LOW);
    } 
  } else {
    if (digitalRead(CHECK_SCREEN) == 0) {      // 5V vom Monitor detektiert (Optokoppler invertiert das zu LOW
      digitalWrite(SCREEN_ON, HIGH);
      delay(1000);
      digitalWrite(SCREEN_ON, LOW);
    }  
  } 
}

void toggleScreenPC() {   // schaltet beides an oder aus und synchronisiert beide dabei 
  if (digitalRead(CHECK_PC) == 0) {     // PC ist eingeschaltet 
     Keyboard.press(KEY_LEFT_ALT);
     Keyboard.press(KEY_F4);
     delay(1000);
  
     switchPC(OFF);
     delay(4000);
     switchScreen(OFF);
  } else {
     switchPC(ON);
     switchScreen(ON);
  }
}

Firefox in Kioskmode schalten

Da Firefox keine Startoption hat, die den Browser im Fullscreen-Modus startet, muss nach dem Start von Firefox die F11 Taste emuliert werden.
Das könnte der Arduino machen. Allerdings erst, wenn Firefox läuft – was sich schlecht prüfen lässt. Einfacher geht es mit dem xdotool:

firefox -url https://c-hack.de &
xdotool search --sync --onlyvisible --class "Firefox" windowactivate key F11