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 = (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()
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. (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/ (https://pythonhosted.org/pyserial/)
serial modul dosyasını indirdikten sonra
(http://www.muhittinkaplan.com/wp-content/uploads/2016/12/pip_install.png)