Cuprins:

Utilizarea senzorilor de temperatură, apă de ploaie și vibrații pe un Arduino pentru a proteja căile ferate: 8 pași (cu imagini)
Utilizarea senzorilor de temperatură, apă de ploaie și vibrații pe un Arduino pentru a proteja căile ferate: 8 pași (cu imagini)

Video: Utilizarea senzorilor de temperatură, apă de ploaie și vibrații pe un Arduino pentru a proteja căile ferate: 8 pași (cu imagini)

Video: Utilizarea senzorilor de temperatură, apă de ploaie și vibrații pe un Arduino pentru a proteja căile ferate: 8 pași (cu imagini)
Video: Tur virtual institute I 2024, Iulie
Anonim
Utilizarea senzorilor de temperatură, apă de ploaie și vibrații pe un Arduino pentru a proteja căile ferate
Utilizarea senzorilor de temperatură, apă de ploaie și vibrații pe un Arduino pentru a proteja căile ferate

În societatea modernă, o creștere a pasagerilor feroviari înseamnă că companiile feroviare trebuie să facă mai mult pentru a optimiza rețelele pentru a ține pasul cu cererea. În acest proiect, vom arăta la scară mică cum senzorii de temperatură, apă de ploaie și vibrații de pe o placă arduino pot contribui potențial la creșterea siguranței pasagerilor.

Acest Instructable va arăta pas cu pas cablarea pentru senzorii de temperatură, apă de ploaie și vibrații de pe arduino, precum și codul MATLAB necesar pentru a rula acești senzori.

Pasul 1: Piese și materiale

1. Un computer cu cea mai recentă versiune de MATLAB instalată

2. Placa Arduino

3. Senzor de temperatură

4. Senzor de apă de ploaie

5. Senzor de vibrații

6. Lumina LED roșie

7. Lumina LED albastră

8. Lumina LED verde

9. Lumina LED RBG

10. Buzzer

11. 18 fire mascul-mascul

12. 3 fire de sex feminin-masculin

13. 2 fire de sex feminin

14. 6 rezistențe de 330 ohmi

15. 1 rezistor de 100 ohmi

Pasul 2: Cablarea senzorului de temperatură

Cablarea senzorului de temperatură
Cablarea senzorului de temperatură
Cablarea senzorului de temperatură
Cablarea senzorului de temperatură

Mai sus este cablarea și codul MATLAB pentru intrarea senzorului de temperatură.

Cablurile de la sol și 5V trebuie să fie rulate doar la negativ și respectiv pozitiv o singură dată pentru întreaga placă. De aici înainte, orice conexiuni de masă vor proveni din coloana negativă și orice conexiuni de 5V vor proveni din coloana pozitivă.

Codul de mai jos poate fi copiat și lipit pentru senzorul de temperatură.

%% TEMPERATURE SENSOR% Pentru senzorul de temperatură am folosit următoarea sursă împreună cu

% Site-ul web EF230 pentru a modifica senzorul de temperatură pentru a permite utilizatorului

% intrare și 3 ieșiri de lumină LED cu grafic.

% Această schiță a fost scrisă de SparkFun Electronics, % cu mult ajutor din partea comunității Arduino.

% Adaptat la MATLAB de Eric Davishahl.

% Accesați https://learn.sparkfun.com/products/2 pentru informații despre SIK.

clar toate, clc

tempPin = 'A0'; % Declararea pinului analogic conectat la senzorul de temperatură

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

% Definiți funcția anonimă care convertește tensiunea în temperatură

tempCfromVolts = @ (volți) (volți-0,5) * 100;

samplingDuration = 30;

samplingInterval = 2; % Secunde între citirile de temperatură

% setează vectorul timpilor de eșantionare

samplingTimes = 0: samplingInterval: samplingDuration;

% calculați numărul de eșantioane pe baza duratei și intervalului

numSamples = lungime (samplingTimes);

% prealocați variabilele temp și variabila pentru numărul de citiri pe care le va stoca

