Inhaltsverzeichnis:

Verwenden von Temperatur-, Regenwasser- und Vibrationssensoren auf einem Arduino zum Schutz von Eisenbahnen - Gunook
Verwenden von Temperatur-, Regenwasser- und Vibrationssensoren auf einem Arduino zum Schutz von Eisenbahnen - Gunook

Video: Verwenden von Temperatur-, Regenwasser- und Vibrationssensoren auf einem Arduino zum Schutz von Eisenbahnen - Gunook

Video: Verwenden von Temperatur-, Regenwasser- und Vibrationssensoren auf einem Arduino zum Schutz von Eisenbahnen - Gunook
Video: FAKTENCHECK: Zisternen zur Regenwassernutzung! (Funktion/Kosten/Einsparpotential) 2024, Juli
Anonim
Verwendung von Temperatur-, Regenwasser- und Vibrationssensoren auf einem Arduino zum Schutz von Eisenbahnen
Verwendung von Temperatur-, Regenwasser- und Vibrationssensoren auf einem Arduino zum Schutz von Eisenbahnen

In der modernen Gesellschaft bedeutet die Zunahme der Bahnreisenden, dass die Bahnunternehmen mehr tun müssen, um die Netze zu optimieren, um mit der Nachfrage Schritt zu halten. In diesem Projekt werden wir im kleinen Maßstab zeigen, wie Temperatur-, Regenwasser- und Vibrationssensoren auf einem Arduino-Board potenziell dazu beitragen können, die Sicherheit der Passagiere zu erhöhen.

Dieses Instructable zeigt Schritt für Schritt die Verkabelung für die Temperatur-, Regenwasser- und Vibrationssensoren auf dem Arduino sowie den MATLAB-Code, der zum Ausführen dieser Sensoren erforderlich ist.

Schritt 1: Teile und Materialien

1. Ein Computer, auf dem die neueste Version von MATLAB installiert ist

2. Arduino-Board

3. Temperatursensor

4. Regenwassersensor

5. Vibrationssensor

6. Rotes LED-Licht

7. Blaues LED-Licht

8. Grünes LED-Licht

9. RBG LED-Licht

10. Summer

11. 18 männlich-männliche Drähte

12. 3 weibliche-männliche Drähte

13. 2 weibliche-weibliche Drähte

14. 6 330 Ohm Widerstände

15. 1 100 Ohm Widerstand

Schritt 2: Verkabelung des Temperatursensors

Verkabelung des Temperatursensors
Verkabelung des Temperatursensors
Verkabelung des Temperatursensors
Verkabelung des Temperatursensors

Oben ist auch die Verdrahtung und der MATLAB-Code für den Temperatursensoreingang.

Die Drähte von Masse und 5V müssen nur einmal für die gesamte Platine nach Minus und Plus geführt werden. Von hier an kommen alle Masseverbindungen von der negativen Spalte und alle 5V-Verbindungen von der positiven Spalte.

Der folgende Code kann für den Temperatursensor kopiert und eingefügt werden.

%% TEMPERATURSENSOR % Für den Temperatursensor haben wir die folgende Quelle zusammen mit. verwendet

% EF230-Website-Material, um unseren Temperatursensor zu ändern, um es dem Benutzer zu ermöglichen

% Eingang und 3 LED-Lichtausgänge mit einer Grafik.

%Dieser Sketch wurde von SparkFun Electronics geschrieben, % mit viel Hilfe von der Arduino-Community.

% An MATLAB angepasst von Eric Davishahl.

%Besuchen Sie https://learn.sparkfun.com/products/2 für SIK-Informationen.

Alles löschen, clc

tempPin = 'A0'; % Angabe des mit dem Temperatursensor verbundenen analogen Pins

a=arduino('/dev/tty.usbserial-DA017PNO', 'uno');

% Definieren Sie eine anonyme Funktion, die die Spannung in Temperatur umwandelt

tempCfromVolts = @(Volt) (Volt-0,5)*100;

Abtastdauer = 30;

Abtastintervall = 2; % Sekunden zwischen Temperaturmessungen

%setup-Vektor der Abtastzeiten

sampleTimes = 0:samplingInterval:samplingDuration;

%berechnen Sie die Anzahl der Proben basierend auf Dauer und Intervall

numSamples = length(samplingTimes);

%preallocate temporäre Variablen und Variable für die Anzahl der zu speichernden Messwerte

tempC = Nullen (numSamples, 1);

tempF = tempC;

% mit Eingabedialogfeld zum Speichern der maximalen und minimalen Schienentemperaturen

dlg_prompts = {'Max. Temp. eingeben', 'Min. Temp. eingeben'};

dlg_title = 'Schienentemperaturintervalle';

N = 22;

dlg_ans = inputdlg(dlg_prompts, dlg_title, [1, Länge(dlg_title)+N]);

% Speicherung der Eingaben des Benutzers und Anzeige, dass die Eingabe aufgezeichnet wurde

max_temp = str2double(dlg_ans{1})

min_temp = str2double(dlg_ans{2})

txt = sprintf('Ihre Eingabe wurde aufgezeichnet');

h=msgbox(txt);

warte auf(h);

% For-Schleife, um die Temperaturen eine bestimmte Anzahl von Malen zu lesen.

für Index = 1:numSamples

% Lesen Sie die Spannung an tempPin ab und speichern Sie sie als variable Volt

Volt = readVoltage(a, tempPin);

tempC(Index) = tempCfromVolts(Volt);

tempF(Index) = tempC(Index)*9/5+32; % von Celsius in Fahrenheit umrechnen

% Wenn Anweisungen, die bestimmte LED-Leuchten zum Blinken bringen, je nachdem, welche Bedingung erfüllt ist

wenn tempF(index) >= max_temp % Rote LED

writeDigitalPin(a, 'D13', 0);

Pause (0,5);

writeDigitalPin(a, 'D13', 1);

Pause (0,5);

writeDigitalPin(a, 'D13', 0);

elseif tempF(index) >= min_temp && tempF(index) < max_temp % Grüne LED

writeDigitalPin(a, 'D11', 0);

Pause (0,5);

writeDigitalPin(a, 'D11', 1);

Pause (0,5);

writeDigitalPin(a, 'D11', 0);

elseif tempF(index) <= min_temp % Blaue LED

writeDigitalPin(a, 'D12', 0);

Pause (0,5);

writeDigitalPin(a, 'D12', 1);

Pause (0,5);

writeDigitalPin(a, 'D12', 0);

Ende

% Zeigt die gemessenen Temperaturen an

fprintf('Temperatur bei %d Sekunden ist %5.2f C oder %5.2f F.\n', …

SamplingTimes (Index), tempC (Index), tempF (Index));

pause(samplingInterval) %Verzögerung bis zum nächsten Sample

Ende

% Plotten der Temperaturmesswerte

Abbildung 1)

plot(samplingTimes, tempF, 'r-*')

xlabel('Zeit (Sekunden)')

ylabel('Temperatur (F)')

title('Temperaturmesswerte vom RedBoard')

Schritt 3: Temperatursensorausgang

Temperatursensorausgang
Temperatursensorausgang
Temperatursensorausgang
Temperatursensorausgang

Oben ist die Verdrahtung und der MATLAB-Code für den Temperatursensorausgang.

Für dieses Projekt haben wir drei LED-Leuchten für die Ausgabe unseres Temperatursensors verwendet. Wir haben ein Rot verwendet, wenn die Tracks zu heiß waren, ein Blau, wenn es zu kalt war, und ein Grün, wenn sie dazwischen lagen.

Schritt 4: Regenwassersensoreingang

Eingang Regenwassersensor
Eingang Regenwassersensor
Eingang Regenwassersensor
Eingang Regenwassersensor

Oben ist die Verkabelung für den Regenwassersensor und der MATLAB-Code ist unten aufgeführt.

%% Wassersensor

Alles löschen, clc

a=arduino('/dev/tty.usbserial-DA017PNO', 'uno');

WasserPin = 'A1';

vTrocken = 4,80; % Spannung, wenn kein Wasser vorhanden ist

Abtastdauer = 60;

Abtastintervall = 2;

sampleTimes = 0:samplingInterval:samplingDuration;

numSamples = length(samplingTimes);

% For-Schleife zum Lesen der Spannung für eine bestimmte Zeit (60 Sekunden)

für Index = 1:numSamples

volt2 = readVoltage(a, waterPin); % Spannung vom analogen Wasserstift ablesen

% Wenn Anweisung zum Ertönen eines Summers, wenn Wasser erkannt wird. Spannungsabfall = Wasser

wenn volt2 < vDry

playTone(a, 'D09', 2400) % playTone-Funktion von MathWorks

% Zeigt den Passagieren eine Warnung an, wenn Wasser erkannt wird

waitfor(warndlg('Ihr Zug kann aufgrund von Wasserhindernissen Verspätung haben'));

Ende

% Anzeige der vom Wassersensor gemessenen Spannung

fprintf('Spannung bei %d Sekunden ist %5.4f V.\n', …

Abtastzeiten (Index), Volt2);

pause(samplingInterval)

Ende

Schritt 5: Regenwassersensorausgang

Regenwassersensorausgang
Regenwassersensorausgang

Oben ist die Verkabelung für einen Summer, der piept, wenn zu viel Wasser auf die Schiene fällt. Der Code für den Summer ist in den Code für den Regenwassereingang eingebettet.

Schritt 6: Vibrationssensoreingang

Vibrationssensoreingang
Vibrationssensoreingang
Vibrationssensoreingang
Vibrationssensoreingang

Oben ist die Verkabelung für den Vibrationssensor. Schwingungssensoren können für Bahnsysteme bei Steinschlag auf einem Gleis wichtig sein. Der MATLAB-Code wird unten veröffentlicht.

%% VibrationssensorAlles löschen, clc

PIEZO_PIN = 'A3'; % Deklarieren des mit dem Vibrationssensor verbundenen analogen Pins a=arduino('/dev/tty.usbserial-DA017PNO', 'uno'); % Initialisieren der Zeit und des Intervalls zur Messung der SchwingungsabtastungDuration = 30; % Sekunden SamplingInterval = 1;

SamplingTimes = 0:samplingInterval:samplingDuration;

numSamples = length(samplingTimes);

% Mit dem Code aus der folgenden Quelle haben wir ihn modifiziert, um a. einzuschalten

% lila LED, wenn Vibration erkannt wird.

% SparkFun Tinker Kit, RGB-LED, geschrieben von SparkFun Electronics, % mit viel Hilfe von der Arduino-Community

% An MATLAB angepasst von Eric Davishahl

% Initialisieren des RGB-Pins

ROT_PIN = 'D5';

GRÜN_PIN = 'D6';

BLUE_PIN = 'D7';

% Für Schleife zum Aufzeichnen von Spannungsänderungen vom Schwingungssensor über a

% spezifisches Zeitintervall (30 Sekunden)

für Index = 1:numSamples

volt3 = readVoltage(a, PIEZO_PIN);

% If-Anweisung zum Einschalten einer violetten LED, wenn Vibrationen erkannt werden

wenn volt3>0,025

writeDigitalPin(a, RED_PIN, 1);

% Erzeuge ein lila Licht

writeDigitalPin(a, GREEN_PIN, 0);

writeDigitalPin(a, BLUE_PIN, 1);

sonst % LED ausschalten, wenn keine Vibration erkannt wird.

writeDigitalPin(a, RED_PIN, 0);

writeDigitalPin(a, GREEN_PIN, 0);

writeDigitalPin(a, BLUE_PIN, 0);

Ende

% Zeigt die gemessene Spannung an.

fprintf('Spannung bei %d Sekunden ist %5.4f V.\n', …

Abtastzeiten (Index), Volt3);

pause(samplingInterval)

Ende

% Licht abschneiden, wenn Vibrationsmessung abgeschlossen ist

writeDigitalPin(a, RED_PIN, 0);

writeDigitalPin(a, GREEN_PIN, 0);

writeDigitalPin(a, BLUE_PIN, 0);

Schritt 7: Vibrationssensorausgang

Vibrationssensorausgang
Vibrationssensorausgang

Oben ist die Verkabelung für das verwendete RBG-LED-Licht. Das Licht leuchtet lila, wenn Vibrationen erkannt werden. Der MATLAB-Code für die Ausgabe ist in den Code für die Eingabe eingebettet.

Schritt 8: Fazit

Nachdem Sie all diese Schritte befolgt haben, sollten Sie jetzt ein Arduino mit der Fähigkeit haben, Temperatur, Regenwasser und Vibrationen zu erkennen. Wenn man sich anschaut, wie diese Sensoren im kleinen Maßstab funktionieren, kann man sich leicht vorstellen, wie wichtig sie für Bahnsysteme im modernen Leben sein könnten!

Empfohlen: