Inhoudsopgave:

Temperatuur-, regenwater- en trillingssensoren op een Arduino gebruiken om spoorwegen te beschermen - Ajarnpa
Temperatuur-, regenwater- en trillingssensoren op een Arduino gebruiken om spoorwegen te beschermen - Ajarnpa

Video: Temperatuur-, regenwater- en trillingssensoren op een Arduino gebruiken om spoorwegen te beschermen - Ajarnpa

Video: Temperatuur-, regenwater- en trillingssensoren op een Arduino gebruiken om spoorwegen te beschermen - Ajarnpa
Video: Maak van je regenwaterput een warmteput 2024, Juli-
Anonim
Temperatuur-, regenwater- en trillingssensoren op een Arduino gebruiken om spoorwegen te beschermen
Temperatuur-, regenwater- en trillingssensoren op een Arduino gebruiken om spoorwegen te beschermen

In de huidige samenleving betekent een toename van treinreizigers dat spoorwegmaatschappijen meer moeten doen om netwerken te optimaliseren om aan de vraag te kunnen voldoen. In dit project laten we op kleine schaal zien hoe temperatuur-, regenwater- en trillingssensoren op een arduino-bord mogelijk kunnen helpen de veiligheid van passagiers te vergroten.

Deze Instructable toont stap voor stap de bedrading voor de temperatuur-, regenwater- en trillingssensoren op de Arduino en toont de MATLAB-code die nodig is om deze sensoren uit te voeren.

Stap 1: Onderdelen en materialen

1. Een computer waarop de nieuwste versie van MATLAB is geïnstalleerd

2. Arduino-bord

3. Temperatuursensor

4. Regenwatersensor

5. Trillingssensor

6. Rood LED-licht

7. Blauw LED-licht

8. Groen LED-licht

9. RBG LED-licht

10. Zoemer

11. 18 mannelijke-mannelijke draden

12. 3 vrouwelijk-mannelijke draden

13. 2 Vrouwelijk-Vrouwelijke Draden

14. 6 weerstanden van 330 ohm

15. 1 100 ohm weerstand

Stap 2: Temperatuursensorbedrading

Bedrading temperatuursensor
Bedrading temperatuursensor
Bedrading temperatuursensor
Bedrading temperatuursensor

Hierboven vindt u ook de bedrading en MATLAB-code voor de ingang van de temperatuursensor.

De draden van aarde en 5V hoeven voor het hele bord slechts één keer naar respectievelijk negatief en positief te worden geleid. Vanaf hier komen alle aardverbindingen uit de negatieve kolom en komen eventuele 5V-verbindingen uit de positieve kolom.

Onderstaande code kan worden gekopieerd en geplakt voor de temperatuursensor.

%% TEMPERATUURSENSOR % Voor de temperatuursensor hebben we de volgende bron gebruikt samen met:

% EF230 websitemateriaal om onze temperatuursensor aan te passen zodat de gebruiker

% input en 3 LED-lichtuitgangen met een grafiek.

%Deze schets is geschreven door SparkFun Electronics, %met veel hulp van de Arduino-gemeenschap.

Aangepast aan MATLAB door Eric Davishahl.

%Bezoek https://learn.sparkfun.com/products/2 voor SIK-informatie.

alles wissen, clc

tempPin = 'A0'; % De analoge pin die op de temperatuursensor is aangesloten aangeven

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

% Definieer anonieme functie die de spanning omzet in temperatuur

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

bemonsteringsduur = 30;

bemonsteringsinterval = 2; % Seconden tussen temperatuurmetingen

%vector van bemonsteringstijden instellen

samplingTimes = 0:samplingInterval:samplingDuration;

%bereken het aantal monsters op basis van de duur en het interval

numSamples = lengte (samplingTimes);

%vooraf toewijzen van tijdelijke variabelen en variabele voor het aantal metingen dat het zal opslaan

tempC = nullen (numSamples, 1);

tempF = tempC;

% via invoerdialoogvenster om max. en min. railtemperaturen op te slaan

dlg_prompts = {'Voer Max Temp in', 'Voer Min Temp in'};

dlg_title = 'Spoortemperatuurintervallen';

N=22;

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

% De invoer van de gebruiker opslaan en weergeven dat de invoer is opgenomen

max_temp = str2double(dlg_ans{1})

min_temp = str2double(dlg_ans{2})

txt = sprintf('Je invoer is geregistreerd');

h=msgbox(txt);

wachten op (h);

% For-lus om de temperaturen een bepaald aantal keren uit te lezen.

voor index = 1:numSamples

% Lees de spanning bij tempPin en sla op als variabele volt

volt = leesVoltage (a, tempPin);

tempC(index) = tempCfromVolts(volt);

tempF(index) = tempC(index)*9/5+32; % Converteren van Celsius naar Fahrenheit

% Als verklaringen om specifieke LED-lampjes te laten knipperen, afhankelijk van aan welke voorwaarde is voldaan

if tempF(index) >= max_temp % Rode LED

writeDigitalPin(a, 'D13', 0);

pauze (0.5);

writeDigitalPin(a, 'D13', 1);

pauze (0.5);

writeDigitalPin(a, 'D13', 0);

elseif tempF(index) >= min_temp && tempF(index) < max_temp % Groene LED

writeDigitalPin(a, 'D11', 0);

pauze (0.5);

writeDigitalPin(a, 'D11', 1);

pauze (0.5);

writeDigitalPin(a, 'D11', 0);

elseif tempF(index) <= min_temp % Blauwe LED

writeDigitalPin(a, 'D12', 0);

pauze (0.5);

writeDigitalPin(a, 'D12', 1);

pauze (0.5);

writeDigitalPin(a, 'D12', 0);

einde

% Geef de temperaturen weer zoals ze worden gemeten

fprintf('Temperatuur op %d seconden is %5.2f C of %5.2f F.\n', …

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

pauze(samplingInterval) %vertraging tot volgende sample

einde

% De temperatuurmetingen plotten

Figuur 1)

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

xlabel('Tijd (Seconden)')

ylabel('Temperatuur (F)')

title('Temperatuurmetingen van het RedBoard')

Stap 3: Uitgang temperatuursensor

Uitgang temperatuursensor
Uitgang temperatuursensor
Uitgang temperatuursensor
Uitgang temperatuursensor

Hierboven vindt u de bedrading en MATLAB-code voor de uitgang van de temperatuursensor.

Voor dit project hebben we drie LED-lampjes gebruikt voor de uitgang van onze temperatuursensor. We gebruikten een rode voor als de tracks te warm waren, een blauwe als ze te koud waren en een groene als ze er tussenin zaten.

Stap 4: Invoer regenwatersensor

Ingang regenwatersensor
Ingang regenwatersensor
Ingang regenwatersensor
Ingang regenwatersensor

Hierboven staat de bedrading voor de regenwatersensor en de MATLAB-code staat hieronder.

%% Watersensor

alles wissen, clc

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

waterPin = 'A1';

vDroog = 4,80; % Spanning wanneer er geen water aanwezig is

bemonsteringsduur = 60;

bemonsteringsinterval = 2;

samplingTimes = 0:samplingInterval:samplingDuration;

numSamples = lengte (samplingTimes);

% For-lus om de spanning gedurende een bepaalde tijd (60 seconden) te lezen

voor index = 1:numSamples

volt2 = leesVoltage (a, waterPin); % Lees spanning van waterpen analoog

% If-statement om een zoemer te laten klinken als er water wordt gedetecteerd. Spanningsval = water

als volt2 < vDry

playTone(a, 'D09', 2400) % playTone-functie van MathWorks

% Een waarschuwing voor passagiers weergeven als er water wordt gedetecteerd

waitfor(warndlg('Uw trein kan vertraging oplopen vanwege waterhindernissen'));

einde

% Geef de spanning weer zoals deze wordt gemeten door de watersensor

fprintf('Spanning op %d seconden is %5.4f V.\n', …

samplingTimes (index), volt2);

pauze(samplingInterval)

einde

Stap 5: Uitgang regenwatersensor

Uitgang regenwatersensor
Uitgang regenwatersensor

Hierboven bevindt zich de bedrading voor een zoemer die piept wanneer er te veel water op de baan valt. De code voor de zoemer is ingebed in de code voor de regenwaterinvoer.

Stap 6: Ingang trillingssensor

Ingang trillingssensor
Ingang trillingssensor
Ingang trillingssensor
Ingang trillingssensor

Hierboven ziet u de bedrading voor de trillingssensor. Trillingssensoren kunnen voor spoorwegsystemen van belang zijn bij vallend gesteente op een spoor. De MATLAB-code staat hieronder.

%% Trillingssensorwis alles, clc

PIEZO_PIN = 'A3'; % De analoge pin die is aangesloten op de trillingssensor declareren a=arduino('/dev/tty.usbserial-DA017PNO', 'uno'); % Initialiseren van de tijd en het interval voor het meten van vibratiebemonsteringDuration = 30; % Seconden samplingInterval = 1;

samplingTimes = 0:samplingInterval:samplingDuration;

numSamples = lengte (samplingTimes);

% Met behulp van de code van de volgende bron hebben we deze aangepast om een

% paarse led als trilling wordt gedetecteerd.

% SparkFun Tinker Kit, RGB LED, geschreven door SparkFun Electronics, % met veel hulp van de Arduino-gemeenschap

% Aangepast aan MATLAB door Eric Davishahl

% De RGB-pin initialiseren

RED_PIN = 'D5';

GROENE_PIN = 'D6';

BLAUWE_PIN = 'D7';

% For-lus om spanningsveranderingen van de trillingssensor over a. te registreren

% specifiek tijdsinterval (30 seconden)

voor index = 1:numSamples

volt3 = leesVoltage (a, PIEZO_PIN);

% If-instructie om een paarse LED in te schakelen als trilling wordt gedetecteerd

als volt3>0,025

writeDigitalPin(a, RED_PIN, 1);

% Een paars licht creëren

writeDigitalPin(a, GROENE_PIN, 0);

writeDigitalPin (a, BLAUWE_PIN, 1);

else % Schakel de LED uit als er geen trilling wordt gedetecteerd.

writeDigitalPin(a, RED_PIN, 0);

writeDigitalPin(a, GROENE_PIN, 0);

writeDigitalPin (a, BLAUWE_PIN, 0);

einde

% Geef de spanning weer zoals deze wordt gemeten.

fprintf('Spanning op %d seconden is %5.4f V.\n', …

samplingTimes(index), volt3);

pauze(samplingInterval)

einde

% Licht uitgeschakeld wanneer het meten van trillingen is voltooid

writeDigitalPin(a, RED_PIN, 0);

writeDigitalPin(a, GROENE_PIN, 0);

writeDigitalPin (a, BLAUWE_PIN, 0);

Stap 7: Uitgang trillingssensor

Uitgang trillingssensor
Uitgang trillingssensor

Hierboven is de bedrading voor de RBG LED lamp gebruikt. Het licht zal paars oplichten wanneer trillingen worden gedetecteerd. De MATLAB-code voor de uitvoer is ingebed in de code voor de invoer.

Stap 8: Conclusie

Nadat je al deze stappen hebt gevolgd, zou je nu een arduino moeten hebben met de mogelijkheid om temperatuur, regenwater en trillingen te detecteren. Als je ziet hoe deze sensoren op kleine schaal werken, kun je je gemakkelijk voorstellen hoe belangrijk ze in het moderne leven voor spoorwegsystemen kunnen zijn!

Aanbevolen: