Pythonla Seri Port

Visual Studio çalışmak gerçekten çok rahat. ama birkaç iş için o kadar bileşen yüklenmesinden artık gına geldi. Elimdeki GPS modulunden aldığım bilgilerle yapmak istediğim bir kaç iş için yığınla dosyayı yüklemek istemedim. Bu konu hakkında pythona başvurmak , Python 3 ü ve pycharm yüklemek mathplotlib ile de live olarak chart çizdirmek istedim. Çünkü manyağım.
Donanım tarafında birşey yok ublox uno 6m ve ft232 usart-usb dönüştürücü mevcut. Program, seriporttan aldığı gps datasının (NMEA) içinden önce GPGGA yı buluyor. Bu gelen srteam içeriğinden elevatin u seçiyor ( splitString[9] ). Yükseklik verisini önce kalman a sonrada aritmetik ortalama tabi tutarak grafikte gösteriyor.

#!/usr/bin/python
import serial
import codecs
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from matplotlib import style
import numpy
#Kalman Değişkenler
Xk = 0.0
Pk = 1.0
Rvalue = 0.01
#MATHPLOTLIB ile alakalı ayarlar
#style.use('fivethirtyeight')
fig=plt.figure()
ax1=fig.add_subplot(1,1,1)
ax2=fig.add_subplot(1,1,1)
ax3=fig.add_subplot(1,1,1)
#SeriPort Ayarlamaları
ser = serial.Serial()
ser.baudrate=9600
ser.port="COM3"
ser.open()
x=0
xs = []
ys = []
zs=[]
ts=[]
#COM3', 9600, timeout=0,parity=serial.PARITY_NONE, rtscts=1)
def KALMAN(zk):
    global Xk
    global  Pk
    global Rvalue
    KK=0.0
    KK = Pk / (Pk + Rvalue)
    Xk = Xk + KK * (zk - Xk)
    Pk = (1 - KK) * Pk
    return Xk
def animate(i):
    try:
        global x
        s = ser.readline()
        splitString = (codecs.decode(s)).split(",")
        if ((splitString[0]) == "$GPGGA"):
            # print(s) "Saat:",splitString[1]," Lon:",splitString[2],splitString[3]," Lat:",splitString[4],splitString[5],
            KalmanValue = KALMAN(float(splitString[9]))
            x=x+1
            xs.append(x)
            ys.append(KalmanValue)
            zs.append(float(splitString[9]))
            OrtArray=zs[-10:]#ilk 20 yok.
            print(splitString[9],"    ",OrtArray)
            Ortalama = sum(OrtArray) / len(OrtArray)
            ts.append(Ortalama)
            #print(" Elev", splitString[9], " Kalman", KalmanValue, " ORT", Ortalama)
            ax1.clear()
            ax1.plot(xs,ys)
            ax2.plot(xs, zs)
            ax3.plot(xs,ts)
            if (x>100):#100 ü geçerse ilkini sil ortalamada da 50 olur
                xs.pop(0)
                ys.pop(0)
                zs.pop(0)
                ts.pop(0)
    except:
        print ("HATA")
ani=animation.FuncAnimation(fig,animate,interval=100)
plt.show()

ekleme…
python3 ü ve diğer gerekli modülleri için (matplotlib numpy gibi) anaconda yı yükleyiniz ki tüm gereksinimler gelsin. anaconda iyidir.
https://www.continuum.io/downloads.
bunu yüklemiş olmanız serialport modülünü yüklediğiniz anlamınada gelmez onun içinde aşağıdaki serial modülünü yüklemeniz gerekir.
https://pythonhosted.org/pyserial/
serial modul dosyasını indirdikten sonra

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d blogcu bunu beğendi: