Zum Inhalt springen

TUTORIAL Arduino WiFi Startampel [WIP]


Empfohlene Beiträge

In Arbeit. Dateien, Anweisungen und andere Dinge können sich ändern!

Hier möchte ich euch die Möglichkeit vorstellen, mit einem WiFi fähigen Arduino eine synchrone Startampel zu realisieren.

 

WARNUNG: Ich habe mir meine Programmier- und Elektrokenntnisse selbst angeeignet und gebe keine Garantie für die Richtigkeit der Angaben. Jeder handelt auf sein eigenes Risiko, ich übernehme keine Haftung für etwaige Schäden.

 

 

Anleitung für eigene Kreationen:

Hier eine kurze Zusammenfassung der nötigsten Schritte für die Leute, welche sich ihre eigene Ampel mit eigener Programmierung zusammen bauen wollen.

Das Prinzip der Synchronisierung besteht im Wesentlichen darin, dass die Ampel die gemeinsame Startzeit vom Race Server abfragt. Die Möglichkeit zur Einstellung dieser Zeit muss der verwendete Server mitbringen. 

Dazu sendet die Ampel ein Ping Request mit der Game ID an den Server, welcher mit der entsprechenden Antwort unter anderem die Startzeit (start _time) und die Startverzögerung (start_delay) zurück sendet. Die Server URL und die Game ID übermittle ich mit Hilfe eines Webinterface, welches auf dem Arduino läuft.

Diese Startzeit lasse ich in das UnixZeit Format umwandeln und vergleichen sie mit der aktuellen UnixZeit. Möglicherweise braucht es hier noch einen kleinen Offset, bei mir 1 Sekunde.

Wenn beide Werte gleich sind, werden die Ampel sowie der Motor in der Dr!ft App und die Arduino Ampel gestartet. Dieser Vorgang dauert ohne Startverzögerung bis Grün 5 Sekunden.

Um die Startverzögerung nun einzubinden, muss für die Ampel noch der Wert (start_delay) aus der Server-Antwort eingebaut werden, dieser gibt die Verzögerung zwischen Gelb und Grün der Dr!ft App an.

Beispiel Codeschnipsel Ping Request und Umwandlung der Zeit in das Unix Format (Die Ping Abfrage findet mittlerweile im Webinterface mit Hilfe von JavaScript statt, siehe webpages.h in der StartAmpel.zip):

if (raceServerClient.connect(serverURL, port))
{
  raceServerClient.println("GET /" + ID + "/ping HTTP/1.1");
  raceServerClient.println("Host: " + String(serverURL));
  raceServerClient.println("User-Agent: DRIFT");
  raceServerClient.println("Connection: close");
  raceServerClient.println();
  String payload = raceServerClient.readString();
  if (!raceServerClient.connected())
  {
    raceServerClient.stop();
  }    
  StartTimeFromServer = payload.substring(payload.indexOf("start_time") + 13, payload.indexOf("start_time") + 29);
  CAPIStartDelay = payload.substring(payload.indexOf("start_delay") + 13, payload.indexOf("start_delay") + 16);
  rndStartDelay = CAPIStartDelay.toFloat()*1000;
  year = StartTimeFromServer.substring(0, 4).toInt();
  month = StartTimeFromServer.substring(5, 7).toInt();
  day = StartTimeFromServer.substring(8, 10).toInt();
  hours = StartTimeFromServer.substring(11, 13).toInt();
  minutes = StartTimeFromServer.substring(14, 16).toInt();
  stamp.setDateTime(year, month, day, hours, minutes, seconds);
  unixStartTime = stamp.getUnix();
}

Beispiel Codeschnipsel Ampel Timer:

if (unixStartTime - currentUnixTime > 0)
{
  //warte und oder zeige Countdown
}
if (unixStartTime - currentUnixTime == 0)
{
  bAmpel = true;
}
if (bAmpel)
{
  if (millis() - lastTime >= 10)
  {
    lastTime = millis();
    if (lightTimer == 0)
    {
      // RED 1
    }
    if (lightTimer == 1000)
    {
      // RED 2
    }
    if (lightTimer == 2000)
    {
      // RED 3
    }
    if (lightTimer == 3000)
    {
      // RED 4
    }
    if (lightTimer == 4000)
    {
      // RED 5      
    }
    if (lightTimer == 5000 + rndStartDelay) 
    {        
      // Green/Go
    }
    if (lightTimer == 10000 + rndStartDelay)
    {
      bAmpel = false;
    }
    lightTimer += 10;
  }
}

 

