Πίνακας περιεχομένων:
Βίντεο: Έξυπνο σύστημα αμαξοστοιχίας: 4 βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:36
Σχεδιασμένο για να αυξήσει την ασφάλεια, να αποτρέψει ατυχήματα και να αυξήσει τη θετική και παραγωγική ανταπόκριση για βοήθεια σε περίπτωση ατυχήματος.
Βήμα 1: Μέρη και υλικά
Οι παραπάνω εικόνες τοποθετούνται με τη σειρά της Λίστας μερών παρακάτω:
Λίστα μερών
1) One Raspberry PI 3 - Model B
2) Ένα Breadboard
3) Καλώδια (από πάνω προς τα κάτω) - One Power, One Ethernet, One Adapter
4) Ένα σερβοκινητήρα
5) Μία τρισδιάστατη εκτυπωμένη πύλη σιδηροδρόμου
6) Δύο LED (κατά προτίμηση κόκκινο και πράσινο)
7) Ένα κουμπί
8) Δέκα καλώδια βραχυκυκλωτήρων
9) Τέσσερις αντιστάσεις
10) Laptop ή Desktop με MATLAB
Βήμα 2: Διαμόρφωση
Παρακάτω είναι εικόνες της διαμόρφωσης από πολλές γωνίες:
Οι θέσεις καρφιτσών (πεζά γράμματα ακολουθούμενα από αριθμό σειράς) παρατίθενται παρακάτω με τη σειρά, ακολουθώντας την τρέχουσα ροή.
Σύρματα:
j19 έως i47
j8 έως b50
b5 προς Servo
c6 προς Servo
b7 σε σερβο
a13 έως j7
a17 έως LED
LED έως a37
e40 έως j20
j53 έως j18
j7 σε LED
LED έως j6
Κουμπί:
e54 έως h51
Αντιστάσεις:
d40 έως b37
c50 έως d54
i51 έως j47
Βήμα 3: Κώδικας και λογική
Ο στόχος του συστήματος των τρένων μας είναι να αυξήσει την ασφάλεια και να μειώσει τον κίνδυνο δυνητικά θανατηφόρων ατυχημάτων στις διασταυρώσεις σιδηροδρόμων. Για να επιτευχθεί αυτό, το σύστημά μας διαθέτει σύστημα προειδοποίησης αμαξοστοιχίας για οδηγούς, φυσικό φράγμα που χαμηλώνει για να αποτρέψει τη διέλευση αυτοκινήτων από την πίστα και εφεδρικό κουμπί έκτακτης ανάγκης για να πατήσει ο αγωγός σε περίπτωση βλάβης του συστήματος έγκαιρης προειδοποίησης.
Λειτουργικό σύστημα GUI Conductor:
Το GUI, που φαίνεται παραπάνω, δημιουργήθηκε για τη χρήση του αγωγού καθώς οδηγούν το τρένο μέσα από περιοχές σιδηροτροχιών που έχουν διασταυρώσεις σιδηροδρόμων.
Στην επάνω δεξιά γωνία, υπάρχει ένα φως που ειδοποιεί τον αγωγό εάν μια επερχόμενη πύλη διέλευσης σιδηροδρόμου είναι κλειστή και επιτρέπει στον αγωγό να ανοίξει ή να κλείσει την πύλη εάν χρειαστεί. Κάτω από αυτό, εμφανίζεται η ροή από τις κάμερες που περνά το τρένο. Στην κάτω αριστερή γωνία, η θέση του τρένου απεικονίζεται συνεχώς σε ένα γράφημα και κάτω από το γράφημα, αναφέρεται ο αριθμός των γύρων που είχε ολοκληρώσει το τρένο σε μια ημέρα. Πάνω από το γράφημα θέσης, Υπάρχει κουμπί έκτακτης ανάγκης και δήλωση κατάστασης. Αυτό επιτρέπει στον αγωγό να δίνει σήμα έκτακτης ανάγκης εάν υπάρχει αυτοκίνητο στην πίστα ή η πύλη ασφαλείας δεν λειτουργεί σωστά.
Κώδικας:
classdef micro <matlab.apps. AppBase % Ιδιότητες που αντιστοιχούν σε στοιχεία εφαρμογής
ιδιότητες (Πρόσβαση = δημόσιο)
UIFigure matlab.ui. Figure
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
UndernormalconditionsLabel matlab.ui.control. Label
UIAxes2 matlab.ui.control. UIAxes
EF230Group6Label matlab.ui.control. Label
IanAllishKellyBondIanDaffronLabel matlab.ui.control. Label
LoopsCompletedLabel matlab.ui.control. Label
Ετικέτα matlab.ui.control. Label
τέλος
ιδιότητες (Πρόσβαση = ιδιωτικό)
μετρητής int16
τέλος
μέθοδοι (Πρόσβαση = δημόσια)
χρονόμετρο λειτουργίας Επιστροφή (εφαρμογή, src, συμβάν)
app. Temp. Text = int2str (app.counter);
app.counter = app.counter + 1;
%καλούν όλες τις μεταβλητές που χρειάζεται το πρόγραμμα - - - - - - - - - - - - - - -
παγκόσμιο rpi
global s
παγκόσμιο ανοιχτό
παγκόσμιο κλείσιμο
παγκόσμια κάμερα
παγκόσμιο m
παγκόσμια ems
παγκόσμια t_count
%------------------------- Τμήμα βραχίονα αμαξοστοιχίας --------------------- ---------
αν ανοίξει == 0
writePosition (s, 50)
app.gateLamp. Color = 'πράσινο';
τέλος
αν κλείσει == 0
writePosition (s, 120)
app.gateLamp. Color = 'κόκκινο';
τέλος
%---------------------- Ανίχνευση κίνησης μέσω κάμερας -----------------------
ενώ ισχύει
img = στιγμιότυπο (κάμερα);
εικόνα (img)?
app. UIAxes (drawnow)
τέλος
%---------------------- Βραχίονας άνοιγμα/κλείσιμο ----------------------- --------------
αν το readDigitalPin (rpi, 20)> 1 %διαβάζει το pin 17 (κουμπί) και ελέγχει για σήμα
για i = 40:.5: 150 %ανεβάζει γέφυρα
writePosition (s, i)
τέλος
για i = 1:10 %βρόχους που αναβοσβήνουν κόκκινο φως x πολλές φορές
writeDigitalPin (rpi, 13, 1)
παύση (.5)
writeDigitalPin (rpi, 13, 0)
παύση (.5)
τέλος
writePosition (s, 50)%put gate down
τέλος
%-------------------- Υποστήριξη κινητού τηλεφώνου/Οικόπεδο ------------------------ -
m. AccelerationSensorEnabled = 1
m.logging = 1
δεδομένα = μηδενικά (200, 1); %intialize δεδομένων για κυλιόμενο οικόπεδο
σχήμα (app. UIAxes2)
p = γράφημα (δεδομένα)
άξονας ([xbounda, ybounds])
παύση (1)
σύσπαση
ενώ το toc <30 %τρέχει για 30 δευτερόλεπτα
[a, ~] = accellog (m);
αν μήκος (α)> 200
δεδομένα = α (τέλος-199: τέλος, 3);
αλλού
δεδομένα (1: μήκος (α)) = α (:, 3);
τέλος
%ανασχεδιασμός γραφήματος
p. YData = data?
τραβήξτε τώρα
τέλος
%------------------ Ξαφνική αλλαγή Pixel -------------------------------- ------
x1 = img; % διαβάζει την κάμερα απενεργοποιημένη από το pi
red_mean = μέσο (μέσος όρος (x1 (:,:, 1))); % διαβάζει τη μέση ποσότητα κόκκινων εικονοστοιχείων
green_mean = μέσο όρο (μέσος όρος (x1 (:,,, 2))); % διαβάζει τη μέση ποσότητα πράσινων εικονοστοιχείων
blue_mean = μέσος όρος (μέσος όρος (x1 (:,,, 3))); % διαβάζει τη μέση ποσότητα μπλε εικονοστοιχείων
αν red_mean> 150 && green_mean> 150 && blue_mean> 150
t_count = t_count + 1;
τέλος
app. LoopsCompletedLabel. Text = num2str (t_count)
%------------------ Προγραμματισμός κουμπιού EMS ---------------------------- ---
configurePin (rpi, 12, 'DigitalOutput'); %ορίζει τον πείρο led, τον πείρο 16, ως έξοδο
configurePin (rpi, 16, 'DigitalInput'); %ορίζει την είσοδο του κουμπιού, την καρφίτσα 24, ως είσοδο
buttonPressed = readDigitalPin (rpi, 16); % Διαβάζει την τιμή πατήματος κουμπιού στο pin 16
αν buttonPressed == 1
while buttonPressed == 1
writeDigitalPin (rpi, 12, 1)
buttonunPressed = writeDigitalPin (rpi, 12, 0); %
τέλος % Τερματίζει τον βρόχο "while buttonPressed == 1"
τέλος
writeDigitalPin (rpi, 16, 0) %Ορίζει το led στο off όταν δεν πατάτε πλέον το κουμπί setpref («Internet», «SMTP_Server», «smtp.gmail.com»). setpref ("Διαδίκτυο", "E_mail", "[email protected]"); % λογαριασμός αλληλογραφίας προς αποστολή από το setpref ("Διαδίκτυο", "SMTP_Username", "[email protected]"). % username setpref username ('Internet', 'SMTP_Password', 'efgroup6'); % Κωδικός πρόσβασης αποστολέων
props = 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] ',' Emergency Status! ',' Ο αγωγός έχει ενεργοποιήσει τον χειροκίνητο διακόπτη παράκαμψης, ζητώντας άμεση απάντηση! ')
app. UndernormalconditionsLabel. Text = ems
τέλος
τέλος
%app. Label_4. Text = num2str (curr_temp);
μέθοδοι (Πρόσβαση = ιδιωτικό)
% Κώδικας που εκτελείται μετά τη δημιουργία εξαρτήματος
λειτουργία startupFcn (εφαρμογή)
%---------- Όλες οι μεταβλητές που απαιτούνται για αυτήν τη συνάρτηση --------------------
παγκόσμιο rpi %arduino
rpi = raspi («169.254.0.2», «pi», «βατόμουρο»);
παγκόσμιο s %σερβο
s = servo (rpi, 17, 'MinPulseDuration', 5e-4, 'MaxPulseDuration', 2.5e-3);
παγκόσμιο ανοιχτό
άνοιγμα = 1;
παγκόσμιο κλειστό
κλειστό = 1?
παγκόσμια κάμερα
cam = κάμερα (rpi);
παγκόσμιο m
m = mobiledev;
παγκόσμια ems
ems = 'Έχει αναφερθεί έκτακτη ανάγκη, ειδοποίηση EMS';
παγκόσμια t_count
t_count = 0;
Ο σύνδεσμος στο %password είναι EFGroup6
% Λειτουργία χρονοδιακόπτη για βρόχο ------------------------------------
app.counter = 0;
t = χρονόμετρο (…
'TimerFcn', @app.timerCallback,…
«StartDelay», 1,… «Period», 1,…
'ExecutionMode', 'fixedSpacing',…
'TasksToExecute', inf);
έναρξη (t)?
τέλος
% Λειτουργία επανάκλησης
λειτουργία ManualOverrideSwitchValueChanged (εφαρμογή, συμβάν)
τέλος
% Λειτουργία ώθησης κουμπιού: OpenGateButton
λειτουργία OpenGateButtonPushed (εφαρμογή, συμβάν)
παγκόσμιο κλείσιμο
κλείσιμο = 0;
τέλος
% Λειτουργία ώθησης κουμπιού: CloseGateButton
λειτουργία CloseGateButtonPushed (εφαρμογή, συμβάν)
παγκόσμιο ανοιχτό
άνοιγμα = 0;
τέλος
τέλος
% Εκκίνηση και κατασκευή εφαρμογής
μέθοδοι (Πρόσβαση = ιδιωτικό)
% Δημιουργία UIFigure και στοιχείων
λειτουργία createComponents (εφαρμογή)
% Δημιουργία UIFigure
app. UIFigure = uifigure;
app. UIFigure. Position = [100 100 640 480];
app. UIFigure. Name = 'Εικόνα διεπαφής χρήστη';
% Δημιουργία RailwaygatestatusLampLabel
app. RailwaygatestatusLampLabel = uilabel (app. UIFigure);
app. RailwaygatestatusLampLabel. HorizontalAlignment = 'δεξιά'; app. RailwaygatestatusLampLabel. Position = [464 422 110 22]; app. RailwaygatestatusLampLabel. Text = 'Κατάσταση πύλης σιδηροδρόμου';
% Δημιουργία gateLamp
app.gateLamp = uilamp (app. UIFigure);
app.gateLamp. Position = [589 422 20 20];
app.gateLamp. Color = [0,9412 0,9412 0,9412];
% Δημιουργία κουμπιού OpenGateButton
app. OpenGateButton = uibutton (app. UIFigure, 'push');
app. OpenGateButton. ButtonPushedFcn = createCallbackFcn (app, @OpenGateButtonPushed, true); app. OpenGateButton. Position = [474 359 100 22];
app. OpenGateButton. Text = 'Άνοιγμα Πύλης';
% Δημιουργία CloseGateButton
app. CloseGateButton = uibutton (app. UIFigure, 'push');
app. CloseGateButton. ButtonPushedFcn = createCallbackFcn (app, @CloseGateButtonPushed, true); app. CloseGateButton. Position = [474 285 100 22];
app. CloseGateButton. Text = 'Κλείσιμο πύλης';
% Δημιουργία UIAxes
app. UIAxes = uiaxes (app. UIFigure);
τίτλος (app. UIAxes, 'Camera Feed')
app. UIAxes. Position = [341 43 300 185];
% Δημιουργία EmergencyButtonStatusLampLabel
app. EmergencyButtonStatusLampLabel = uilabel (app. UIFigure); app. EmergencyButtonStatusLampLabel. HorizontalAlignment = 'δεξιά'; app. EmergencyButtonStatusLampLabel. Position = [97 323 142 22]; app. EmergencyButtonStatusLampLabel. Text = 'Κατάσταση κουμπιού έκτακτης ανάγκης';
% Δημιουργία EmergencyButtonStatusLamp
app. EmergencyButtonStatusLamp = uilamp (app. UIFigure); app. EmergencyButtonStatusLamp. Position = [254 323 20 20];
% Δημιουργία ετικέτας UndernormalconditionsLabel
app. UndernormalconditionsLabel = uilabel (app. UIFigure);
app. UndernormalconditionsLabel. Position = [108 285 248 22];
app. UndernormalconditionsLabel. Text = 'Υπό κανονικές συνθήκες';
% Δημιουργία UIAxes2
app. UIAxes2 = uiaxes (app. UIFigure);
τίτλος (app. UIAxes2, 'Position of Train')
xlabel (app. UIAxes2, 'X Position')
ylabel (app. UIAxes2, "Y Position")
app. UIAxes2. Box = "ενεργοποιημένο";
app. UIAxes2. XGrid = "ενεργοποιημένο";
app. UIAxes2. YGrid = "ενεργοποιημένο";
app. UIAxes2. Position = [18 43 300 185];
% Δημιουργία Ετικέτας EF230Group6Label
app. EF230Group6Label = uilabel (app. UIFigure);
app. EF230Group6Label. HorizontalAlignment = 'κέντρο';
app. EF230Group6Label. FontSize = 28;
app. EF230Group6Label. FontWeight = 'έντονη';
app. EF230Group6Label. Position = [-4 401 379 64];
app. EF230Group6Label. Text = 'Ομάδα EF 230 6';
% Δημιουργία IanAllishKellyBondIanDaffronLabel
app. IanAllishKellyBondIanDaffronLabel = uilabel (app. UIFigure); app. IanAllishKellyBondIanDaffronLabel. Position = [94 380 184 22]; app. IanAllishKellyBondIanDaffronLabel. Text = 'Ian Allish, Kelly Bond, Ian Daffron';
% Δημιουργία LoopsCompletedLabel
app. LoopsCompletedLabel = uilabel (app. UIFigure);
app. LoopsCompletedLabel. Position = [18 10 103 22];
app. LoopsCompletedLabel. Text = 'Ολοκληρώθηκαν οι βρόχοι:';
% Δημιουργία ετικέτας
app. Label = uilabel (app. UIFigure);
app. Label. Position = [120 10 178 22];
app. Label. Text = '####';
τέλος
τέλος
μέθοδοι (Πρόσβαση = δημόσια)
% Κατασκευή εφαρμογής
app app = micro
% Δημιουργία και διαμόρφωση στοιχείων
createComponents (εφαρμογή)
% Εγγραφή της εφαρμογής στο App Designer
registerApp (εφαρμογή, εφαρμογή. UIFigure)
% Εκτέλεση της λειτουργίας εκκίνησης
runStartupFcn (εφαρμογή, @startupFcn)
αν nargout == 0
καθαρή εφαρμογή
τέλος
τέλος
% Κωδικός που εκτελείται πριν από τη διαγραφή της εφαρμογής
διαγραφή (εφαρμογή)
% Διαγραφή UIFigure όταν διαγράφεται η εφαρμογή
διαγραφή (app. UIFigure)
τέλος
τέλος
τέλος
Βήμα 4: Τελικό βήμα
Μόλις γραφτεί ο κωδικός και συνδεθεί το Raspberry Pi, συνδέστε τον σερβοκινητήρα στην τρισδιάστατη εκτυπωμένη πύλη του σιδηροδρομικού σιδηροδρόμου όπως είναι προσαρτημένη στην παραπάνω εικόνα.
Τώρα, το έργο έχει ολοκληρωθεί. Συνδέστε το PI βατόμουρου στη γραμμή του τρένου και παρατηρήστε το νέο σύστημα που δημιουργεί ασφαλέστερες διαβάσεις σιδηροδρόμων τόσο για τους οδηγούς αυτοκινήτων όσο και για τους αγωγούς. Παίξτε με το σύστημα αλληλεπιδρώντας με το GUI για να ενεργοποιήσετε τα χρηματοκιβώτια αποτυχίας που έχουν δημιουργηθεί για την πρόληψη ατυχημάτων.
Αυτό είναι το τέλος του σεμιναρίου, απολαύστε το νέο σας Smart Train System!
Συνιστάται:
Έξυπνο κατανεμημένο σύστημα παρακολούθησης καιρού IoT με χρήση NodeMCU: 11 βήματα
Smart Distributed IoT Weather Monitoring System Using NodeMCU: Μπορεί όλοι να γνωρίζετε τον παραδοσιακό μετεωρολογικό σταθμό. αλλά έχετε αναρωτηθεί ποτέ πώς λειτουργεί στην πραγματικότητα; Δεδομένου ότι ο παραδοσιακός μετεωρολογικός σταθμός είναι δαπανηρός και ογκώδης, η πυκνότητα αυτών των σταθμών ανά μονάδα επιφάνειας είναι πολύ μικρότερη, γεγονός που συμβάλλει στην
Δημιουργήστε ένα έξυπνο σύστημα ελέγχου σπιτιού στο STONE HMI Disp: 23 Βήματα
Δημιουργήστε ένα έξυπνο σύστημα ελέγχου σπιτιού στο STONE HMI Disp: Εισαγωγή έργου Το παρακάτω σεμινάριο σας δείχνει πώς να χρησιμοποιήσετε τη μονάδα οθόνης αφής STONE STVC050WT-01 για να φτιάξετε ένα απλό σύστημα ελέγχου οικιακών συσκευών
Έξυπνο σύστημα στάθμευσης βασισμένο στο IoT χρησιμοποιώντας NodeMCU ESP8266: 5 βήματα
Έξυπνο σύστημα στάθμευσης βασισμένο στο IoT χρησιμοποιώντας το NodeMCU ESP8266: Στις μέρες μας η εξεύρεση χώρων στάθμευσης σε πολυσύχναστες περιοχές είναι πολύ δύσκολη και δεν υπάρχει σύστημα για να λάβετε τις λεπτομέρειες της διαθεσιμότητας στάθμευσης στο διαδίκτυο. Φανταστείτε αν μπορείτε να λάβετε πληροφορίες διαθεσιμότητας θέσης στάθμευσης στο τηλέφωνό σας και δεν έχετε περιαγωγή για έλεγχο
Έξυπνο Ξυπνητήρι: Ένα Έξυπνο Ξυπνητήρι Με Raspberry Pi: 10 Βήματα (με Εικόνες)
Έξυπνο Ξυπνητήρι: Ένα Έξυπνο Ξυπνητήρι Κατασκευασμένο Με Βατόμουρο Π: Θέλατε ποτέ ένα έξυπνο ρολόι; Αν ναι, αυτή είναι η λύση για εσάς! Έφτιαξα το Smart Alarm Clock, αυτό είναι ένα ρολόι που μπορείτε να αλλάξετε την ώρα αφύπνισης σύμφωνα με τον ιστότοπο. Όταν χτυπήσει το ξυπνητήρι, θα ακουστεί ένας ήχος (βομβητής) και 2 φώτα θα
Αυτοματοποιημένος κύκλος αντίστροφης αμαξοστοιχίας χρησιμοποιώντας Arduino: 10 βήματα (με εικόνες)
Αυτοματοποιημένος κύκλος αντίστροφης αμαξοστοιχίας χρησιμοποιώντας Arduino: Η δημιουργία αντίστροφων βρόχων μπορεί να βοηθήσει στα μοντέλα των διατάξεων αμαξοστοιχιών να αλλάξουν την κατεύθυνση των τρένων, κάτι που δεν μπορεί να γίνει με πικάπ. Με αυτόν τον τρόπο, μπορείτε να δημιουργήσετε διατάξεις μονής διαδρομής με αντίστροφο βρόχο σε κάθε άκρο για να τρέχετε τρένα χωρίς καμία παύση ή διακοπή