Mục lục:

Hệ thống tàu thông minh: 4 bước
Hệ thống tàu thông minh: 4 bước

Video: Hệ thống tàu thông minh: 4 bước

Video: Hệ thống tàu thông minh: 4 bước
Video: Hệ thống giám sát thông minh, mở van chỉ bằng 1 cái nhấp chuột || Viễn Dương TV 2024, Tháng mười một
Anonim
Hệ thống tàu thông minh
Hệ thống tàu thông minh

Được thiết kế để tăng tính an toàn, ngăn ngừa tai nạn và tăng phản ứng tích cực và hiệu quả để giúp đỡ nếu tai nạn xảy ra.

Bước 1: Các bộ phận và vật liệu

Bộ phận và Vật liệu
Bộ phận và Vật liệu
Bộ phận và Vật liệu
Bộ phận và Vật liệu
Bộ phận và Vật liệu
Bộ phận và Vật liệu
Bộ phận và Vật liệu
Bộ phận và Vật liệu

Các hình ảnh trên được đặt theo thứ tự của Danh sách các bộ phận bên dưới:

Danh sách các bộ phận

1) Một Raspberry PI 3 - Mẫu B

2) Một bảng mạch

3) Cáp (từ trên xuống dưới) - Một nguồn, một Ethernet, một bộ điều hợp

4) Một động cơ Servo

5) Một cổng đường sắt in 3D

6) Hai đèn LED (Tốt hơn là Đỏ và Xanh lá cây)

7) Một nút nhấn

8) Mười dây nhảy

9) Bốn điện trở

10) Máy tính xách tay hoặc Máy tính để bàn với MATLAB

Bước 2: Cấu hình

Cấu hình
Cấu hình
Cấu hình
Cấu hình
Cấu hình
Cấu hình
Cấu hình
Cấu hình

Trên đây là hình ảnh cấu hình từ nhiều góc độ:

Vị trí ghim (chữ cái viết thường theo sau là số hàng) được liệt kê bên dưới theo thứ tự theo dòng hiện tại.

Dây điện:

j19 đến i47

j8 đến b50

b5 đến Servo

c6 tới Servo

b7 đến servo

a13 đến j7

a17 sang LED

LED sang a37

e40 đến j20

j53 đến j18

j7 sang LED

LED sang j6

Cái nút:

e54 đến h51

Điện trở:

d40 đến b37

c50 đến d54

i51 đến j47

Bước 3: Mã và Logic

Mã và Logic
Mã và Logic

Mục tiêu của hệ thống tàu hỏa của chúng tôi là tăng cường an toàn và giảm nguy cơ xảy ra tai nạn chết người tại các điểm giao cắt với đường sắt. Để đạt được điều này, hệ thống của chúng tôi có hệ thống cảnh báo tàu cho lái xe, rào chắn vật lý được hạ xuống để ngăn ô tô băng qua đường ray và nút khẩn cấp dự phòng để người soát vé nhấn nếu hệ thống cảnh báo sớm bị lỗi.

Hệ điều hành GUI Conductor:

GUI, được hiển thị ở trên, được tạo ra để sử dụng người điều khiển khi họ đang điều khiển tàu qua các khu vực đường ray có giao cắt với đường sắt dành cho ô tô.

Ở góc trên bên phải có đèn thông báo cho người soát vé nếu cổng giao nhau đường sắt sắp tới được đóng và cho phép người soát vé mở hoặc đóng cổng nếu cần. Dưới đó, nguồn cấp dữ liệu từ camera mà tàu đi qua được hiển thị. Ở góc dưới cùng bên trái, vị trí của đoàn tàu liên tục được vẽ trên biểu đồ và bên dưới biểu đồ, số vòng mà đoàn tàu đã hoàn thành trong một ngày được nêu. Phía trên biểu đồ vị trí, có một nút khẩn cấp và thông báo trạng thái. Điều này cho phép người soát vé báo hiệu trường hợp khẩn cấp nếu có ô tô trên đường đua hoặc cổng an toàn không hoạt động bình thường.

Mã số:

classdef micro <matlab.apps. AppBase% Thuộc tính tương ứng với các thành phần ứng dụng

thuộc tính (Access = công khai)

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

Nhãn matlab.ui.control. Label

kết thúc

thuộc tính (Access = riêng tư)

truy cập int16

kết thúc

phương thức (Access = công khai)

chức năng timerCallback (ứng dụng, src, sự kiện)

app. Temp. Text = int2str (app.counter);

app.counter = app.counter + 1;

% gọi tất cả các biến mà chương trình cần - - - - - - - - - - - - -

rpi toàn cầu

toàn cầu s

mở toàn cầu

đóng cửa toàn cầu

cam toàn cầu

toàn cầu m

ems toàn cầu

t_count toàn cầu

% ------------------------- Phần cánh tay tàu --------------------- ---------

nếu mở == 0

writePosition (s, 50)

app.gateLamp. Color = 'xanh';

kết thúc

nếu đóng == 0

writePosition (s, 120)

app.gateLamp. Color = 'red';

kết thúc

% ---------------------- Phát hiện chuyển động qua máy ảnh -----------------------

trong khi đúng

img = ảnh chụp nhanh (cam);

hình ảnh (img);

app. UIAxes (drawnow)

kết thúc

% ---------------------- Cánh tay mở / đóng ----------------------- --------------

nếu readDigitalPin (rpi, 20)> 1% đọc chân 17 (nút) và kiểm tra tín hiệu

for i = 40:.5: 150% nâng cầu

writePosition (s, i)

kết thúc

cho i = 1:10% số vòng nhấp nháy đèn đỏ x số lần

writeDigitalPin (rpi, 13, 1)

tạm dừng (.5)

writeDigitalPin (rpi, 13, 0)

tạm dừng (.5)

kết thúc

writePosition (s, 50)% đặt cổng xuống

kết thúc

% -------------------- Hỗ trợ Điện thoại Di động / Lô ------------------------ -

m. AccelerationSensorEnabled = 1

m.logging = 1

dữ liệu = số không (200, 1); % intialize dữ liệu cho âm mưu cuộn

hình (app. UIAxes2)

p = plot (dữ liệu)

trục ([xbounda, ybounds])

tạm dừng (1)

tic

trong khi tốc độ <30% chạy trong 30 giây

[a, ~] = accellog (m);

nếu chiều dài (a)> 200

data = a (end-199: end, 3);

khác

data (1: length (a)) = a (:, 3);

kết thúc

% vẽ lại âm mưu

p. YData = dữ liệu;

drawnow

kết thúc

% ------------------ Thay đổi Pixel đột ngột ---------------------------- ------

x1 = img; % đọc máy ảnh tắt số pi

red_mean = mean (mean (x1 (:,:, 1))); % đọc số lượng pixel màu đỏ trung bình

green_mean = mean (mean (x1 (:,:, 2))); % đọc số lượng pixel màu xanh lá cây trung bình

blue_mean = mean (mean (x1 (:,:, 3))); % đọc số lượng pixel màu xanh lam trung bình

nếu red_mean> 150 && green_mean> 150 && blue_mean> 150

t_count = t_count + 1;

kết thúc

app. LoopsCompletedLabel. Text = num2str (t_count)

% ------------------ Nút lập trình EMS ---------------------------- ---

configPin (rpi, 12, 'DigitalOutput'); % đặt chân dẫn, chân 16, làm đầu ra

configPin (rpi, 16, 'DigitalInput'); % đặt chân nút, chân 24, làm đầu vào

buttonPressed = readDigitalPin (rpi, 16); % Đọc giá trị nhấn nút trên chân 16

if buttonPressed == 1

trong khi buttonPressed == 1

writeDigitalPin (rpi, 12, 1)

buttonunPressed = writeDigitalPin (rpi, 12, 0); %

end% Kết thúc vòng lặp ‘while buttonPressed == 1’

kết thúc

writeDigitalPin (rpi, 16, 0)% Đặt led thành tắt khi không còn nhấn nút setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % tài khoản thư cần gửi từ setpref ('Internet', 'SMTP_Username', '[email protected]'); % người gửi tên người dùng setpref ('Internet', 'SMTP_Password', 'efgroup6'); % Người gửi mật khẩu

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] ',' Tình trạng Khẩn cấp! ',' Người điều khiển đã kích hoạt công tắc ghi đè thủ công, yêu cầu phản hồi ngay lập tức! ')

app. UndernormalconditionsLabel. Text = ems

kết thúc

kết thúc

% app. Label_4. Text = num2str (curr_temp);

phương thức (Access = riêng tư)

% Mã thực thi sau khi tạo thành phần

function startupFcn (app)

% ---------- Tất cả các biến cần thiết cho hàm này --------------------

rpi toàn cầu% arduino

rpi = raspi ('169.254.0.2', 'pi', 'raspberry');

s% servo toàn cầu

s = servo (rpi, 17, 'MinPulseDuration', 5e-4, 'MaxPulseDuration', 2,5e-3);

mở toàn cầu

mở = 1;

đóng cửa toàn cầu

đóng = 1;

cam toàn cầu

cam = cameraboard (rpi);

toàn cầu m

m = mobiledev;

ems toàn cầu

ems = 'Trường hợp khẩn cấp đã được báo cáo, thông báo cho EMS';

t_count toàn cầu

t_count = 0;

trình kết nối trên% mật khẩu là EFGroup6

% Chức năng hẹn giờ cho vòng lặp --------------------------------

app.counter = 0;

t = bộ đếm thời gian (…

'TimerFcn', @ app.timerCallback,…

'StartDelay', 1,… 'Giai đoạn', 1,…

'ExecutionMode', 'fixedSpacing',…

'TasksToExecute', inf);

bắt đầu (t);

kết thúc

% Chức năng gọi lại

function ManualOverrideSwitchValueChanged (ứng dụng, sự kiện)

kết thúc

% Nút nhấn chức năng: OpenGateButton

function OpenGateButtonPushing (ứng dụng, sự kiện)

đóng cửa toàn cầu

đóng = 0;

kết thúc

% Nút nhấn chức năng: CloseGateButton

function CloseGateButtonPushing (ứng dụng, sự kiện)

mở toàn cầu

mở = 0;

kết thúc

kết thúc

% Khởi tạo và xây dựng ứng dụng

phương thức (Access = riêng tư)

% Tạo UIFigure và các thành phần

function createComponents (ứng dụng)

% Tạo UIFigure

app. UIFigure = uifigure;

app. UIFigure. Position = [100 100 640 480];

app. UIFigure. Name = 'Hình giao diện người dùng';

% Tạo RailwaygatestatusLampLabel

app. RailwaygatestatusLampLabel = uilabel (app. UIFigure);

app. RailwaygatestatusLampLabel. HorizontalAlignment = 'right'; app. RailwaygatestatusLampLabel. Position = [464 422 110 22]; app. RailwaygatestatusLampLabel. Text = 'Trạng thái cổng đường sắt';

% Tạo gateLamp

app.gateLamp = uilamp (app. UIFigure);

app.gateLamp. Position = [589 422 20 20];

app.gateLamp. Color = [0,9412 0,9412 0,9412];

% Tạo OpenGateButton

app. OpenGateButton = uibutton (app. UIFigure, 'push');

app. OpenGateButton. ButtonPushingFcn = createCallbackFcn (app, @OpenGateButtonPushing, true); app. OpenGateButton. Position = [474 359 100 22];

app. OpenGateButton. Text = 'Cổng mở';

% Tạo CloseGateButton

app. CloseGateButton = uibutton (app. UIFigure, 'push');

app. CloseGateButton. ButtonPushingFcn = createCallbackFcn (app, @CloseGateButtonPushing, true); app. CloseGateButton. Position = [474 285 100 22];

app. CloseGateButton. Text = 'Đóng cổng';

% Tạo UIAxes

app. UIAxes = uiaxes (app. UIFigure);

title (app. UIAxes, 'Camera Feed')

app. UIAxes. Position = [341 43 300 185];

