สารบัญ:

การใช้เซ็นเซอร์อุณหภูมิ น้ำฝน และการสั่นสะเทือนบน Arduino เพื่อปกป้องรางรถไฟ: 8 ขั้นตอน (พร้อมรูปภาพ)
การใช้เซ็นเซอร์อุณหภูมิ น้ำฝน และการสั่นสะเทือนบน Arduino เพื่อปกป้องรางรถไฟ: 8 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: การใช้เซ็นเซอร์อุณหภูมิ น้ำฝน และการสั่นสะเทือนบน Arduino เพื่อปกป้องรางรถไฟ: 8 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: การใช้เซ็นเซอร์อุณหภูมิ น้ำฝน และการสั่นสะเทือนบน Arduino เพื่อปกป้องรางรถไฟ: 8 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: ทำวงจรเซนเซอร์อัตโนมัติ แบบไม่ต้องเขียนโค้ดแถมประหยัดต้นทุน 2024, กรกฎาคม
Anonim
การใช้เซ็นเซอร์อุณหภูมิ น้ำฝน และการสั่นสะเทือนบน Arduino เพื่อปกป้องรางรถไฟ
การใช้เซ็นเซอร์อุณหภูมิ น้ำฝน และการสั่นสะเทือนบน Arduino เพื่อปกป้องรางรถไฟ

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

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

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

1. คอมพิวเตอร์ที่ติดตั้ง MATLAB เวอร์ชันล่าสุด

2. บอร์ด Arduino

3. เซ็นเซอร์อุณหภูมิ

4. เซ็นเซอร์น้ำฝน

5. เซ็นเซอร์สั่นสะเทือน

6. ไฟ LED สีแดง

7. ไฟ LED สีฟ้า

8. ไฟ LED สีเขียว

9. ไฟ LED RBG

10. Buzzer

11. 18 สายชาย-ชาย

12. 3 สายหญิง-ชาย

13. สายหญิง-หญิง 2 เส้น

14. ตัวต้านทาน 6 330 โอห์ม

15. 1 ตัวต้านทาน 100 โอห์ม

ขั้นตอนที่ 2: การเดินสายเซ็นเซอร์อุณหภูมิ

การเดินสายเซ็นเซอร์อุณหภูมิ
การเดินสายเซ็นเซอร์อุณหภูมิ
การเดินสายเซ็นเซอร์อุณหภูมิ
การเดินสายเซ็นเซอร์อุณหภูมิ

ด้านบนเป็นสายไฟและรหัส MATLAB สำหรับอินพุตเซ็นเซอร์อุณหภูมิเช่นกัน

สายไฟจากกราวด์และ 5V จะต้องวิ่งไปที่ค่าลบและค่าบวกตามลำดับเพียงครั้งเดียวสำหรับทั้งบอร์ด จากนี้ไป การเชื่อมต่อกราวด์จะมาจากคอลัมน์ลบ และการเชื่อมต่อ 5V ใดๆ จะมาจากคอลัมน์บวก

รหัสด้านล่างสามารถคัดลอกและวางสำหรับเซ็นเซอร์อุณหภูมิ

%% TEMPERATURE SENSOR % สำหรับเซ็นเซอร์อุณหภูมิเราใช้แหล่งต่อไปนี้พร้อมกับ

% EF230 เว็บไซต์วัสดุเพื่อปรับเปลี่ยนเซ็นเซอร์อุณหภูมิของเราเพื่อให้ผู้ใช้

% อินพุตและเอาต์พุตไฟ LED 3 ดวงพร้อมกราฟ

ร่างนี้เขียนโดย SparkFun Electronics, ด้วยความช่วยเหลือมากมายจากชุมชน Arduino

ปรับให้เข้ากับ MATLAB โดย Eric Davishahl

%เยี่ยมชม https://learn.sparkfun.com/products/2 สำหรับข้อมูล SIK

ล้างทั้งหมด clc

tempPin = 'A0'; % ประกาศพินอะนาล็อกที่เชื่อมต่อกับเซ็นเซอร์อุณหภูมิ

a=arduino('/dev/tty.usbserial-DA017PNO', 'uno');

% กำหนดฟังก์ชันที่ไม่ระบุชื่อที่แปลงแรงดันไฟฟ้าเป็นอุณหภูมิ

tempCfromVolts = @(โวลต์) (โวลต์-0.5)*100;

การสุ่มตัวอย่างระยะเวลา = 30;

ช่วงสุ่มตัวอย่าง = 2; % วินาทีระหว่างการอ่านค่าอุณหภูมิ

% ตั้งค่าเวกเตอร์ของเวลาสุ่มตัวอย่าง

samplingTimes = 0:samplingInterval:samplingDuration;

% คำนวณจำนวนตัวอย่างตามระยะเวลาและช่วงเวลา

numSamples = ความยาว (samplingTimes);

% จัดสรรล่วงหน้าตัวแปรชั่วคราวและตัวแปรสำหรับจำนวนการอ่านที่จะจัดเก็บ

tempC = ศูนย์ (numSamples, 1);

tempF = อุณหภูมิ C;

% ใช้กล่องโต้ตอบอินพุตเพื่อเก็บอุณหภูมิรางสูงสุดและต่ำสุด

dlg_prompts = {'ป้อนอุณหภูมิสูงสุด', 'ป้อนอุณหภูมิต่ำสุด'};

dlg_title = 'ช่วงอุณหภูมิราง';

N=22;

dlg_ans = inputdlg(dlg_prompts, dlg_title, [1, length(dlg_title)+N]);

% การจัดเก็บอินพุตจากผู้ใช้และแสดงว่าอินพุตถูกบันทึกแล้ว

max_temp = str2double(dlg_ans{1})

min_temp = str2double(dlg_ans{2})

txt = sprintf('บันทึกการป้อนข้อมูลของคุณแล้ว');

h=msgbox(txt);

รอ (h);

% สำหรับลูปเพื่ออ่านอุณหภูมิเป็นจำนวนครั้งที่เจาะจง

สำหรับดัชนี = 1:numSamples

% อ่านแรงดันไฟฟ้าที่ tempPin และจัดเก็บเป็นโวลต์ตัวแปร

โวลต์ = readVoltage (a, tempPin);

tempC(ดัชนี) = tempCfromVolts(โวลต์);

tempF(ดัชนี) = tempC(ดัชนี)*9/5+32; % แปลงจากเซลเซียสเป็นฟาเรนไฮต์

% หากคำสั่งให้ไฟ LED เฉพาะกะพริบขึ้นอยู่กับว่าตรงตามเงื่อนไขใด

ถ้า tempF(ดัชนี) >= max_temp % LED สีแดง

writeDigitalPin(a, 'D13', 0);

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

writeDigitalPin(a, 'D13', 1);

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

writeDigitalPin(a, 'D13', 0);

elseif tempF (ดัชนี) >= min_temp && tempF (ดัชนี) < max_temp % LED สีเขียว

writeDigitalPin(a, 'D11', 0);

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

writeDigitalPin(a, 'D11', 1);

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

writeDigitalPin(a, 'D11', 0);

elseif tempF(ดัชนี) <= min_temp % LED สีน้ำเงิน

writeDigitalPin(a, 'D12', 0);

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

writeDigitalPin(a, 'D12', 1);

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

writeDigitalPin(a, 'D12', 0);

จบ

% แสดงอุณหภูมิตามที่วัดได้

fprintf('อุณหภูมิที่ %d วินาทีคือ %5.2f C หรือ %5.2f F.\n', …

เวลาสุ่มตัวอย่าง (ดัชนี), tempC (ดัชนี), tempF (ดัชนี));

หยุดชั่วคราว (samplingInterval) %delay จนถึงตัวอย่างถัดไป

