Indholdsfortegnelse:
Video: Smart Train System: 4 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:28
Designet til at øge sikkerheden, forhindre ulykker og øge den positive og produktive reaktion for at hjælpe, hvis der sker uheld.
Trin 1: Dele og materialer
Billederne ovenfor er placeret i rækkefølgen på delelisten herunder:
Liste over dele
1) One Raspberry PI 3 - Model B
2) Et brødbræt
3) Kabler (fra top til bund) - En strøm, et Ethernet, en adapter
4) En servomotor
5) En 3D -printet jernbaneport
6) To lysdioder (helst rød og grøn)
7) En trykknap
8) Ti springtråde
9) Fire modstande
10) Bærbar eller stationær computer med MATLAB
Trin 2: Konfiguration
Ovenstående er billeder af konfigurationen fra flere vinkler:
Pinplaceringer (små bogstaver efterfulgt af et rækkenummer) er angivet nedenfor i rækkefølge efter det aktuelle flow.
Ledninger:
j19 til i47
j8 til b50
b5 til Servo
c6 til Servo
b7 til servo
a13 til j7
a17 til LED
LED til a37
e40 til j20
j53 til j18
j7 til LED
LED til j6
Knap:
e54 til h51
Modstande:
d40 til b37
c50 til d54
i51 til j47
Trin 3: Kode og logik
Vores togsystems mål er at øge sikkerheden og reducere risikoen for potentielt dødelige ulykker ved jernbaneoverskæringer. For at opnå dette har vores system et togadvarselssystem til chauffører, en fysisk barriere, der sænkes for at forhindre biler i at krydse banen, og en backup -nødknap, som konduktøren kan trykke på, hvis systemet til tidlig varsling fejler.
GUI Conductor Operativsystem:
GUI, vist ovenfor, blev oprettet til brug for konduktøren, da de kører toget gennem sporområder, der har biltrafik jernbanekrydsninger.
I øverste højre hjørne er der et lys, der giver konduktøren besked, hvis en kommende jernbaneovergangsport er lukket og giver konduktøren mulighed for at åbne eller lukke porten, hvis det er nødvendigt. Herunder vises foderet fra kameraer, toget passerer. I nederste venstre hjørne afbildes togets placering løbende på en graf og under grafen angives antallet af omgange, toget havde gennemført på en dag. Over positionsgrafen er der en nødknap og statuserklæring. Dette giver konduktøren mulighed for at signalere om en nødsituation, hvis der er en bil på banen, eller sikkerhedsporten ikke fungerer korrekt.
Kode:
classdef micro <matlab.apps. AppBase % Egenskaber, der svarer til appkomponenter
ejendomme (Adgang = offentlig)
UIFigure matlab.ui. Figur
RailwaygatestatusLampLabel matlab.ui.control. Label
gateLampe matlab.ui.kontrol. Lampe
OpenGateButton matlab.ui.control. Button
CloseGateButton matlab.ui.control. Button
UIAxes matlab.ui.control. UIAxes
EmergencyButtonStatusLampLabel matlab.ui.control. Label
EmergencyButtonStatusLampe matlab.ui.control. Lampe
Undernormale betingelserLabel matlab.ui.control. Label
UIAxes2 matlab.ui.control. UIAxes
EF230Group6Label matlab.ui.control. Label
IanAllishKellyBondIanDaffronLabel matlab.ui.control. Label
LoopsCompletedLabel matlab.ui.control. Label
Mærke matlab.ui.control. Label
ende
ejendomme (Adgang = privat)
tæller int16
ende
metoder (Adgang = offentlig)
funktionstimerCallback (app, src, begivenhed)
app. Temp. Text = int2str (app.counter);
app.counter = app.counter + 1;
%kalder alle de variabler, programmet har brug for - - - - - - - - - - - - - - -
globalt rpi
globale s
global åben
global lukning
globalt kamera
globalt m
globale ems
globalt t_count
%------------------------- Train Arm Section --------------------- ---------
hvis den er åben == 0
writePosition (r, 50)
app.gateLamp. Color = 'grøn';
ende
hvis tæt == 0
writePosition (s, 120)
app.gateLamp. Color = 'rød';
ende
%---------------------- Bevægelsesregistrering via kamera -----------------------
mens det er sandt
img = øjebliksbillede (cam);
billede (img);
app. UIAxes (tegnet)
ende
%---------------------- Arm åben/luk ----------------------- --------------
hvis readDigitalPin (rpi, 20)> 1 %læser pin 17 (knap) og kontrollerer for signal
for i = 40:.5: 150 %rejser bro
writePosition (s, i)
ende
for i = 1:10 %sløjfer, der blinker rødt lys x gange
writeDigitalPin (rpi, 13, 1)
pause (.5)
writeDigitalPin (rpi, 13, 0)
pause (.5)
ende
writePosition (s, 50)%satte porten ned
ende
%-------------------- Mobiltelefonsupport/plot ------------------------ -
m. AccelerationSensorEnabled = 1
m.logging = 1
data = nuller (200, 1); %initialiserer data for rullende plot
figur (ca. UIAxes2)
p = plot (data)
akse ([xbounda, ybounds])
pause (1)
tic
mens toc <30 %kører i 30 sekunder
[a, ~] = accellog (m);
hvis længde (a)> 200
data = a (slut-199: slut, 3);
andet
data (1: længde (a)) = a (:, 3);
ende
%tegne plot igen
p. YData = data;
tegnet
ende
%------------------ Pludselig pixelændring ---------------------------- ------
x1 = img; % læser kameraet af pi
red_mean = gennemsnit (middelværdi (x1 (:,:, 1))); % læser den gennemsnitlige mængde røde pixels
grøn_værdi = middelværdi (middelværdi (x1 (:,:, 2))); % læser den gennemsnitlige mængde af grønne pixels
blue_mean = gennemsnit (middelværdi (x1 (:,:, 3))); % læser den gennemsnitlige mængde af blå pixels
hvis red_mean> 150 && green_mean> 150 && blue_mean> 150
t_count = t_count + 1;
ende
app. LoopsCompletedLabel. Text = num2str (t_count)
%------------------ Knap EMS programmering ---------------------------- ---
configurePin (rpi, 12, 'DigitalOutput'); %indstiller LED -stiften, pin 16, som en output
configurePin (rpi, 16, 'DigitalInput'); %indstiller knapstiften, pin 24, som input
buttonPressed = readDigitalPin (rpi, 16); % Læser knappen trykværdi på pin 16
hvis buttonPressed == 1
mens buttonPressed == 1
writeDigitalPin (rpi, 12, 1)
buttonunPressed = writeDigitalPin (rpi, 12, 0); %
end % Slutter 'mens buttonPressed == 1' loop
ende
writeDigitalPin (rpi, 16, 0) %Indstiller LED til off, når der ikke længere trykkes på knappen setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % mailkonto, der skal sendes fra setpref ('Internet', 'SMTP_Username', '[email protected]'); % afsendere brugernavn setpref ('Internet', 'SMTP_Password', 'efgroup6'); % Afsenderadgangskode
rekvisitter = java.lang. System.getProperties;
props.setProperty ('mail.smtp.auth', 'true'); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.port', '465');
sendmail ('[email protected]', 'Nødstatus!', 'Dirigenten har aktiveret den manuelle overstyringsafbryder og beder om øjeblikkeligt svar!')
app. UndernormalconditionsLabel. Text = ems
ende
ende
%app. Label_4. Text = num2str (curr_temp);
metoder (Adgang = privat)
% Kode, der udføres efter komponentoprettelse
funktion startupFcn (app)
%---------- Alle variabler, der er nødvendige for denne funktion --------------------
global rpi %arduino
rpi = raspi ('169.254.0.2', 'pi', 'hindbær');
global s %servo
s = servo (rpi, 17, 'MinPulseDuration', 5e-4, 'MaxPulseDuration', 2.5e-3);
global åben
åben = 1;
globalt lukket
lukket = 1;
globalt kamera
cam = cameraboard (rpi);
globalt m
m = mobiledev;
globale ems
ems = 'Der er blevet rapporteret om en nødsituation, der meddeler EMS';
globalt t_count
t_count = 0;
stik på %adgangskode er EFGroup6
% Timerfunktion til sløjfe --------------------------------
app.counter = 0;
t = timer (…
'TimerFcn', @app.timerCallback, …
'StartDelay', 1, … 'Period', 1, …
'ExecutionMode', 'fixedSpacing', …
'TasksToExecute', inf);
start (t);
ende
% Tilbagekaldsfunktion
funktion ManualOverrideSwitchValueChanged (app, begivenhed)
ende
% Knap skubbet funktion: OpenGateButton
funktion OpenGateButtonPushed (app, begivenhed)
global lukning
luk = 0;
ende
% Knap skubbet funktion: CloseGateButton
funktion CloseGateButtonPushed (app, begivenhed)
global åben
åben = 0;
ende
ende
% Appinitialisering og konstruktion
metoder (Adgang = privat)
% Opret UIFigure og komponenter
funktion createComponents (app)
% Opret UIFigure
app. UIFigure = uifigure;
app. UIFigure. Position = [100100640 480];
app. UIFigure. Name = 'UI -figur';
% Opret RailwaygatestatusLampLabel
app. RailwaygatestatusLampLabel = uilabel (app. UIFigure);
app. RailwaygatestatusLampLabel. HorizontalAlignment = 'right'; app. RailwaygatestatusLampLabel. Position = [464 422 110 22]; app. RailwaygatestatusLampLabel. Text = 'Jernbanestatus';
% Opret gateLamp
app.gateLamp = uilamp (app. UIFigure);
app.gateLamp. Position = [589 422 20 20];
app.gateLamp. Color = [0.9412 0.9412 0.9412];
% Opret OpenGateButton
app. OpenGateButton = uibutton (app. UIFigure, 'push');
app. OpenGateButton. ButtonPushedFcn = createCallbackFcn (app, @OpenGateButtonPushed, sand); app. OpenGateButton. Position = [474 359 100 22];
app. OpenGateButton. Text = 'Åbn port';
% Opret CloseGateButton
app. CloseGateButton = uibutton (app. UIFigure, 'push');
app. CloseGateButton. ButtonPushedFcn = createCallbackFcn (app, @CloseGateButtonPushed, true); app. CloseGateButton. Position = [474 285 100 22];
app. CloseGateButton. Text = 'Luk port';
% Opret UIAxes
app. UIAxes = uiaxes (app. UIFigure);
titel (app. UIAxes, 'Kamerafeed')
app. UIAxes. Position = [341 43 300 185];
% Opret EmergencyButtonStatusLampLabel
app. EmergencyButtonStatusLampLabel = uilabel (app. UIFigure); app. EmergencyButtonStatusLampLabel. HorizontalAlignment = 'right'; app. EmergencyButtonStatusLampLabel. Position = [97 323 142 22]; app. EmergencyButtonStatusLampLabel. Text = 'Nødstatus';
% Opret EmergencyButtonStatusLamp
app. EmergencyButtonStatusLamp = uilamp (app. UIFigure); app. EmergencyButtonStatusLamp. Position = [254 323 20 20];
% Opret UndernormalconditionsLabel
app. UndernormalconditionsLabel = uilabel (app. UIFigure);
app. UndernormalconditionsLabel. Position = [108 285 248 22];
app. UndernormalconditionsLabel. Text = 'Under normale forhold';
% Opret UIAxes2
app. UIAxes2 = uiaxes (app. UIFigure);
titel (app. UIAxes2, 'Togposition')
xlabel (app. UIAxes2, 'X Position')
ylabel (app. UIAxes2, 'Y Position')
app. UIAxes2. Box = 'on';
app. UIAxes2. XGrid = 'tændt';
app. UIAxes2. YGrid = 'on';
app. UIAxes2. Position = [18 43 300 185];
% Opret EF230Group6Label
app. EF230Group6Label = uilabel (app. UIFigure);
app. EF230Group6Label. HorizontalAlignment = 'center';
app. EF230Group6Label. FontSize = 28;
app. EF230Group6Label. FontWeight = 'fed';
app. EF230Group6Label. Position = [-4 401 379 64];
app. EF230Group6Label. Text = 'EF 230 Group 6';
% Opret IanAllishKellyBondIanDaffronLabel
app. IanAllishKellyBondIanDaffronLabel = uilabel (app. UIFigure); app. IanAllishKellyBondIanDaffronLabel. Position = [94 380 184 22]; app. IanAllishKellyBondIanDaffronLabel. Text = 'Ian Allish, Kelly Bond, Ian Daffron';
% Opret LoopsCompletedLabel
app. LoopsCompletedLabel = uilabel (app. UIFigure);
app. LoopsCompletedLabel. Position = [18 10 103 22];
app. LoopsCompletedLabel. Text = 'Sløjfer fuldført:';
% Opret etiket
app. Label = uilabel (app. UIFigure);
app. Label. Position = [120 10 178 22];
app. Label. Text = '####';
ende
ende
metoder (Adgang = offentlig)
% Konstruer app
funktion app = mikro
% Opret og konfigurer komponenter
createComponents (app)
% Registrer appen med App Designer
registerApp (app, app. UIFigure)
% Udfør startfunktionen
runStartupFcn (app, @startupFcn)
hvis nargout == 0
klar app
ende
ende
% Kode, der udføres før app -sletning
slet (app)
% Slet UIFigure, når appen slettes
slet (app. UIFigure)
ende
ende
ende
Trin 4: Sidste trin
Når koden er skrevet, og Raspberry Pi er blevet tilsluttet, skal servomotoren fastgøres til den 3-D trykte jernbanesporport, som den er vedhæftet på billedet ovenfor.
Nu er projektet færdigt. Tilslut hindbær PI til togsporet, og observer det nye system, der skaber sikrere jernbaneoverskæringer for både bilister og konduktører. Spil med systemet ved at interagere med GUI'en for at udløse fejlkasser, der er indført for at forhindre ulykker.
Det er slutningen på øvelsen, nyd dit nye Smart Train System!
Anbefalede:
Skift Tilpas et legetøj: WolVol Train Made Switch tilgængelig !: 7 trin
Switch Adapt a Toy: WolVol Train Made Switch Accessible !: Legetøjstilpasning åbner nye veje og skræddersyede løsninger, så børn med begrænsede motoriske evner eller udviklingshæmninger kan interagere med legetøj uafhængigt. I mange tilfælde er de børn, der har brug for det tilpassede legetøj, ikke i stand til at int
Steampunk Train: 5 trin (med billeder)
Steampunk Train: Jeg var så heldig at modtage en brugt kørestolsbase fra en ven. Jeg var nødt til at udskifte begge batterier for at få det til at fungere, men det var en lille pris at betale for sådan en alsidig propbygningsplatform. Jeg besluttede mig for
Træ Bluetooth -fjernbetjening til Lego Duplo Train: 3 trin (med billeder)
Træ Bluetooth -fjernbetjening til Lego Duplo Train: Mine børn elskede dette lille Lego Duplo -tog, især min yngste, der kæmper for at kommunikere sig selv med ord, så jeg ville bygge hende noget, der ville hjælpe hende med at lege med toget uafhængigt af voksne eller telefoner/tablets. Noget der
Train Crossing Monitor System: 5 trin (med billeder)
Train Crossing Monitor System: Denne instruktive vil lære dig, hvordan du bruger MatLab til at kode en Arduino til at styre en del af et jernbanesystem
Train Seat System: 4 trin (med billeder)
Train Seat System: I dag lavede vi et system, der kan implementeres i togsæder. Vi var nødt til at finde en irritation og lave en løsning på det. Vi besluttede, at vi ville lave et system, der fortæller dig, om der er plads til den togvogn, du befinder dig i. Intet er vigtigt