Anleitung zum Nachbauen meiner Ampel [In Arbeit]

Eine kommerzielle Nutzung der Daten ist nicht gestattet!

Hier ein Video mit dem kompletten Ablauf und der Bedienung über das Webinterface:

 

Elektronikteileliste:

  • 1x Arduino MKR WiFi 1010
  • 1x DfPlayer
  • 1x TF Speicherkarte FAT32 Max.: 32GB
  • 1x Lautsprecher < 3 Watt
  • 1x 0,91 Zoll OLED Display I2C SSD1306 Chip 128 x 32 Pixel
  • 2x MAX7219 8x32 4 in 1 Dot Matrix LED Display
  • 1x WS2812B LED Streifen 60 LEDs/Meter
  • 1x USB A auf Micro USB Kabel
  • möglichst verschieden farbige Kupferlitzen (Kabel)
  • mehrere 2,54mm Dupont Stecker Männlich Weiblich + passende Crimpzange
  • 10-12 Pin Header (Stiftleiste) 2,54mm
  • 3x Widerstand 1K Ohm (neu einer mehr)
  • 1x Lochrasterplatine
  • 1x Lötkolben
  • 1x Lötzinn
  • 1x NPN N2222 Transistor (neu)
  • 1x-3x Modellbau Rundumleuchte 5V /ich habe eine drei adrige, +5, gnd und Signal , letzterer wird nicht unbedingt benötigt.(neu)

NEUE Verkabelung mit Rundumleuchte: https://imgur.com/a/EytaDvp

Edit: Anschluss der Rundumleuchte von Pin 1 auf Pin 2 verschoben, für kommende Updates ab Version 19_4

3D Druck Liste: Startampel (5mm LEDs)Zusatzteile(Links führen zu Thingiverse)

 

  • 1x arm_Ampel_Oben (Startampel (5mm LEDs))
  • 1x WS2812_LEDs_arm_Ampel_Unten (Zusatzteile WiFi Ampel)
  • 2x LEDMatrixRahmen (Startampel (5mm LEDs))
  • 2x Bein_Oben (Startampel (5mm LEDs))
  • 2x Bein_V2 und 2x gespiegelt (Startampel (5mm LEDs))
  • 2x Sockel nach Wahl (Startampel (5mm LEDs))
  • 2x arm_Platinenhalter (Startampel (5mm LEDs))
  • 6x arm (Startampel (5mm LEDs))
  • 2x ArmVerninderVersion3_End (Startampel (5mm LEDs))
  • 4x ArmVerninderVersion3_1 (Startampel (5mm LEDs))
  • 4x ArmVerninderVersion3_2 (Startampel (5mm LEDs))
  • 1x OLED_Abdeckung (Zusatzteile WiFi Ampel)
  • 2x Ampel_WS2812_LEDs_front (Zusatzteile WiFi Ampel)
  • 2x Ampel_WS2812_LEDs_back (Zusatzteile WiFi Ampel)
  • 1x DFPlayerPlusLautsprecherhalter (Zusatzteile WiFi Ampel)
  • 1x PlatinenhalterKombi (Zusatzteile WiFi Ampel)

Sonstige Teile:

  • ca. 104x M3x10 DIN 912 (Schlüssel für Innensechskant 2,5mm)
  • ca. 8x M3x16 DIN 912
  • ca. 108 M3 Gewindeeinsätze (Einpressmutter für Kunststoffteile)
  • ca. 12x M3 Muttern DIN 934 (Gabelschlüssel 5,5mm)
  • 4x 1,6mm PT-Schraube wie in den Dr!ft Racern oder vergleichbar

Arduino MKR WiFi 1010 wird benötigt! Alle weiteren benötigten Sachen stehen in der Beschreibung der Zusatzteile.

Anleitung zur Installation der Arduino IDE und Upload des StartAmpel Sketches:

  • Folge der "Installation Arduino IDE und Upload des Sketches.pdf" im Anhang
  • Downloade und entpacke die StartAmpel.zip und mp3.zp im Anhang

Anleitung zur Bedienung der Ampel:

  • Folge der Anleitung "Bedienung der Ampel.pdf" im Anhang

 

Bei Problemen oder Verbesserungsvorschlägen, schreibt gerne eine Kommentar.

 

Bitte melde dich an um Anhänge zu sehen.

 

Bitte melde dich an um Anhänge zu sehen.

Bitte melde dich an um Anhänge zu sehen.

Bitte melde dich an um Anhänge zu sehen.

Bearbeitet von Atomregen
Update der Anleitungen
  • Gefällt mir 12
  • Danke 4
Link zu diesem Kommentar
Auf anderen Seiten teilen

Bitte melde dich an um den Link zu sehen.

 Für die Verkabelung der Komponenten ist es erstmal geplant Bilder der Teile mit bunten Linien zu verbinden. Wie man die Stecker crimpen kann und zum Löten, gibt es im Internet schon genug Tutorials. Um das Programm dann auf den Arduino zu bekommen gibt es entweder Bilder oder ich versuche ein Video zu machen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Bitte melde dich an um den Link zu sehen.

 vielen Dank für das veröffentlichen. Ich werde mir das auf jeden Fall Mal anschauen. 

Kann man auch 2 Displays an die Startampel anschließen? Ich Frage deshalb, weil bei meiner Strecke die Startampel mittig liegt und nicht alle Fahrer die Ampel so sehen können. 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Neues Video im Startpost hinzugefügt.

Edit: Ein paar Rechtschreibfehler in der Weboberfläche und der Anleitung behoben. Aktuelle Version 17_2

Edit die zweite:

  • Auswahl für "Grünes Licht bei GO" eingefügt. Bei AN leuchtet die Ampel grün beim GO Signal, sonst geht sie aus, wie bei der Formel 1
  • Ansage beim automatischen Start geändert, "Start your Engine" zu "Engine Start"
  • kleine Bugfixes
Bearbeitet von Atomregen
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 4 Wochen später...
  • 2 Wochen später...

Hallo Atomregen,

zuerst einmal vielen Dank für die Erweiterung der Startampel in die WiFi-Variante 👍. Ich hatte die alte Ampel mal angefangen nachzubauen, hatte das dann aber eingestellt, da ich mit meinem Kollegen auf die DR!FT Community Api bei unseren Rennen aufgesprungen bin und den Race-Start darüber synchronisiert hatte. Als ich jetzt die Erweiterung von Dir gesehen hatte habe ich die Ampel in den letzten Tagen nachgebaut und zur Funktion gebracht 😃, und kann nur sagen, echt klasse ! 👍

An einer Stelle hakt es allerdings bei mir und meinen Kenntnissen und ich komme nicht zum kompletten Abschluss: Die Synchro mit dem DR!FT-Server 🙄, manuell habe ich die Ampel am Laufen.

In der App gebe ich folgende Daten zum Starten der Synchro/CAPI mit dem Handy ein:

URL: http://192.XXX.XXX.X7:8001/game

Game-ID: Race1

Wenn ich es richtig verstehe müsste ich also bei der Ampel bei der LightControl angeben URL: http://192.XXX.XXX.X7   , Port: 8001    , GameID: Race 1  . Wenn ich dann den RaceServer starte kriege ich die Handy´s beim Start synchronisiert, aber leider nicht die Ampel mitgestartet.

Hast Du oder jemand anderes eine Idee, was ich falsch mache?

Vielen Dank für die Hilfe im Voraus.

Thomas

Bearbeitet von EMoschi
Link zu diesem Kommentar
Auf anderen Seiten teilen

Bitte melde dich an um den Link zu sehen.

 Hallo, danke für die Rückmeldung.

Tatsächlich hatte ich es noch nicht mit einem Lokalen Server probiert. Aber jetzt ist mir aufgefallen, das die Ampel nur mit https Seiten kommunizieren wollte. Das habe ich jetzt geändert und sollte auch mit http Adressen funktionieren.

Bei der Game ID musst du "game/Race1"  eingeben. Sprich alles was hinter dem Port kommt muss in die Game ID mit rein.

Bei http://192.x.x.21:8001/driftapi/game/Lobby1/1/Race1

sehe das so aus:

Bitte melde dich an um Bilder zu sehen.

PS. Neue Version im Startpost (StartAmpel17_5.zip)

Bearbeitet von Atomregen
Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

 Teilen

×
×
  • Neu erstellen...

Wichtige Information

Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen zu Cookies erhalten Sie in unserer Datenschutzerklärung