Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Industriële technologie

Geautomatiseerde Spoorwegovergang: Arduino Schakeling & Broncode

Hoge Snelheid Auto Spoorwegovergang Controller met Arduino en Ultrasonische Sensoren

In deze tutorial leren we een eenvoudige en efficiënte automatische hoge-snelheid spoorwegovergang controller ontwerpen. Dit is een basisbenadering; u kunt dit uitbreiden met snelheidsmeting van de trein en meer. Eerst begrijpen we wat automatisering is en wat ervan verwacht kan worden.

Automatisering = methode om menselijke inspanning/inmenging te reduceren of elimineren. We automatiseren een spoorwegovergang met Arduino, servomotor en Proteus software.

Complexiteit varieert van simpele "aan/uit" regeling tot complexe multivariable algoritmes. Regelsystemen zijn open-lus (één invoer) of gesloten-lus (uitvoer als invoer/feedback). Spoorwegautomatisering is essentieel om ongevallen door menselijke fouten te verminderen.

Voor- en Nadelen van Automatisering

Voordelen: hogere productiviteit, voorspelbare kwaliteit, robuuster, consistente output, lagere arbeidskosten, hoge nauwkeurigheid, minder monotoon werk.

Nadelen: beveiligingsrisico's, ontwikkelingskosten overschrijding, hoge opstartkosten, werkloosheid in sectoren.

Voordelen wegen zwaarder → wereld stapt naar automatisering.

We automatiseren een overgang die opent/sluit bij treindetectie, met buzzer/alarm bij hoge snelheid (boven drempel). Componenten: Arduino, servomotor, ultrasonische sensor (of IR-sensor).

Benodigde Componenten

  1. Arduino UNO
  2. Buzzer
  3. Ultrasonische Sensor (HC-SR04)
  4. Servomotor

Benodigde Software

  1. Arduino IDE
  2. Proteus (simulatie)

Schakelschema

[Afbeelding van schema]

Componentbeschrijving

Arduino UNO

Open-source ontwikkelbord met ATmega328P. 14 digitale pinnen, 6 analoge pinnen. Programmeerbaar via Arduino IDE (USB type B). Voeding: USB of 7-20V DC. Communicatie via STK500 protocol; gebruikt ATmega16U2 als USB-naar-serieel converter (geen FTDI).

Ultrasonische Sensor (HC-SR04)

Meet afstand tot object. 4 pinnen: Trig, Echo, GND, VCC (+5V). Werkt: Trig stuurt hoogfrequent geluid → reflectie → Echo ontvangt. Afstand = (tijd × snelheid geluid) / 2. Populair bij Arduino-projecten. Triggerpuls: ≥10 µs.

  • Voeding: 5V DC
  • Ruststroom: <2mA
  • Werkstroom: 15mA
  • Effectieve hoek: <15°
  • Meetbereik: 2cm – 400cm
  • Resolutie: 0,3 cm
  • Meethoek: 30°
  • Afmetingen: 45×20×15mm

Servomotor

Speciale motor voor precieze hoekpositionering. Rotatie/lineaire actuator met feedbacksensor voor positie. Complexer dan DC-motor; vereist controller module. Gebruikt in robotica en industrie.

Verschil met stappenmotor: stappenmotor = open-lus (geen feedback), beperkt. Servo = gesloten-lus (feedback), dynamisch, programmeerbaar. Encoder geeft positie/snelheid terug → foutsignaal → motor corrigeert tot fout = 0. Geavanceerde servo's hebben optische rotary encoder.

Buzzer

Elektronische buzzer (piezo). Interne schakeling; geluid door beweging van ferromagnetische schijf. Stroomgedreven apparaat.

Werking van Automatische Spoorwegovergang

Twee ultrasonische sensors getriggerd via Arduino; afstand berekend. Werking hangt volledig af van gemeten afstand.

  • Spoor vrij → servo's doen niets.
  • Trein aankomt (één kant) → afstand verandert → Arduino zet pinnen 7 & 8 HOOG.
  • Servo's draaien 90° → boom gaat dicht (blokkeert voertuigen).
  • Trein vertrekt (andere sensor) → Arduino melding → servo's terug naar startpositie → boom open.

Veiligheidsfeature: Tijd tussen twee sensorovergangen in één cyclus meten. Tijd < drempelwaarde → buzzer waarschuwt voor hoge snelheid trein.

Project Broncode & Uitleg

Code definieert 5 integer en 4 long variabelen. tr1, tr2, eh1, eh2 voor trigger/echo. val1, val2, dis1, dis2 voor tijd (µs) en afstand (cm). Baudrate 9600 voor seriële monitor.

const int tr1 = 13, eh1 = 12, tr2 = 3, eh2 = 2;
int bz = 11;
unsigned long val1, dis1, val2, dis2;
#include <Servo.h>
Servo myservo1;
Servo myservo2;
int pos = -1;

void setup() – 1x bij start: pinmodes, servo's koppelen (pinnen 8 & 7), seriële communicatie starten.

void setup() {
  pinMode(tr1, OUTPUT); pinMode(tr2, OUTPUT);
  pinMode(bz, OUTPUT); pinMode(eh1, INPUT); pinMode(eh2, INPUT);
  myservo1.attach(8); myservo2.attach(7);
  Serial.begin(9600);
}

void loop() – continu: sensors triggeren, afstanden meten. Als dis1 < 100 OF dis2 < 100 → trein gedetecteerd. pos incrementeert 0→90 (servo's draaien, delay 15ms). Wacht 1s. Hermeet afstanden. Nog steeds < 100? → buzzer AAN (hoge snelheid waarschuwing).

Als dis1 ≥ 100 EN dis2 ≥ 100 → spoor vrij. pos decrementeert 90→0 (servo's open). Buzzer UIT. Wacht 200ms.

void loop() {
  digitalWrite(tr1, LOW); delayMicroseconds(2);
  digitalWrite(tr1, HIGH); delayMicroseconds(10);
  digitalWrite(tr1, LOW);
  val1 = pulseIn(eh1, HIGH);
  dis1 = (val1 * 0.0343) / 2;

  digitalWrite(tr2, LOW); delayMicroseconds(2);
  digitalWrite(tr2, HIGH); delayMicroseconds(10);
  digitalWrite(tr2, LOW);
  val2 = pulseIn(eh2, HIGH);
  dis2 = (val2 * 0.0343) / 2;

  Serial.println("distance is "); Serial.println(dis1); Serial.println(dis2);

  if (dis1 < 100 || dis2 < 100) {
    if (pos == -1) {
      for (pos = 0; pos <= 90; pos += 1) {
        myservo1.write(pos); myservo2.write(pos); delay(15);
      }
    }
    delay(1000);
    // hermeten voor snelheidscheck
    digitalWrite(tr1, LOW); delayMicroseconds(2);
    digitalWrite(tr1, HIGH); delayMicroseconds(10);
    digitalWrite(tr1, LOW);
    val1 = pulseIn(eh1, HIGH);
    dis1 = (val1 * 0.0343) / 2;
    digitalWrite(tr2, LOW); delayMicroseconds(2);
    digitalWrite(tr2, HIGH); delayMicroseconds(10);
    digitalWrite(tr2, LOW);
    val2 = pulseIn(eh2, HIGH);
    dis2 = (val2 * 0.0343) / 2;
    if (dis1 < 100 || dis2 < 100) {
      digitalWrite(bz, HIGH);
      Serial.println("distance2 is "); Serial.println(dis1); Serial.println(dis2);
    }
  } else if (dis1 >= 100 && dis2 >= 100) {
    if (pos == 91) {
      for (pos = 90; pos >= 0; pos -= 1) {
        myservo1.write(pos); myservo2.write(pos); delay(15);
      }
    }
    digitalWrite(bz, LOW);
    delay(200);
  }
}

Hex-bestand koppelen aan Proteus voor Simulatie

Arduino IDE: File → Preferences → "Show verbose output" → vink "compilation" en "upload" aan. Na compilatie: hex-bestandslocatie kopiëren. In Proteus: dubbelklik Arduino → plak locatie in "Program File" → OK. Klaar voor simulatie.

Gerelateerde Projecten

  • Automatische deurbel met objectdetectie (Arduino)
  • Automatische nachtlamp (Arduino)
  • Arduino PWM Programmering
  • Arduino Seriële Communicatie
  • Electronica Eindproject Ideeën
  • Projectideeën voor Engineering Studenten
  • Eenvoudige Mini Projecten voor Beginners

Industriële technologie

  1. DIY Automatische Treinbesturing met Arduino – Eenvoudig, Betrouwbaar en Aanpasbaar
  2. SERENA: Een Aangepast Arduino Mega 2560 Alarmsysteem Met TFT LCD Touchscreen
  3. Arduino Power Control Center: N-FET, P-FET, Relais & RTC Kit
  4. Arduino-gestuurd automatische plantenwateringssysteem
  5. NOR Poort SR Latch: Bouwen en Begrijpen van Digitaal Geheugen
  6. Veelvoorkomende Falen in Bewezen Elektrische Systemen
  7. TTL NOR en OR Poorten: Schakelanalyse en Conversie
  8. Geavanceerde Motor Besturingsschakelingen: Latching, Stop, en Tijdvertraging Technieken
  9. Cloud Monitoring: Extern controlsysteem voor real-time activabeheer
  10. M-TECH: Geavanceerd CNC-besturingssysteem voor Apollo-routers
  11. PIR-sensor Gestuurd Automatisch Deuropen Systeem: Schakeling, Werking & Toepassingen