Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Laser-Lichtschranken-Rundentimer für Slotcars (Arduino Mega, GLCD)

Komponenten

Software

Aufbau

Laser & Sensor werden gegenüberliegend an der Slotcar-Bahn montiert (Tor). Unterbricht ein Auto den Strahl, wird ein Rundenzähler ausgelöst. Das GLCD zeigt:

Verdrahtung (Kurz)

Code (Hauptlogik)

#include <openGLCD.h>

unsigned long currentRunStartMillis, lastRunInMillis, bestRunInMillis;
int currentLap = 0;
const int gateSensorPin = 2;
int gateSensorState, lastGateSensorState = LOW;
unsigned long lastDebounceTime = 0;
const int debounceDelay = 50;

gText t1, t2, t3; // Textbereiche für Runden, Letzte, Beste

void setup() {
  pinMode(gateSensorPin, INPUT);
  delay(50); // Sensor/Laser stabilisieren

  GLCD.Init(NON_INVERTED);
  t1.DefineArea(textAreaTOP, lcdnums14x24); // Runden oben groß
  t2.DefineArea(0, GLCD.CenterY, 8, 2, fixednums7x15); // Letzte
  t3.DefineArea(GLCD.CenterX, GLCD.CenterY, 8, 2, fixednums7x15); // Beste
  t3.SetFontColor(WHITE);

  GLCD.SelectFont(System5x7);
  GLCD.CursorTo(1, 4); GLCD.print("LAST");
  GLCD.CursorTo(11, 4); GLCD.print("BEST");

  currentRunStartMillis = lastRunInMillis = bestRunInMillis = 0;
}

void loop() {
  int reading = digitalRead(gateSensorPin);
  if (reading != lastGateSensorState) lastDebounceTime = millis();

  if ((millis() - lastDebounceTime) > debounceDelay) {
    if (reading != gateSensorState) {
      gateSensorState = reading;
      if (gateSensorState == LOW) { // Strahl unterbrochen
        unsigned long saved = millis();
        if (currentLap > 0) {
          lastRunInMillis = saved - currentRunStartMillis;
          if (lastRunInMillis < bestRunInMillis || bestRunInMillis == 0)
            bestRunInMillis = lastRunInMillis;
        }
        currentRunStartMillis = saved;
        currentLap++;
      }
    }
  }
  lastGateSensorState = reading;

  // Anzeige aktualisieren
  unsigned long now = millis();
  int sec, milli;
  t1.CursorTo(0, 0); t1.Printf(F("%02d"), currentLap);

  if (currentLap > 0) calc(now - currentRunStartMillis, &sec, &milli);
  else calc(0, &sec, &milli);
  t1.CursorTo(3, 0); t1.Printf(F("%02d.%03d"), sec, milli); // Aktuelle Laufzeit

  calc(lastRunInMillis, &sec, &milli);
  t2.CursorTo(1, 1); t2.Printf(F("%02d.%03d"), sec, milli); // Letzte Runde

  calc(bestRunInMillis, &sec, &milli);
  t3.CursorTo(1, 1); t3.Printf(F("%02d.%03d"), sec, milli); // Bestzeit
}

void calc(unsigned long ms, int *s, int *m) {
  *s = ms / 1000;
  *m = ms - *s * 1000;
}

Herausforderungen & Tipps

Erweiterungen

Herstellungsprozess

  1. Expertenratgeber für Aluminium-Lasermarkierung: Präzision, Langlebigkeit und Industrieanwendungen
  2. Umfassender Leitfaden zur Lasermarkierung: Arten, Vorteile und Anwendungen
  3. Faserlaser-Markierung: Präzision, Geschwindigkeit und Vielseitigkeit für moderne Industrien
  4. Laserpointer: Design, Fertigung und Sicherheitsübersicht
  5. Achterbahnen: Von Schneeschlitten zu Stahlgiganten
  6. Halbleiterlaser: Präzise Lichtgenerierung für moderne Technologie
  7. Festkörperlaser: Technologie, Anwendungen und Zukunftstrends
  8. Die Sanduhr: Geschichte, Handwerkskunst und moderne Anziehungskraft
  9. Kuman 3,5″ TFT Display auf RetroPie installieren – Schritt-für-Schritt-Anleitung
  10. Rpibot: Kostengünstiger, erweiterbarer mobiler Roboter für Embedded Systems Lernen