จบ

% การพล็อตการอ่านอุณหภูมิ

รูปที่ 1)

พล็อต (samplingTimes, tempF, 'r-*')

xlabel('เวลา (วินาที)')

ylabel('อุณหภูมิ (F)')

title('การอ่านอุณหภูมิจาก RedBoard')

ขั้นตอนที่ 3: เอาต์พุตเซ็นเซอร์อุณหภูมิ

เอาต์พุตเซ็นเซอร์อุณหภูมิ
เอาต์พุตเซ็นเซอร์อุณหภูมิ
เอาต์พุตเซ็นเซอร์อุณหภูมิ
เอาต์พุตเซ็นเซอร์อุณหภูมิ

ด้านบนคือสายไฟและรหัส MATLAB สำหรับเอาต์พุตเซ็นเซอร์อุณหภูมิ

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

ขั้นตอนที่ 4: อินพุตเซ็นเซอร์น้ำฝน

อินพุตเซ็นเซอร์น้ำฝน
อินพุตเซ็นเซอร์น้ำฝน
อินพุตเซ็นเซอร์น้ำฝน
อินพุตเซ็นเซอร์น้ำฝน

ด้านบนเป็นการเดินสายไฟสำหรับเซ็นเซอร์น้ำฝนและรหัส MATLAB อยู่ด้านล่าง

%% เซ็นเซอร์น้ำ

ล้างทั้งหมด clc

a=arduino('/dev/tty.usbserial-DA017PNO', 'uno');

พินน้ำ = 'A1';

vDry = 4.80; % แรงดันไฟเมื่อไม่มีน้ำ

การสุ่มตัวอย่างระยะเวลา = 60;

ช่วงสุ่มตัวอย่าง = 2;

samplingTimes = 0:samplingInterval:samplingDuration;

numSamples = ความยาว (samplingTimes);

% สำหรับลูปเพื่ออ่านแรงดันไฟฟ้าตามระยะเวลาที่กำหนด (60 วินาที)

สำหรับดัชนี = 1:numSamples

volt2 = อ่านแรงดันไฟฟ้า (a, waterPin); % อ่านค่าแรงดันจากพินน้ำแบบอนาล็อก

% หากคำสั่งให้ส่งเสียงเตือนหากตรวจพบน้ำ แรงดันตก = น้ำ

ถ้าโวลต์2 < vDry

playTone(a, 'D09', 2400) % ฟังก์ชัน playTone จาก MathWorks

% แสดงคำเตือนแก่ผู้โดยสารหากตรวจพบน้ำ

waitfor(warndlg('รถไฟของคุณอาจล่าช้าเนื่องจากภัยน้ำ'));

จบ

% แสดงแรงดันไฟฟ้าตามที่วัดโดยเซ็นเซอร์น้ำ

fprintf('แรงดันไฟฟ้าที่ %d วินาทีคือ %5.4f V.\n', …

เวลาสุ่มตัวอย่าง (ดัชนี), โวลต์2);

หยุดชั่วคราว (ช่วงการสุ่มตัวอย่าง)

จบ

ขั้นตอนที่ 5: เอาต์พุตเซ็นเซอร์น้ำฝน

เอาต์พุตเซ็นเซอร์น้ำฝน
เอาต์พุตเซ็นเซอร์น้ำฝน

ด้านบนคือการเดินสายสำหรับออดที่ส่งเสียงบี๊บเมื่อใดก็ตามที่น้ำตกลงบนแทร็กมากเกินไป รหัสสำหรับออดจะฝังอยู่ภายในรหัสสำหรับอินพุตน้ำฝน

ขั้นตอนที่ 6: อินพุตเซ็นเซอร์สั่นสะเทือน

อินพุตเซ็นเซอร์สั่นสะเทือน
อินพุตเซ็นเซอร์สั่นสะเทือน
อินพุตเซ็นเซอร์สั่นสะเทือน
อินพุตเซ็นเซอร์สั่นสะเทือน

ด้านบนเป็นการเดินสายไฟสำหรับเซ็นเซอร์การสั่นสะเทือน เซ็นเซอร์ตรวจจับการสั่นสะเทือนมีความสำคัญต่อระบบรางรถไฟในกรณีที่หินตกลงมาบนรางรถไฟ รหัส MATLAB ถูกโพสต์ด้านล่าง

%% Vibration Sensorล้างทั้งหมด, clc

PIEZO_PIN = 'A3'; % ประกาศพินอะนาล็อกที่เชื่อมต่อกับเซ็นเซอร์การสั่นสะเทือน a=arduino('/dev/tty.usbserial-DA017PNO', 'uno'); % การเริ่มต้นเวลาและช่วงเวลาในการวัดการสุ่มตัวอย่างการสั่นสะเทือน Duration = 30; % วินาที การสุ่มตัวอย่างช่วงเวลา = 1;

samplingTimes = 0:samplingInterval:samplingDuration;

numSamples = ความยาว (samplingTimes);

% การใช้รหัสจากแหล่งต่อไปนี้เราแก้ไขเพื่อเปิด a

% LED สีม่วง หากตรวจพบการสั่น

% SparkFun Tinker Kit, RGB LED เขียนโดย SparkFun Electronics, % ด้วยความช่วยเหลือมากมายจากชุมชน Arduino

% ปรับให้เข้ากับ MATLAB โดย Eric Davishahl

% กำลังเริ่มต้นพิน RGB

RED_PIN = 'D5';

GREEN_PIN = 'D6';

BLUE_PIN = 'D7';

% สำหรับลูปเพื่อบันทึกการเปลี่ยนแปลงแรงดันไฟฟ้าจากเซ็นเซอร์การสั่นสะเทือนผ่าน a

% ช่วงเวลาเฉพาะ (30 วินาที)

สำหรับดัชนี = 1:numSamples

volt3 = readVoltage (a, PIEZO_PIN);

% หากคำสั่งให้เปิด LED สีม่วงหากตรวจพบการสั่น

ถ้าโวลต์3>0.025

writeDigitalPin(a, RED_PIN, 1);

% การสร้างแสงสีม่วง

writeDigitalPin(a, GREEN_PIN, 0);

writeDigitalPin(a, BLUE_PIN, 1);

อื่นๆ % ปิด LED หากตรวจไม่พบการสั่น

writeDigitalPin(a, RED_PIN, 0);

writeDigitalPin(a, GREEN_PIN, 0);

writeDigitalPin(a, BLUE_PIN, 0);

จบ

% แสดงแรงดันไฟฟ้าตามที่วัด

fprintf('แรงดันไฟฟ้าที่ %d วินาทีคือ %5.4f V.\n', …

เวลาสุ่มตัวอย่าง (ดัชนี), โวลต์3);

หยุดชั่วคราว (ช่วงการสุ่มตัวอย่าง)

จบ

% ตัดไฟเมื่อวัดการสั่นสะเทือนเสร็จ

writeDigitalPin(a, RED_PIN, 0);

writeDigitalPin(a, GREEN_PIN, 0);

writeDigitalPin(a, BLUE_PIN, 0);

ขั้นตอนที่ 7: เอาต์พุตเซ็นเซอร์สั่นสะเทือน

เอาต์พุตเซ็นเซอร์สั่นสะเทือน
เอาต์พุตเซ็นเซอร์สั่นสะเทือน

ด้านบนเป็นการเดินสายไฟสำหรับไฟ LED RBG ที่ใช้ แสงจะเรืองแสงเป็นสีม่วงเมื่อตรวจพบการสั่น รหัส MATLAB สำหรับเอาต์พุตถูกฝังอยู่ภายในรหัสสำหรับอินพุต

ขั้นตอนที่ 8: สรุป

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

แนะนำ: