สารบัญ:

ระบบรถไฟอัจฉริยะ: 4 ขั้นตอน
ระบบรถไฟอัจฉริยะ: 4 ขั้นตอน

วีดีโอ: ระบบรถไฟอัจฉริยะ: 4 ขั้นตอน

วีดีโอ: ระบบรถไฟอัจฉริยะ: 4 ขั้นตอน
วีดีโอ: ขอบคุณที่มอบความสุขในวัยเด็กนะครับ #สปอยหนัง #ขึ้นฟีดเถอะ #ขึ้นฟีด #rip 2024, กรกฎาคม
Anonim
ระบบรถไฟอัจฉริยะ
ระบบรถไฟอัจฉริยะ

ออกแบบมาเพื่อเพิ่มความปลอดภัย ป้องกันอุบัติเหตุ และเพิ่มการตอบสนองเชิงบวกและประสิทธิผลเพื่อช่วยในกรณีที่เกิดอุบัติเหตุ

ขั้นตอนที่ 1: ชิ้นส่วนและวัสดุ

ชิ้นส่วนและวัสดุ
ชิ้นส่วนและวัสดุ
ชิ้นส่วนและวัสดุ
ชิ้นส่วนและวัสดุ
ชิ้นส่วนและวัสดุ
ชิ้นส่วนและวัสดุ
ชิ้นส่วนและวัสดุ
ชิ้นส่วนและวัสดุ

รูปภาพด้านบนจะเรียงลำดับตามรายการอะไหล่ด้านล่าง:

ส่วนรายการ

1) Raspberry PI 3 หนึ่งตัว - รุ่น B

2) เขียงหั่นขนมหนึ่งอัน

3) สายเคเบิล (จากบนลงล่าง) - หนึ่งพลังงาน หนึ่งอีเธอร์เน็ต หนึ่งอะแดปเตอร์

4) หนึ่งเซอร์โวมอเตอร์

5) หนึ่งประตูรถไฟพิมพ์ 3 มิติ

6) ไฟ LED สองดวง (ควรเป็นสีแดงและสีเขียว)

7) หนึ่งปุ่มกด

8) สายจัมเปอร์สิบสาย

9) ตัวต้านทานสี่ตัว

10) แล็ปท็อปหรือเดสก์ท็อปที่มี MATLAB

ขั้นตอนที่ 2: การกำหนดค่า

การกำหนดค่า
การกำหนดค่า
การกำหนดค่า
การกำหนดค่า
การกำหนดค่า
การกำหนดค่า
การกำหนดค่า
การกำหนดค่า

ด้านบนเป็นภาพการกำหนดค่าจากหลายมุม:

ตำแหน่งพิน (ตัวพิมพ์เล็กตามด้วยหมายเลขแถว) แสดงอยู่ด้านล่างตามลำดับการไหลปัจจุบัน

สายไฟ:

j19 ถึง i47

j8 ถึง b50

b5 ถึงเซอร์โว

c6 ถึงเซอร์โว

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:

GUI ดังที่แสดงไว้ข้างต้น ถูกสร้างขึ้นเพื่อใช้กับตัวนำในขณะที่พวกเขากำลังขับรถไฟผ่านพื้นที่ของรางที่มีทางข้ามทางรถไฟที่มีรถสัญจรไปมา

ที่มุมขวาบน มีไฟที่แจ้งผู้ควบคุมรถหากมีการปิดประตูทางข้ามทางรถไฟที่จะมาถึง และอนุญาตให้ตัวนำเปิดหรือปิดประตูได้หากจำเป็น ด้านล่างนั้นจะแสดงฟีดจากกล้องที่รถไฟวิ่งผ่าน ที่มุมล่างซ้าย ตำแหน่งของรถไฟถูกพล็อตอย่างต่อเนื่องบนกราฟ และด้านล่างกราฟ จะระบุจำนวนรอบที่รถไฟเสร็จสิ้นในหนึ่งวัน เหนือกราฟตำแหน่ง มีปุ่มฉุกเฉินและข้อความแจ้งสถานะ ซึ่งจะช่วยให้ตัวนำส่งสัญญาณฉุกเฉินได้หากมีรถอยู่บนรางหรือประตูนิรภัยทำงานไม่ถูกต้อง

รหัส:

classdef micro < matlab.apps. AppBase % Properties ที่สอดคล้องกับส่วนประกอบของแอพ

คุณสมบัติ (การเข้าถึง = สาธารณะ)

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

ภายใต้สภาวะปกติLabel 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

จบ

วิธีการ (การเข้าถึง = สาธารณะ)

ฟังก์ชั่น timerCallback (แอพ, src, เหตุการณ์)

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

app.counter = app.counter + 1;

% เรียกตัวแปรทั้งหมดที่โปรแกรมต้องการ - - - - - - - - - - - - -

rpi ทั่วโลก

ทั่วโลก

โกลบอล โอเพ่น

ปิดโลก

กล้องทั่วโลก

ทั่วโลก m

ทั่วโลกems

ทั่วโลก t_count

%-------------------------------------- ส่วนแขนฝึก --------------------- ---------

ถ้าเปิด == 0

ตำแหน่งการเขียน 50)

app.gateLamp. Color = 'สีเขียว';

จบ

ถ้าปิด == 0

ตำแหน่งการเขียน 120)

app.gateLamp. Color = 'สีแดง';

จบ

%---------------------- การตรวจจับความเคลื่อนไหวผ่านกล้อง -----------------------

ในขณะที่จริง

img = สแน็ปช็อต (กล้อง);

รูปภาพ (img);

app. UIAxes (ดึงตอนนี้)

จบ

%---------------------- แขนเปิด/ปิด ----------------------- --------------

ถ้า readDigitalPin(rpi, 20)>1% อ่านพิน 17(ปุ่ม) และตรวจสอบสัญญาณ

สำหรับ i=40:.5:150 %เพิ่มสะพาน

เขียนตำแหน่ง (s, i)

จบ

สำหรับ i= 1:10 % กะพริบแสงสีแดง x จำนวนครั้ง

เขียนDigitalPin(rpi, 13, 1)

หยุดชั่วคราว(.5)

เขียนDigitalPin(rpi, 13, 0)

หยุดชั่วคราว(.5)

จบ

writePosition(s, 50)%วางเกตลง

จบ

%----------- การสนับสนุนโทรศัพท์มือถือ/พล็อต ------------------------ --

m. AccelerationSensorEnabled=1

m.logging=1

ข้อมูล=ศูนย์(200, 1); %เตรียมข้อมูลเบื้องต้นสำหรับพล็อตกลิ้ง

รูป (app. UIAxes2)

p=พล็อต(ข้อมูล)

แกน ([xbounda, ybounds])

หยุดชั่วคราว(1)

tic

ขณะที่ toc <30% รันเป็นเวลา 30 วินาที

[a, ~]=accellolog(m);

ถ้าความยาว (ก) >200

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

อื่น

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

จบ

%วาดพล็อตใหม่

p. YData=ข้อมูล;

drawow

จบ

% ------------------ การเปลี่ยนพิกเซลกะทันหัน ---------------------------- ------

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 โปรแกรม ---------------------------- ---

กำหนดค่าพิน (rpi, 12, 'DigitalOutput'); % ตั้งค่าพิน led, พิน 16 เป็นเอาต์พุต

กำหนดค่าพิน (rpi, 16, 'DigitalInput'); % ตั้งค่าหมุดปุ่ม พิน 24 เป็นอินพุต

buttonPressed = readDigitalPin(rpi, 16); % อ่านค่าการกดปุ่มบนขา 16

ถ้ากดปุ่ม == 1

ขณะกดปุ่ม == 1

เขียนDigitalPin(rpi, 12, 1)

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

end % สิ้นสุด 'ในขณะที่ buttonPressed==1' loop

จบ

