İçindekiler:

MATLAB Kontrollü Mikrodenetleyici (Arduino MKR1000): 4 Adım
MATLAB Kontrollü Mikrodenetleyici (Arduino MKR1000): 4 Adım

Video: MATLAB Kontrollü Mikrodenetleyici (Arduino MKR1000): 4 Adım

Video: MATLAB Kontrollü Mikrodenetleyici (Arduino MKR1000): 4 Adım
Video: Arduino Nano SPWM generator: Grid Synchronization Dengan Software Phase Locked Loop (SPLL) 2024, Temmuz
Anonim
MATLAB Kontrollü Mikrodenetleyici (Arduino MKR1000)
MATLAB Kontrollü Mikrodenetleyici (Arduino MKR1000)

Projemizin amacı, MATLAB'ı ve Arduino MKR1000'i elimizden gelen en iyi şekilde kullanmaktı. Amacımız, arduino'nun belirli özelliklerinin, belirli bir girdiye dayalı olarak belirli bir çıktıyı gerçekleştirmesine izin veren bir komut dosyası oluşturmaktı. Bunu mümkün kılan MATLAB'da bulunan birçok döngü ve koşullu ifade kullandık. Ayrıca, projeyi mümkün olduğunca geliştirmek için bir mobil cihazın jiroskopundan elde edilen verileri kullanarak MATLAB mobil kullandık.

Adım 1: Parçalar ve Malzemeler

Parçalar ve Malzemeler
Parçalar ve Malzemeler
Parçalar ve Malzemeler
Parçalar ve Malzemeler
Parçalar ve Malzemeler
Parçalar ve Malzemeler

MATLAB 2018a

-MaTLAB'ın 2018 sürümü, çoğunlukla mobil cihaza bağlanan kodla en iyi şekilde çalıştığı için en çok tercih edilen sürümdür. Ancak, kodlarımızın çoğu MATLAB sürümlerinin çoğunluğu tarafından yorumlanabilir.

Arduino MKR1000

-Bu, devreleri hem dijital hem de analog portlara bağlamamıza izin veren özel bir cihazdır. Onunla birlikte gitmek için bir breadboard'unuzun da olması çok önemlidir.

Aksesuarlar

-MKR1000'i kullanırken gerekli işlevleri yerine getirebilmek için aksesuar parçalara ihtiyaç duyduk.

Bu içerir

  1. Servo
  2. Düğme (6)
  3. Değiştirilebilir RBG LED ışığı
  4. Basit Teller
  5. ekmek tahtası(lar)
  6. mini güç anahtarı
  7. Sıcaklık sensörü
  8. 330 ohm direnç
  9. 10K ohm direnç
  10. USB-microUSB kablosu
  11. dizüstü/masaüstü
  12. Mobil cihaz

Ayrıca MKR1000 ile kullanılabilecek çok daha fazla aksesuar olduğu da belirtilmelidir.

Adım 2: MATLAB Arduino Destek Paketi

MATLAB üzerinden Arduino MKR1000'i doğru bir şekilde kullanabilmek için Arduino Donanımı için MATLAB Destek Paketini indirmelisiniz. Bu indirme, belirli işlevlere ve komutlara doğrudan arduino kartına erişmenizi sağlar.

Paketi aşağıdaki linkten indirebilirsiniz

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

3. Adım: Mobil Cihazdan Alınan Veri Sensörlerinin Kullanılması

Mobil Cihazdan Alınan Veri Sensörlerinin Kullanılması
Mobil Cihazdan Alınan Veri Sensörlerinin Kullanılması

MATLAB Mobile uygulaması, jiroskopunu kullanarak veri akışı için bir mobil cihaz kullanmamıza izin verir. MATLAB üzerinden veri elde etmek için verileri MATLAB mobilden oryantasyon matrisinden alarak elde ederiz. Bunu, oryantasyon matrisinin (Azimut, Pitch ve Roll) her sütunu için bir değişken oluşturarak ve mobil cihazdan bilgisayara sabit değer akışını indeksleyerek yapıyoruz. Bu, MATLAB'ın mobil cihazdan belirli bir veri girişi alması durumunda bir çıktıyı önceden oluşturacak koşullu ifadeler oluşturmamızı sağlar. Bunun için mobil cihazınızda MATLAB mobile, bilgisayarınızda MATLAB için mobil cihaz destek paketine ihtiyacınız olacak.

Dosyayı aşağıdaki linkten indirebilirsiniz

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

Adım 4: Kod ve Kablo Bağlantı Noktaları

Kod, ev güvenlik cihazımızı başlatmak isteyip istemediğimizi soran bir başlangıç mesajıyla başlar. Evet cevabını verirsek ve doğru şifreyi verirsek, komut dosyası hemen bir while döngüsüne atlar. Oradan mobil cihazdan veri toplamaya başlar. Bu verileri okuyan koşullar vardır. Sistemi mobil cihazımızdan açıp kilitleyebiliriz ve kod servoyu çevirir ve mobil cihazdan verilen verilere bağlı olarak led ışığı yanıp söner

startup = questdlg('ecoTECH Akıllı Ev Enerji Sistemini etkinleştirmek ister misiniz?'); % ecoTECHwaitfor(startup) aktivasyon dizisini başlatır; eğer başlatma == "Evet" % "Evet" seçilirse bir aktivasyon dizisi başlar ve sonunda while döngüsüne girer power = "on"; m1 = msgbox('ecoTECH başlatılıyor…'); duraklat(2); sil(m1); m1_wait = waitbar(0, 'Lütfen bekleyin…'); adımlar = 25; için i = 1:adım duraklat(.1); bekleme çubuğu(i/adımlar); % Bekleme çubuğu sonunu günceller delete(m1_wait); ŞİFRE = [0 0 0 0]; % Parolayı başlatır ii = 0; % Döngülerden çıkmak için kullanılan bir değişkeni başlatır m2 = msgbox('ecoTECH tamamen çalışır durumda!'); duraklat(2); sil(m2); elseif başlangıç == "Hayır" || startup == "İptal" % "Hayır" veya "İptal" seçilirse, etkinleştirme sırası başlamaz ve while döngüsüne girmez power = "off"; m3 = msgbox('Tamam! Hoşçakalın!'); duraklat(2); sil(m3); son

% ecoTECH Eylem Bölümünde iken true while power == "açık" % Mobil Anahtar Bölümü iken true % Mobil cihazın Yuvarlanma yönü hakkında veri toplar ANAHTAR = m. Orientation(3); % Düğmeler hakkında veri toplar b2 = readDigitalPin(a, 'D2'); % Düğme 2 (Kırmızı) b3 = readDigitalPin(a, 'D3'); % Düğme 3 (Beyaz) ise ANAHTAR >= %35 derece olarak m4 = msgbox('Eve Hoş Geldiniz!'); writeDigitalPin(a, 'D8', 1); % Yeşil ışığı açar duraklama(.5); writePosition(lar, 1); % Kapı duraklama (2) kilidini açmak için servoyu döndürür; writeDigitalPin(a, 'D8', 0); % Yeşil ışığı kapatır silme(m4); elseif ANAHTAR <= derece cinsinden -35 % m5 = msgbox('Kapı Kilitli!'); writeDigitalPin(a, 'D7', 1); % Kırmızı ışık duraklamasını açar(.5); writePosition(s, 0); % Kapı duraklamasını kilitlemek için servoyu döndürür(2); writeDigitalPin(a, 'D7', 0); % Kırmızı ışık silmeyi kapatır(m5); ii = 1; break % Kapı mobil cihaz kullanılarak kilitlenirse, mobil anahtar içeren döngüden çıkar elseif b2 == 0 && b3 == 0 % Parolayı girmek için mobil anahtar içeren döngüden çıkar bölüm sonu sonu

Bundan sonra başka bir while döngüsüne girebilir. Bu while döngüsü, butonlardan gelen girdilere göre sonuçları kontrol eder. İlk while döngüsü önemsizse veya manuel kilitleme gerekliyse, belirli bir parolanın gerekli olduğu başka bir while döngüsüne girer. Parola yanlışsa, döngüyü yeniden başlatır

while true if ii == 1 % Kapının kilidi mobil cihaz kesme sonu ile açılmışsa, parola içeren döngüden çıkar % Düğmeler hakkında veri toplar b5 = readDigitalPin(a, 'D5'); % Düğme 5 (Mavi) b1 = readDigitalPin(a, 'D1'); % Düğme 1 (Siyah) b4 = readDigitalPin(a, 'D4'); % Düğme 4 (Beyaz) b5 == 0 ise % b = 1:5 için parola girme bölümünü başlatır m6 = msgbox('Lütfen Bir Düğmeye Basılı Tutun'); duraklat(2); sil(m6); % Butonlar hakkında veri toplar b1 = readDigitalPin(a, 'D1'); % Düğme 1 (Siyah) b2 = readDigitalPin(a, 'D2'); % Düğme 2 (Kırmızı) b3 = readDigitalPin(a, 'D3'); % Düğme 3 (Beyaz) b4 = readDigitalPin(a, 'D4'); % Düğme 4 (Sarı) b5 = readDigitalPin(a, 'D5'); % Düğme 5 (Mavi) % b1 == 0 ŞİFRE(0+b) = 1; elseif b2 == 0 ŞİFRE(0+b) = 2; elseif b3 == 0 ŞİFRE(0+b) = 3; elseif b4 == 0 ŞİFRE(0+b) = 4; elseif b5 == 0 ŞİFRE = sprintf('%.0f%.0f%.0f%.0f', ŞİFRE(1), ŞİFRE(2), ŞİFRE(3), ŞİFRE(4)); % Basılan düğmelerin sırasını sayılara çevirir ve ardından onu bir dize sonuna dönüştürür % ŞİFRE == "2314" ise, şifre için basamak girmek için for döngüsünün sonu % Girilen şifre eşleşirse, kapının kilidi birkaç saniyeliğine açılır ve ardından kilitlenir m7 = msgbox('Eve Hoş Geldiniz!'); writeDigitalPin(a, 'D8', 1); % Yeşil ışık duraklatmasını açar(.5); writePosition(lar, 1); % Kapı duraklama(5) kilidini açmak için servoyu döndürür; writeDigitalPin(a, 'D8', 0); % Yeşil ışıklı duraklamayı kapatır(.1); writeDigitalPin(a, 'D7', 1); % Kırmızı ışık duraklamasını açar(.5); writePosition(s, 0); % Kapı duraklamasını (1) kilitlemek için servoyu döndürür; writeDigitalPin(a, 'D7', 0); % Kırmızı ışık silmeyi kapatır(m7); ii = 1; break % Doğru parolayı girdikten sonra parola içeren döngüden çıkar elseif PASSCODE ~= "2314" writeDigitalPin(a, 'D7', 1); % Kırmızı ışığı yakar m8 = msgbox('Yanlış Şifre! Tekrar Deneyin!'); waitfor(m8) writeDigitalPin(a, 'D7', 0); % Kırmızı ışığı kapatır devam et % Bir parolayı yeniden girmenizi sağlar end elseif b1 == 0 && b4 == 0 % Parola girmek istemiyorsanız, parola içeren döngü bölümünden çıkar ii = 1; ara son

Doğruysa, sıcaklık sensörünü kontrol eden bir süre döngüsüne hemen girer. Anahtar açıksa, döngü devam edecek ve sıcaklık-zaman grafiğini çizerek kişinin trendi görmesine izin verecektir. Sıcaklık sensörüne bağlı düğmeye basılırsa, "evinizde" sıcaklığın ne olduğunu bildiren bir e-posta da gönderir. Anahtar kapatılırsa, kodu hemen sonlandıracaktır

t = 0; % Başlangıç süresi = 0 saniye duraklama(5) % Kullanıcının sıcaklık anahtarını açması için süre verir SWITCH = readDigitalPin(a, 'D11'); % SWITCH == 0 SWITCH = readDigitalPin(a, 'D11'); % D11 pin voltajındaki anahtarla ilgili verileri toplar = readVoltage(a, 'A1'); % Sıcaklık sensöründen gelen voltajı okur temp_C = (voltaj.*1000 - 500)./10; % Voltajı °C cinsinden sıcaklığa dönüştürür temp_F = (9/5).*temp_C + 32; % °C'den °F'ye çevirir plot(t, temp_C, 'b.') hold on title('Oda Sıcaklığı'); xlabel('Saniye cinsinden Süre'); ylabel('Sıcaklık'); eksen([0, 180, 0, 100]); plot(t, temp_F, 'r.') legend('Sıcaklık °C', 'Sıcaklık °F') duraklama(1); t = t + 1; % Saniye cinsinden zaman sayacı % E-posta Bölüm b_temp = readDigitalPin(a, 'D0'); % b_temp == 0 ise, (mavi) sıcaklık düğmesinin verilerini D0 pininde toplar setpref('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref('İnternet', 'E_mail', '[email protected]'); % Gönderici setpref('İnternet', 'SMTP_Kullanıcı Adı', '[email protected]'); % Gönderenin kullanıcı adı setpref('Internet', 'SMTP_Password', 'Integral_ecoTECH'); % Gönderenin parolası props = 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 Oda Sıcaklığı', sprintf('Mevcut oda sıcaklığı %.1f °C veya %.1f °F.', temp_C, temp_F)); % Alıcıya mevcut oda sıcaklığı hakkında bilgi veren bir e-posta gönderir fprintf('E-posta başarıyla gönderildi!\n') end if temp_F >= 75 % Oda sıcaklığı 75 °F'ye yükselirse… temp_AC = 65; % Termostat üzerindeki sıcaklığı 65 °F olarak değiştirir, değilse temp_F <= 65 % Oda sıcaklığı 60 °F'ye düşerse… temp_AC = 80; % Termostattaki sıcaklığı 80 °F uç ucuna değiştirir % Güç == "kapalı" ise döngü sırasında "ANAHTAR == 0" sonu || ii == 1 % "güç == açık" iken çıkış, döngü sonu sonu % "güç == açık" iken döngü eğer güç == "kapalı" || ii == 1 % Döngü sonu sona ererken tamamen çıkar

Bu, koda ve işlevselliğine kısa bir genel bakıştı. Gerekirse tam kodu pdf olarak ekledik

Her aygıtın hangi bağlantı noktasına bağlandığının listesi aşağıdadır

1. RGB LED: Dijital Pinler (7, 8, 9)

2. Servo: Dijital Pim 6

3. Düğmeler: Dijital Pimler (1, 2, 3, 4, 5)

4. E-posta için Mavi Düğme: Dijital Pin 0

5. Sıcaklık Sensörü: Analog Pin 1

6. Anahtar: Dijital Pin 11

Önerilen: