Mündəricat:

MATLAB tərəfindən idarə olunan mikro nəzarətçi (Arduino MKR1000): 4 addım
MATLAB tərəfindən idarə olunan mikro nəzarətçi (Arduino MKR1000): 4 addım

Video: MATLAB tərəfindən idarə olunan mikro nəzarətçi (Arduino MKR1000): 4 addım

Video: MATLAB tərəfindən idarə olunan mikro nəzarətçi (Arduino MKR1000): 4 addım
Video: ESP32, WLED mikroproqramında ünvanlanan LED-lərə nəzarət edirik, Home Assistant-da istifadə edirik 2024, Iyul
Anonim
MATLAB tərəfindən idarə olunan mikro nəzarətçi (Arduino MKR1000)
MATLAB tərəfindən idarə olunan mikro nəzarətçi (Arduino MKR1000)

Layihəmizin məqsədi MATLAB və Arduino MKR1000 -dən bacardığımız qədər istifadə etmək idi. Məqsədimiz, arduinonun müəyyən xüsusiyyətlərinin müəyyən bir girişə əsaslanaraq müəyyən bir çıxışı yerinə yetirməsinə imkan verən bir skript yaratmaq idi. Bunu mümkün edən MATLAB -da göstərilən bir çox döngə və şərti ifadələrdən istifadə etdik. Layihəni mümkün qədər inkişaf etdirmək üçün bir mobil cihazın giroskopundan əldə edilən məlumatlardan istifadə edərək MATLAB mobile -dan da istifadə etdik.

Addım 1: hissələr və materiallar

Parçalar və materiallar
Parçalar və materiallar
Parçalar və materiallar
Parçalar və materiallar
Parçalar və materiallar
Parçalar və materiallar

MATLAB 2018a

-MATLAB -ın 2018 versiyası, ən çox mobil cihaza qoşulan kodla işlədiyi üçün ən çox seçilən versiyadır. Bununla birlikdə kodumuzun əksəriyyəti MATLAB versiyalarının əksəriyyəti tərəfindən şərh edilə bilər.

Arduino MKR1000

-Bu, həm rəqəmsal, həm də analoq portlara qədər dövrələr bağlamağımıza imkan verən xüsusi bir cihazdır. Bununla birlikdə getmək üçün bir çörək taxtanız olması da vacibdir.

Aksesuarlar

-MKR1000 -dən istifadə edərkən lazımi funksiyaları yerinə yetirmək üçün aksesuar hissələrinə ehtiyacımız var idi.

Bura daxildir

  1. Servo
  2. Düymə (6)
  3. Dəyişdirilə bilən RBG LED işığı
  4. Sadə tellər
  5. çörək taxtası
  6. mini güc açarı
  7. temperatur sensoru
  8. 330 ohm müqavimət
  9. 10K ohm müqavimət
  10. USB-microUSB kabeli
  11. Laptop/masa üstü
  12. Mobil cihaz

Qeyd etmək lazımdır ki, MKR1000 ilə istifadə oluna biləcək daha çox aksesuar var

Addım 2: MATLAB Arduino Dəstək Paketi

MATLAB vasitəsilə Arduino MKR1000 -dən düzgün istifadə etmək üçün Arduino Donanımı üçün MATLAB Dəstək Paketini yükləməlisiniz. Bu yükləmə, müəyyən funksiyalara və əmrlərə birbaşa arduino lövhəsinə daxil olmaq imkanı verir.

Paketi aşağıdakı linkdən yükləyə bilərsiniz

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

Addım 3: Mobil Cihazdan Alınan Məlumat Sensorlarından istifadə

Mobil Cihazdan Alınan Məlumat Sensorlarından İstifadə
Mobil Cihazdan Alınan Məlumat Sensorlarından İstifadə

MATLAB Mobile tətbiqi, giroskopundan istifadə edərək məlumat axını üçün mobil cihazdan istifadə etməyə imkan verir. Məlumatları MATLAB vasitəsi ilə əldə etmək üçün məlumatları MATLAB mobile -dan oriyentasiya matrisindən əldə edərək əldə edirik. İstiqamət matrisinin hər bir sütunu üçün bir dəyişən (Azimuth, Pitch və Roll) yaradaraq və mobil cihazdan kompüterə sabit dəyər axını indeksləşdirərək bunu edirik. Bu, MATLAB mobil cihazdan xüsusi bir məlumat girişi alarsa, bir çıxış hazırlayacaq şərtli ifadələr yaratmağa imkan verir. Bunu etmək üçün mobil cihazınızda MATLAB mobile və kompüterinizdə MATLAB üçün mobil cihaz dəstək paketinə ehtiyacınız olacaq.

Faylı aşağıdakı linkdən yükləyə bilərsiniz

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

Addım 4: Kod və Kabel Limanları

Kod, ev təhlükəsizlik cihazımızı işə salmaq istədiyimizi soruşan bir başlanğıc mesajı ilə başlayır. Bəli cavab verərik və düzgün şifrəni verəriksə, skript dərhal bir müddət döngəsinə daxil olur. Oradan mobil cihazdan məlumat toplamağa başlayır. Bu məlumatları oxuyan şərtlər var. Sistemi mobil cihazımızdan aça və kilidləyə bilərik və kod, servo cihazını çevirəcək və mobil cihazdan verilən məlumatlara görə LED işığını yanıb sönəcək

startup = questdlg ('ecoTECH Ağıllı Ev Enerji Sistemini aktivləşdirmək istərdinizmi?'); EcoTECHwaitfor (başlanğıc) aktivləşdirmə ardıcıllığına başlayır; əgər başlanğıc == "Bəli" % "Bəli" seçilsə, aktivləşdirmə ardıcıllığı başlayır və gücün sonunda "loop" a daxil olur; m1 = msgbox ('ecoTECH işə salınır …'); fasilə (2); silmək (m1); m1_wait = waitbar (0, 'Zəhmət olmasa gözləyin…'); addımlar = 25; i = 1 üçün: addımlar fasilə (.1); gözləmə çubuğu (i/addımlar); % Gözləmə çubuğunun silinməsini yeniləyir (m1_wait); PASCODE = [0 0 0 0]; % İi = 0 parolunu işə salır; Döngələrdən çıxmaq üçün istifadə olunan bir dəyişəni işə salır m2 = msgbox ('ecoTECH tam işləkdir!'); fasilə (2); sil (m2); elseif başlanğıc == "Xeyr" || başlanğıc == "Ləğv et" % "Xeyr" və ya "İptal et" seçilsə, aktivləşdirmə ardıcıllığı başlamaz və halqa gücünə daxil deyil = "off"; m3 = msgbox ('Tamam! Əlvida!'); fasilə (2); silmək (m3); bitmək

Fəaliyyət Bölməsində % ecoTECH güc isə == "aktivdir" % Mobil Açar Bölməsi doğru olarkən Mobil cihazın Roll oriyentasiyası haqqında məlumat toplayır KEY = m. Orientation (3); B2 = readDigitalPin (a, 'D2') düymələri haqqında məlumat toplayır; Düymə 2 (Qırmızı) b3 = readDigitalPin (a, 'D3'); % Düymə 3 (Ağ), əgər KEY> = 35 % dərəcə ilə m4 = msgbox ('Xoş gəldiniz Evə!'); writeDigitalPin (a, 'D8', 1); Yaşıl işıq fasiləsini açar (.5); yazma mövqeyi (lər, 1); Qapı fasiləsi (2) kilidini açmaq üçün servo çevirir; writeDigitalPin (a, 'D8', 0); Yaşıl işıq silinməsini söndürür (m4); elseif KEY <= -35 % dərəcə m5 = msgbox ('Qapı Kilidli!'); writeDigitalPin (a, 'D7', 1); Qırmızı işıq fasiləsini açar (.5); yazma mövqeyi (lər, 0); Qapı fasiləsini kilidləmək üçün servo çevirir (2); writeDigitalPin (a, 'D7', 0); Qırmızı işıq silinməsini söndürür (m5); ii = 1; fasilə % Qapı mobil cihazdan istifadə edilərsə mobil açarı olan döngədən çıxarsa b2 == 0 && b3 == 0 % Şifrə bölməsinə girmək üçün mobil açarı olan döngədən çıxır

Bundan sonra başqa bir döngə daxil edə bilər. Bu isə loop düymələrdəki girişlərə əsaslanaraq nəticələrə nəzarət edir. İlk while döngəsi əhəmiyyətsizdirsə və ya əllə kilidləmə tələb olunarsa, müəyyən bir şifrənin lazım olduğu başqa bir müddət döngəsinə girəcəkdir. Şifrə səhv olarsa, döngə yenidən başlayacaq

ii == 1 % olarsa doğru olar Qapı mobil cihazla açılırsa parolu ehtiva edən döngədən çıxır % b5 = readDigitalPin (a, 'D5') düymələri haqqında məlumat toplayır; % Button 5 (Mavi) b1 = readDigitalPin (a, 'D1'); Düymə 1 (Qara) b4 = readDigitalPin (a, 'D4'); % Button 4 (Ağ) əgər b5 == 0 % b = 1: 5 m6 = msgbox ('Zəhmət olmasa Bir Düyməni Basıb Tutun') üçün parola daxil olmağa başlayır; fasilə (2); sil (m6); % B1 = readDigitalPin (a, 'D1') düymələri haqqında məlumat toplayır; Düymə 1 (Qara) b2 = readDigitalPin (a, 'D2'); Düymə 2 (Qırmızı) b3 = readDigitalPin (a, 'D3'); Düymə 3 (Ağ) b4 = readDigitalPin (a, 'D4'); Düymə 4 (Sarı) b5 = readDigitalPin (a, 'D5'); Düymə 5 (Mavi) % b1 == 0 PASSCODE (0+b) = 1 olduqda ilkin paroldakı dəyərləri bir -bir əvəz edir; elseif b2 == 0 PASCODE (0+b) = 2; elseif b3 == 0 PASKOD (0+b) = 3; elseif b4 == 0 PASKOD (0+b) = 4; elseif b5 == 0 PASSCODE = sprintf ('%. 0f%.0f%.0f%.0f', PASCODE (1), PASSCODE (2), PASSCODE (3), PASSCODE (4)); % Düymələrin ardıcıllığını rəqəmlərə çevirir və sonra onu bir simli ucuna çevirir % PASSCODE == "2314" əgər şifrə üçün rəqəmlərin daxil edilməsi üçün döngənin sonu m7 = msgbox ('Evə xoş gəldiniz!'); writeDigitalPin (a, 'D8', 1); Yaşıl işıq fasiləsini açar (.5); yazma mövqeyi (lər, 1); Qapı fasiləsi (5) kilidini açmaq üçün servo çevirir; writeDigitalPin (a, 'D8', 0); Yaşıl işıq fasiləsini söndürür (.1); writeDigitalPin (a, 'D7', 1); Qırmızı işıq fasiləsini açar (.5); yazma mövqeyi (lər, 0); Qapı fasiləsini kilidləmək üçün servo çevirir (1); writeDigitalPin (a, 'D7', 0); Qırmızı işıq silinməsini söndürür (m7); ii = 1; break % PASSCODE ~ = "2314" writeDigitalPin (a, 'D7', 1) daxil olmaqla, düzgün parolu daxil etdikdən sonra parol daxil olan döngədən çıxır; Qırmızı işığı yandırır m8 = msgbox ('Yanlış Parol! Yenidən Deneyin!'); waitfor (m8) writeDigitalPin (a, 'D7', 0); Qırmızı işığı söndürür davamı başqa bir parolu sonunu yenidən daxil etməyə imkan verir b1 == 0 && b4 == 0 % Şifrə ii = 1 daxil etmək istəmirsinizsə şifrə bölməsini ehtiva edən döngədən çıxır; sonu sonu qır

Düzgündürsə, dərhal temperatur sensörünü idarə edən bir müddət döngəsinə girəcəkdir. Keçid açıqdırsa, döngə davam edəcək və tendensiyanı görməyə imkan verən temperatur və zaman planına görə plan quracaq. Temperatur sensörünə bağlı düyməyə basılırsa, "evinizdə" temperaturun nə olduğunu bildirən bir e -poçt da göndərəcək. Keçid söndürülsə, kodu dərhal bitirəcək

t = 0; İlkin vaxt = 0 saniyə fasilə (5) % İstifadəçiyə temperatur açarını açmaq üçün vaxt verir SWITCH = readDigitalPin (a, 'D11'); SWITCH == 0 SWITCH = readDigitalPin (a, 'D11') isə D11 pinindəki keçid haqqında məlumat toplayır; Pin D11 gərginlik = readVoltage (a, 'A1') keçid haqqında məlumat toplayır; Temperatur sensoru temp_C = (gərginlik.*1000 - 500) gərginliyi oxuyur./10; Gərginliyi ° C temperaturda temperatura çevirir temp_F = (9/5).*Temp_C + 32; % C -dən ° F sahəsinə çevirir (t, temp_C, 'b.') Başlıqda saxlayın ('Otaq İstiliyi'); xlabel ('Saniyədə Zaman'); ylabel ('Temperatur'); ox ([0, 180, 0, 100]); süjet (t, temp_F, 'r.') əfsanəsi ('Temperatur ° C', 'Temperatur ° F') fasilə (1); t = t + 1; Vaxt sayğacı saniyələrdə E-poçt Bölməsi b_temp = readDigitalPin (a, 'D0'); B_temp == 0 setpref ('İnternet', 'SMTP_Server', 'smtp.gmail.com') olarsa D0 pinindəki (mavi) temperatur düyməsinin məlumatlarını toplayır; setpref ('İnternet', 'E_mail', '[email protected]'); % Göndərən setpref ('İnternet', 'SMTP_Username', '[email protected]'); Göndərənin istifadəçi adı setpref ('İnternet', 'SMTP_Password', 'Integral_ecoTECH'); Göndərənin şifrəsi rekvizitləri = java.lang. System.getProperties; props.setProperty ('mail.smtp.auth', 'doğru'); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.port', '465'); sendmail ('[email protected] ',' ecoTECH Otaq İstiliyi ', sprintf (' Cari otaq temperaturu %.1f ° C və ya %.1f ° F. ', temp_C, temp_F); Alıcıya temp_F> = 75 % olarsa cari otaq temperaturu haqqında məlumat verən bir e-poçt göndərir fprintf ('E-poçt uğurla göndərildi! / N') sona çatır Əgər otaq istiliyi 75 ° F-ə yüksəlsə… temp_AC = 65; Termostatdakı temperaturu 65 ° F -ə dəyişir, əks halda temp_F <= 65 % Otaq temperaturu 60 ° F -ə enərsə… temp_AC = 80; Termostatdakı istiliyi 80 ° F sonuna dəyişir % "SWITCH == 0" sonu, güc isə == "off" olarsa loop || ii == 1 % döngə fasiləsi bitərkən "güc == açıq" dan çıxır % "güc == açıq" ikən döngə güc olarsa == "sönər" || ii == 1 % Döngə sonu bitərkən bütündən çıxır

Bu, kodun və onun işləkliyinə qısa bir baxış idi. Lazım gələrsə tam kodu pdf olaraq əlavə etmişik

Burada hər bir cihazın hansı limana bağlandığı siyahısı verilmişdir

1. RGB LED: Rəqəmsal Pins (7, 8, 9)

2. Servo: Rəqəmsal Pin 6

3. Düymələr: Rəqəmsal Pinlər (1, 2, 3, 4, 5)

4. E -poçt üçün Mavi Düymə: Digital Pin 0

5. Temperatur Sensoru: Analog Pin 1

6. Keçid: Rəqəmsal Pin 11

Tövsiyə: