Mündəricat:
- Addım 1: hissələr və materiallar
- Addım 2: MATLAB Arduino Dəstək Paketi
- Addım 3: Mobil Cihazdan Alınan Məlumat Sensorlarından istifadə
- Addım 4: Kod və Kabel Limanları
Video: MATLAB tərəfindən idarə olunan mikro nəzarətçi (Arduino MKR1000): 4 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:46
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
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
- Servo
- Düymə (6)
- Dəyişdirilə bilən RBG LED işığı
- Sadə tellər
- çörək taxtası
- mini güc açarı
- temperatur sensoru
- 330 ohm müqavimət
- 10K ohm müqavimət
- USB-microUSB kabeli
- Laptop/masa üstü
- 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ə
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ə:
Təyyarə ilə idarə olunan radio idarə olunan ördək: 10 addım (şəkillərlə)
Jet Propelled Radio Controlled Duck: 40+ il əvvəl bir radio nəzarət qayığı almaq və yaxınlıqdakı Park Gölündə istifadə etmək istəyirdim, lakin Park Qapıcısı heç bir gəmiyə icazə verilməyəcəyini açıq şəkildə bildirdi. Bir gəmini ördək kimi gizlətmək üçün bu planı hazırladım. Bir az çatışmazlıq qiymət idi
DIY - Arduino tərəfindən idarə olunan RGB LED Çalarlar: 5 addım (şəkillərlə)
DIY | Arduino tərəfindən idarə olunan RGB LED Çalarlar: Bu gün sizə öz RGB LED Eynəklərinizi necə çox asan və ucuz qura biləcəyinizi öyrədəcəyəm.Bu həmişə ən böyük xəyallarımdan biri olub və nəhayət gerçəkləşdi! bu layihə. Bir PCB istehsalçısıdırlar
Özüyeriyən və PS2Joystick tərəfindən idarə olunan Arduino Avtomobil: 6 addım
Özüyeriyən və PS2Joystick İdarə Edilən Arduino Avtomobil: Salam, mənim adım Joaquin və mən Arduino həvəskarıyam. Keçən il Arduino ilə məşğul oldum və hər şeyi etməyə başladım və bu avtomatik və joystick ilə idarə olunan avtomobil onlardan biridir
MATLAB tərəfindən idarə olunan Roomba: 5 addım
MATLAB İdarə Edilən Roomba: Bu layihənin məqsədi dəyişdirilmiş iRobot proqramlaşdırıla bilən robotun yanında MATLAB -dan istifadə etməkdir. Qrupumuz, uçurum sensorları, tampon sensorlar da daxil olmaqla, iRobotun bir çox funksiyasından istifadə edən bir MATLAB skriptini yaratmaq üçün kodlaşdırma bacarıqlarımızı birləşdirdi
ARDUINO YUN tərəfindən idarə olunan ROOMBA STEFANO DALL'OLIO tərəfindən Wifi Tətbiqi ilə: 4 Addım (Şəkillərlə)
ARDUINO YUN tərəfindən idarə olunan ROOMBA, STEFANO DALL'OLIO tərəfindən Wifi Tətbiqi ilə: Bu təlimatla, Wifi vasitəsilə Roomba sürmək üçün ARDUINO YUN -u Roomba'ya bağlamaq üçün kodu paylaşıram. Kod və tətbiq tam olaraq özüm tərəfindən yaradılıb və Stefano Dall tərəfindən hazırlanmışdır. Olio.My Roomba Roomba 620 -dir, lakin eyni kodu digər Roomb üçün də istifadə edə bilərsiniz