% Tạo khẩn cấpButtonStatusLampLabel

app. EmergencyButtonStatusLampLabel = uilabel (app. UIFigure); app. EmergencyButtonStatusLampLabel. HorizontalAlignment = 'right'; app. EmergencyButtonStatusLampLabel. Position = [97 323 142 22]; app. EmergencyButtonStatusLampLabel. Text = 'Trạng thái nút khẩn cấp';

% Tạo khẩn cấpButtonStatusLamp

app. EmergencyButtonStatusLamp = uilamp (app. UIFigure); app. EmergencyButtonStatusLamp. Position = [254 323 20 20];

% Tạo UndernormalconditionsLabel

app. UndernormalconditionsLabel = uilabel (app. UIFigure);

app. UndernormalconditionsLabel. Position = [108 285 248 22];

app. UndernormalconditionsLabel. Text = 'Trong điều kiện bình thường';

% Tạo UIAxes2

app. UIAxes2 = uiaxes (app. UIFigure);

title (app. UIAxes2, 'Vị trí tàu')

xlabel (app. UIAxes2, 'Vị trí X')

ylabel (app. UIAxes2, 'Vị trí Y')

app. UIAxes2. Box = 'on';

app. UIAxes2. XGrid = 'on';

app. UIAxes2. YGrid = 'on';

app. UIAxes2. Position = [18 43 300 185];

% Tạo EF230Group6Label

app. EF230Group6Label = uilabel (app. UIFigure);

app. EF230Group6Label. HorizontalAlignment = 'center';

app. EF230Group6Label. FontSize = 28;

app. EF230Group6Label. FontWeight = 'bold';

app. EF230Group6Label. Position = [-4 401 379 64];

app. EF230Group6Label. Text = 'EF 230 Nhóm 6';

% Tạo IanAllishKellyBondIanDaffronLabel

app. IanAllishKellyBondIanDaffronLabel = uilabel (app. UIFigure); app. IanAllishKellyBondIanDaffronLabel. Position = [94 380 184 22]; app. IanAllishKellyBondIanDaffronLabel. Text = 'Ian Allish, Kelly Bond, Ian Daffron';

% Tạo vòng lặpCompletedLabel

app. LoopsCompletedLabel = uilabel (app. UIFigure);

app. LoopsCompletedLabel. Position = [18 10 103 22];

app. LoopsCompletedLabel. Text = 'Đã hoàn thành vòng lặp:';

% Tạo nhãn

app. Label = uilabel (app. UIFigure);

app. Label. Position = [120 10 178 22];

app. Label. Text = '####';

kết thúc

kết thúc

phương thức (Access = công khai)

% Xây dựng ứng dụng

ứng dụng hàm = vi mô

% Tạo và cấu hình các thành phần

createComponents (ứng dụng)

% Đăng ký ứng dụng với App Designer

registerApp (app, app. UIFigure)

% Thực thi chức năng khởi động

runStartupFcn (ứng dụng, @startupFcn)

nếu nargout == 0

ứng dụng rõ ràng

kết thúc

kết thúc

% Mã thực thi trước khi xóa ứng dụng

xóa (ứng dụng)

% Xóa UIFigure khi ứng dụng bị xóa

xóa (app. UIFigure)

kết thúc

kết thúc

kết thúc

Bước 4: Bước cuối cùng

Bước cuối cùng
Bước cuối cùng

Khi mã đã được viết và Raspberry Pi đã được nối dây, hãy gắn động cơ servo vào cổng đường ray in 3-D như được đính kèm trong hình trên.

Bây giờ, dự án đã hoàn thành. Kết nối mâm xôi PI với đường ray xe lửa và quan sát hệ thống mới tạo ra các đường giao cắt đường sắt an toàn hơn cho cả người điều khiển ô tô và người điều khiển. Chơi với hệ thống bằng cách tương tác với GUI để kích hoạt các két bị lỗi được thiết lập để ngăn ngừa tai nạn.

Đó là phần cuối của hướng dẫn, hãy tận hưởng Hệ thống Tàu thông minh mới của bạn!

Đề xuất: