Initial commit of files
This commit is contained in:
BIN
Imager/imager_1.4.exe
Normal file
BIN
Imager/imager_1.4.exe
Normal file
Binary file not shown.
BIN
Imager/imager_1.4_amd64.deb
Normal file
BIN
Imager/imager_1.4_amd64.deb
Normal file
Binary file not shown.
139
Projects/ADS-B/99-rtl-sdr.rules
Normal file
139
Projects/ADS-B/99-rtl-sdr.rules
Normal file
@ -0,0 +1,139 @@
|
||||
#
|
||||
# Copyright 2012-2013 Osmocom rtl-sdr project
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
# original RTL2832U vid/pid (hama nano, for example)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="2832", MODE:="0666"
|
||||
|
||||
# RTL2832U OEM vid/pid, e.g. ezcap EzTV668 (E4000), Newsky TV28T (E4000/R820T) etc.
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="2838", MODE:="0666"
|
||||
|
||||
# DigitalNow Quad DVB-T PCI-E card (4x FC0012?)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0413", ATTRS{idProduct}=="6680", MODE:="0666"
|
||||
|
||||
# Leadtek WinFast DTV Dongle mini D (FC0012)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0413", ATTRS{idProduct}=="6f0f", MODE:="0666"
|
||||
|
||||
# Genius TVGo DVB-T03 USB dongle (Ver. B)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0458", ATTRS{idProduct}=="707f", MODE:="0666"
|
||||
|
||||
# Terratec Cinergy T Stick Black (rev 1) (FC0012)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00a9", MODE:="0666"
|
||||
|
||||
# Terratec NOXON rev 1 (FC0013)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b3", MODE:="0666"
|
||||
|
||||
# Terratec Deutschlandradio DAB Stick (FC0013)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b4", MODE:="0666"
|
||||
|
||||
# Terratec NOXON DAB Stick - Radio Energy (FC0013)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b5", MODE:="0666"
|
||||
|
||||
# Terratec Media Broadcast DAB Stick (FC0013)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b7", MODE:="0666"
|
||||
|
||||
# Terratec BR DAB Stick (FC0013)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b8", MODE:="0666"
|
||||
|
||||
# Terratec WDR DAB Stick (FC0013)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b9", MODE:="0666"
|
||||
|
||||
# Terratec MuellerVerlag DAB Stick (FC0013)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00c0", MODE:="0666"
|
||||
|
||||
# Terratec Fraunhofer DAB Stick (FC0013)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00c6", MODE:="0666"
|
||||
|
||||
# Terratec Cinergy T Stick RC (Rev.3) (E4000)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00d3", MODE:="0666"
|
||||
|
||||
# Terratec T Stick PLUS (E4000)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00d7", MODE:="0666"
|
||||
|
||||
# Terratec NOXON rev 2 (E4000)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00e0", MODE:="0666"
|
||||
|
||||
# PixelView PV-DT235U(RN) (FC0012)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1554", ATTRS{idProduct}=="5020", MODE:="0666"
|
||||
|
||||
# Astrometa DVB-T/DVB-T2 (R828D)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="15f4", ATTRS{idProduct}=="0131", MODE:="0666"
|
||||
|
||||
# Compro Videomate U620F (E4000)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="185b", ATTRS{idProduct}=="0620", MODE:="0666"
|
||||
|
||||
# Compro Videomate U650F (E4000)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="185b", ATTRS{idProduct}=="0650", MODE:="0666"
|
||||
|
||||
# Compro Videomate U680F (E4000)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="185b", ATTRS{idProduct}=="0680", MODE:="0666"
|
||||
|
||||
# GIGABYTE GT-U7300 (FC0012)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d393", MODE:="0666"
|
||||
|
||||
# DIKOM USB-DVBT HD
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d394", MODE:="0666"
|
||||
|
||||
# Peak 102569AGPK (FC0012)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d395", MODE:="0666"
|
||||
|
||||
# KWorld KW-UB450-T USB DVB-T Pico TV (TUA9001)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d397", MODE:="0666"
|
||||
|
||||
# Zaapa ZT-MINDVBZP (FC0012)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d398", MODE:="0666"
|
||||
|
||||
# SVEON STV20 DVB-T USB & FM (FC0012)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d39d", MODE:="0666"
|
||||
|
||||
# Twintech UT-40 (FC0013)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d3a4", MODE:="0666"
|
||||
|
||||
# ASUS U3100MINI_PLUS_V2 (FC0013)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d3a8", MODE:="0666"
|
||||
|
||||
# SVEON STV27 DVB-T USB & FM (FC0013)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d3af", MODE:="0666"
|
||||
|
||||
# SVEON STV21 DVB-T USB & FM
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d3b0", MODE:="0666"
|
||||
|
||||
# Dexatek DK DVB-T Dongle (Logilink VG0002A) (FC2580)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1d19", ATTRS{idProduct}=="1101", MODE:="0666"
|
||||
|
||||
# Dexatek DK DVB-T Dongle (MSI DigiVox mini II V3.0)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1d19", ATTRS{idProduct}=="1102", MODE:="0666"
|
||||
|
||||
# Dexatek DK 5217 DVB-T Dongle (FC2580)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1d19", ATTRS{idProduct}=="1103", MODE:="0666"
|
||||
|
||||
# MSI DigiVox Micro HD (FC2580)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1d19", ATTRS{idProduct}=="1104", MODE:="0666"
|
||||
|
||||
# Sweex DVB-T USB (FC0012)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="a803", MODE:="0666"
|
||||
|
||||
# GTek T803 (FC0012)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="b803", MODE:="0666"
|
||||
|
||||
# Lifeview LV5TDeluxe (FC0012)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="c803", MODE:="0666"
|
||||
|
||||
# MyGica TD312 (FC0012)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="d286", MODE:="0666"
|
||||
|
||||
# PROlectrix DV107669 (FC0012)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="d803", MODE:="0666"
|
||||
12
Projects/ADS-B/ads-b.sh
Executable file
12
Projects/ADS-B/ads-b.sh
Executable file
@ -0,0 +1,12 @@
|
||||
#!/bin/sh
|
||||
|
||||
ADSB=$HOME/ProbeStar/pi_tools/Projects/ADS-B/dump1090
|
||||
|
||||
if [ -d $ADSB ]; then
|
||||
cd $ADSB
|
||||
if [ ! -d /run/dump1090-fa ]; then
|
||||
sudo mkdir -p /run/dump1090-fa
|
||||
sudo chmod a+rwx /run/dump1090-fa
|
||||
fi
|
||||
./dump1090 --interactive --net --write-json /run/dump1090-fa/
|
||||
fi
|
||||
125
Projects/ADS-B/config.js
Normal file
125
Projects/ADS-B/config.js
Normal file
@ -0,0 +1,125 @@
|
||||
// --------------------------------------------------------
|
||||
//
|
||||
// This file is to configure the configurable settings.
|
||||
// Load this file before script.js file at gmap.html.
|
||||
//
|
||||
// --------------------------------------------------------
|
||||
|
||||
// -- Title Settings --------------------------------------
|
||||
// Show number of aircraft and/or messages per second in the page title
|
||||
PlaneCountInTitle = true;
|
||||
MessageRateInTitle = false;
|
||||
|
||||
// -- Output Settings -------------------------------------
|
||||
// The DisplayUnits setting controls whether nautical (ft, NM, knots),
|
||||
// metric (m, km, km/h) or imperial (ft, mi, mph) units are used in the
|
||||
// plane table and in the detailed plane info. Valid values are
|
||||
// "nautical", "metric", or "imperial".
|
||||
DisplayUnits = "nautical";
|
||||
|
||||
// -- Map settings ----------------------------------------
|
||||
// These settings are overridden by any position information
|
||||
// provided by dump1090 itself. All positions are in decimal
|
||||
// degrees.
|
||||
|
||||
// Default center of the map.
|
||||
DefaultCenterLat = 42.522230;
|
||||
DefaultCenterLon = -83.23768;
|
||||
// The google maps zoom level, 0 - 16, lower is further out
|
||||
DefaultZoomLvl = 10;
|
||||
|
||||
// Center marker. If dump1090 provides a receiver location,
|
||||
// that location is used and these settings are ignored.
|
||||
|
||||
SiteShow = false; // true to show a center marker
|
||||
SiteLat = 42.522230; // position of the marker
|
||||
SiteLon = -83.23768;
|
||||
SiteName = "Proberts"; // tooltip of the marker
|
||||
|
||||
// -- Marker settings -------------------------------------
|
||||
|
||||
// These settings control the coloring of aircraft by altitude.
|
||||
// All color values are given as Hue (0-359) / Saturation (0-100) / Lightness (0-100)
|
||||
ColorByAlt = {
|
||||
// HSL for planes with unknown altitude:
|
||||
unknown : { h: 0, s: 0, l: 40 },
|
||||
|
||||
// HSL for planes that are on the ground:
|
||||
ground : { h: 15, s: 80, l: 20 },
|
||||
|
||||
air : {
|
||||
// These define altitude-to-hue mappings
|
||||
// at particular altitudes; the hue
|
||||
// for intermediate altitudes that lie
|
||||
// between the provided altitudes is linearly
|
||||
// interpolated.
|
||||
//
|
||||
// Mappings must be provided in increasing
|
||||
// order of altitude.
|
||||
//
|
||||
// Altitudes below the first entry use the
|
||||
// hue of the first entry; altitudes above
|
||||
// the last entry use the hue of the last
|
||||
// entry.
|
||||
h: [ { alt: 2000, val: 20 }, // orange
|
||||
{ alt: 10000, val: 140 }, // light green
|
||||
{ alt: 40000, val: 300 } ], // magenta
|
||||
s: 85,
|
||||
l: 50,
|
||||
},
|
||||
|
||||
// Changes added to the color of the currently selected plane
|
||||
selected : { h: 0, s: -10, l: +20 },
|
||||
|
||||
// Changes added to the color of planes that have stale position info
|
||||
stale : { h: 0, s: -10, l: +30 },
|
||||
|
||||
// Changes added to the color of planes that have positions from mlat
|
||||
mlat : { h: 0, s: -10, l: -10 }
|
||||
};
|
||||
|
||||
// For a monochrome display try this:
|
||||
// ColorByAlt = {
|
||||
// unknown : { h: 0, s: 0, l: 40 },
|
||||
// ground : { h: 0, s: 0, l: 30 },
|
||||
// air : { h: [ { alt: 0, val: 0 } ], s: 0, l: 50 },
|
||||
// selected : { h: 0, s: 0, l: +30 },
|
||||
// stale : { h: 0, s: 0, l: +30 },
|
||||
// mlat : { h: 0, s: 0, l: -10 }
|
||||
// };
|
||||
|
||||
// Outline color for aircraft icons with an ADS-B position
|
||||
OutlineADSBColor = '#000000';
|
||||
|
||||
// Outline color for aircraft icons with a mlat position
|
||||
OutlineMlatColor = '#4040FF';
|
||||
|
||||
SiteCircles = true; // true to show circles (only shown if the center marker is shown)
|
||||
// In miles, nautical miles, or km (depending settings value 'DisplayUnits')
|
||||
SiteCirclesDistances = new Array(100,150,200);
|
||||
|
||||
// Controls page title, righthand pane when nothing is selected
|
||||
PageName = "PiAware SkyAware";
|
||||
|
||||
// Show country flags by ICAO addresses?
|
||||
ShowFlags = true;
|
||||
|
||||
// Path to country flags (can be a relative or absolute URL; include a trailing /)
|
||||
FlagPath = "flags-tiny/";
|
||||
|
||||
// Set to true to enable the ChartBundle base layers (US coverage only)
|
||||
ChartBundleLayers = false;
|
||||
|
||||
// Provide a Bing Maps API key here to enable the Bing imagery layer.
|
||||
// You can obtain a free key (with usage limits) at
|
||||
// https://www.bingmapsportal.com/ (you need a "basic key")
|
||||
//
|
||||
// Be sure to quote your key:
|
||||
// BingMapsAPIKey = "your key here";
|
||||
//
|
||||
BingMapsAPIKey = null;
|
||||
|
||||
// Turn on display of extra Mode S EHS / ADS-B v1/v2 data
|
||||
// This is not polished yet (and so is disabled by default),
|
||||
// currently it's just a data dump of the new fields with no UX work.
|
||||
ExtendedData = false;
|
||||
1
Projects/ADS-B/dump1090
Symbolic link
1
Projects/ADS-B/dump1090
Symbolic link
@ -0,0 +1 @@
|
||||
/home/pi/src/dump1090/
|
||||
17
Projects/ADS-B/dump1090-fa.conf
Normal file
17
Projects/ADS-B/dump1090-fa.conf
Normal file
@ -0,0 +1,17 @@
|
||||
#Alias /dump1090 /var/www/html/dump1090/
|
||||
#Alias ^/dump1090-fa$ /dump1090-fa/
|
||||
|
||||
Alias /dump1090/data /tmp/dump1090-fa/
|
||||
Alias /data /tmp/dump1090-fa/
|
||||
|
||||
<Directory “/var/www/html/dump1090/”>
|
||||
Options All
|
||||
AllowOverride All
|
||||
SetEnvIf Request_URI “/dump1090/data/..json$" Header set “Access-Control-Allow-Origin” "”
|
||||
</Directory>
|
||||
|
||||
<Directory “/run/dump1090-fa/”>
|
||||
Options All
|
||||
AllowOverride All
|
||||
SetEnvIf Request_URI “/dump1090/data/..json$" Header set “Access-Control-Allow-Origin” "”
|
||||
</Directory>
|
||||
31
Projects/ADS-B/setup.sh
Executable file
31
Projects/ADS-B/setup.sh
Executable file
@ -0,0 +1,31 @@
|
||||
#!/bin/sh
|
||||
|
||||
# install software
|
||||
sudo apt-get install apache2 rtl-sdr python-gi-cairo
|
||||
|
||||
# script
|
||||
mkdir -p ~/bin
|
||||
cp ads-b.sh ~/bin
|
||||
|
||||
# rules
|
||||
sudo cp *.rules /etc/udev/rules.d
|
||||
sudo service udev restart
|
||||
|
||||
# apache setup
|
||||
sudo cp dump1090-fa.conf /etc/apache2/conf-enabled/
|
||||
sudo service apache2 restart
|
||||
|
||||
# dump1090 build and install
|
||||
mkdir -p ~/src
|
||||
pushd ~/src/dump1090
|
||||
git clone https://github.com/flightaware/dump1090
|
||||
make
|
||||
sudo mkdir -p /var/www/html/dump1090-fa
|
||||
sudo cp -a public_html/* /var/www/html/dump1090-fa
|
||||
popd
|
||||
ln -fs ~/src/dump1090
|
||||
|
||||
# dump1090 config
|
||||
sudo cp config.js /var/www/html/dump1090-fa
|
||||
cd /var/www/html/dump1090-fa
|
||||
sudo ln -fs /run/dump1090-fa data
|
||||
14
Projects/GPS/etc/default/gpsd
Normal file
14
Projects/GPS/etc/default/gpsd
Normal file
@ -0,0 +1,14 @@
|
||||
# Default settings for the gpsd init script and the hotplug wrapper.
|
||||
|
||||
# Start the gpsd daemon automatically at boot time
|
||||
START_DAEMON="true"
|
||||
|
||||
# Use USB hotplugging to add new USB devices automatically to the daemon
|
||||
USBAUTO="true"
|
||||
|
||||
# Devices gpsd should collect to at boot time.
|
||||
# They need to be read/writeable, either by user gpsd or the group dialout.
|
||||
DEVICES="/dev/ttyACM0"
|
||||
|
||||
# Other options you want to pass to gpsd
|
||||
GPSD_OPTIONS="-G"
|
||||
BIN
Projects/GPS/python/alert.wav
Normal file
BIN
Projects/GPS/python/alert.wav
Normal file
Binary file not shown.
3
Projects/GPS/python/setup.sh
Executable file
3
Projects/GPS/python/setup.sh
Executable file
@ -0,0 +1,3 @@
|
||||
#!/bin/sh
|
||||
|
||||
sudo -H pip3 install gps serial pynmea2
|
||||
24
Projects/GPS/python/test.py
Executable file
24
Projects/GPS/python/test.py
Executable file
@ -0,0 +1,24 @@
|
||||
#! /usr/bin/python3
|
||||
|
||||
from gps import *
|
||||
import time
|
||||
|
||||
gpsd = gps(mode=WATCH_ENABLE|WATCH_NEWSTYLE)
|
||||
print('latitude\tlongitude\ttime utc\t\taltitude\tepv\tept\tspeed\tclimb') # '\t' = TAB to try and output the data in columns.
|
||||
|
||||
try:
|
||||
|
||||
|
||||
while True:
|
||||
report = gpsd.next() #
|
||||
if report['class'] == 'TPV':
|
||||
out = ""
|
||||
for i in ['lat','lon','time','alt','epv','ept','speed','climb']:
|
||||
out += str(getattr(report,i,0.0)) + "\t"
|
||||
print(out)
|
||||
|
||||
time.sleep(1)
|
||||
|
||||
except (KeyboardInterrupt, SystemExit): #when you press ctrl+c
|
||||
print("Done.\nExiting.")
|
||||
|
||||
1
Projects/GPS/python/test1.csv
Normal file
1
Projects/GPS/python/test1.csv
Normal file
@ -0,0 +1 @@
|
||||
42.521985, -83.237700, 10, 0
|
||||
|
234
Projects/GPS/python/waypoint_alert.py
Executable file
234
Projects/GPS/python/waypoint_alert.py
Executable file
@ -0,0 +1,234 @@
|
||||
#! /usr/bin/python3
|
||||
|
||||
import os
|
||||
import sys
|
||||
import getopt
|
||||
import csv
|
||||
|
||||
from math import *
|
||||
from gps import *
|
||||
from time import strftime, sleep
|
||||
|
||||
import RPi.GPIO as GPIO
|
||||
|
||||
##############################################################################
|
||||
# sound stuff
|
||||
##############################################################################
|
||||
|
||||
import os
|
||||
from sys import platform as _platform
|
||||
|
||||
sound_args = ""
|
||||
|
||||
def play_sound(file):
|
||||
if _platform == "win32" or _platform == "win64" or _platform == "cygwin":
|
||||
cmd = "wmplayer " + '"' + file + '"'
|
||||
else:
|
||||
cmd = "aplay -N " + sound_args + " " + file + " &"
|
||||
os.system(cmd)
|
||||
|
||||
##############################################################################
|
||||
# buzzer stuff
|
||||
##############################################################################
|
||||
|
||||
# https://www.instructables.com/Raspberry-Pi-Tutorial-How-to-Use-a-Buzzer/
|
||||
|
||||
buzzer=23
|
||||
seconds=3
|
||||
|
||||
def buzzer_init():
|
||||
GPIO.setwarnings(0)
|
||||
GPIO.setmode(GPIO.BCM)
|
||||
GPIO.setup(buzzer, GPIO.OUT)
|
||||
|
||||
def buzzer_on():
|
||||
GPIO.output(buzzer, GPIO.HIGH)
|
||||
play_sound("alert.wav")
|
||||
|
||||
def buzzer_off():
|
||||
GPIO.output(buzzer, GPIO.LOW)
|
||||
|
||||
def buzzer_run():
|
||||
global seconds
|
||||
sec = seconds
|
||||
while (sec):
|
||||
buzzer_on()
|
||||
sleep(0.5)
|
||||
buzzer_off()
|
||||
sleep(0.5)
|
||||
sec = sec - 1
|
||||
|
||||
buzzer_init()
|
||||
|
||||
##############################################################################
|
||||
# gps stuff
|
||||
##############################################################################
|
||||
|
||||
# https://ozzmaker.com/using-python-with-a-gps-receiver-on-a-raspberry-pi/
|
||||
|
||||
gpsd = gps(mode=WATCH_ENABLE|WATCH_NEWSTYLE)
|
||||
|
||||
#
|
||||
# GPS receiver is ublox from V2V-MD at 10x seconds
|
||||
#
|
||||
|
||||
# http://www.movable-type.co.uk/scripts/latlong.html
|
||||
|
||||
earth_flatening = 1.0/298.257223563
|
||||
earth_radius = 6378137.0
|
||||
|
||||
def haversine(lat1, lon1, lat2, lon2):
|
||||
"""
|
||||
Calculate the great circle distance between two points
|
||||
on the earth (specified in decimal degrees)
|
||||
"""
|
||||
# convert decimal degrees to radians
|
||||
lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
|
||||
|
||||
# haversine formula
|
||||
dlon = lon2 - lon1
|
||||
dlat = lat2 - lat1
|
||||
a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
|
||||
c = 2 * asin(sqrt(a))
|
||||
|
||||
# 6367 km is the radius of the Earth
|
||||
return earth_radius * c
|
||||
|
||||
def roydistance(lat1, lon1, lat2, lon2):
|
||||
"""
|
||||
Calculate the great circle distance between two points
|
||||
on the earth (specified in decimal degrees)
|
||||
"""
|
||||
# convert decimal degrees to radians
|
||||
lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
|
||||
|
||||
# Roy's method
|
||||
f1 = (1.0 - earth_flatening)
|
||||
|
||||
top = (pow((lon2-lon1), 2) * pow(cos(lat1), 2)) + pow(lat2-lat1, 2)
|
||||
bot = pow(sin(lat1), 2) + (pow(f1, 2) * pow(cos(lat1), 2))
|
||||
|
||||
dist = f1 * earth_radius * sqrt(top/bot)
|
||||
|
||||
return dist
|
||||
|
||||
##############################################################################
|
||||
# virtual cones
|
||||
##############################################################################
|
||||
|
||||
# node from csv (each line is lat, long, distance, next code# (optional)):
|
||||
# 42.522040, -83.237594, 5, 1
|
||||
|
||||
def read_csv(csv_file):
|
||||
file_csv = open(csv_file)
|
||||
data_csv = csv.reader(file_csv)
|
||||
virtual_cones = list(data_csv)
|
||||
total_cones = len(virtual_cones)
|
||||
print(csv_file, total_cones)
|
||||
# print(virtual_cones)
|
||||
return virtual_cones
|
||||
|
||||
##############################################################################
|
||||
# main
|
||||
##############################################################################
|
||||
|
||||
def main(argv):
|
||||
virtual_list = [[],[],[],[],[],[],[],[],[]]
|
||||
virtual_count = 0
|
||||
current_cone = [0,0,0,0,0,0,0,0]
|
||||
total_cones = [0,0,0,0,0,0,0,0]
|
||||
|
||||
try:
|
||||
os.mkdir("logs")
|
||||
except:
|
||||
pass
|
||||
|
||||
log = open(strftime("logs/way-%Y%m%d-%H%M.log"), 'a')
|
||||
log.write("Time,Latitude,Longitude,Heading,Speed,Description\n")
|
||||
|
||||
try:
|
||||
opts, args = getopt.getopt(argv,"",["",""])
|
||||
except getopt.GetoptError:
|
||||
print(sys.argv[0], '<csvfile>')
|
||||
sys.exit(2)
|
||||
# for opt, arg in opts:
|
||||
# nop
|
||||
|
||||
# slurp in files for each list
|
||||
for arg in args:
|
||||
virtual_cones = read_csv(arg)
|
||||
current_cone[virtual_count] = 0
|
||||
total_cones[virtual_count] = 0
|
||||
virtual_list[virtual_count] = virtual_cones
|
||||
virtual_count = virtual_count + 1
|
||||
|
||||
# print(virtual_list)
|
||||
buzz_no = 0
|
||||
max_buzz = 3
|
||||
|
||||
try:
|
||||
while True:
|
||||
report = gpsd.next() #
|
||||
if report['class'] == 'TPV':
|
||||
|
||||
time = getattr(report, 'time', 0.0)
|
||||
lat = getattr(report, 'lat', 0.0)
|
||||
lon = getattr(report, 'lon', 0.0)
|
||||
heading = getattr(report, 'track', 0.0)
|
||||
speed = getattr(report, 'speed', 0.0)
|
||||
|
||||
log.write(time+","+str(lat)+","+str(lon)+","+str(heading)+","+str(speed))
|
||||
# print("Position: %f, %f, %d" % (lat, lon, speed))
|
||||
|
||||
# walk through each list
|
||||
for i in range(0, virtual_count):
|
||||
# end of list?
|
||||
if current_cone[i] >= total_cones[i]:
|
||||
current_cone[i] = 0
|
||||
|
||||
# check first node for reset
|
||||
if current_cone[i]:
|
||||
# node from csv (each line is lat, long, distance, next code#)
|
||||
row = virtual_list[i][0]
|
||||
cone_lat = float(row[0])
|
||||
cone_lon = float(row[1])
|
||||
cone_dist = float(row[2])
|
||||
dist = haversine(lat, lon, cone_lat, cone_lon) / 1000.0
|
||||
if dist < cone_dist:
|
||||
current_cone[i] = 0
|
||||
|
||||
# node from csv (each line is lat, long, distance, next code#)
|
||||
row = virtual_list[i][current_cone[i]]
|
||||
cone_lat = float(row[0])
|
||||
cone_lon = float(row[1])
|
||||
cone_dist = float(row[2])
|
||||
|
||||
# next cone
|
||||
cone_next = current_cone[i] + 1
|
||||
try:
|
||||
cone_next = int(row[3])
|
||||
except:
|
||||
cone_next = 0
|
||||
|
||||
# distance between vehicle and cone
|
||||
# dist = haversine(lat, lon, cone_lat, cone_lon)
|
||||
dist = roydistance(lat, lon, cone_lat, cone_lon)
|
||||
|
||||
# check distance trigger
|
||||
if (dist < cone_dist and buzz_no < max_buzz):
|
||||
log.write(".Waypoint="+str(i)+":"+str(current_cone[i]))
|
||||
print("Waypoint %d:%d reached: %f, %f, %d" % (i, current_cone[i], lat, lon, speed))
|
||||
buzzer_run()
|
||||
current_cone[i] = cone_next
|
||||
buzz_no = buzz_no + 1
|
||||
else:
|
||||
buzz_no = 0
|
||||
log.write("\n")
|
||||
|
||||
# time.sleep(0.2)
|
||||
|
||||
except (KeyboardInterrupt, SystemExit): #when you press ctrl+c
|
||||
log.close()
|
||||
print("Done.\nExiting.")
|
||||
|
||||
main(sys.argv[1:])
|
||||
5
Projects/GPS/setup.sh
Executable file
5
Projects/GPS/setup.sh
Executable file
@ -0,0 +1,5 @@
|
||||
#!/bin/sh
|
||||
|
||||
sudo apt-get install -y gpsd gpsd-clients gpsbabel libgps-dev python-gps
|
||||
|
||||
sudo cp etc/default/gpsd /etc/default/gpsd
|
||||
Binary file not shown.
BIN
Radio/Pi-Star/3.4/Pi-Star_Config_25-Nov-2020.zip
Normal file
BIN
Radio/Pi-Star/3.4/Pi-Star_Config_25-Nov-2020.zip
Normal file
Binary file not shown.
BIN
Radio/Pi-Star/3.4/Pi-Star_Config_nano-spot_29-Feb-2020.zip
Normal file
BIN
Radio/Pi-Star/3.4/Pi-Star_Config_nano-spot_29-Feb-2020.zip
Normal file
Binary file not shown.
Binary file not shown.
BIN
Radio/Pi-Star/4.1/Pi-Star_Config_30-Nov-2020.zip
Normal file
BIN
Radio/Pi-Star/4.1/Pi-Star_Config_30-Nov-2020.zip
Normal file
Binary file not shown.
15
Radio/Pi-Star/wpa_supplicant.conf
Normal file
15
Radio/Pi-Star/wpa_supplicant.conf
Normal file
@ -0,0 +1,15 @@
|
||||
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
|
||||
update_config=1
|
||||
ap_scan=1
|
||||
fast_reauth=1
|
||||
country=US
|
||||
|
||||
network={
|
||||
#ssid="HamGate"
|
||||
ssid=48616d47617465
|
||||
#psk="Roughnecks Ho"
|
||||
psk=3a631133a09e414b21a433ecef9be7cb09fa8442e15e4b4eb21ce156ab44bcf4
|
||||
id_str="0"
|
||||
priority=100
|
||||
}
|
||||
|
||||
139
Radio/RTL-SDR/99-rtl-sdr.rules
Normal file
139
Radio/RTL-SDR/99-rtl-sdr.rules
Normal file
@ -0,0 +1,139 @@
|
||||
#
|
||||
# Copyright 2012-2013 Osmocom rtl-sdr project
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
# original RTL2832U vid/pid (hama nano, for example)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="2832", MODE:="0666"
|
||||
|
||||
# RTL2832U OEM vid/pid, e.g. ezcap EzTV668 (E4000), Newsky TV28T (E4000/R820T) etc.
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="2838", MODE:="0666"
|
||||
|
||||
# DigitalNow Quad DVB-T PCI-E card (4x FC0012?)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0413", ATTRS{idProduct}=="6680", MODE:="0666"
|
||||
|
||||
# Leadtek WinFast DTV Dongle mini D (FC0012)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0413", ATTRS{idProduct}=="6f0f", MODE:="0666"
|
||||
|
||||
# Genius TVGo DVB-T03 USB dongle (Ver. B)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0458", ATTRS{idProduct}=="707f", MODE:="0666"
|
||||
|
||||
# Terratec Cinergy T Stick Black (rev 1) (FC0012)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00a9", MODE:="0666"
|
||||
|
||||
# Terratec NOXON rev 1 (FC0013)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b3", MODE:="0666"
|
||||
|
||||
# Terratec Deutschlandradio DAB Stick (FC0013)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b4", MODE:="0666"
|
||||
|
||||
# Terratec NOXON DAB Stick - Radio Energy (FC0013)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b5", MODE:="0666"
|
||||
|
||||
# Terratec Media Broadcast DAB Stick (FC0013)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b7", MODE:="0666"
|
||||
|
||||
# Terratec BR DAB Stick (FC0013)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b8", MODE:="0666"
|
||||
|
||||
# Terratec WDR DAB Stick (FC0013)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b9", MODE:="0666"
|
||||
|
||||
# Terratec MuellerVerlag DAB Stick (FC0013)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00c0", MODE:="0666"
|
||||
|
||||
# Terratec Fraunhofer DAB Stick (FC0013)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00c6", MODE:="0666"
|
||||
|
||||
# Terratec Cinergy T Stick RC (Rev.3) (E4000)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00d3", MODE:="0666"
|
||||
|
||||
# Terratec T Stick PLUS (E4000)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00d7", MODE:="0666"
|
||||
|
||||
# Terratec NOXON rev 2 (E4000)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00e0", MODE:="0666"
|
||||
|
||||
# PixelView PV-DT235U(RN) (FC0012)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1554", ATTRS{idProduct}=="5020", MODE:="0666"
|
||||
|
||||
# Astrometa DVB-T/DVB-T2 (R828D)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="15f4", ATTRS{idProduct}=="0131", MODE:="0666"
|
||||
|
||||
# Compro Videomate U620F (E4000)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="185b", ATTRS{idProduct}=="0620", MODE:="0666"
|
||||
|
||||
# Compro Videomate U650F (E4000)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="185b", ATTRS{idProduct}=="0650", MODE:="0666"
|
||||
|
||||
# Compro Videomate U680F (E4000)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="185b", ATTRS{idProduct}=="0680", MODE:="0666"
|
||||
|
||||
# GIGABYTE GT-U7300 (FC0012)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d393", MODE:="0666"
|
||||
|
||||
# DIKOM USB-DVBT HD
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d394", MODE:="0666"
|
||||
|
||||
# Peak 102569AGPK (FC0012)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d395", MODE:="0666"
|
||||
|
||||
# KWorld KW-UB450-T USB DVB-T Pico TV (TUA9001)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d397", MODE:="0666"
|
||||
|
||||
# Zaapa ZT-MINDVBZP (FC0012)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d398", MODE:="0666"
|
||||
|
||||
# SVEON STV20 DVB-T USB & FM (FC0012)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d39d", MODE:="0666"
|
||||
|
||||
# Twintech UT-40 (FC0013)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d3a4", MODE:="0666"
|
||||
|
||||
# ASUS U3100MINI_PLUS_V2 (FC0013)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d3a8", MODE:="0666"
|
||||
|
||||
# SVEON STV27 DVB-T USB & FM (FC0013)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d3af", MODE:="0666"
|
||||
|
||||
# SVEON STV21 DVB-T USB & FM
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d3b0", MODE:="0666"
|
||||
|
||||
# Dexatek DK DVB-T Dongle (Logilink VG0002A) (FC2580)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1d19", ATTRS{idProduct}=="1101", MODE:="0666"
|
||||
|
||||
# Dexatek DK DVB-T Dongle (MSI DigiVox mini II V3.0)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1d19", ATTRS{idProduct}=="1102", MODE:="0666"
|
||||
|
||||
# Dexatek DK 5217 DVB-T Dongle (FC2580)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1d19", ATTRS{idProduct}=="1103", MODE:="0666"
|
||||
|
||||
# MSI DigiVox Micro HD (FC2580)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1d19", ATTRS{idProduct}=="1104", MODE:="0666"
|
||||
|
||||
# Sweex DVB-T USB (FC0012)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="a803", MODE:="0666"
|
||||
|
||||
# GTek T803 (FC0012)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="b803", MODE:="0666"
|
||||
|
||||
# Lifeview LV5TDeluxe (FC0012)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="c803", MODE:="0666"
|
||||
|
||||
# MyGica TD312 (FC0012)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="d286", MODE:="0666"
|
||||
|
||||
# PROlectrix DV107669 (FC0012)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="d803", MODE:="0666"
|
||||
12
bin/ads-b.sh
Executable file
12
bin/ads-b.sh
Executable file
@ -0,0 +1,12 @@
|
||||
#!/bin/sh
|
||||
|
||||
ADSB=$HOME/ProbeStar/pi_tools/Projects/ADS-B/dump1090-fa
|
||||
|
||||
if [ -d $ADSB ]; then
|
||||
cd $ADSB
|
||||
if [ ! -d /run/dump1090-fa ]; then
|
||||
sudo mkdir -p /run/dump1090-fa
|
||||
sudo chmod a+rwx /run/dump1090-fa
|
||||
fi
|
||||
./dump1090 --interactive --net --write-json /run/dump1090-fa/
|
||||
fi
|
||||
9
bin/os-update.sh
Executable file
9
bin/os-update.sh
Executable file
@ -0,0 +1,9 @@
|
||||
#!/bin/sh
|
||||
|
||||
sudo apt update
|
||||
sudo apt full-upgrade
|
||||
|
||||
sudo apt purge -y bluealsa pimixer
|
||||
sudo apt install -y pulseaudio-module-bluetooth
|
||||
|
||||
sudo reboot
|
||||
Reference in New Issue
Block a user