Mục lục:

Bộ vi điều khiển MATLAB (Arduino MKR1000): 4 bước
Bộ vi điều khiển MATLAB (Arduino MKR1000): 4 bước

Video: Bộ vi điều khiển MATLAB (Arduino MKR1000): 4 bước

Video: Bộ vi điều khiển MATLAB (Arduino MKR1000): 4 bước
Video: Arduino and unsupported MCU programming using Matlab Simulink 2024, Tháng mười một
Anonim
Bộ vi điều khiển MATLAB được điều khiển (Arduino MKR1000)
Bộ vi điều khiển MATLAB được điều khiển (Arduino MKR1000)

Mục tiêu của dự án của chúng tôi là sử dụng MATLAB cũng như Arduino MKR1000 với khả năng tốt nhất của chúng tôi. Mục tiêu của chúng tôi là tạo ra một tập lệnh cho phép một số tính năng nhất định của arduino hoàn thiện một đầu ra nhất định dựa trên một đầu vào cụ thể. Chúng tôi đã sử dụng nhiều vòng lặp và các câu lệnh điều kiện có trong MATLAB để làm cho điều này trở nên khả thi. Chúng tôi cũng đã sử dụng MATLAB di động bằng cách sử dụng dữ liệu thu được từ con quay hồi chuyển của thiết bị di động để nâng cao dự án nhiều nhất có thể.

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

MATLAB 2018a

- Phiên bản 2018 của MATLAB là phiên bản được ưa thích nhất, chủ yếu là vì nó hoạt động tốt nhất với mã kết nối với thiết bị di động. Tuy nhiên, hầu hết mã của chúng tôi có thể được thông dịch bởi phần lớn các phiên bản MATLAB.

Arduino MKR1000

-Đây là một thiết bị cụ thể cho phép chúng tôi đấu dây các mạch lên đến cả cổng kỹ thuật số và cổng tương tự. Điều quan trọng là bạn cũng có một breadboard để đi cùng với nó.

Phụ kiện

-Khi sử dụng MKR1000, chúng tôi cần các bộ phận phụ kiện để thực hiện các chức năng cần thiết.

Điêu nay bao gôm

  1. Servo
  2. Nút (6)
  3. Đèn LED RBG có thể hoán đổi cho nhau
  4. Dây đơn giản
  5. breadboard (các)
  6. công tắc nguồn mini
  7. cảm biến nhiệt độ
  8. Điện trở 330 ohm
  9. Điện trở 10K ohm
  10. Dây USB-microUSB
  11. Máy tính xách tay / máy tính để bàn
  12. Thiết bị di động

Cũng cần lưu ý rằng có rất nhiều phụ kiện khác có thể được sử dụng với MKR1000

Bước 2: Gói hỗ trợ MATLAB Arduino

Để sử dụng đúng cách Arduino MKR1000 thông qua MATLAB, bạn phải tải xuống Gói hỗ trợ MATLAB cho Phần cứng Arduino. Bản tải xuống này cung cấp cho bạn quyền truy cập vào một số chức năng và lệnh trực tiếp trên bo mạch arduino.

Bạn có thể tải gói tại liên kết bên dưới

www.mathworks.com/matlabcentral/fileexchange/47522-matlab-support-package-for-arduino-hardware

Bước 3: Sử dụng cảm biến dữ liệu có được từ thiết bị di động

Sử dụng cảm biến dữ liệu có được từ thiết bị di động
Sử dụng cảm biến dữ liệu có được từ thiết bị di động

Ứng dụng MATLAB Mobile cho phép chúng tôi sử dụng thiết bị di động để truyền dữ liệu bằng cách sử dụng con quay hồi chuyển của nó. Để có được dữ liệu thông qua MATLAB, chúng tôi lấy dữ liệu bằng cách lấy dữ liệu đó từ ma trận định hướng từ MATLAB di động. Chúng tôi thực hiện việc này bằng cách tạo một biến cho mỗi cột của ma trận định hướng (Phương vị, Cao độ và Cuộn) và lập chỉ mục dòng giá trị không đổi từ thiết bị di động đến máy tính. Điều này cho phép chúng tôi tạo các câu lệnh có điều kiện sẽ tạo trước một đầu ra nếu MATLAB chọn một đầu vào dữ liệu cụ thể từ thiết bị di động. Để làm điều này, bạn sẽ cần MATLAB di động trên thiết bị di động của mình và gói hỗ trợ thiết bị di động cho MATLAB trên máy tính của bạn.

Bạn có thể tải file tại liên kết bên dưới

www.mathworks.com/matlabcentral/fileexchange/51235-matlab-support-package-for-apple-ios-sensors

Bước 4: Mã và cổng đấu dây

Đoạn mã bắt đầu bằng một thông báo khởi động hỏi chúng ta có muốn khởi động thiết bị an ninh gia đình của mình hay không. Nếu chúng tôi trả lời có và cung cấp mật mã chính xác, tập lệnh sẽ ngay lập tức chuyển sang vòng lặp while. Từ đó, nó bắt đầu thu thập dữ liệu từ thiết bị di động. Có các điều kiện đọc dữ liệu này. Chúng tôi có thể mở khóa và khóa hệ thống từ thiết bị di động của mình, đồng thời mã sẽ xoay servo và nhấp nháy đèn LED tùy thuộc vào dữ liệu nhất định từ thiết bị di động

startup = questdlg ('Bạn có muốn kích hoạt Hệ thống năng lượng nhà thông minh ecoTECH không?'); % Bắt đầu trình tự kích hoạt ecoTECHwaitfor (khởi động); if startup == "Yes"% Nếu "Yes" được chọn, một chuỗi kích hoạt bắt đầu và đi vào vòng lặp while ở cuối power = "on"; m1 = msgbox ('Khởi động ecoTECH…'); tạm dừng (2); xóa (m1); m1_wait = waitbar (0, 'Vui lòng đợi …'); bước = 25; for i = 1: bước tạm dừng (.1); thanh chờ (i / bước); % Cập nhật xóa kết thúc thanh chờ (m1_wait); PASSCODE = [0 0 0 0]; % Khởi tạo mật mã ii = 0; % Khởi tạo một biến được sử dụng để thoát ra khỏi vòng lặp m2 = msgbox ('ecoTECH hoạt động đầy đủ!'); tạm dừng (2); xóa (m2); elseif khởi động == "Không" || startup == "Cancel"% Nếu "No" hoặc "Cancel" được chọn thì trình tự kích hoạt không bắt đầu và không nhập vòng lặp while power = "off"; m3 = msgbox ('Được rồi! Tạm biệt!'); tạm dừng (2); xóa (m3); kết thúc

% ecoTECH trong Phần hành động while true while power == "on"% Phần phím di động trong khi true% Thu thập dữ liệu về hướng cuộn của thiết bị di động KEY = m. Orientation (3); % Thu thập dữ liệu về các nút b2 = readDigitalPin (a, 'D2'); % Nút 2 (Đỏ) b3 = readDigitalPin (a, 'D3'); % Nút 3 (Trắng) nếu KEY> = 35% ở độ m4 = msgbox ('Chào mừng bạn về nhà!'); writeDigitalPin (a, 'D8', 1); % Bật đèn xanh tạm dừng (.5); writePosition (s, 1); % Quay servo để mở khóa cửa tạm dừng (2); writeDigitalPin (a, 'D8', 0); % Tắt đèn xanh xóa (m4); elseif KEY <= -35% theo độ m5 = msgbox ('Đã khóa cửa!'); writeDigitalPin (a, 'D7', 1); % Bật đèn đỏ tạm dừng (.5); writePosition (s, 0); % Xoay servo để khóa cửa tạm dừng (2); writeDigitalPin (a, 'D7', 0); % Tắt đèn đỏ xóa (m5); ii = 1; break% Thoát trong khi vòng lặp chứa khóa di động nếu cửa bị khóa bằng thiết bị di động elseif b2 == 0 && b3 == 0% Thoát khỏi vòng lặp while chứa khóa di động để nhập mật mã phần ngắt kết thúc

Sau đó, nó có thể nhập một vòng lặp while khác. Vòng lặp while này kiểm soát kết quả dựa trên đầu vào từ các nút. Nếu vòng lặp while đầu tiên không đáng kể hoặc yêu cầu khóa thủ công, nó sẽ nhập một vòng lặp while khác khi cần một mật khẩu cụ thể. Nếu mật khẩu không chính xác, nó sẽ khởi động lại vòng lặp

while true if ii == 1% Thoát khỏi vòng lặp while chứa mật mã nếu cửa được mở khóa bằng thiết bị di động kết thúc ngắt% Thu thập dữ liệu về các nút b5 = readDigitalPin (a, 'D5'); % Nút 5 (Xanh lam) b1 = readDigitalPin (a, 'D1'); % Nút 1 (Đen) b4 = readDigitalPin (a, 'D4'); % Nút 4 (Trắng) if b5 == 0% Bắt đầu phần nhập mật mã cho b = 1: 5 m6 = msgbox ('Vui lòng nhấn và giữ nút A'); tạm dừng (2); xóa (m6); % Thu thập dữ liệu về các nút b1 = readDigitalPin (a, 'D1'); % Nút 1 (Đen) b2 = readDigitalPin (a, 'D2'); % Nút 2 (Đỏ) b3 = readDigitalPin (a, 'D3'); % Nút 3 (Trắng) b4 = readDigitalPin (a, 'D4'); % Nút 4 (Vàng) b5 = readDigitalPin (a, 'D5'); % Nút 5 (Xanh lam)% Thay thế lần lượt các giá trị trong mật mã ban đầu nếu b1 == 0 PASSCODE (0 + b) = 1; elseif b2 == 0 PASSCODE (0 + b) = 2; elseif b3 == 0 PASSCODE (0 + b) = 3; elseif b4 == 0 PASSCODE (0 + b) = 4; elseif b5 == 0 PASSCODE = sprintf ('%. 0f%.0f%.0f%.0f', PASSCODE (1), PASSCODE (2), PASSCODE (3), PASSCODE (4)); % Biến chuỗi các nút được nhấn thành số sau đó chuyển nó thành chuỗi cuối kết thúc% Kết thúc vòng lặp for để nhập chữ số cho mật mã nếu PASSCODE == "2314"% Nếu mật mã đã nhập khớp thì cửa mở trong vài giây rồi khóa m7 = msgbox ('Chào mừng Trang chủ!'); writeDigitalPin (a, 'D8', 1); % Bật đèn xanh tạm dừng (.5); writePosition (s, 1); % Xoay servo để mở khóa cửa tạm dừng (5); writeDigitalPin (a, 'D8', 0); % Tắt đèn xanh tạm dừng (.1); writeDigitalPin (a, 'D7', 1); % Bật đèn đỏ tạm dừng (.5); writePosition (s, 0); % Xoay servo để khóa cửa tạm dừng (1); writeDigitalPin (a, 'D7', 0); % Tắt đèn đỏ xóa (m7); ii = 1; break% Thoát khỏi vòng lặp while chứa mật mã sau khi nhập đúng mật mã elseif PASSCODE ~ = "2314" writeDigitalPin (a, 'D7', 1); % Bật đèn đỏ m8 = msgbox ('Mật mã không chính xác! Thử lại!'); waitfor (m8) writeDigitalPin (a, 'D7', 0); % Tắt đèn đỏ tiếp tục% Cho phép bạn nhập lại mật mã end elseif b1 == 0 && b4 == 0% Thoát trong khi vòng lặp chứa phần mật mã nếu bạn không muốn nhập mật mã ii = 1; ngắt kết thúc

Nếu đúng, nó sẽ ngay lập tức đi vào vòng lặp while điều khiển cảm biến nhiệt độ. Nếu công tắc được bật, vòng lặp sẽ tiếp tục qua và vẽ biểu đồ nhiệt độ so với biểu đồ thời gian, cho phép người ta xem xu hướng. Nếu nút kết nối với cảm biến nhiệt độ được nhấn, nó cũng sẽ gửi email cho bạn biết nhiệt độ trong "nhà" của bạn. Nếu công tắc bị tắt, nó sẽ ngay lập tức kết thúc mã

t = 0; % Thời gian ban đầu = 0 giây tạm dừng (5)% Cung cấp thời gian để người dùng bật công tắc nhiệt độ SWITCH = readDigitalPin (a, 'D11'); % Thu thập dữ liệu về công tắc ở chân D11 trong khi SWITCH == 0 SWITCH = readDigitalPin (a, 'D11'); % Thu thập dữ liệu về công tắc ở chân D11 điện áp = readVoltage (a, 'A1'); % Đọc điện áp từ cảm biến nhiệt độ temp_C = (điện áp. * 1000 - 500)./ 10; % Chuyển đổi điện áp thành nhiệt độ theo ° C temp_F = (9/5). * Temp_C + 32; % Chuyển đổi từ ° C sang ° F biểu đồ (t, temp_C, 'b.') Giữ trên tiêu đề ('Nhiệt độ phòng'); xlabel ('Thời gian tính bằng giây'); ylabel ('Nhiệt độ'); trục ([0, 180, 0, 100]); plot (t, temp_F, 'r.') chú giải ('Nhiệt độ tính bằng ° C', 'Nhiệt độ tính bằng ° F') pause (1); t = t + 1; % Bộ đếm thời gian tính bằng giây% Phần E-mail b_temp = readDigitalPin (a, 'D0'); % Thu thập dữ liệu của nút nhiệt độ (màu xanh lam) ở chân D0 if b_temp == 0 setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % Sender setpref ('Internet', 'SMTP_Username', '[email protected]'); % Tên người dùng của người gửi setpref ('Internet', 'SMTP_Password', 'Integral_ecoTECH'); % Đạo cụ mật khẩu của người gửi = 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] ',' ecoTECH Room Nhiệt độ ', sprintf (' Nhiệt độ phòng hiện tại là%.1f ° C hoặc%.1f ° F. ', temp_C, temp_F)); % Gửi e-mail đến người nhận cung cấp dữ liệu về nhiệt độ phòng hiện tại fprintf ('Đã gửi e-mail thành công! / N') kết thúc nếu temp_F> = 75% Nếu nhiệt độ phòng tăng lên 75 ° F… temp_AC = 65; % Thay đổi nhiệt độ trên bộ điều chỉnh nhiệt thành 65 ° F elseif temp_F <= 65% Nếu nhiệt độ phòng giảm xuống 60 ° F… temp_AC = 80; % Thay đổi nhiệt độ trên bộ điều nhiệt thành 80 ° F end end% End of "SWITCH == 0" Vòng lặp while nếu nguồn == "tắt" || ii == 1% Thoát "power == on" trong khi kết thúc ngắt vòng lặp% Kết thúc "power == on" vòng lặp while nếu nguồn == "tắt" || ii == 1% Thoát toàn bộ kết thúc ngắt vòng lặp while

Đây chỉ là một cái nhìn tổng quan ngắn gọn về mã và khả năng hoạt động của nó. Chúng tôi đã đính kèm mã đầy đủ dưới dạng pdf nếu cần

Dưới đây là danh sách mỗi thiết bị được nối dây vào cổng nào

1. LED RGB: Chân kỹ thuật số (7, 8, 9)

2. Servo: Chân số 6

3. Các nút: Ghim kỹ thuật số (1, 2, 3, 4, 5)

4. Nút màu xanh lam cho email: Ghim kỹ thuật số 0

5. Cảm biến nhiệt độ: Chân tương tự 1

6. Công tắc: Chân số 11

Đề xuất: