Innehållsförteckning:
Video: Smart Train System: 4 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:45
Designad för att öka säkerheten, förebygga olyckor och öka den positiva och produktiva responsen för att hjälpa om olyckor inträffar.
Steg 1: Delar och material
Bilderna ovan är placerade i följande ordnings lista:
Reservdelar
1) Ett hallon PI 3 - modell B
2) Ett brödbräda
3) Kablar (uppifrån och ner) - En ström, ett Ethernet, en adapter
4) En servomotor
5) En 3D -utskriven järnvägsport
6) Två lysdioder (helst rött och grönt)
7) En tryckknapp
8) Tio hopptrådar
9) Fyra motstånd
10) Bärbar eller stationär dator med MATLAB
Steg 2: Konfiguration
Ovan är bilder på konfigurationen från flera vinklar:
Stiftplatser (gemener följt av ett radnummer) listas nedan i ordning efter det aktuella flödet.
Trådar:
j19 till i47
j8 till b50
b5 till Servo
c6 till Servo
b7 till servo
a13 till j7
a17 till LED
LED till a37
e40 till j20
j53 till j18
j7 till LED
LED till j6
Knapp:
e54 till h51
Motstånd:
d40 till b37
c50 till d54
i51 till j47
Steg 3: Kod och logik
Vårt tågsystems mål är att öka säkerheten och minska risken för potentiellt dödliga olyckor vid järnvägsövergångar. För att uppnå detta har vårt system ett tågvarningssystem för förare, en fysisk barriär som sänks för att hindra bilar från att korsa spåret och en reservknapp för nödledaren att trycka på om tidig varningssystem misslyckas.
GUI Conductor Operating System:
GUI, som visas ovan, skapades för användning av konduktören när de kör tåget genom spårområden som har biltrafikjärnvägsövergångar.
I det övre högra hörnet finns det ett ljus som meddelar konduktören om en kommande järnvägsövergångsport är stängd och låter konduktören öppna eller stänga grinden vid behov. Därunder visas flödet från kameror som tåget passerar. I nedre vänstra hörnet är tågets läge kontinuerligt ritat på en graf och under grafen anges antalet varv som tåget hade genomfört på en dag. Ovanför positionsdiagrammet finns en nödknapp och statusuttalande. Detta gör att konduktören kan signalera om en nödsituation om det finns en bil på banan eller om säkerhetsgrinden inte fungerar som den ska.
Koda:
classdef micro <matlab.apps. AppBase % Egenskaper som motsvarar appkomponenter
fastigheter (Access = public)
UIFigure matlab.ui. Figur
RailwaygatestatusLampLabel matlab.ui.control. Label
gateLamp matlab.ui.control. Lamp
OpenGateButton matlab.ui.control. Button
CloseGateButton matlab.ui.control. Button
UIAxes matlab.ui.control. UIAxes
EmergencyButtonStatusLampLabel matlab.ui.control. Label
EmergencyButtonStatusLamp matlab.ui.control. Lamp
Undernormala villkorLabel matlab.ui.control. Label
UIAxes2 matlab.ui.control. UIAxes
EF230Group6Label matlab.ui.control. Label
IanAllishKellyBondIanDaffronLabel matlab.ui.control. Label
LoopsCompletedLabel matlab.ui.control. Label
Etikett matlab.ui.control. Label
slutet
fastigheter (Access = privat)
räknare int16
slutet
metoder (Access = public)
funktionstimerCallback (app, src, händelse)
app. Temp. Text = int2str (app.counter);
app.counter = app.counter + 1;
%kallar alla variabler programmet behöver - - - - - - - - - - - - - -
globalt rpi
globala s
global öppen
global stängning
global kamera
globala m
globala ems
global t_count
%------------------------- Tågarmsektion --------------------- ---------
om öppen == 0
writePosition (s, 50)
app.gateLamp. Color = 'grön';
slutet
om nära == 0
writePosition (s, 120)
app.gateLamp. Color = 'röd';
slutet
%---------------------- Rörelsedetektering via kamera -----------------------
medan det är sant
img = ögonblicksbild (kamera);
bild (img);
app. UIAxes (ritat)
slutet
%---------------------- Arm öppna/stäng ----------------------- --------------
om readDigitalPin (rpi, 20)> 1 %läser stift 17 (knapp) och söker efter signal
för i = 40:.5: 150 %höjer bron
writePosition (s, i)
slutet
för i = 1:10 %slingor som blinkar rött ljus x antal gånger
writeDigitalPin (rpi, 13, 1)
paus (.5)
writeDigitalPin (rpi, 13, 0)
paus (.5)
slutet
writePosition (s, 50)%lägger ner porten
slutet
%-------------------- Mobiltelefonsupport/tomt ------------------------ -
m. AccelerationSensorEnabled = 1
m.loggning = 1
data = nollor (200, 1); %initiera data för rullande tomt
figur (app. UIAxes2)
p = plot (data)
axel ([xbounda, ybounds])
paus (1)
tic
medan toc <30 %körs i 30 sekunder
[a, ~] = accellog (m);
om längd (a)> 200
data = a (end-199: end, 3);
annan
data (1: längd (a)) = a (:, 3);
slutet
%rita om tomten
p. YData = data;
drawow
slutet
%------------------ Plötslig pixeländring ---------------------------- ------
x1 = img; % läser av kameran från pi
red_mean = medelvärde (medelvärde (x1 (:,:, 1))); % läser den genomsnittliga mängden röda pixlar
green_mean = medelvärde (medelvärde (x1 (:,:, 2))); % läser den genomsnittliga mängden gröna pixlar
blue_mean = medelvärde (medelvärde (x1 (:,:, 3))); % läser den genomsnittliga mängden blå pixlar
om red_mean> 150 && green_mean> 150 && blue_mean> 150
t_count = t_count + 1;
slutet
app. LoopsCompletedLabel. Text = num2str (t_count)
%------------------ Knapp EMS-programmering ---------------------------- ---
configurePin (rpi, 12, 'DigitalOutput'); %anger ledstiftet, stift 16, som en utgång
configurePin (rpi, 16, 'DigitalInput'); %anger knappstiftet, stift 24, som en ingång
buttonPressed = readDigitalPin (rpi, 16); % Läser knapptryckningsvärdet på stift 16
if buttonPressed == 1
medan buttonPressed == 1
writeDigitalPin (rpi, 12, 1)
buttonunPressed = writeDigitalPin (rpi, 12, 0); %
end % Avslutar loop medan ‘ButtonPressed == 1’
slutet
writeDigitalPin (rpi, 16, 0) %Ställer in LED till av när knappen inte längre trycks in setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % e -postkonto att skicka från setpref ('Internet', 'SMTP_Username', '[email protected]'); % avsändarnamn användarnamn setpref ('Internet', 'SMTP_Password', 'efgroup6'); % Avsändares lösenord
rekvisita = 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!', 'Ledaren har aktiverat den manuella överstyrningsomkopplaren och begär omedelbart svar!')
app. UndernormalconditionsLabel. Text = ems
slutet
slutet
%app. Label_4. Text = num2str (curr_temp);
metoder (åtkomst = privat)
% Kod som körs efter komponentskapande
funktion startupFcn (app)
%---------- Alla variabler som behövs för denna funktion --------------------
global rpi %arduino
rpi = raspi ('169.254.0.2', 'pi', 'hallon');
global s %servo
s = servo (rpi, 17, 'MinPulseDuration', 5e-4, 'MaxPulseDuration', 2.5e-3);
global öppen
öppen = 1;
globalt stängt
stängd = 1;
global kamera
cam = kamerabord (rpi);
globala m
m = mobiledev;
globala ems
ems = 'En nödsituation har anmälts till EMS';
global t_count
t_count = 0;
anslutning på %lösenord är EFGroup6
% Timerfunktion för slinga --------------------------------
app.counter = 0;
t = timer (…
'TimerFcn', @app.timerCallback, …
'StartDelay', 1, … 'Period', 1, …
'ExecutionMode', 'fixedSpacing', …
'TasksToExecute', inf);
start (t);
slutet
% Återuppringningsfunktion
funktion ManualOverrideSwitchValueChanged (app, händelse)
slutet
% Button push -funktion: OpenGateButton
funktion OpenGateButtonPushed (app, händelse)
global stängning
stäng = 0;
slutet
% Button pushed function: CloseGateButton
funktion CloseGateButtonPushed (app, händelse)
global öppen
öppen = 0;
slutet
slutet
% Appinitialisering och konstruktion
metoder (åtkomst = privat)
% Skapa UIFigure och komponenter
function createComponents (app)
% Skapa UIFigure
app. UIFigure = uifigure;
app. UIFigure. Position = [100100640 480];
app. UIFigure. Name = 'UI -figur';
% Skapa RailwaygatestatusLampLabel
app. RailwaygatestatusLampLabel = uilabel (app. UIFigure);
app. RailwaygatestatusLampLabel. HorizontalAlignment = 'right'; app. RailwaygatestatusLampLabel. Position = [464 422 110 22]; app. RailwaygatestatusLampLabel. Text = 'Järnvägsportstatus';
% Skapa gateLamp
app.gateLamp = uilamp (app. UIFigure);
app.gateLamp. Position = [589 422 20 20];
app.gateLamp. Color = [0.9412 0.9412 0.9412];
% Skapa OpenGateButton
app. OpenGateButton = uibutton (app. UIFigure, 'push');
app. OpenGateButton. ButtonPushedFcn = createCallbackFcn (app, @OpenGateButtonPushed, true); app. OpenGateButton. Position = [474 359 100 22];
app. OpenGateButton. Text = 'Öppen grind';
% Skapa CloseGateButton
app. CloseGateButton = uibutton (app. UIFigure, 'push');
app. CloseGateButton. ButtonPushedFcn = createCallbackFcn (app, @CloseGateButtonPushed, true); app. CloseGateButton. Position = [474 285 100 22];
app. CloseGateButton. Text = 'Stäng port';
% Skapa UIAxes
app. UIAxes = uiaxes (app. UIFigure);
titel (app. UIAxes, 'Kameraflöde')
app. UIAxes. Position = [341 43 300 185];
% Skapa EmergencyButtonStatusLampLabel
app. EmergencyButtonStatusLampLabel = uilabel (app. UIFigure); app. EmergencyButtonStatusLampLabel. HorizontalAlignment = 'right'; app. EmergencyButtonStatusLampLabel. Position = [97 323 142 22]; app. EmergencyButtonStatusLampLabel. Text = 'Nödknappsstatus';
% Skapa EmergencyButtonStatusLamp
app. EmergencyButtonStatusLamp = uilamp (app. UIFigure); app. EmergencyButtonStatusLamp. Position = [254 323 20 20];
% Skapa UndernormalconditionsLabel
app. UndernormalconditionsLabel = uilabel (app. UIFigure);
app. UndernormalconditionsLabel. Position = [108 285 248 22];
app. UndernormalconditionsLabel. Text = 'Under normala förhållanden';
% Skapa UIAxes2
app. UIAxes2 = uiaxes (app. UIFigure);
titel (app. UIAxes2, 'tågposition')
xlabel (app. UIAxes2, 'X Position')
ylabel (app. UIAxes2, 'Y Position')
app. UIAxes2. Box = 'on';
app. UIAxes2. XGrid = 'on';
app. UIAxes2. YGrid = 'on';
app. UIAxes2. Position = [18 43 300 185];
% Skapa EF230Group6Label
app. EF230Group6Label = uilabel (app. UIFigure);
app. EF230Group6Label. HorizontalAlignment = 'center';
app. EF230Group6Label. FontSize = 28;
app. EF230Group6Label. FontWeight = 'fet';
app. EF230Group6Label. Position = [-4 401 379 64];
app. EF230Group6Label. Text = 'EF 230 Group 6';
% Skapa IanAllishKellyBondIanDaffronLabel
app. IanAllishKellyBondIanDaffronLabel = uilabel (app. UIFigure); app. IanAllishKellyBondIanDaffronLabel. Position = [94 380 184 22]; app. IanAllishKellyBondIanDaffronLabel. Text = 'Ian Allish, Kelly Bond, Ian Daffron';
% Skapa LoopsCompletedLabel
app. LoopsCompletedLabel = uilabel (app. UIFigure);
app. LoopsCompletedLabel. Position = [18 10 103 22];
app. LoopsCompletedLabel. Text = 'Slingor slutförda:';
% Skapa etikett
app. Label = uilabel (app. UIFigure);
app. Label. Position = [120 10 178 22];
app. Label. Text = '####';
slutet
slutet
metoder (Access = public)
% Konstruera app
funktion app = mikro
% Skapa och konfigurera komponenter
createComponents (app)
% Registrera appen med App Designer
registerApp (app, app. UIFigure)
% Utför startfunktionen
runStartupFcn (app, @startupFcn)
om nargout == 0
tydlig app
slutet
slutet
% Kod som körs innan app tas bort
ta bort (app)
Ta bort UIFigure när appen raderas
radera (app. UIFigure)
slutet
slutet
slutet
Steg 4: Sista steget
När koden har skrivits och Raspberry Pi har anslutits kopplar du servomotorn till den 3-D-tryckta järnvägsspårporten som den är bifogad på bilden ovan.
Nu är projektet klart. Anslut hallon PI till tågspåret och observera det nya systemet som skapar säkrare järnvägsövergångar för både bilförare och konduktörer. Lek med systemet genom att interagera med GUI för att utlösa misslyckade kassaskåp som är inställda för att förhindra olyckor.
Det är slutet på handledningen, njut av ditt nya smarta tågsystem!
Rekommenderad:
Switch-Adapt Toys: a Steam Train Toy Made Accessible !: 7 Steg (med bilder)
Switch-Adapt Toys: a Steam Train Toy Made Accessible !: Leksaksanpassning öppnar nya vägar och skräddarsydda lösningar för att låta barn med begränsade motoriska förmågor eller utvecklingsstörningar interagera med leksaker självständigt. I många fall kan barnen som behöver anpassade leksaker inte
Switch Anpassa en leksak: WolVol Train Made Switch tillgänglig: 7 steg
Switch Adapt a Toy: WolVol Train Made Switch Accessible !: Leksaksanpassning öppnar nya vägar och skräddarsydda lösningar för att låta barn med begränsade motoriska förmågor eller utvecklingsstörningar interagera med leksaker självständigt. I många fall kan barnen som behöver anpassade leksaker inte
Ge Thomas the Train förmågan att köra på natten: 5 steg
Ge Thomas tåget förmågan att köra på natten: Den här instruerbara lär dig hur man skapar ett system med ljus för att varna passagerare när ett tåg närmar sig och hur man får ett meddelande att visas på en bärbar dator när tåget är vid station. Ett ljud för när tåget passerar statyn
Train Crossing Monitor System: 5 steg (med bilder)
Train Crossing Monitor System: Denna instruerbara lär dig hur du använder MatLab för att koda en Arduino för att styra en del av ett järnvägssystem
Train Seat System: 4 Steps (med bilder)
Train Seat System: Idag har vi gjort ett system som kan implementeras i tågstolar. Vi var tvungna att hitta en irritation och göra en lösning för det. Vi bestämde att vi skulle göra ett system som berättar om det finns plats i den tågvagn du befinner dig i. Inget är viktigt