LMBR Chrono auswertung unter Linux


Es geht um den LMBR Chronograph und die Verwendung unter Linux.
Installation unter 2 Verschiedene Distros.
Dazu stelle ich noch mein kleines Beispielscript für die BASH vor, damit lassen sich die Ergebnisse schön anzeigen und protokolieren.

Übersicht:

  1. Anschluss Laptop (Welches Kabel).
  2. Welche Software unter Linux.
    2.1 Installation unter Arch und Ubuntu.
  3. Erste einfache Auswertung mit Picocom.
    3.1 Auswertung per Beispiel Skript.

1. Anschluss Laptop
Das Richtige rs232 Kabel ist bei dem Chrono wichtig. Ich benutze das UGREEN USB – RS232,DB9 Adapterkabell mit PL2303 Chipsatz.

2. Welche Software unter Linux
Unter Linux und in den DIstributionen gibt es einige Tools die Seriele Schnittstellen verarbeiten können hier ein paar Beispiele:
Mit GUI: moserial, cutecom, ect…
Ohne GUI: dterm, minicom, screen, PICOCOM ect…
Und mit picocom werden wir hier arbeiten. Wie ich finde ist es Simpel Schnell und Übersichtlich – richtig KISSig ;-).

2.1 Installation
Arch: sudo pacman -S picocom
Ubuntu: sudo apt-get install picocom

3. Erste Einfache Auswertung mit Picocom.

Chronograph Anschließen.
Dann picocom Befehl in ein Terminal eingeben:
Achtung! Picocom benötigt Root Rechte um auf die Seriele Schnittstelle zugreifen zu können.
Zum Starten:
sudo picocom -b 19200 -g ~/logdatei.txt /dev/ttyUSB0
Ich schlüssel den Befehel kurz auf:
sudo (Ausführen als Root)
picocom (Programm)
-b 19200 (baudrate 19200 bit/s)
-g ~/logdatei.txt ( Nimmt die Messung in logdatei.txt auf. ~/ Bedeutet im Home verzeichnis.
/dev/ttyUSB0 ist in der Regel die Schnittstelle.
Wenn nicht identifizieren mit lsusb oder ls /dev/*irgendwasUSB Wenn Picocom Gestartet wird sieht es so aus:

Danach Schüsse abgeben:

picocom zeigt dann die m/s der Schüsse an. ( 17.3 40.0 usw)
picocom zeigt keine fehl schüsse an. (range)
Wenn fertig [STRG-Gedrückt]+[A] danach [STRG-Gedrückt]+[X] um Picocom zu beenden.
In der Datei ~/logdatei stehen nun alle gemessenen Schüsse.

3.1 Auswertung per Script
Um nun aus den „Rohdaten“ was Vernünftiges zu Zaubern habe ich ein Bash Script dafür geschrieben. Es fragt einem nach dem Gewehr der Munition und zeigt am ende v0avg (Durschnitt) v0min, v0max, sV, dV, Schüsse an. Und packt das ganze wenn gewünscht in einer log Datei.
Hier eine Beispiel ausgabe vom Script:

Im Prinzip ist es kein aufwendiges Script. Nur die sV Berechnung, war für mich etwas Tricki, weil ich vorher nicht genau wusste wie eine Standardabweichung zustande kommt. Ich werde das Script hier hineinpacken, es dient als „Beispiel“ und nicht als Fertiges Script/Programm.

#!/bin/bash
# ---------------------------------
#   C H R O N O - S C R I P T 0.1
# ---------------------------------
# Projekt: Chrony LMBR Auswertung
# Stand:   0.1 
# Notizen: 
#
#
# Disclaimer: 
# Nur ein Beispiel benutzung auf eigene gefahr!
#
# www.blog-oder-was.de
# lg Daniel 
###################################

log1="test"									## für funktionstest

namerohlog(){								## dateiname für rohdatei und log 
	date1="$(date +%H%M%S-%d%m%Y)"
	echo -e "------------------------------\n  C H R O N O - S C R I P T \n------------------------------ " 
	read -p "Welches Gewehr?: " lg
	read -p "Welches Diabolo?: " mun
	lgmun=$(echo $lg-$mun | tr -d '[:blank:]')
	log1=$(echo $lgmun"@"$date1)
}

picorun(){ 									## picocom wird gestartet. 

	rm $PWD/log.d3
	picocom -b 19200 -g $PWD/log.d3 /dev/ttyUSB0
}

rechnelade(){								## berechne werte lade in var
	sed -e "s/\r//g" $PWD/log.d3 > $log1		
	avgVelo=$(awk '{sum+=$1} END {printf "%.1f\n", sum/NR}' $log1)
	sVelo=$(awk '{sum+=$1; sumsq+=$1*$1} END {printf "%.1f\n", sqrt(sumsq/NR - (sum/NR)^2)}' $log1)	
	dVelo=$(awk '{if(min==""){min=max=$1}; if($1>max) {max=$1}; if($1<min) {min=$1}} END {print max - min}' $log1)
	maxVelo=$(awk '{if(min==""){min=max=$1}; if($1>max) {max=$1}; if($1<min) {min=$1}} END {print max}' $log1)
	minVelo=$(awk '{if(min==""){min=max=$1}; if($1>max) {max=$1}; if($1<min) {min=$1}} END {print min}' $log1)
	countS=$(awk '{nr+=1} END {print nr}' $log1)
	
}

ausgabe1(){ 									## ausgabe terminal/log datei 	
dateOut=$(date +"um "%H:%M" am "%d.%m.%Y )   
	clear 
	echo -e "------------------------------\n  C H R O N O - S C R I P T \n------------------------------\n   Gewehr: $lg \n Munition: $mun \n------------------------------ \n   v0avg:  $avgVelo \n   v0max:  $maxVelo \n   v0min:  $minVelo \n      sV:  $sVelo \n      dV:  $dVelo \n Schüsse:   $countS \n------------------------------ \n $dateOut " 
	read -p " Ergebniss in die Logs Schreiben? (j/n):" case1
	case "$case1" in
        J|j|" ") echo -e "------------------------------\n  C H R O N O - S C R I P T \n------------------------------\n   Gewehr: $lg \n Munition: $mun \n------------------------------ \n   v0avg:  $avgVelo \n   v0max:  $maxVelo \n   v0min:  $minVelo \n      sV:  $sVelo \n      dV:  $dVelo \n Schüsse:   $countS \n------------------------------ \n $dateOut " >> messungen.log
            ;;
        N|n) echo "Beendet ohne Logs"
                   exit 1
            ;;
        *) echo "Was gibst du ein? J für JA! N für Nein so einfach!" 
            ;;
	esac
}
 
namerohlog
picorun
rechnelade
ausgabe1