Jump to content

TUTORIAL Arduino WiFi Startampel [WIP]


Recommended Posts

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:

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
  • 2x Widerstand 1K Ohm
  • 1x Lochrasterplatine
  • 1x Lötkolben
  • 1x Lötzinn

Verkabelung: https://imgur.com/a/bzS911Q

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

(Wer die Startampel (5mm LEDs) mit den 40 Einzel LEDs schon komplett gebaut hat, kann sie auch weiter verwenden. Da kann man bei Bedarf das Arduino Sketch und die Anleitung anpassen. Der

Arduino MKR WiFi 1010 wird benötigt)

  • 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

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 WiFiStartAmpel.zip 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.

 

 

Please log in to see the attachements

 

 

Please log in to see the attachements

Edited by Atomregen
  • Like 6
  • Thanks 4
Link to comment
Share on other sites

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.

  • Like 2
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

In order to optimize our website for you and to continuously improve it, we use cookies. By continuing to use the website, you consent to the use of cookies. Further information on cookies can be found in our Privacy Policy