Adafruit Trinket mit IR distance sensor

Für einen Kunden sollten wir ein Projekt realisieren, bei dem ein Video auf einem Messestand abgespielt werden sollte, sobald sich ein Besucher vor das TV-Gerät stellt. Nach kurzem hin und her, wie man diese Idee umsetzen könnte haben wir uns nun für einen IR Distance Sensor in Kombination mit einem Adafruit Trinket entschieden. Diese überprüfen, ob sich vor der Sensor jemand längere Zeit aufhält (ca. 4 Sekunden), um nicht bei jedem vorbeilaufendem Besucher das Video zu starten.

Der 5V Distance Sensor wird mit dem Adafruit Trinket mini 5V betrieben, welcher die analoge Spannung vom Sensor auslesen und weiter verarbeiten kann. Die Ausgabe vom Video bzw. des Idle-Screens (solange niemand vor dem TV-Gerät steht) wird mit Google Chrome, also HTML5 und Javascript coordiniert. Trinket und Chrome komunizieren über Tastatur-Eingaben, die der Trinket sendet. Sobald ein Besucher 4 Sekunden vor dem Distance Sensor steht, sendet dieser ein einfaches fire an den PC.

Unser verbauter IR Distance Sensor von SHARP wird mit dem schwarzen Kabel an Gnd (Ground) angeschlossen, das rote Kabel an 5V und das gelbe Kabel an #2, welches der erste Analoge Port ist. Man sollte hier unbedingt die Belegung der analogen Ports des Trinkets bei Adafruit beachten.

Folgender Code wird vom Trinket ausgeführt:

#include <TrinketKeyboard.h>

int pin_number = 1;
int val = 0;
int x = 0;
int fire = 0;

void setup() {

  TrinketKeyboard.begin();
}

void loop() {

  TrinketKeyboard.poll();

  val = analogRead(pin_number);

  x++;

  if (x >= 200) {

    if (val > 180) {

      fire++;

      if (fire >= 10) {

        fire = 0;

        TrinketKeyboard.print("fire");
      }
    }
    else {

      fire = 0;
    }

    x = 0;
  }

  delay(2);
}

Die Tastatur-Eingabe wird vom Ausgabe-PC per Google Chrome mit Javascript folgender Maßen bearbeitet:

var screen;
var str = "";

$(document).ready(function() {
  screen = new Screen;

    $(window).keydown(function(event) {

        if (!event.ctrlKey && !event.metaKey) {

            event.preventDefault();

            str += String.fromCharCode(event.which).toLowerCase();

            if (str == "fire") {

                str = "";

                screen.fire();
            }

            if (str.length > 4) str = "";
        }
    });
});

Andere Umsetzungen basierten auf einem MotionLeap oder die Kinect von Microsoft und wurden wegen der hohen komplexität der SDKs abgelehnt.

Links


Tuesday, 28. February 2017