Daftar Isi:

Mikrokontroler Terkendali MATLAB (Arduino MKR1000): 4 Langkah
Mikrokontroler Terkendali MATLAB (Arduino MKR1000): 4 Langkah

Video: Mikrokontroler Terkendali MATLAB (Arduino MKR1000): 4 Langkah

Video: Mikrokontroler Terkendali MATLAB (Arduino MKR1000): 4 Langkah
Video: Как использовать Arduino в Matlab и Simulink | матлаб ардуино | интерфейс матлаб ардуино 2024, Juli
Anonim
Mikrokontroler Terkendali MATLAB (Arduino MKR1000)
Mikrokontroler Terkendali MATLAB (Arduino MKR1000)

Tujuan dari proyek kami adalah untuk memanfaatkan MATLAB serta Arduino MKR1000 dengan kemampuan terbaik kami. Tujuan kami adalah membuat skrip yang memungkinkan fitur tertentu dari arduino untuk melakukan output tertentu berdasarkan input tertentu. Kami menggunakan banyak loop dan pernyataan kondisional yang ditampilkan dalam MATLAB yang memungkinkan hal ini. Kami juga menggunakan MATLAB mobile dengan menggunakan data yang diperoleh dari giroskop perangkat mobile untuk meningkatkan proyek sebanyak mungkin.

Langkah 1: Bagian dan Bahan

Bagian dan Bahan
Bagian dan Bahan
Bagian dan Bahan
Bagian dan Bahan
Bagian dan Bahan
Bagian dan Bahan

MATLAB 2018a

-MaTLAB versi 2018 adalah versi yang paling disukai, sebagian besar karena berfungsi paling baik dengan kode yang terhubung ke perangkat seluler. Namun, sebagian besar kode kami dapat ditafsirkan oleh sebagian besar versi MATLAB.

Arduino MKR1000

-Ini adalah perangkat khusus yang memungkinkan kita untuk menghubungkan sirkuit ke port digital dan analog. Sangat penting bahwa Anda juga memiliki papan tempat memotong roti untuk menyertainya.

Aksesoris

-Saat menggunakan MKR1000, kami membutuhkan suku cadang aksesori untuk menjalankan fungsi yang diperlukan.

Ini termasuk

  1. Servo
  2. Tombol (6)
  3. Lampu LED RBG yang dapat dipertukarkan
  4. Kabel Sederhana
  5. papan tempat memotong roti
  6. saklar daya mini
  7. sensor temperatur
  8. resistor 330 ohm
  9. Resistor 10K ohm
  10. Kabel USB-microUSB
  11. Laptop/desktop
  12. Perangkat seluler

Perlu juga dicatat bahwa masih banyak lagi aksesori yang dapat digunakan dengan MKR1000

Langkah 2: Paket Dukungan MATLAB Arduino

Untuk menggunakan Arduino MKR1000 melalui MATLAB dengan benar, Anda harus mengunduh Paket Dukungan MATLAB untuk Perangkat Keras Arduino. Unduhan ini memberi Anda akses ke fungsi dan perintah tertentu langsung ke papan arduino.

Anda dapat mengunduh paket di tautan di bawah ini

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

Langkah 3: Menggunakan Sensor Data yang Diperoleh Dari Perangkat Seluler

Menggunakan Sensor Data yang Diperoleh Dari Perangkat Seluler
Menggunakan Sensor Data yang Diperoleh Dari Perangkat Seluler

Aplikasi MATLAB Mobile memungkinkan kita menggunakan perangkat seluler 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 variabel untuk setiap kolom matriks orientasi (Azimuth, Pitch, dan Roll), dan mengindeks aliran nilai yang konstan dari perangkat seluler ke komputer. Hal ini memungkinkan kita untuk membuat pernyataan kondisional yang akan membentuk sebuah output jika MATLAB mengambil input data tertentu dari perangkat mobile. Untuk melakukan ini, Anda memerlukan MATLAB mobile pada perangkat mobile Anda, dan paket dukungan perangkat mobile untuk MATLAB pada komputer Anda.

Filenya bisa di download di link di bawah ini

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

Langkah 4: Kode dan Port Pengkabelan

Kode dimulai dengan pesan startup yang menanyakan apakah kita ingin memulai perangkat keamanan rumah kita. Jika kami menjawab ya, dan memberikan kode sandi yang benar, skrip langsung melompat ke loop sementara. Dari sana, ia mulai mengumpulkan data dari perangkat seluler. Ada kondisional yang membaca data ini. Kami dapat membuka kunci dan mengunci sistem dari perangkat seluler kami, dan kode akan mengubah servo dan berkedip lampu LED tergantung pada data yang diberikan dari perangkat seluler

startup = questdlg('Apakah Anda ingin mengaktifkan EcoTECH Smart Home Energy System?'); % Memulai urutan aktivasi ecoTECHwaitfor(startup); if startup == "Yes" % Jika "Yes" dipilih, urutan aktivasi dimulai dan memasuki loop while di akhir power = "on"; m1 = msgbox('Memulai ecoTECH…'); jeda (2); hapus (m1); m1_wait = waitbar(0, 'Mohon tunggu…'); langkah = 25; untuk i = 1:langkah jeda(.1); bilah tunggu(i/langkah); % Memperbarui penghapusan akhir bilah tunggu(m1_wait); KODE SANDI = [0 0 0 0]; % Menginisialisasi kode sandi ii = 0; % Menginisialisasi variabel yang digunakan untuk keluar dari loop m2 = msgbox('ecoTECH beroperasi penuh!'); jeda (2); hapus (m2); elseif startup == "Tidak" || startup == "Cancel" % Jika "No" atau "Cancel" dipilih maka urutan aktivasi tidak dimulai dan tidak masuk ke while loop power = "off"; m3 = msgbox('Oke! Selamat tinggal!'); jeda (2); hapus (m3); akhir

% ecoTECH di Bagian Tindakan while true while power == "on" % Bagian Mobile Key while true % Mengumpulkan data tentang orientasi Roll perangkat seluler KEY = m. Orientation(3); % Mengumpulkan data tentang tombol b2 = readDigitalPin(a, 'D2'); % Tombol 2 (Merah) b3 = readDigitalPin(a, 'D3'); % Tombol 3 (Putih) if KEY >= 35 % dalam derajat m4 = msgbox('Welcome Home!'); writeDigitalPin(a, 'D8', 1); % Menyalakan jeda lampu hijau(.5); writePosition(s, 1); % Memutar servo untuk membuka kunci jeda pintu (2); writeDigitalPin(a, 'D8', 0); % Mematikan lampu hijau hapus(m4); elseif KEY <= -35 % dalam derajat m5 = msgbox('Pintu Terkunci!'); writeDigitalPin(a, 'D7', 1); % Menyalakan jeda lampu merah(.5); writePosition(s, 0); % Memutar servo untuk mengunci jeda pintu (2); writeDigitalPin(a, 'D7', 0); % Mematikan lampu merah hapus(m5); ii = 1; break % Keluar while loop yang berisi kunci ponsel jika pintu dikunci menggunakan perangkat seluler elseif b2 == 0 && b3 == 0 % Keluar while loop yang berisi kunci ponsel untuk masuk ke bagian kode sandi break end end

Setelah ini, ia dapat memasuki loop while lainnya. Perulangan while ini mengontrol hasil berdasarkan masukan dari tombol. Jika loop while pertama diabaikan, atau penguncian manual diperlukan, loop while akan memasuki loop while lain di mana kata sandi tertentu diperlukan. Jika kata sandi salah, itu akan memulai ulang loop

while true if ii == 1 % Keluar while loop berisi kode sandi jika pintu dibuka dengan perangkat seluler break end % Mengumpulkan data tentang tombol b5 = readDigitalPin(a, 'D5'); % Tombol 5 (Biru) b1 = readDigitalPin(a, 'D1'); % Tombol 1 (Hitam) b4 = readDigitalPin(a, 'D4'); % Tombol 4 (Putih) if b5 == 0 % Mulai memasukkan kode sandi bagian untuk b = 1:5 m6 = msgbox('Silakan Tekan Dan Tahan Tombol A'); jeda (2); hapus (m6); % Mengumpulkan data tentang tombol b1 = readDigitalPin(a, 'D1'); % Tombol 1 (Hitam) b2 = readDigitalPin(a, 'D2'); % Tombol 2 (Merah) b3 = readDigitalPin(a, 'D3'); % Tombol 3 (Putih) b4 = readDigitalPin(a, 'D4'); % Tombol 4 (Kuning) b5 = readDigitalPin(a, 'D5'); % Tombol 5 (Biru) % Mengganti nilai dalam kode sandi awal satu per satu jika b1 == 0 KODE SANDI(0+b) = 1; elseif b2 == 0 KODE SANDI(0+b) = 2; elseif b3 == 0 KODE SANDI(0+b) = 3; elseif b4 == 0 KODE SANDI(0+b) = 4; elseif b5 == 0 KODE SANDI = sprintf('%.0f%.0f%.0f%.0f', KODE SANDI(1), KODE SANDI(2), KODE SANDI(3), KODE SANDI(4)); % Mengubah urutan tombol yang ditekan menjadi angka kemudian mengubahnya menjadi string end end % End of for loop untuk memasukkan angka untuk kode sandi jika KODE SANDI == "2314" % Jika kode sandi yang dimasukkan cocok maka pintu terbuka selama beberapa detik kemudian terkunci m7 = msgbox('Selamat Datang di Rumah!'); writeDigitalPin(a, 'D8', 1); % Menyalakan jeda lampu hijau(.5); writePosition(s, 1); % Memutar servo untuk membuka kunci jeda pintu (5); writeDigitalPin(a, 'D8', 0); % Mematikan jeda lampu hijau(.1); writeDigitalPin(a, 'D7', 1); % Menyalakan lampu merah jeda(.5); writePosition(s, 0); % Memutar servo untuk mengunci pintu jeda(1); writeDigitalPin(a, 'D7', 0); % Mematikan lampu merah hapus(m7); ii = 1; break % Keluar while loop yang berisi kode sandi setelah memasukkan kode sandi yang benar elseif PASSCODE ~= "2314" writeDigitalPin(a, 'D7', 1); % Menyalakan lampu merah m8 = msgbox('Kode Sandi Salah! Coba Lagi!'); waitfor(m8) writeDigitalPin(a, 'D7', 0); % Mematikan lampu merah lanjutkan % Memungkinkan Anda memasukkan kembali kode sandi end elseif b1 == 0 && b4 == 0 % Keluar saat loop berisi bagian kode sandi jika Anda tidak ingin memasukkan kode sandi ii = 1; ujung putus

Jika benar, ia akan segera memasuki loop sementara yang mengontrol sensor suhu. Jika sakelar aktif, loop akan terus berlanjut dan memplot plot suhu vs. waktu, memungkinkan seseorang untuk melihat tren. Jika tombol yang terhubung ke sensor suhu ditekan, itu juga akan mengirim email yang memberi tahu Anda berapa suhu di "rumah" Anda. Jika sakelar dimatikan, itu akan segera mengakhiri kode

t = 0; % Waktu awal = 0 detik jeda(5) % Memberikan waktu bagi pengguna untuk menghidupkan sakelar suhu SWITCH = readDigitalPin(a, 'D11'); % Mengumpulkan data tentang sakelar di pin D11 sementara SWITCH == 0 SWITCH = readDigitalPin(a, 'D11'); % Mengumpulkan data tentang sakelar di pin D11 voltage = readVoltage(a, 'A1'); % Membaca tegangan dari sensor suhu temp_C = (tegangan.*1000 - 500)./10; % Mengubah tegangan menjadi suhu dalam °C temp_F = (9/5).*temp_C + 32; % Mengkonversi dari plot °C ke °F(t, temp_C, 'b.') hold on title('Suhu Ruangan'); xlabel('Waktu dalam Detik'); ylabel('Suhu'); sumbu([0, 180, 0, 100]); plot(t, temp_F, 'r.') legend('Suhu dalam °C', 'Suhu dalam °F') pause(1); t = t + 1; % Penghitung waktu dalam detik % Bagian Email b_temp = readDigitalPin(a, 'D0'); % Mengumpulkan data tombol suhu (biru) di pin 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]'); % Nama pengguna pengirim setpref('Internet', 'SMTP_Password', 'Integral_ecoTECH'); % Alat peraga kata sandi 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 ruangan saat ini adalah %.1f °C atau %.1f °F.', temp_C, temp_F)); % Mengirim e-mail ke penerima yang memberikan data tentang suhu ruangan saat ini fprintf('Email berhasil dikirim!\n') end if temp_F >= 75 % Jika suhu ruangan meningkat menjadi 75 °F… temp_AC = 65; % Mengubah suhu pada termostat menjadi 65 °F jika tidak temp_F <= 65 % Jika suhu ruangan turun menjadi 60 °F… temp_AC = 80; % Mengubah suhu pada termostat menjadi 80 °F akhir akhir % Akhir "SWITCH == 0" sementara loop jika daya == "mati" || ii == 1 % Keluar dari "power == on" saat loop break end end % Akhir dari "power == on" while loop jika power == "off" || ii == 1% Keluar keseluruhan saat loop break end

Ini hanya gambaran singkat tentang kode dan fungsinya. Kami telah melampirkan kode lengkap sebagai pdf jika diperlukan

Berikut adalah daftar port yang digunakan setiap perangkat

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

2. Servo: Pin Digital 6

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

4. Tombol Biru untuk email: Pin Digital 0

5. Sensor Suhu: Pin Analog 1

6. Beralih: Pin Digital 11

Direkomendasikan: