Back
Featured image of post Projekt Log 04 | Arduino Part II & Input-Device

Projekt Log 04 | Arduino Part II & Input-Device

Dieses Log beginnt da, wo das vorherige aufgehört hat. Bei letztem Mal ging es um die allgemeine Kommunikation zwischen Arduino und Raspberry Pi sowie um die Knöpfe. Nun geht es um die Einbindung der LEDs sowie um das Design der Platine und des Gehäuses für das Input-Device.

Wichtiges zu Beginn

Ich möchte den kompletten Arduino Code nicht in diesem Log posten. Das ist einfach zu viel und zu unübersichtlich. Das Projekt kann verfolgt werden unter https://github.com/leuchtum/staticker (Commit bei diesem Log: ef29fb0)

Input-Device

Ein Input-Device soll aus zwei Knöpfen sowie 8 RGB LEDs bestehen. Wie im Log 02 beschrieben, nutze ich für die RGB LEDs eine 8-fach WS2812 Platine. Insgesamt brauche ich vier solcher Input-Devices, d.h. ein Design, das Arbeit erspart, ist sehr sinnvoll.

Dazu habe ich zunächst eine kleine Platine mit den LEDs und zwei Knöpfen bestückt. Für die LED habe ich außerdem noch einen kleinen Abstandshalter 3D-gedruckt und aufgeklebt. Anschließend habe ich noch fünf Pins (90° abgewinkelt) aufgelötet. An diese wird später das Kabel befestigt. Zum Schluss habe ich die Rückseite mit Lötdraht verbunden. In den folgenden Bildern kann das gut nachvollzogen werden:

 
 
 

Im Anschluss habe ich ein Kabel mit den nötigen Bauteilen bestückt. Das 5-adrige Kabel leitet VIN, GND, LED_DATA, BUTTON1 und BUTTON2. Das Kabel ist zwar mit 2 Meter ziemlich lang, das hilft bei der späteren Montage am Kicker aber sehr. Das die folgenden Fotos zeigen das Kabel:

 
 
 

Arduino Code für die LEDs

Im letzten Log habe ich für diesen Schritt bereits einiges vorbereiten können. Die WS2812 LEDs werden mit der Bibliothek Adafruit NeoPixel betrieben. Dazu muss sie über #include <Adafruit_NeoPixel.h>zunächst eingebunden werden. Anschließend wird ein Objekt mit der zusätzlichen Information über Pin-Nummer und Anzahl der LEDs erzeugt (Die Anzahl der LEDs ist hier 10, wobei es nur 8 LEDs gibt. Das hängt damit zusammen, dass die globale Spielstandsanzeige 10 LEDs haben wird. Stören tut das hier aber nicht). wd_led steht hierfür für White Defense.

// LED General
const int ARRAYLEN = 10;
const int WD_LED_PIN = 7;
Adafruit_NeoPixel wd_led(ARRAYLEN, WD_LED_PIN, NEO_GRB + NEO_KHZ800);

Im Setup wird die LED nun initialisiert:

// Init LEDs
wd_led.begin();
wd_led.clear();
wd_led.show();

Die LEDs sind nun aus, aber ansprechbar. Soll die LEDs nun z.B. rot und grün im wechsel leuchten, so kann der Befehl {"mode":"setled","msg":{"pos":"wd","R":[0,255,0,255,0,255,0,255,0,0],"G":[255,0,255,0,255,0,255,0,0,0],"B":[0,0,0,0,0,0,0,0,0,0]}} an den Arduino gesendet werden. In der Funktion set_led werden die LEDs nun neu beschrieben:

void set_led(Adafruit_NeoPixel & led, int red[ARRAYLEN], int green[ARRAYLEN], int blue[ARRAYLEN]){
  for (int i=0; i<ARRAYLEN; i++){
    led.setPixelColor(i, led.Color(red[i], green[i], blue[i]));
  }
  led.show();
}

Das Ergebnis sieht dann so aus (zu dem Gehäuse komm ich gleich):

 

Arduino Code für die Knöpfe

Hier ist seit dem letzten Log nicht viel mehr zu tun, außer eine Instanz für den zweiten Knopf zu erstellen:

// Button General
const int DEBOUNCETIME = 30;
const int UNDOTIME = 1500;

// Button GoalWhiteDefense
const int GWD_BUTTON_PIN = 6;
Bounce2::Button gwd_button = Bounce2::Button();
int gwd_press_started = 0;
bool gwd_sended = true;

// Button OwnerWhiteDefense
const int OWD_BUTTON_PIN = 5;
Bounce2::Button owd_button = Bounce2::Button();
int owd_press_started = 0;
bool owd_sended = true;

Im Detail kann das dem letzten Log entnommen werden.

Gehäuse für das Input-Device

Natürlich möchte ich die Platine nicht einfach so auf den Kicker schrauben. Es braucht also ein Gehäuse. Ich habe also die Platine vermessen und eine erste Skizze in Fusion 360 erstellt. Mit meinem 3D-Drucker dann die erste Iteration gedruckt. Wie im folgenden Bild zu sehen, ist die Druckqualität sehr schlecht. Das ist aber erstmal nicht schlimm, da es mir zunächst um einen groben Fit ging, bei dem ich erste Fehler erkenne und ausbessern kann. So sind z.B. die Aussparungen für die Knöpfe versetzt.

 

In der zweiten Iteration sind die Löcher für die Knöpfe passend. Außerdem wollte ich nun auch den Diffusor (mehr Infos in Log 2) mit anbringen. Meine Erste Idee war es, den Diffusor an einem Stück zu lassen und Kerben einschneiden. Dazu habe ich mir eine Schneidehilfe 3D gedruckt. Mit dieser habe ich die Abmessungen perfekt getroffen. Nachteil daran, dass der Diffusor zusammenhängen ist, ist jedoch die Eigenschaft, dass Licht von einer LED in mehreren LED-Slots zu sehen ist. Gut lässt sich das im letzten Bild erkennen. Hier ist jede zweite LED grün, die dazwischen liegenden sollten eigentlich dunkel sein.

 
 
 
 

Um das Problem zu lösen, habe ich beschlossen die Diffusor-Teile einzeln zu lassen und zwischen diesem im Gehäuse eine Art “Sichtschutz” zu drucken. Das bedeutet aber, dass ich 32 kleine Diffusor-Teile schneiden muss. Dazu habe ich mir wieder eine Schneidehilfe gedruckt. Man erkennt auch gut, dass die LEDs nun nicht mehr zum “Nachbarn” scheinen.

 
 

In der vierten und hoffentlich finalen Version ist das Kabel nun besser versorgt und man erkennt auch gut, dass die LEDs nun nicht mehr zum “Nachbarn” scheinen.

 
 

Built with Hugo
Theme Stack designed by Jimmy