Isi kandungan:

MATLAB terkawal mikrokontroler (Arduino MKR1000): 4 Langkah
MATLAB terkawal mikrokontroler (Arduino MKR1000): 4 Langkah

Video: MATLAB terkawal mikrokontroler (Arduino MKR1000): 4 Langkah

Video: MATLAB terkawal mikrokontroler (Arduino MKR1000): 4 Langkah
Video: How to use arduino in matlab and simulink | matlab arduino | arduino matlab interface 2024, November
Anonim
MATLAB terkawal mikrokontroler (Arduino MKR1000)
MATLAB terkawal mikrokontroler (Arduino MKR1000)

Matlamat projek kami adalah untuk memanfaatkan MATLAB dan juga Arduino MKR1000 dengan sebaik mungkin. Tujuan kami adalah untuk membuat skrip yang memungkinkan ciri-ciri tertentu dari arduino untuk melakukan output tertentu berdasarkan input tertentu. Kami menggunakan banyak gelung dan pernyataan bersyarat yang terdapat dalam MATLAB yang memungkinkan ini. Kami juga menggunakan MATLAB mobile dengan menggunakan data yang diperoleh dari giroskop peranti mudah alih untuk meningkatkan projek sebanyak mungkin.

Langkah 1: Bahagian dan Bahan

Bahagian dan Bahan
Bahagian dan Bahan
Bahagian dan Bahan
Bahagian dan Bahan
Bahagian dan Bahan
Bahagian dan Bahan

MATLAB 2018a

MATLAB versi 2018 adalah versi yang paling disukai, terutamanya kerana ia berfungsi paling baik dengan kod yang menghubungkan ke peranti mudah alih. Walau bagaimanapun, sebahagian besar kod kami dapat ditafsirkan oleh kebanyakan versi MATLAB.

Arduino MKR1000

-Ini adalah peranti khusus yang membolehkan kita memasangkan litar ke port digital dan analog. Anda juga mesti mempunyai papan roti untuk menggunakannya.

Aksesori

-Ketika menggunakan MKR1000, kami memerlukan bahagian aksesori untuk melaksanakan fungsi yang diperlukan.

Ini termasuk

  1. Servo
  2. Butang (6)
  3. Lampu LED RBG yang boleh ditukar ganti
  4. Wayar Mudah
  5. papan roti
  6. suis kuasa mini
  7. Pengesan suhu
  8. Perintang 330 ohm
  9. Perintang 10K ohm
  10. Kabel USB-microUSB
  11. Komputer riba / desktop
  12. Peranti mudah alih

Juga perlu diperhatikan bahawa terdapat banyak, banyak lagi aksesori yang dapat digunakan dengan MKR1000

Langkah 2: Pakej Sokongan MATLAB Arduino

Untuk menggunakan Arduino MKR1000 dengan betul melalui MATLAB, anda mesti memuat turun Pakej Sokongan MATLAB untuk Arduino Hardware. Muat turun ini memberi anda akses ke fungsi dan perintah tertentu terus ke papan arduino.

Anda boleh memuat turun pakej di pautan di bawah

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

Langkah 3: Menggunakan Sensor Data yang Diperolehi dari Peranti Mudah Alih

Menggunakan Sensor Data yang Diperolehi dari Peranti Mudah Alih
Menggunakan Sensor Data yang Diperolehi dari Peranti Mudah Alih

Aplikasi MATLAB Mobile membolehkan kita menggunakan peranti mudah alih untuk mengalirkan data dengan menggunakan giroskopnya. Untuk memperoleh data melalui MATLAB, kami memperoleh data dengan mengambilnya dari matriks orientasi dari MATLAB mobile. Kami melakukan ini dengan membuat pemboleh ubah untuk setiap lajur matriks orientasi (Azimuth, Pitch, dan Roll), dan mengindeks aliran arus berterusan dari peranti mudah alih ke komputer. Ini membolehkan kita membuat pernyataan bersyarat yang akan menghasilkan output jika MATLAB mengambil input data tertentu dari peranti mudah alih. Untuk melakukan ini, anda memerlukan MATLAB mudah alih pada peranti mudah alih anda, dan pakej sokongan peranti mudah alih untuk MATLAB di komputer anda.

Anda boleh memuat turun fail di pautan di bawah

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

Langkah 4: Pelabuhan Kod dan Pendawaian

Kodnya bermula dengan mesej permulaan yang bertanya sama ada kita mahu memulakan peranti keselamatan rumah kita. Sekiranya kita menjawab ya, dan memberikan kod laluan yang betul, skrip akan segera beralih ke gelung sementara. Dari sana, ia mula mengumpulkan data dari peranti mudah alih. Terdapat syarat yang membaca data ini. Kami dapat membuka kunci dan mengunci sistem dari peranti mudah alih kami, dan kodnya akan menghidupkan servo dan mengedipkan lampu LED bergantung pada data yang diberikan dari peranti mudah alih

startup = questdlg ('Adakah anda ingin mengaktifkan Sistem Tenaga Rumah Pintar ecoTECH?'); Memulakan urutan pengaktifan ecoTECHwaitfor (permulaan); jika permulaan == "Ya"% Jika "Ya" dipilih urutan pengaktifan bermula dan memasuki gelung sementara pada daya akhir = "on"; m1 = msgbox ('Memulakan ecoTECH …'); berhenti seketika (2); padam (m1); m1_wait = bar tunggu (0, 'Sila tunggu …'); langkah = 25; untuk i = 1: langkah berhenti (.1); bar tunggu (i / langkah); % Mengemas kini penghapus akhir bar tunggu (m1_wait); LULUS = [0 0 0 0]; % Memulakan kod laluan ii = 0; % Memulakan pemboleh ubah yang digunakan untuk melepaskan gelung m2 = msgbox ('ecoTECH beroperasi sepenuhnya!'); berhenti seketika (2); padam (m2); elseif permulaan == "Tidak" || startup == "Batal"% Jika "Tidak" atau "Batal" dipilih maka urutan pengaktifan tidak bermula dan tidak memasuki daya gelung sementara = "mati"; m3 = msgbox ('Baiklah! Selamat tinggal!'); berhenti seketika (2); padam (m3); akhir

% ecoTECH di Bahagian Tindakan sementara benar sementara kuasa == "pada"% Bahagian Kekunci Mudah Alih sementara benar% Mengumpulkan data mengenai Roll orientasi peranti mudah alih KEY = m. Orientation (3); % Mengumpulkan data mengenai butang b2 = readDigitalPin (a, 'D2'); % Butang 2 (Merah) b3 = readDigitalPin (a, 'D3'); % Button 3 (Putih) jika KEY> = 35% dalam darjah m4 = msgbox ('Welcome Home!'); tulisDigitalPin (a, 'D8', 1); % Menghidupkan jeda lampu hijau (.5); writePosition (s, 1); % Menghidupkan servo untuk membuka kunci jeda pintu (2); tulisDigitalPin (a, 'D8', 0); % Mematikan penghapusan lampu hijau (m4); elseif KEY <= -35% dalam darjah m5 = msgbox ('Door Locked!'); tulisDigitalPin (a, 'D7', 1); % Menghidupkan jeda lampu merah (.5); writePosition (s, 0); % Menghidupkan servo untuk mengunci jeda pintu (2); tulisDigitalPin (a, 'D7', 0); % Mematikan padam lampu merah (m5); ii = 1; break% Exits while loop yang mengandungi kunci mudah alih jika pintu dikunci menggunakan peranti mudah alih lain jika b2 == 0 && b3 == 0% Keluar sementara gelung yang mengandungi kunci mudah alih untuk memasukkan bahagian kod laluan akhir akhir

Selepas ini, ia boleh memasuki loop sementara yang lain. Lingkaran sementara ini mengawal hasil berdasarkan input dari butang. Sekiranya gelung sementara pertama diabaikan, atau penguncian manual diperlukan, ia akan memasuki gelung sementara yang mana kata laluan tertentu diperlukan. Sekiranya kata laluan tidak betul, ia akan memulakan semula gelung

sementara benar jika ii == 1% Keluar semasa gelung yang mengandungi kod laluan jika pintu tidak dikunci dengan peranti mudah alih berhenti akhir% Mengumpulkan data mengenai butang b5 = readDigitalPin (a, 'D5'); % Butang 5 (Biru) b1 = readDigitalPin (a, 'D1'); % Butang 1 (Hitam) b4 = readDigitalPin (a, 'D4'); % Button 4 (Putih) jika b5 == 0% Memulakan bahagian memasukkan kod laluan untuk b = 1: 5 m6 = msgbox ('Sila Tekan Dan Tahan Butang'); berhenti seketika (2); padam (m6); % Mengumpulkan data mengenai butang b1 = readDigitalPin (a, 'D1'); % Butang 1 (Hitam) b2 = readDigitalPin (a, 'D2'); % Butang 2 (Merah) b3 = readDigitalPin (a, 'D3'); % Butang 3 (Putih) b4 = readDigitalPin (a, 'D4'); % Butang 4 (Kuning) b5 = readDigitalPin (a, 'D5'); % Button 5 (Blue)% Menggantikan nilai dalam kod laluan awal satu demi satu jika b1 == 0 PASSCODE (0 + b) = 1; elseif b2 == 0 PASSKOD (0 + b) = 2; elseif b3 == 0 PASSKOD (0 + b) = 3; elseif b4 == 0 PASSKOD (0 + b) = 4; elseif b5 == 0 PASSCODE = sprintf ('%. 0f%.0f%.0f%.0f', PASSCODE (1), PASSCODE (2), PASSCODE (3), PASSCODE (4)); % Mengubah urutan butang yang ditekan menjadi angka kemudian mengubahnya menjadi hujung hujung rentetan m7 = msgbox ('Selamat Datang di Rumah!'); tulisDigitalPin (a, 'D8', 1); % Menghidupkan jeda lampu hijau (.5); writePosition (s, 1); % Menghidupkan servo untuk membuka kunci jeda pintu (5); tulisDigitalPin (a, 'D8', 0); % Mematikan jeda lampu hijau (.1); tulisDigitalPin (a, 'D7', 1); % Menghidupkan jeda lampu merah (.5); writePosition (s, 0); % Menghidupkan servo untuk mengunci jeda pintu (1); tulisDigitalPin (a, 'D7', 0); % Mematikan padam lampu merah (m7); ii = 1; break% Exits while loop yang mengandungi kod laluan setelah memasukkan kod laluan yang betul lain jika PASSCODE ~ = "2314" writeDigitalPin (a, 'D7', 1); % Menghidupkan lampu merah m8 = msgbox ('Kod Laluan Salah! Cuba Lagi!'); waitfor (m8) writeDigitalPin (a, 'D7', 0); % Mematikan lampu merah terus% Membolehkan anda memasukkan semula kod laluan lain jika b1 == 0 && b4 == 0% Keluar semasa gelung mengandungi bahagian kod laluan jika anda tidak mahu memasukkan kod laluan ii = 1; putus akhir

Sekiranya betul, ia akan segera memasuki gelung sementara yang mengawal sensor suhu. Sekiranya suis dihidupkan, gelung akan berterusan dan plot plot suhu berbanding masa, yang membolehkan seseorang melihat arah aliran. Sekiranya butang yang disambungkan ke sensor suhu ditekan, ia juga akan menghantar e-mel yang memberitahu anda berapa suhu di "rumah" anda. Sekiranya suis dimatikan, ia akan segera mengakhiri kodnya

t = 0; % Masa awal = 0 saat berhenti (5)% Memberi masa untuk pengguna menghidupkan suis suhu SWITCH = readDigitalPin (a, 'D11'); % Mengumpulkan data mengenai pertukaran pin D11 sementara SWITCH == 0 SWITCH = readDigitalPin (a, 'D11'); % Mengumpulkan data mengenai pertukaran voltan pin D11 = readVoltage (a, 'A1'); % Membaca voltan dari suhu suhu temp_C = (voltan. * 1000 - 500)./ 10; % Menukar voltan menjadi suhu dalam ° C temp_F = (9/5). * Temp_C + 32; % Menukar dari ° C ke ° F plot (t, temp_C, 'b.') Tahan pada tajuk ('Suhu Bilik'); xlabel ('Masa dalam Detik'); ylabel ('Suhu'); paksi ([0, 180, 0, 100]); plot (t, temp_F, 'r.') legenda ('Temperature in ° C', 'Temperature in ° F') jeda (1); t = t + 1; % Pembilang masa dalam beberapa saat% Bahagian E-mel b_temp = readDigitalPin (a, 'D0'); % Mengumpulkan data butang suhu (biru) di pin D0 jika b_temp == 0 setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % Pengirim setpref ('Internet', 'SMTP_Username', '[email protected]'); % Nama pengguna pengirim setpref ('Internet', 'SMTP_Password', 'Integral_ecoTECH'); % Props kata laluan Pengirim = java.lang. System.getProperties; props.setProperty ('mail.smtp.auth', 'benar'); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.port', '465'); sendmail ('[email protected] ',' ecoTECH Room Temperature ', sprintf (' Suhu bilik semasa adalah%.1f ° C atau%.1f ° F. ', temp_C, temp_F)); % Menghantar e-mel kepada penerima yang memberikan data mengenai suhu bilik semasa fprintf ('E-mel berjaya dihantar! / N') berakhir jika temp_F> = 75% Sekiranya suhu bilik meningkat hingga 75 ° F … temp_AC = 65; % Menukar suhu pada termostat menjadi 65 ° F lain jika temp_F <= 65% Sekiranya suhu bilik menurun hingga 60 ° F… temp_AC = 80; % Menukar suhu pada termostat hingga akhir 80 ° F% Akhir "SWITCH == 0" sambil gelung jika kuasa == "mati" || ii == 1% Keluar "power == on" sementara hujung putus gelung% Akhir "power == on" manakala gelung jika kuasa == "mati" || ii == 1% Keluar keseluruhan sementara putus putaran berakhir

Ini hanyalah gambaran keseluruhan ringkas mengenai kod dan kebolehfungsiannya. Kami telah melampirkan kod penuh sebagai pdf jika diperlukan

Berikut adalah senarai port mana yang disambungkan oleh setiap peranti

1. LED RGB: Pin Digital (7, 8, 9)

2. Servo: Pin Digital 6

3. Butang: Pin Digital (1, 2, 3, 4, 5)

4. Butang Biru untuk e-mel: Pin Digital 0

5. Sensor Suhu: Pin Analog 1

6. Suis: Pin Digital 11

Disyorkan: