Linux Servis Yönetimi

Bu yazımızda Linux sistemimizde çalışan servisleri nasıl yöneteceğimize bakacağız.

Linux üzerinde çalışan servislerin, durduğunda ve işletim sistemi kapatılıp açıldığında otomatik olarak yeniden başlatılması, loglarının toplanması vb işlemleri yürütecek bir sisteme ihtiyaç vardır. systemd birçok Linux dağıtımı için bu sistemi sağlamaktadır.

Linux’ta çalıştırdığımız web ve uygulama sunucuları, SSH, DNS, telnet, vb servisler systemd veya benzeri (örneğin upstart) bir init system tarafından yönetilirler. Bu sistemlere init system denmesinin sebebi, Linux’un bu sistemleri açılış sırasında (boot) diğer process’leri başlatan ve PID (Process ID) 1 ile ifade edilen init process’i olarak kullanmasıdır. Aşağıdaki ekran çıktısında görüldüğü gibi Ubuntu 16.04.1 Linux dağıtımında init process’i olarak systemd kullanılmıştır.

Sistemde systemd tarafından yönetilen bütün servisler systemctl list-units –type service –state running komutu ile görüntülenebilir.

Çalışan bir servisin durumu systemctl status<servis name> komutu listelenir.

Çalışmakta olan bir servis systemctl stop<servis name> komutu ile durdurulur, durdurulmuş bir servis ise systemctl start <servis name> komutu ile başlatılır. Bir servisi yeniden başlatmak için ise systemctl restart<servis name> komutu kullanılır.

Sistemde bulunan bir servisin deaktive edilmesi istendiğinde systemctl disable , aktive edilirken ise systemctl enable komutları kullanılır. Deaktive edilen bir servis, systemd tarafından sistemin yeniden başlatılması sırasında başlatılmaz.

systemd tarafından yönetilen servislerin ürettiği loglar journalctl komutu ile görülebilir. Aşağıda sudo journalctl -u docker.service ile docker servisinin logları görüntülenir.

systemd ile kulanacağınız önemli kısımlara değindik. Sizlerinde eklemek istediğiniz kısımlar var ise aşağıdaki yorum kısmını kullanarak görüşlerinizi ve eklemek istediğiniz bilgileri bizler ile paylaşabilirsiniz.

Read More

PIC16F877 Mikrodenetleyici ile I2C haberleşmesi

PIC mikrodenetleyicisi bir çok gömülü sistemde kullanılan güçlü ve uygun bir denetleyici türüdür. Geniş uygulama alanı olsada, hiçbir mikrodenetleyici tüm faaliyetleri tek başına gerçekleştiremez. Bir zaman diliminde, bilgi paylaşmak için diğer cihazlarla iletişim kurması gerekir, bu bilgileri paylaşmak için birçok farklı iletişim protokol türü vardır, ancak en çok kullanılanları USART, IIC, SPI ve CAN’dır. Her iletişim protokolünün kendi avantaj ve dezavantajı vardır. Bu yazımızda I2C protokülüne değineceğiz.

I2C İletişim Protokolü Nedir?

IIC terimi, “Entegre Devreler” anlamına gelmektedir. Normalde I2C veya I C kare, hatta bazı yerlerde 2 kablolu arabirim protokolü (TWI) olarak ifade edilir, ancak hepsi aynı anlama gelir. I2C, senkronize bir iletişim protokolü anlamına gelir; her iki bilgiyi paylaşan cihazların ortak bir zaman sinyalini paylaşması gerekir. Bir clock sinyali için veri göndermek ve almak için kullanılan sadece iki yol kullanır.

I2C İletişim nasıl çalışır?

I2C iletişimi ilk olarak Phillips tarafından tanıtıldı. Burada bir aygıta server, diğer aygıta da client adı verilir. İletişim iki Master ve Slave arasında gerçekleşmeli ve gerçekleşmelidir. I2C iletişiminin avantajı, birden fazla clientin bir sunucuya bağlanabilmesidir.

PIC16F877 Mikrodenetleyici ile I2C haberleşmesi 1

Komple iletişim, SCL ve SDA olarak adlandırılan bu iki tel üzerinden gerçekleştirilir.

SCL: Master tarafından üretilen saat sinyalini client ile paylaşır

SDA: Master ve slave arasında bu verileri gönderir.

Herhangi bir zamanda yalnızca bir iletişim kurabilir. Veriyolunda birden fazla client bulunduğundan, ana ünitenin her cliente farklı bir adres kullanarak başvurması gerekir. Yalnızca bu adrese sahip olan salve ele alındığında, diğerlerinden ayrılmaya devam ederken bilgilerle geri cevap verecektir. Bu şekilde aynı veri yolunu birden fazla cihazla iletişim kurmak için kullanabiliriz.

XC8 Derleyicisini kullanarak PIC16F877a Mikrodenetleyici ile I2C

Artık bir I2C iletişiminin nasıl çalıştığını öğrendiğimize göre, kullanacağımız ve I2C satırlarına bazı değerler yazacağımız basit bir program yapalım. Daha sonra bu programı simüle edeceğiz.

Her zaman olduğu gibi, program Yapılandırma bitlerinin ayarlanması ve saat frekansının 20 MHz olarak ayarlanması ile başlayalım.

#pragma config FOSC = HS        // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = ON       // Power-up Timer Enable bit (PWRT enabled)
#pragma config BOREN = ON       // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF        // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF        // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)

#define _XTAL_FREQ 20000000

Bir sonraki adımda önceden tanımlanan PIC16F877a_I2C.h başlık dosyasını projemize include ederek uygulamamıza I2C bağlantısı için gerekli tanımları otomatik tanıtmış oluruz. PIC16F877a_I2C.h dosyasına yazının altında bulunan indirme linki yardımı ile ulaşabilirsiniz.

PIC16F877 Mikrodenetleyici ile I2C haberleşmesi 2

Başlık dosyasını eklemek için :

#include <xc.h>
#include "PIC16F877a_I2C.h"

While döngüsünün içinde I2C iletişimine başlayacağız, I2C veriyoluna birkaç rastgele değer yazacağız ve sonra I2C iletişimini sonlandıracağız. Seçtiğim rastgele değerler D0, 88 ve FF’dir. İstediğiniz değerleri girebilirsiniz. Fakat bu değerleri, simülasyonumuzda doğrulayacağımızdan hatırlayın.

while(1)
  {
   I2C_Begin();      
   I2C_Write(0xD0);
   I2C_Write(0x88);
   I2C_Write(0xFF);
   I2C_End();
   __delay_ms(1000);
  }

Programımızı derleyip Proteus ile similasyonu yapalım.

Mikrodenetleyici

Mikrodenetleyici

Hex dosyamızı oluşturup Proteus yardımıyla oluşturduğumuz similasyona yükleyelim. Hex dosyamızı yüklediğimiz similasyonumuzu çalıştıralım ve mikrodenetleyicimizin pinlerini kontrol edelim.

Yazılan değerlere baktığımızda programda belirtiğimiz değerler D0, 88 ve FF’dir. Değerler her 1 saniyede bir yazılmıştır.

/*
 * File:   IIC with PIC16F
 */
#pragma config FOSC = HS        // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = ON       // Power-up Timer Enable bit (PWRT enabled)
#pragma config BOREN = ON       // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF        // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF        // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)

#define _XTAL_FREQ 20000000

#include <xc.h>
#include "PIC16F877a_I2C.h"

int main()
{
    I2C_Initialize(100); //Initialize I2C Master with 100KHz clock

while(1)
  {
   I2C_Begin();       
   I2C_Write(0xD0); 
   I2C_Write(0x88); 
   I2C_Write(0xFF); 
   I2C_End();
   
   __delay_ms(1000);

}
}

Read More

Arduino ile Kayan Yazı Yapımı

Bu projemizde Arduino ile P10 modülü kullanarak kayan yazı yapacağız. P10 modülünü gelin biraz yakından tanıyalım.

Özellikleri;

– Her bir grafik led panel 32×16 cm ölçülerindedir.

– Her bir grafik led panelde 512 adet led vardır.

– Her bir grafik led panel max. 4A çekmektedir.

– Gündüz ve gece çok daha fazla farkedilebilirlik özelliğine sahiptir.

– Ürün modüllerinde 140 dereceden okunabilen oval ledler kullanılmaktadır.

– Ürün modüler istem bir ürün olduğundan,müdahalede o denli kolay ve pratiktir.

– Bu tabelalar üzerinde basit bir program ve bilgisayar erişimiyle,istediğiniz fontta ve karekterde yazı ekleyip kaldırmanız mümkündür.

– Bunun yanında firma logonuzu,yada sabit ve hareketli giflerle tabelanızın görselliğini artımanız mümkündür.

– Tabelanız satırlara bölerek,birkaç farklı lisanda aynı anda kullanabilme avantajı sağlamaktadır.

Kod için Gerekli Olan Kütüphane  : https://github.com/freetronics/DMD

2×16 lık headerın arduino nano’ya bağlantı şekli:

Arduino ile Kayan Yazı Yapımı 3

Arduino ile kayan yazı

Arduino ile kayan yazı kodları :

#include <SPI.h>       
#include <DMD.h>     
#include <TimerOne.h>  
#include "SystemFont5x7.h"
#include "Arial_black_16.h"
#include "Arial14.h"


#define DISPLAYS_ACROSS 1
#define DISPLAYS_DOWN 1
DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);

void ScanDMD()
{
  dmd.scanDisplayBySPI();
}

void setup(void)
{

  
   Timer1.initialize( 5000 );          
   Timer1.attachInterrupt( ScanDMD );  

   //clear/init the DMD pixels held in RAM
   dmd.clearScreen( true );  

}

void loop(void)
{
   byte b;
  
  
  
   dmd.clearScreen( true );
   dmd.selectFont(Arial_Black_16);
   //dmd.selectFont(Arial_14);
  

   dmd.drawMarquee("FATIH BASARIS",13,(32*DISPLAYS_ACROSS)-1,1);
   long start=millis();
   long timer=start;
   boolean ret=false;
   while(!ret){
     if ((timer+30) < millis()) {
       ret=dmd.stepMarquee(-1,0);
       timer=millis();
     }
   }
}

 

Read More

MATLAB ile Arduino kullanarak Step Motor Kontrolü

Step motorlar, farklı adımlarla dönen bir DC motordur. Ayrıca, step motorlar konumlandırma, hız kontrolü ve uygulamaları için iyidir.

MATLAB’ın önceki derslerinde, MATLAB DC motor, Servo motor gibi yazılar paylaştık. Eğer MATLAB için yeniyseniz bu yazılarımıza bakınız.

Step Motorda çalışma modları

Step motor için kodlamaya başlamadan önce bir step motorun nasıl çalıştığını anlamanız gerekir. Step modunun statoru farklı bobin çiftlerinden oluştuğu için, her bir bobin çifti birçok farklı yöntemde uyarılabilir, bu da modların birçok farklı modda sürülmesini sağlar. Aşağıdaki sınıflandırma çeşitleri başlıkları :

  • Full Step Mode
  • One phase-on stepping or Wave Stepping
  • Two Phase-on stepping
  • Half Step Mode

Step Motorun kontrol edilmesi için MATLAB Grafik Kullanıcı Arayüzü Oluşturulması

Daha sonra Step motorunu kontrol etmek için GUI (Grafik Kullanıcı Arayüzü) oluşturmamız gerekiyor. GUI’yi başlatmak için komut penceresinde aşağıdaki komutu yazın.

guide

Bir açılır pencere açılır, ardından aşağıdaki resimde gösterildiği gibi yeni boş GUI’yi seçin.

MATLAB ile Arduino kullanarak Step Motor Kontrolü 4

Şimdi, aşağıda gösterildiği gibi, step motorunu saat yönünde ve saat yönünün tersine döndürmek için iki geçiş düğmesi seçin

MATLAB ile Arduino kullanarak Step Motor Kontrolü 5

Düğmenin şeklini yeniden boyutlandırmak veya değiştirmek için, sadece üzerine tıklayın ve düğmenin köşelerini sürükleyebilirsiniz. Geçiş düğmesine çift tıklayarak, ilgili düğmenin rengini, dizesini ve etiketini değiştirebilirsiniz. Aşağıdaki resimde gösterildiği gibi iki düğmeyi özelleştirdik.

MATLAB ile Arduino kullanarak Step Motor Kontrolü 6

Arduino ile Step Motor kontrol etmek için MATLAB Kodu

Step motorun kontrolü için MATLAB kodunun tamamı bu projenin sonunda verilmektedir. Aşağıda, Step Motor’u saat yönünde ve saat yönünün tersine döndürmek için yaptığımız bazı düzeltmeler var.

Aşağıdaki kodu kopyalayıp satır no. 74 Arduino’nun m-dosyasını her çalıştırdığınızda MATLAB ile bağlandığından emin olmak için.

MATLAB ile Arduino kullanarak Step Motor Kontrolü 7

Aşağı kaydırdığınızda, GUI’deki Düğmelerin her ikisi için oluşturulmuş iki işlev olduğunu görürsünüz. Şimdi kodu  gerçekleştirmek istediğiniz görevi yazın.

Saat yönünde tuşun işlevinde, motoru, saat yönünde döndürmek için, işlevin bitmesinden hemen önce aşağıdaki kodu kopyalayıp yapıştırın. Step motorun saat yönünde sürekli olarak döndürülmesi için, döngü sırasında iki faz açık kademeli tam mod adımlarını tekrarlamak için döngüyü kullanıyoruz.

MATLAB ile Arduino kullanarak Step Motor Kontrolü 8

Şimdi saat yönünün tersine düğmesinin işleviyle, motoru saat yönünün tersine döndürmek için aşağıdaki kodu fonksiyonun üzerine yapıştırın. Step motorunu saat yönünün tersi yönünde sürekli olarak döndürmek için, iki faz açma kademeli tam mod adımlarını saat yönünün tersi yönünde tekrarlamak için döngü kullanırken kullanıyoruz.

MATLAB ile Arduino kullanarak Step Motor Kontrolü 9

Gerekli Malzeme

MATLAB
Arduino UNO
Step Motor (28BYJ-48, 5VDC)
ULN2003 – Step motor sürücüsü

MATLAB ile Arduino kullanarak Step Motor Kontrolü 10

 

Read More