writeDigitalPin(rpi, 16, 0) % ตั้งค่าให้ปิดเมื่อไม่ได้กดปุ่ม setpref('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref('อินเทอร์เน็ต', 'อีเมล', '[email protected]'); % บัญชีเมลที่จะส่งจาก setpref('Internet', 'SMTP_Username', '[email protected]'); % ผู้ส่งชื่อผู้ใช้ setpref('Internet', 'SMTP_Password', 'efgroup6'); % รหัสผ่านผู้ส่ง

อุปกรณ์ประกอบฉาก = 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', 'ราสเบอร์รี่');

ทั่วโลก %servo

s = เซอร์โว (rpi, 17, 'MinPulseDuration', 5e-4, 'MaxPulseDuration', 2.5e-3);

โกลบอล โอเพ่น

เปิด = 1;

ปิดโลก

ปิด = 1;

กล้องทั่วโลก

กล้อง = กระดานกล้อง (rpi);

ทั่วโลก m

m=mobiledev;

ทั่วโลกems

ems = 'มีการรายงานเหตุฉุกเฉิน แจ้ง EMS';

ทั่วโลก t_count

t_count = 0;

ตัวเชื่อมต่อ % รหัสผ่านคือ EFGroup6

% ฟังก์ชั่นจับเวลาสำหรับลูป --------------------------------

app.counter = 0;

t = ตัวจับเวลา (…

'TimerFcn', @app.timerCallback, …

'StartDelay', 1, … 'ระยะเวลา', 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 = 'รูป UI';

% สร้าง 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, 'ดัน');

app. OpenGateButton. ButtonPushedFcn = createCallbackFcn(แอพ, @OpenGateButtonPushed, จริง); app. OpenGateButton. Position = [474 359 100 22];

app. OpenGateButton. Text = 'เปิดประตู';

% สร้าง CloseGateButton

app. CloseGateButton = uibutton(app. UIFigure, 'ดัน');

app. CloseGateButton. ButtonPushedFcn = createCallbackFcn (แอพ, @CloseGateButtonPushed, จริง); 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];

% สร้างปุ่มฉุกเฉินStatusLampLabel

app. EmergencyButtonStatusLampLabel = uilabel (app. UIFigure); app. EmergencyButtonStatusLampLabel. HorizontalAlignment = 'ขวา'; app. EmergencyButtonStatusLampLabel. Position = [97 323 142 22]; app. EmergencyButtonStatusLampLabel. Text = 'สถานะปุ่มฉุกเฉิน';

% สร้าง EmergencyButtonStatusLamp

app. EmergencyButtonStatusLamp = uilamp (แอพ. 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 'ตำแหน่งของรถไฟ')

xlabel(app. UIAxes2, 'ตำแหน่ง X')

ylabel (app. UIAxes2, 'ตำแหน่ง Y')

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 = 'center';

app. EF230Group6Label. FontSize = 28;

app. EF230Group6Label. FontWeight = 'ตัวหนา';

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

app. EF230Group6Label. Text = 'EF 230 Group 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 = '####';

จบ

จบ

วิธีการ (การเข้าถึง = สาธารณะ)

% สร้างแอป

แอปฟังก์ชัน = micro

% สร้างและกำหนดค่าส่วนประกอบ

createComponents (แอพ)

% ลงทะเบียนแอพด้วย App Designer

registerApp(แอพ, app. UIFigure)

% ดำเนินการฟังก์ชั่นเริ่มต้น

runStartupFcn(แอพ, @startupFcn)

ถ้า nargout == 0

แอพที่ชัดเจน

จบ

จบ

% รหัสที่รันก่อนการลบแอพ

ลบ (แอพ)

% ลบ UIFigure เมื่อแอพถูกลบ

ลบ (app. UIFigure)

จบ

จบ

จบ

ขั้นตอนที่ 4: ขั้นตอนสุดท้าย

ขั้นตอนสุดท้าย
ขั้นตอนสุดท้าย

เมื่อเขียนโค้ดและต่อสาย Raspberry Pi แล้ว ให้ต่อเซอร์โวมอเตอร์เข้ากับประตูรางรถไฟที่พิมพ์ 3 มิติตามที่แนบไว้ในภาพด้านบน

ตอนนี้โครงการเสร็จสมบูรณ์ เชื่อมต่อ Raspberry PI กับรางรถไฟ และสังเกตระบบใหม่ที่สร้างทางข้ามทางรถไฟที่ปลอดภัยยิ่งขึ้นสำหรับทั้งคนขับรถยนต์และผู้ควบคุมรถ เล่นกับระบบโดยโต้ตอบกับ GUI เพื่อเรียกใช้ตู้นิรภัยที่ล้มเหลวซึ่งตั้งไว้เพื่อป้องกันอุบัติเหตุ

นั่นคือจุดสิ้นสุดของบทช่วยสอน ขอให้สนุกกับระบบรถไฟอัจฉริยะใหม่ของคุณ!

แนะนำ: