https://www.youtube.com/watch?v=i7qaEEyv3Xk&t=1095s

Sensor nedir?

Bir cihazdaki dış ortamla ilgili verileri cihaza bildiren araçlardır. Her birinin içerisinde  API’si mevcuttur. Bu APIlere erişerek cihazdan gelen veriyi alabiliyoruz.

İki sensor üzerinde anlatım yapacağız;

  • Lokasyon sensor
  • Oryantasyon sensor

Lokasyon Sensor : Cihazın o anda ki enlem ve boylam bilgisini alır.

Oryantasyon sensor : Cihazın hangi pozisyonda, açıda tutulduğunun bilgisini alıyor.

Diğer sensorler hakkında bilgi almak için Embarcadero’nun kendi web sitesinden ve Github Getit üzerinden ulaşabilirsiniz.

DEMO – 1

Mobil cihazdaki konum verisini alıp web browserdan hangi konumda olduğunu göstereceğiz.

File> New> Multi Device Application> Blank Application. Projemiz açılıyor ve kaydediyoruz. Palette> toolbar ekliyoruz. Toolbar’ın içine checkbox ekliyoruz. Checkbox> Object Inspector >align >right – name →items editor açılan pencereden 1 adet ListboxGroupHeader 2 adet ListboxItem ekliyoruz. Yüksekliklerini ayarlamak için height> 45 veriyoruz. Textlerini temizliyoruz. Listbox1’in içine label ekliyoruz.Label1 >align >left – text → Enlem – name→ lblenlem. 2tane daha label ekliyoruz. Bir tanesi toolbarın içine text → Lokasyon Uygulamasu diğeri listboxitem2’nin içerisine text→Boylam – name→lblboylam – align >left. Listboxların içinde yer alan labelları yanlarına kopyalayıp yanlarına ekliyoruz bu labellar ile değerleri göstereceğiz. Değer göstereceğimiz labelların align> client – text→0 – HorzAlign > center.

Bir adet web browser ekliyoruz ve bir lokasyon sensoru yerleştiriyoruz bu bize mobil cihazdan konum bilgisini alıp enlem ve boylam olarak okumamızı sağlayacak. Kodları checkboxa yazacağız. Checkbox aktifse lokasyon sensorumuzde aktif olacak. Checkboxa çift tıklıyoruz. Hazır bir kod ekliyoruz Android 7’den sonrası için izin alabilmemiz için bu kodu eklememiz gerekiyor. Hazır koddaki nesne isimlerini kendi nesne isimlerimizle değiştiriyoruz.


Procedure TForm2.cbSensorAcChange(Sender : TObject);
const
PermissionAccessFineLocation = ‘android.permission.ACCESS_FINE_LOCATION’;
begin
{$IFDEF ANDROID}
PermissionsService.RequestPermissions([PermissionAccesFineLocation],
procedure (const APermissions: TArray <string>: const AGrantResults:TArray < TPermissionStatus>)
begin
if (Length (AGrantResults) = 1) and (AGrantResults[0] = TPermissionStatus.Granted) then
{activate or deactivate the location sensor}
LocationSensor1.Active := swLocationSensorActive.IsChecked
else
begin
swLocationSensorActive.IsChecked := False;
 
TDialogService.ShowMessage(‘Location permission not qranted’);
end;
end);
end;
end

Kodların sonuna her cihazda çalışması gereken kodlarımızı ekliyoruz.


{$ELSE}
LocationSensor1.Active := cbSensorAc.Checked;
{$ENDIF}
LocationSensor’e gidip event kısmında onLocationChange çift tıklıyoruz ve komutlarımızı yazıyoruz.
procedure TForm2.LocationSensorLocationChanged(Sender : TObject;
const OldLocation , NewLocation: TLocationCoord2D);
const
GoogleMapsUrl: String = ‘https: //maps.google.com/maps?q=%s’;
begin
var Enlem := Newlocation.Latitude.ToString(ffGeneral, 8,5,TFormatSettings.Create(‘en-US’));
var Boylam := Newlocation.Longitude.ToString(ffGeneral, 8,5,TFormatSettings.Create(‘en-Us’));
lblEnlem.Text := Enlem;
lblBoylam.Text := Boylam;
WebBrowser1.Navigate(Format(GoogleMapsURL,(Enlem,Boylam)));
end;
end.

Google’ın sabit adresinide ekledik çünkü web browser’a adres olarak göndereceğiz. 2 adet değişken tanımladık enlem ve boylam. Formatlama işlemi yaptık çünkü browsera göndereceğiz browser aracılığı ile Google’a göndereceğiz. Google’ın istediği formata uydurabilmemiz için enlem ve boylam bilgimizi göndermeyi bu şekilde yapıyoruz.

Uses kısmına fmx.DialogService ekliyoruz. Target Platforms> Target burada bağladığımız cihazımızı görebiliyoruz uygulamamızı derliyoruz ve gönderiyoruz. Mobil cihazımızda checbox aktif ediyruz. Konum kullanımına izin veriyoruz ve bulunduğumuz konumun enlem ve boylam değerlerini görebiliyoruz.

DEMO – 2

ORYANTASYON SENSORU

Cihazın hangi konumda tutulacağını belirleyen sensorümüzdür.

Zaman kaybetmemek için bu projemizi emarcadero’nun örnek uygulamaları üzerinden yapacağız. Delphi’yi açıyoruz > open a sample project menüsüne tıklıyoruz, burada Embarcadero’nun kendi demolorunun bulunduğu klasörü açan kısayol ekranı geliyor. Object pascal> Mobile snippets> Accelerometer>  Accelerometer.dpr ve örnek uygulamamız açılıyor. Eğer bu sample klasörünü daha önceden yüklemediysek tools> manage performans> additional options> samples’ı işaretleyerek kuruyoruz. Açılan uygulamamızın kodları aşağıdaki gibi;


 procedure TAccelerometerForm.swAccelerometerSensorActiveSwitch(Sender: TObject);
begin
  { activate or deactivate the reading of the accelerometer sensor }
  MotionSensor1.Active := swAccelerometerSensorActive.IsChecked;
  Timer1.Enabled := swAccelerometerSensorActive.IsChecked;
end;

Gelin kodları inceleyelim. Açılan uygulamada bir önceki demomuza benzer bir arayüzümüz var. Burada motionsensor componenti kullanılmış. Bir adet timer var. Sensorumuzu açıp kapama için TSwitch mevcut. Switch checbox ile hemen hemen aynı. Motion componentimizin aktif kısmı switchbox’ın checkine bağlanmış. Timer da aynı şekilde switchbox’ın check özelliğine bağlı.


procedure TAccelerometerForm.Timer1Timer(Sender: TObject);
var
  LProp: TCustomMotionSensor.TProperty;
 
begin
  for LProp in MotionSensor1.Sensor.AvailableProperties do
  begin
    { get the data from the sensor }
    case LProp of
      TCustomMotionSensor.TProperty.AccelerationX:
      begin
        lbAccelerationX.Visible := True;
        lbAccelerationX.Text := Format('Acceleration X: %6.2f', [MotionSensor1.Sensor.AccelerationX]);
      end;
      TCustomMotionSensor.TProperty.AccelerationY:
      begin
        lbAccelerationY.Visible := True;
        lbAccelerationY.Text := Format('Acceleration Y: %6.2f', [MotionSensor1.Sensor.AccelerationY]);
      end;
      TCustomMotionSensor.TProperty.AccelerationZ:
      begin
        lbAccelerationZ.Visible := True;
        lbAccelerationZ.Text := Format('Acceleration Z: %6.2f', [MotionSensor1.Sensor.AccelerationZ]);
      end;
      TCustomMotionSensor.TProperty.AngleAccelX:
      begin
        lbAngleAccelX.Visible := True;
        lbAngleAccelX.Text := Format('Angle X: %6.2f', [MotionSensor1.Sensor.AngleAccelX]);
      end;
      TCustomMotionSensor.TProperty.AngleAccelY:
      begin
        lbAngleAccelY.Visible := True;
        lbAngleAccelY.Text := Format('Angle Y: %6.2f', [MotionSensor1.Sensor.AngleAccelY]);
      end;
      TCustomMotionSensor.TProperty.AngleAccelZ:
      begin
        lbAngleAccelZ.Visible := True;
        lbAngleAccelZ.Text := Format('Angle Z: %6.2f', [MotionSensor1.Sensor.AngleAccelZ]);
      end;
      TCustomMotionSensor.TProperty.Motion:
      begin
        lbMotion.Visible := True;
        lbMotion.Text := Format('Motion: %6.2f', [MotionSensor1.Sensor.Motion]);
      end;
      TCustomMotionSensor.TProperty.Speed:
      begin
        lbSpeed.Visible := True;
        lbSpeed.Text := Format('Speed: %6.2f', [MotionSensor1.Sensor.Speed]);
      end;
    end;
  end;
end;

Kalan bütün işlem timer’ın içerisinde gerçekleşiyor. İlk başta x, y ve z hareketlerini almışız label’ın içine daha sonra x ,y ve z konumundaki açıları almışız bunları ekranda labellara yazdırmışız.

Bu uygulamayı cihaza gönderip deneyelim, ilk demomuzla aynı işlemleri uyguladığımızda mobil cihazımızda verilerin geldiğini göreceğiz.

Uygulamamızı kapatıp open a sample> object pascal> multi device samples> device sensor and services burada birçok sensor için uygulama örneği mevcut buradan örnekleri inceleyebilirsiniz.

Uygulamada Tools> getit package manager bölümünden driver daha önceden yüklenmiş cihazları kolaylıkla kurabiliyoruz. Internet of things seçtiğimizde daha önceden delphi için driver yazılmış bir çok cihaza erişimi sağlayabiliyoruz.

Firma Bilgileri


Camart Araştırma Geliştirme Yazılım Otomasyon San. Tic.Ltd. Şti.

Mersis no : 3356 7133 6775 9746

info@camartarge.com

Vergi Dairse / no : Pamukkale v.d. 196 074 62 30

Tel : +90 850 333 80 20

İban (TL): TR30 0020 5000 0085 3809 5000 03

Arge :

Pamukkale Üniversitesi teknoloji geliştirme bölgesi (Teknokent)

Kınıklı mah. Hüsseyin yılmaz cad. no 67

idari bina d blok no g05 Pamukkale / Denizli

İban (USD):TR03 0020 5000 0085 3809 5001 01


Barbaros Mah. Halk Cad. No 47 / 2 34746 Ataşehir İstanbul

İban (Euro):TR73 0020 5000 0085 3809 5001 02

 
Harita verileri ©2015 Google

İletişim

Facebook Pinterest Twitter Google+ Dribbble