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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
#!/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