Mục lục:
Video: Hệ thống tàu thông minh: 4 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:33
Đượ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
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
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ụ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
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:
Đèn LED để bàn thông minh - Chiếu sáng thông minh W / Arduino - Neopixels Workspace: 10 bước (có hình ảnh)
Đèn LED để bàn thông minh | Chiếu sáng thông minh W / Arduino | Neopixels Workspace: Ngày nay chúng ta dành nhiều thời gian ở nhà, học tập và làm việc ảo, vậy tại sao không biến không gian làm việc của chúng ta trở nên tuyệt vời hơn với hệ thống chiếu sáng tùy chỉnh và thông minh dựa trên Arduino và Ws2812b LED. Sau đây tôi chỉ cho bạn cách xây dựng Smart của bạn Đèn LED để bàn
Biến điện thoại thông minh không sử dụng thành màn hình thông minh: 6 bước (có hình ảnh)
Biến điện thoại thông minh không sử dụng thành màn hình thông minh: Hướng dẫn Deze có trong het Engels, voor de Nederlandse versie klik hier Bạn có điện thoại thông minh (cũ) chưa sử dụng? Biến nó thành một màn hình thông minh bằng Google Trang tính và một số bút và giấy, bằng cách làm theo hướng dẫn từng bước dễ dàng này. Khi bạn hoàn thành
Máy pha cà phê thông minh - Một phần của Hệ sinh thái Nhà thông minh: 4 bước
Máy pha cà phê thông minh - Một phần của Hệ sinh thái SmartHome: Máy pha cà phê bị tấn công, biến nó thành một phần của Hệ sinh thái nhà thông minh Tôi sở hữu một Máy pha cà phê Delonghi cũ tốt (DCM) (không phải là một chương trình khuyến mãi và muốn nó “thông minh”. Vì vậy, tôi đã hack nó bằng cách cài đặt ESP8266) mô-đun có giao diện với bộ não / bộ vi điều khiển của nó sử dụng
Làm thế nào để tự làm rèm cuốn thông minh với công tắc thông minh SONOFF ?: 14 bước
Làm thế nào để tự làm rèm cuốn thông minh với công tắc thông minh SONOFF ?: Sử dụng chế độ khóa liên động trong công tắc thông minh SONOFF để biến rèm cuốn / rèm cuốn thông thường của bạn thành thông minh và kéo nó xuống vào buổi tối? Dù sao, tôi
Quay số thông minh - Điện thoại truyền thống thông minh tự động sửa lỗi: 8 bước
Smart Dial - Điện thoại truyền thống thông minh tự động sửa lỗi: Smart Dial là điện thoại tự động sửa lỗi thông minh được tạo ra cho người cao tuổi có nhu cầu đặc biệt và nó cho phép người cao tuổi quay số trực tiếp từ điện thoại truyền thống mà họ quen dùng. Chỉ nhờ hoạt động tình nguyện tại một trung tâm chăm sóc người cao niên địa phương mà tôi