İçindekiler:
- Adım 1: Parçalar ve Malzemeler
- Adım 2: MATLAB Arduino Destek Paketi
- 3. Adım: Mobil Cihazdan Alınan Veri Sensörlerinin Kullanılması
- Adım 4: Kod ve Kablo Bağlantı Noktaları
Video: MATLAB Kontrollü Mikrodenetleyici (Arduino MKR1000): 4 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:19
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
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
- Servo
- Düğme (6)
- Değiştirilebilir RBG LED ışığı
- Basit Teller
- ekmek tahtası(lar)
- mini güç anahtarı
- Sıcaklık sensörü
- 330 ohm direnç
- 10K ohm direnç
- USB-microUSB kablosu
- dizüstü/masaüstü
- 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ı
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:
Hız Kontrollü ve Mesafe Ölçümlü Bluetooth Kontrollü RC Araba: 8 Adım
Hız Kontrollü ve Mesafe Ölçümlü Bluetooth Kontrollü RC Araba: Çocukken RC arabalara her zaman hayrandım. Günümüzde Arduino yardımıyla ucuz Bluetooth kontrollü RC arabaları kendiniz yapmak için birçok öğretici bulabilirsiniz. Hadi bir adım daha ileri gidelim ve pratik kinematik bilgimizi hesaplamak için kullanalım
Arduino veya Mikrodenetleyici Olmadan DIY Temassız El Dezenfektanı Dispenseri: 17 Adım (Resimlerle)
Arduino veya Mikrodenetleyici Olmadan DIY Temassız El Dezenfektanı Dispenseri: Hepimizin bildiği gibi, COVID-19 salgını dünyayı vurdu ve yaşam tarzımızı değiştirdi. Bu durumda Alkol ve el dezenfektanları hayati sıvılardır ancak doğru kullanılmaları gerekir. Enfekte ellerle alkol kaplarına veya el dezenfektanlarına dokunmak c
MATLAB Kontrollü Roomba: 5 Adım
MATLAB Kontrollü Roomba: Bu projenin amacı, modifiye edilmiş bir iRobot programlanabilir robotun yanı sıra MATLAB'ı kullanmaktır. Grubumuz, uçurum sensörleri, tampon algılama gibi iRobot'un birçok işlevini kullanan bir MATLAB komut dosyası oluşturmak için kodlama becerilerimizi birleştirdi
8051 Mikrodenetleyici Kullanan Ses Kontrollü Robot: 4 Adım (Resimli)
8051 Mikrodenetleyici Kullanan Ses Kontrollü Robot: Ses kontrollü bir robot, belirtilen komutu ses şeklinde alır. Ses modülü veya Bluetooth modülü aracılığıyla verilen komut ne olursa olsun, mevcut denetleyici tarafından kodu çözülür ve dolayısıyla verilen komut yürütülür. İşte bu projede ben
Mobil Kontrollü Robot Nasıl Yapılır - DTMF Tabanlı - Mikrodenetleyici ve Programlama Olmadan - Dünyanın Her Yerinden Kontrol - RoboGeeks: 15 Adım
Mobil Kontrollü Robot Nasıl Yapılır | DTMF Tabanlı | Mikrodenetleyici ve Programlama Olmadan | Dünyanın Her Yerinden Kontrol | RoboGeeks: Dünyanın her yerinden kontrol edilebilen bir robot yapmak istiyorum, Haydi Yapalım