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
- Arduino UNO
- Buzzer
- Ultrasonische Sensor (HC-SR04)
- Servomotor
Benodigde Software
- Arduino IDE
- 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
- DIY Automatische Treinbesturing met Arduino – Eenvoudig, Betrouwbaar en Aanpasbaar
- SERENA: Een Aangepast Arduino Mega 2560 Alarmsysteem Met TFT LCD Touchscreen
- Arduino Power Control Center: N-FET, P-FET, Relais & RTC Kit
- Arduino-gestuurd automatische plantenwateringssysteem
- NOR Poort SR Latch: Bouwen en Begrijpen van Digitaal Geheugen
- Veelvoorkomende Falen in Bewezen Elektrische Systemen
- TTL NOR en OR Poorten: Schakelanalyse en Conversie
- Geavanceerde Motor Besturingsschakelingen: Latching, Stop, en Tijdvertraging Technieken
- Cloud Monitoring: Extern controlsysteem voor real-time activabeheer
- M-TECH: Geavanceerd CNC-besturingssysteem voor Apollo-routers
- PIR-sensor Gestuurd Automatisch Deuropen Systeem: Schakeling, Werking & Toepassingen