Matlab üzerinden mesafe sensörü Guide'ı yaparken hata veriyor

MasAAka

Hectopat
Katılım
5 Ocak 2021
Mesajlar
25
Daha fazla  
Sistem Özellikleri
AMD RYZEN 5 5600H
RTX 3050 4GB
16GB RAM
Cinsiyet
Erkek
Final ödevi için kodunu ArduinoIDE üzerinden hazırladığımız Dolum Sensörlü Akıllı Çöp Kovası projesinde hocamızın isteği üzerine MatLab üzerinden Guide yapmamız gerekiyor. Yaptık lakin aşağıdaki hatayı alıyoruz.

1704872359771.png


Konsol:
1704872421594.png


Matlab Guide Kodu
function varargout = SENSOR(varargin) %Burası matlab gui arayüzü oluşturulduğunda %otomatik olarak eklenen kısım %Burda matlab gui ile alakalı ayarlar %yapılıyor. gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @SENSOR_OpeningFcn, ... 'gui_OutputFcn', @SENSOR_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end function SENSOR_OpeningFcn(hObject, eventdata, handles, varargin) %Bu kısım bizim matlab script-file dosyası çalıştırıldığında %çalıştırılacak kodların bulunduğu kısım. cla(handles.axes1); guidata(hObject, handles); handles.output = hObject; guidata(hObject, handles); function varargout = SENSOR_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output; function INICIO_Callback(hObject, eventdata, handles) %Burası bizim Ölçümü Başlat Butonuna bastıgımızda %işletilecek komutların oldugu kısım. %Kodların tamamına yakını burada yazılı. %Gui arayüzüne mesafeyi yazdırma, grafik çizme vs. set(handles.STOP,'UserData',0); %Ölçümü durdur butonuna basılı değil olarak başlanıyor. SerPIC = serialport('COM8', 9600); %Arduinonun bağlı oldugu port belirleniyor. set(SerPIC,'BaudRate',9600); %Haberleşme hızı 9600 olarak ayarlanıyor. set(SerPIC,'DataBits',8); set(SerPIC,'Parity','none'); set(SerPIC,'StopBits',1); set(SerPIC,'FlowControl','none'); fopen(SerPIC); %Port haberleşmeye açılıyor. global x; %x adında bir değişken tanımlanıyor. x=0; %x değişkenine ilk değeri sıfır olarak atanıyor. try while (1) if get(handles.STOP,'UserData')==1 %Eğer ölçümü durdur butonuna basılırsa döngüden %çıkılıyor. break end a = fscanf(SerPIC, '%f'); set(handles.edit1,'string',[num2str(a)]); %a değişkenindeki veri gui ekranına yazdırılıyor. x=x+1; %Zaman ekseninin sürekliliği için.Döngü çalıştıkça zaman ekseni %1 sn aralıklarla artacak. y(x)=fscanf(SerPIC,'%d'); %Seri porttan okunan veriler zamana bağlı bir fonk. tutuluyor. drawnow; %Gerçek zamanlı grafik çizdirmek için gerekli komut. axes(handles.axes1); %Grafiğin çizileceği bileşen seçiliyor. plot(y,'r','linewidth',5) %Sürekli zamanlı sinyal çizdiriliyor. title('Zaman-Mesafe Grafiği'); %Grafiğin başlıgı ayarlanıyor. xlabel('Zaman (sn)'); %Grafiğin x ekseninde yazacak yazı belirleniyor. ylabel('Mesafe (cm)'); %Grafiğin y ekseninde yazacak yazı belirleniyor. ylim([0 90]) %y ekseninin aralığı 0-100 arası seçiliyor. if (a>=16) %Mesafe 5 cm den küçükse ÇOK YAKIN yazdırılıyor. set(handles.distancia,'string','Boş') else if ((a<16) & (a >= 12)) %Mesafe 30 cm den büyükse 'ÇOK UZAK' yazdırılıyor. set(handles.distancia,'string','%25 Dolu') else if ((a<12) & (a >= 8)) %Mesafe 20 ile 30 arasında ise UZAK yazdırılıyor. set(handles.distancia,'string','%50 Dolu') else if (a < 8) & (a >= 4) %Mesafe 10 ile 20 cm arasında ise ORTA yazdırılıyor. set(handles.distancia,'string','%75 Dolu') else if ((a < 4) & (a>=0)) %Mesafe 5 ile 10 cm arasında ise YAKIN yazdırılıyor. set(handles.distancia,'string','%100 Dolu') else end end end end end drawnow end catch errordlg('Bir Hata Oldu !! ','Hata') end clear SerPIC function STOP_Callback(hObject, eventdata, handles) set(handles.STOP,'UserData',1) set(handles.edit1,'string',0); cla(handles.axes1); function edit1_Callback(hObject, eventdata, handles) function edit1_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function distancia_CreateFcn(hObject, eventdata, handles)


ArduinoIDE Kodu

C:
#include <LiquidCrystal.h> //Load Liquid Crystal Library
LiquidCrystal LCD(11,10,5,4,3,2); //Create Liquid Crystal Object called LCD
#include <Servo.h>   //servo kütüphanesi
#define trigPin 13 //Sensörün Echo pini Arduinonun 13. pinine bağlanır
#define echoPin 12 //Sensorün Trig pini Arduinonun 12. pinine bağlanır
#include <Arduino.h>
Servo servo;
int triggerPin = 8;
int echooPin = 7;
int servoPin = 9;
long zaman;
int mesafe ;
 
void setup()
{
  servo.attach(servoPin);
  servo.write(0);
  delay(2000);
  // trigger pinini output olarak seçiyoruz
  pinMode(triggerPin, OUTPUT);
  // echoo pinini input olarak seçiyoruz
  pinMode(echooPin, INPUT);
  //serial iletişimi başlatıyoruz
 Serial.begin (9600);
 pinMode(trigPin, OUTPUT); //13. yani trigpini çıkış olarak ayarlıyoruz
 pinMode(echoPin, INPUT);  //12. yani echoPini giriş olarak ayarlıyoruz
 LCD.begin(16,2);          //Arduinoya lcdyi çalıştırmasını söylüyoruz
 LCD.setCursor(0,0);       //Kursörü ilk satırın ilk sütununa getirmesini söylüyoruz
 LCD.print("Cop Kovasi"); //İlk satırda görünecek mesajı yazıyoruz
}
 
void loop() {
 
 long duration, distance;
 digitalWrite(trigPin, LOW);
 delayMicroseconds(2);
 digitalWrite(trigPin, HIGH);
 delayMicroseconds(10);
 digitalWrite(trigPin, LOW);
 duration = pulseIn(echoPin, HIGH);
 distance = (duration/2) / 29.1;   // Sesin gidiş gelişinde ölçülen süreyi önce ikiye bölerek sadece gidiş hızını ölçüyor,
                                   // Sonra da ses hızına bölerek mesafeyi buluyoruz.
 
 
  if ( distance>20)  
 {
  delayMicroseconds(3);
 Serial.println(0);
 LCD.setCursor(0,1);

 LCD.print("- Cop Kovasi Bos -");
 LCD.print("                ");
 delay(500);
 }
    else if (16<distance )
 {
  delayMicroseconds(3);
 Serial.println(25);
 LCD.setCursor(0,1);

 LCD.print("- %25 Dolu -");
 LCD.print("                ");
 delay(500);
 }
    else if (12<distance )       // Gelen mesafe uzak ise
 {
  delayMicroseconds(3);
 Serial.println(50);
 LCD.setCursor(0,1);

 LCD.print("- %50 Dolu -");
 LCD.print("                ");
 delay(500);
 }
    else if (8<distance )       // Gelen mesafe uzak ise
 {
  delayMicroseconds(3);
 Serial.println(75);
 LCD.setCursor(0,1);

 LCD.print("- %75 Dolu -");
 LCD.print("                ");
 delay(500);
 }
    else if (4<distance )
 {
  delayMicroseconds(3);
 Serial.println(100);
 LCD.setCursor(0,1);

 LCD.print("- %100 Dolu -");
 LCD.print("                ");
 delay(500);
 }
// Trigger pini 0 Volt olarak ayarlıyoruz.
  digitalWrite(triggerPin, LOW);
  delayMicroseconds(2); // Trigger pinini 10 saniye için high olarak ayarlıyoruz ve 5 V gerilim uyguluyoruz.
  digitalWrite(triggerPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(triggerPin, LOW);
  // echooPini okur ve ses dalgası mikrosaniye olarak döndürür.
  zaman= pulseIn(echooPin, HIGH);
  // Mesafe hesaplaması
  mesafe = zaman* 0.034 / 2;
  //bundan sonraki iki satır HC-SR04 mesafe sensörünün, anlık olarak yaptığı mesafe ölçümlerinin sonucunu görmemizi sağlar.
  Serial.print("Mesafe: ");
  Serial.println(mesafe);
  if ( mesafe <= 15 ){  // mesafe 50 altında ise servo 135 dereceye geliyor.
    servo.write(100);
    delay(3000); // Delay süreleri opsiyoneldir, değiştirilebilir.
  }else{  // değil ise kendine 45 dereceye getiriyor.
    servo.write(0);
  }
}

Lazım olur ise dosya halinde gösterebiliriz.
 
Son düzenleyen: Moderatör:

Geri
Yukarı