Live Data Chart ve Seri Port için Python

Başlatan muhittin_kaplan, 21 Aralık 2016, 06:01:43

muhittin_kaplan

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 için 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.

Kodlarım çok sofistikedir lütfen kurcalamayınız..

#!/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 = (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(xszs)
            
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()



https://youtu.be/kkzn3m_T1RI



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