tempC = zerouri (numSamples, 1);

tempF = tempC;

% folosind caseta de dialog de intrare pentru a stoca temperaturile maxime și minime ale șinelor

dlg_prompts = {'Enter Max Temp', 'Enter Min Temp'};

dlg_title = 'Intervalele de temperatură ale șinelor';

N = 22;

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

% Stocarea intrărilor de la utilizator și afișarea că intrarea a fost înregistrată

max_temp = str2double (dlg_ans {1})

min_temp = str2double (dlg_ans {2})

txt = sprintf („Intrarea dvs. a fost înregistrată”);

h = msgbox (txt);

waitfor (h);

% Pentru buclă pentru a citi temperaturile de un anumit număr de ori.

pentru index = 1: numSamples

% Citiți tensiunea la tempPin și stocați-o ca volți variabili

volți = readVoltage (a, tempPin);

tempC (index) = tempCfromVolts (volți);

tempF (index) = tempC (index) * 9/5 + 32; % Conversia de la Celsius la Fahrenheit

% Dacă declarațiile pentru a face luminile LED specifice clipesc în funcție de condiția îndeplinită

dacă tempF (index)> = max_temp% LED roșu

writeDigitalPin (a, 'D13', 0);

pauză (0,5);

writeDigitalPin (a, 'D13', 1);

pauză (0,5);

writeDigitalPin (a, 'D13', 0);

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

writeDigitalPin (a, 'D11', 0);

pauză (0,5);

writeDigitalPin (a, 'D11', 1);

pauză (0,5);

writeDigitalPin (a, 'D11', 0);

elseif tempF (index) <= min_temp% LED albastru

writeDigitalPin (a, 'D12', 0);

pauză (0,5);

writeDigitalPin (a, 'D12', 1);

pauză (0,5);

writeDigitalPin (a, 'D12', 0);

Sfârșit

% Afișați temperaturile pe măsură ce sunt măsurate

fprintf („Temperatura la% d secunde este% 5.2f C sau% 5.2f F. / n”, …

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

pauză (samplingInterval)% întârziere până la următoarea mostră

Sfârșit

% Plotarea citirilor de temperatură

figura 1)

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

xlabel („Timp (secunde)”)

ylabel („Temperatură (F)”)

title („Citiri de temperatură de pe RedBoard”)

Pasul 3: ieșirea senzorului de temperatură

Ieșire senzor de temperatură
Ieșire senzor de temperatură
Ieșire senzor de temperatură
Ieșire senzor de temperatură

Mai sus este cablarea și codul MATLAB pentru ieșirea senzorului de temperatură.

Pentru acest proiect am folosit trei lumini LED pentru ieșirea senzorului nostru de temperatură. Am folosit un roșu pentru dacă pistele erau prea fierbinți, un albastru dacă erau prea reci și un verde dacă erau între ele.

Pasul 4: Intrarea senzorului de apă de ploaie

Intrare senzor apă de ploaie
Intrare senzor apă de ploaie
Intrare senzor apă de ploaie
Intrare senzor apă de ploaie

Mai sus este cablarea senzorului de apă de ploaie și codul MATLAB este afișat mai jos.

Senzor de apă %%

clar toate, clc

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

waterPin = 'A1';

vDry = 4,80; % Tensiune atunci când nu există apă

samplingDuration = 60;

samplingInterval = 2;

samplingTimes = 0: samplingInterval: samplingDuration;

numSamples = lungime (samplingTimes);

% Pentru buclă pentru a citi tensiunea pentru o anumită perioadă de timp (60 de secunde)

pentru index = 1: numSamples

volt2 = readVoltage (a, waterPin); % Citiți tensiunea de la pinul de apă analogic

% Dacă instrucțiunea de a suna un buzzer dacă este detectată apă. Cadere de tensiune = apa

dacă volt2 <vDry

playTone (a, 'D09', 2400)% funcție playTone de la MathWorks

% Afișați un avertisment pentru pasageri dacă este detectată apă

waitfor (warndlg („Trenul dvs. poate fi întârziat din cauza pericolelor de apă”));

Sfârșit

% Afișați tensiunea așa cum este măsurată de senzorul de apă

fprintf ('Tensiunea la% d secunde este% 5.4f V. / n', …

SamplingTimes (index), volt2);

pauză (samplingInterval)

Sfârșit

Pasul 5: ieșirea senzorului de apă de ploaie

Ieșire senzor apă de ploaie
Ieșire senzor apă de ploaie

Deasupra este cablarea unui buzzer care emite un sunet ori de câte ori cade prea multă apă pe pistă. Codul pentru buzzer este încorporat în codul pentru intrarea apei de ploaie.

Pasul 6: Intrarea senzorului de vibrații

Intrare senzor vibrații
Intrare senzor vibrații
Intrare senzor vibrații
Intrare senzor vibrații

Deasupra este cablarea senzorului de vibrații. Senzorii de vibrații pot fi importanți pentru sistemele feroviare în cazul căderii de pietre pe o cale. Codul MATLAB este postat mai jos.

Senzor de vibrații %%cleară toate, clc

PIEZO_PIN = 'A3'; % Declararea pinului analogic conectat la senzorul de vibrații a = arduino ('/ dev / tty.usbserial-DA017PNO', 'uno'); % Inițializarea timpului și intervalului pentru măsurarea eșantionării vibrațiilor Durata = 30; % Secunde samplingInterval = 1;

samplingTimes = 0: samplingInterval: samplingDuration;

numSamples = lungime (samplingTimes);

% Folosind codul din următoarea sursă, l-am modificat pentru a activa un

% LED violet dacă se detectează vibrații.

% SparkFun Tinker Kit, LED RGB, scris de SparkFun Electronics, % cu mult ajutor din partea comunității Arduino

% Adaptat la MATLAB de Eric Davishahl

% Inițializarea pinului RGB

RED_PIN = 'D5';

GREEN_PIN = 'D6';

BLUE_PIN = 'D7';

% Pentru buclă pentru a înregistra modificările de tensiune de la senzorul de vibrații peste un

% interval de timp specific (30 de secunde)

pentru index = 1: numSamples

volt3 = readVoltage (a, PIEZO_PIN);

Declarație% If pentru a porni un LED purpuriu dacă se detectează vibrații

dacă volt3> 0,025

writeDigitalPin (a, RED_PIN, 1);

% Crearea unei lumini purpurii

writeDigitalPin (a, GREEN_PIN, 0);

writeDigitalPin (a, BLUE_PIN, 1);

else% Opriți LED-ul dacă nu este detectată nicio vibrație.

writeDigitalPin (a, RED_PIN, 0);

writeDigitalPin (a, GREEN_PIN, 0);

writeDigitalPin (a, BLUE_PIN, 0);

Sfârșit

% Afișați tensiunea pe măsură ce este măsurată.

fprintf ('Tensiunea la% d secunde este% 5.4f V. / n', …

SamplingTimes (index), volt3);

pauză (samplingInterval)

Sfârșit

% Tăiați lumina atunci când măsurați vibrațiile

writeDigitalPin (a, RED_PIN, 0);

writeDigitalPin (a, GREEN_PIN, 0);

writeDigitalPin (a, BLUE_PIN, 0);

Pasul 7: ieșirea senzorului de vibrații

Ieșirea senzorului de vibrații
Ieșirea senzorului de vibrații

Deasupra este cablarea pentru lumina LED RBG utilizată. Lumina va străluci violet atunci când sunt detectate vibrații. Codul MATLAB pentru ieșire este încorporat în codul pentru intrare.

Pasul 8: Concluzie

După ce ați urmat toți acești pași, ar trebui să aveți acum un arduino cu capacitatea de a detecta temperatura, apa de ploaie și vibrațiile. În timp ce vizualizați cum funcționează acești senzori la scară mică, este ușor să vă imaginați cât de vital ar putea fi pentru sistemele feroviare în viața modernă!

Recomandat: