Innehållsförteckning:

Använda temperatur-, regnvatten- och vibrationssensorer på en Arduino för att skydda järnvägar: 8 steg (med bilder)
Använda temperatur-, regnvatten- och vibrationssensorer på en Arduino för att skydda järnvägar: 8 steg (med bilder)

Video: Använda temperatur-, regnvatten- och vibrationssensorer på en Arduino för att skydda järnvägar: 8 steg (med bilder)

Video: Använda temperatur-, regnvatten- och vibrationssensorer på en Arduino för att skydda järnvägar: 8 steg (med bilder)
Video: Biologisk mångfald - för skolor och allmänhet 2024, Juli
Anonim
Använda temperatur-, regnvatten- och vibrationssensorer på en Arduino för att skydda järnvägar
Använda temperatur-, regnvatten- och vibrationssensorer på en Arduino för att skydda järnvägar

I dagens samhälle innebär en ökning av järnvägspassagerare att järnvägsföretag måste göra mer för att optimera nätverk för att hålla jämna steg med efterfrågan. I detta projekt kommer vi att visa i liten skala hur temperatur-, regnvatten- och vibrationssensorer på en arduino -skiva potentiellt kan bidra till att öka passagerarnas säkerhet.

Denna instruktionsbok visar steg-för-steg ledningarna för temperatur-, regnvatten- och vibrationssensorerna på arduinoen samt visar MATLAB-koden som krävs för att köra dessa sensorer.

Steg 1: Delar och material

1. En dator med den senaste versionen av MATLAB installerad

2. Arduino Board

3. Temperaturgivare

4. Regnvattensensor

5. Vibrationssensor

6. Rött LED -ljus

7. Blått LED -ljus

8. Grönt LED -ljus

9. RBG LED -ljus

10. Summer

11. 18 Man-Hankablar

12. 3 Kvinnliga-Hankablar

13. 2 Kvinnliga-Kvinnliga Trådar

14. 6 330 ohm motstånd

15. 1 100 ohm motstånd

Steg 2: Anslutning av temperaturgivare

Temperaturgivare
Temperaturgivare
Temperaturgivare
Temperaturgivare

Ovan finns också kabeldragning och MATLAB -kod för temperaturgivarens ingång.

Ledningarna från marken och 5V behöver bara köras till det negativa respektive positiva en gång för hela kortet. Härifrån kommer alla jordanslutningar från den negativa kolumnen och alla 5V -anslutningar kommer från den positiva kolumnen.

Koden nedan kan kopieras och klistras in för temperaturgivaren.

%% TEMPERATURSENSOR % För temperatursensorn använde vi följande källa tillsammans med

% EF230 webbplatsmaterial för att modifiera vår temperatursensor för att tillåta användare

% ingång och 3 LED -ljusutgångar med en graf.

Denna skiss skrevs av SparkFun Electronics, %med massor av hjälp från Arduino -samhället.

%Anpassad till MATLAB av Eric Davishahl.

%Besök https://learn.sparkfun.com/products/2 för SIK -information.

rensa allt, clc

tempPin = 'A0'; % Deklarerar det analoga stiftet som är anslutet till temperatursensorn

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

% Definiera anonym funktion som omvandlar spänningen till temperaturen

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

samplingDuration = 30;

samplingInterval = 2; % Sekunder mellan temperaturavläsningar

%ställer in vektorn för provtagningstider

samplingTimes = 0: samplingInterval: samplingDuration;

%beräkna antalet prover baserat på varaktighet och intervall

numSamples = length (samplingTimes);

%fördela tempvariabler och variabler för antalet avläsningar som den kommer att lagra

tempC = nollor (numSamples, 1);

tempF = tempC;

% använder inmatningsdialogrutan för att lagra max och min sken temperaturer

dlg_prompts = {'Ange max temp', 'Ange min temp'};

dlg_title = 'Rälstemperaturintervall';

N = 22;

dlg_ans = inputdlg (dlg_prompts, dlg_title, [1, length (dlg_title)+N]);

% Lagra inmatningarna från användaren och visa att ingången spelades in

max_temp = str2double (dlg_ans {1})

min_temp = str2double (dlg_ans {2})

txt = sprintf ('Din inmatning har registrerats');

h = msgbox (txt);

vänta på (h);

% För loop för att läsa temperaturerna ett visst antal gånger.

för index = 1: numSamples

% Läs spänningen vid tempPin och lagra som variabel volt

volt = readVoltage (a, tempPin);

tempC (index) = tempCfromVolts (volt);

tempF (index) = tempC (index)*9/5+32; % Konvertera från Celsius till Fahrenheit

% Om uttalanden om specifika LED -lampor blinkar beroende på vilket villkor som är uppfyllt

om tempF (index)> = max_temp % Röd LED

writeDigitalPin (a, 'D13', 0);

paus (0,5);

writeDigitalPin (a, 'D13', 1);

paus (0,5);

writeDigitalPin (a, 'D13', 0);

elseif tempF (index)> = min_temp && tempF (index) <max_temp % Grön LED

writeDigitalPin (a, 'D11', 0);

paus (0,5);

writeDigitalPin (a, 'D11', 1);

paus (0,5);

writeDigitalPin (a, 'D11', 0);

elseif tempF (index) <= min_temp % Blå LED

writeDigitalPin (a, 'D12', 0);

paus (0,5);

writeDigitalPin (a, 'D12', 1);

paus (0,5);

writeDigitalPin (a, 'D12', 0);

slutet

% Visa temperaturerna när de mäts

fprintf ('Temperaturen vid %d sekunder är %5.2f C eller %5.2f F. / n', …

samplingTimes (index), tempC (index), tempF (index));

paus (samplingInterval) %fördröjning till nästa prov

slutet

% Plotta temperaturavläsningarna

Figur 1)

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

xlabel ('Time (Seconds)')

ylabel ('Temperatur (F)')

title ('Temperaturavläsningar från röda brädet')

Steg 3: Temperatursensorutgång

Temperatur sensor utgång
Temperatur sensor utgång
Temperatur sensor utgång
Temperatur sensor utgång

Ovan är ledningarna och MATLAB -koden för temperaturgivarens utgång.

För detta projekt använde vi tre LED -lampor för utmatningen av vår temperatursensor. Vi använde en röd för om spåren var för heta, en blå om de var för kalla och en grön om de var däremellan.

Steg 4: Inmatning av regnvattenssensor

Ingång för regnvattensensor
Ingång för regnvattensensor
Inmatning av regnvattensensor
Inmatning av regnvattensensor

Ovan är ledningarna för regnvattensensorn och MATLAB -koden finns nedan.

%% Vattensensor

rensa allt, clc

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

waterPin = 'A1';

vDry = 4,80; % Spänning när det inte finns något vatten

samplingDuration = 60;

samplingInterval = 2;

samplingTimes = 0: samplingInterval: samplingDuration;

numSamples = length (samplingTimes);

% För slinga att läsa spänningen under en viss tid (60 sekunder)

för index = 1: numSamples

volt2 = readVoltage (a, waterPin); % Läs spänning från vattenstift analog

% Om uttalande för att låta en summer om vatten detekteras. Spänningsfall = vatten

om volt2 <vDry

playTone (a, 'D09', 2400) % playTone -funktion från MathWorks

% Visa en varning för passagerare om vatten upptäcks

waitfor (warndlg ('Ditt tåg kan bli försenat på grund av vattenrisker'));

slutet

% Visa spänningen som den mäts av vattensensorn

fprintf ('Spänning vid %d sekunder är %5.4f V. / n', …

samplingTimes (index), volt2);

paus (samplingInterval)

slutet

Steg 5: Regnvattensensorutgång

Regnvattensensorutgång
Regnvattensensorutgång

Ovan är ledningarna för en summer som piper när för mycket vatten faller på banan. Koden för summern är inbäddad i koden för regnvatteninmatningen.

Steg 6: Inmatning av vibrationssensor

Ingång för vibrationssensor
Ingång för vibrationssensor
Ingång för vibrationssensor
Ingång för vibrationssensor

Ovan är ledningarna för vibrationssensorn. Vibrationssensorer kan vara viktiga för järnvägssystem vid fallande stenar på ett spår. MATLAB -koden publiceras nedan.

%% Vibration Sensorrensa alla, clc

PIEZO_PIN = 'A3'; % Deklarerar den analoga stift som är ansluten till vibrationssensorn a = arduino ('/dev/tty.usbserial-DA017PNO', 'uno'); % Initierar tid och intervall för att mäta vibrationssamplingDuration = 30; % Seconds samplingInterval = 1;

samplingTimes = 0: samplingInterval: samplingDuration;

numSamples = length (samplingTimes);

% Genom att använda koden från följande källa ändrade vi den för att aktivera a

% lila LED om vibrationer detekteras.

% SparkFun Tinker Kit, RGB LED, skriven av SparkFun Electronics, % med mycket hjälp från Arduino -samhället

% Anpassad till MATLAB av Eric Davishahl

% Initierar RGB -stiftet

RED_PIN = 'D5';

GREEN_PIN = 'D6';

BLUE_PIN = 'D7';

% För slinga för att registrera spänningsförändringar från vibrationssensorn över en

% specifikt tidsintervall (30 sekunder)

för index = 1: numSamples

volt3 = readVoltage (a, PIEZO_PIN);

% Om uttalande för att tända en lila lysdiod om vibrationer detekteras

om volt3> 0,025

writeDigitalPin (a, RED_PIN, 1);

Skapa ett lila ljus

writeDigitalPin (a, GREEN_PIN, 0);

writeDigitalPin (a, BLUE_PIN, 1);

annars % Stäng av lysdioden om ingen vibration detekteras.

writeDigitalPin (a, RED_PIN, 0);

writeDigitalPin (a, GREEN_PIN, 0);

writeDigitalPin (a, BLUE_PIN, 0);

slutet

% Visa spänningen när den mäts.

fprintf ('Spänning vid %d sekunder är %5.4f V. / n', …

samplingTimes (index), volt3);

paus (samplingInterval)

slutet

% Stäng av ljuset när vibrationsmätningen är klar

writeDigitalPin (a, RED_PIN, 0);

writeDigitalPin (a, GREEN_PIN, 0);

writeDigitalPin (a, BLUE_PIN, 0);

Steg 7: Vibrationssensorutgång

Vibrationssensorutgång
Vibrationssensorutgång

Ovan är ledningarna för RBG LED -lampan som används. Ljuset lyser lila när vibrationer detekteras. MATLAB -koden för utmatningen är inbäddad i koden för ingången.

Steg 8: Slutsats

Efter att ha följt alla dessa steg bör du nu ha en arduino med förmågan att detektera temperatur, regnvatten och vibrationer. När man tittar på hur dessa sensorer fungerar i liten skala är det lätt att föreställa sig hur viktiga de kan vara för järnvägssystem i det moderna livet!

Rekommenderad: