Inhaltsverzeichnis:

Raspberry PI Runway Light zur Frühwarnung mit Flugkartendaten - Gunook
Raspberry PI Runway Light zur Frühwarnung mit Flugkartendaten - Gunook

Video: Raspberry PI Runway Light zur Frühwarnung mit Flugkartendaten - Gunook

Video: Raspberry PI Runway Light zur Frühwarnung mit Flugkartendaten - Gunook
Video: Raspberry Pi LED Matrix Display 2024, Juli
Anonim
Raspberry PI Runway Light zur Frühwarnung mit Flugkartierungsdaten
Raspberry PI Runway Light zur Frühwarnung mit Flugkartierungsdaten
Raspberry PI Runway Light zur Frühwarnung mit Flugkartierungsdaten
Raspberry PI Runway Light zur Frühwarnung mit Flugkartierungsdaten
Raspberry PI Runway Light zur Frühwarnung mit Flugkartierungsdaten
Raspberry PI Runway Light zur Frühwarnung mit Flugkartierungsdaten
Raspberry PI Runway Light zur Frühwarnung mit Flugkartierungsdaten
Raspberry PI Runway Light zur Frühwarnung mit Flugkartierungsdaten

Diese Lampe entstand aus mehreren Gründen, denn ich interessiere mich immer für die Flugzeuge, die über mir fliegen und im Sommer an den Wochenenden oft ziemlich aufregende herumfliegen. Obwohl man sie meist nur im Vorbeigehen hört. Der andere Grund ist, dass es den Anschein hat, dass die Flugroute für abgehende Flugzeuge vom Flughafen London City manchmal mitgehört wird und sie einige ziemlich laute Flüge haben. Da ich einige Videos für YouTube aufnehme, ist es wirklich ärgerlich, eine Aufnahme wegen eines lauten Flugzeugs zu verschrotten. Also habe ich mich gefragt, ob die Daten, die Sie auf Websites wie flightradar24 sehen, öffentlich verfügbar sind, als ich entdeckte, dass etwas Ähnliches vom Opensky-Netzwerk verfügbar war, war die Frühwarnlampe geboren. Es dauerte nicht lange, bis die Idee aufkam, eine Nachbildung einer Start- und Landebahnbeleuchtung für das Projekt zu verwenden.

Mehr über The OpenSky Network findet ihr unter https://www.opensky-network.org Ich wollte diesmal auch eine schöne Harzlinse machen, anstatt durchscheinendes PLA zu verwenden und obwohl ich einen ADS-B-Empfänger habe, wollte ich ihn behalten so einfach und günstig. Das ADS-B braucht auch eine Antenne und das würde nicht ausreichen, damit eine Lampe im Büro ins Regal kommt. Hoffentlich finden Sie den Build interessant, da er auch 3D-Druck, Harzformen und Mathematik abdeckt, um die Positionen von Flugzeugen zu extrapolieren, die möglicherweise über Kopf fliegen.

Schritt 1: Entwerfen des Gehäuses

Die Google-Suche bietet viele verschiedene Designs von Runway-Lampen und das Design dieser wurde unter Verwendung von Designeinflüssen von vielen verschiedenen Marken echter Lampen erstellt. Es ist auch so skaliert, dass es in einem Raum oder auf einem Regal sitzt und nicht in voller Größe, da sie im wirklichen Leben viel größer sind.

Designs wurden in Fusion 360 erstellt und ich importierte einige frühere Elemente wie den Himbeer-Pi-Zero-Halter aus früheren Projekten. In der Lage zu sein, Elemente wiederzuverwenden, nimmt viel Kopfzerbrechen, wenn es darum geht, die Grundlagen zu verstehen. Sie können die Dateien auch hier herunterladen

Schritt 2: Gießen der Linsen - #fail

Gießen der Linsen - #fail
Gießen der Linsen - #fail
Gießen der Linsen - #fail
Gießen der Linsen - #fail
Gießen der Linsen - #fail
Gießen der Linsen - #fail

Das wichtigste Gestaltungselement dieser Leuchte sollte die Linse sein. Also habe ich das zuerst in Angriff genommen, da das Projekt ohne einen schönen authentischen Spiegel funktionieren würde. Ich dokumentiere hier die Misserfolge, die ich bei dem Versuch hatte, dies zu erreichen, obwohl ich mich ursprünglich auch dafür entschieden habe, das Objektiv bernsteinfarben zu machen. Start- und Landebahnlichter gibt es sowohl in Bernstein als auch in Blau und erst nachdem ich angefangen hatte, die Bernsteinfarben zu machen, änderte ich meine Meinung und entschied, dass ich eine blaue wollte.

Von dem, was ich erkennen kann, werden die Bernsteinfarbenen an der Haltelinie verwendet und die blauen werden verwendet, um die Start- und Landebahn zu säumen, und diese scheinen die archetypischeren zu sein, die man findet, wenn man nach Start- und Landebahnlichtern sucht. Hier ist jedoch mein erster Versuch, eine bernsteinfarbene Linse herzustellen. Um die Linse herzustellen, wollte ich Klargussharz mit einem Farbzusatz verwenden, und obwohl ich zuvor ein paar Formen gemacht habe, fragte ich mich, ob es möglich sein würde, eine 3D-Form zu drucken und diese zu verwenden. Also begann ich damit, eine geteilte Form in 3D zu erstellen und sie in PetG auszudrucken. Ich war überzeugt, dass vernünftige Mengen an Formtrennmittel ausreichen würden, um die Form zu trennen. Wie sich bei den paar Versuchen herausstellte, klebte ich das Harz wie Leim an der Form und es schien einfach nicht möglich zu sein, sie zu trennen. Obwohl ich die Originalgröße hatte, die ich verwenden wollte, entschied ich mich dagegen und druckte die Linse aus, um sie mit herkömmlichen Silikonformen zu verwenden.

Schritt 3: Verschiedene Arten von Harzen

Verschiedene Arten von Harzen
Verschiedene Arten von Harzen
Verschiedene Arten von Harzen
Verschiedene Arten von Harzen
Verschiedene Arten von Harzen
Verschiedene Arten von Harzen
Verschiedene Arten von Harzen
Verschiedene Arten von Harzen

Als kurze Seite habe ich für dieses Projekt 3 Arten von klaren / farbigen Harzen verwendet.

Der erste war ein Hobbymarkttyp namens Pebeo - Gedeo und wird normalerweise zum Verkapseln kleiner Gegenstände verkauft und für Schmuck und Schreibtisch-Briefbeschwerer usw. verwendet. Dies funktionierte ziemlich gut und härtete in etwa 24-36 Stunden gut aus. Es ist jedoch ziemlich teuer für die Menge, die Sie bekommen, aber es ist praktisch und in Hobby- und Bastelgeschäften leicht erhältlich. Es ist im Verhältnis 2:1 gemischt. Das zweite war ein vorgefärbtes Harz, das in einem Verhältnis von 10:1 mit dem Härter gemischt wurde und dies dauerte am längsten, um ehrlich zu sein, etwa eine Woche, bevor es vollständig ausgehärtet war. Das letzte war ein klares Harz, das ebenfalls im Verhältnis 2:1 gemischt wurde und dieses in ca. 2 Tagen ausgehärtet ist, Sie können dies mit Pigmenttropfen einfärben, müssen jedoch darauf achten, dass Sie immer das gleiche Farbverhältnis verwenden, wenn Sie stellen separate Chargen her. Es funktioniert auch am kostengünstigsten. Schließlich war das RTV für die Form ein GP-3481 RTV und dies dauert etwa 24 Stunden zum Aushärten und hat eine ziemlich lange Topfzeit, so dass Sie viel Zeit haben, es zu mischen und dann zu gießen.

Zur Zeit habe ich keinen Vakuumtopf (derzeit auf Bestellung), so dass Sie sowohl in der Form als auch beim Gießen des Harzes von Blasen befallen werden können. Das ist kein allzu großes Problem, aber mit einer klaren Linse oder ähnlichem sollten Sie darüber nachdenken, die Blasen irgendwie aus den Mischungen zu entfernen.

Schritt 4: Gießen der Linse in Silikonform #2

Image
Image
Gießen der Linse in Silikonform #2
Gießen der Linse in Silikonform #2
Gießen der Linse in Silikonform #2
Gießen der Linse in Silikonform #2

Dies ist also der zweite Versuch, eine Harzlinse herzustellen, und die erste Phase bestand darin, sowohl eine Linse in Fusion 360 herzustellen und sie dann in ABS zu drucken, als auch einen Eimer, um sie zu halten. Dies wäre ersteres für die Form und hilft, die zu verwendende Silikonmenge gering zu halten. Sie können dies leicht aus Karte machen, aber es ist nur ein anderer Ansatz. Um es besser aus der Form zu lösen, habe ich es zuerst lackiert und dann mit Wachstrennmittel gut bedeckt.

Ich habe dann etwas GP-3481 gegossen, das ungefähr Shore 27 RTV hat, und dann die nächsten 24 Stunden vor dem Entformen stehen lassen. Danach habe ich das klare Harz im Verhältnis 2:1 mit etwa 4/5 Tropfen des Farbpigments gemischt und gut vier Minuten lang gut gemischt. Gießen Sie dies in die Form und legen Sie dann auch ein Schnapsglas in das Harz, um später eine Lücke für entweder eine Lampe oder die LEDs zu schaffen. Nach etwa 24 Stunden war dieses Harz zum Entfernen bereit und die Linse kam ziemlich gut heraus. Es sind Luftblasen vorhanden, aber ich habe noch kein Vakuumgefäß, um das Harz vor dem Gießen zu entgasen.

Schritt 5: 3D-Druck und Vorbereitung

3D-Druck und Vorbereitung
3D-Druck und Vorbereitung
3D-Druck und Vorbereitung
3D-Druck und Vorbereitung
3D-Druck und Vorbereitung
3D-Druck und Vorbereitung

Das Modell wurde so konzipiert, dass das Mittelteil in die Basis eingesteckt wird. Dies sollte eine Maskierung während des Lackierprozesses vermeiden. Das gesamte Modell wurde in Hatchbox ABS gedruckt und anschließend geschliffen. Angefangen mit 60er Körnung bis zu etwa 800er Körnung ergab eine ausreichend gute Oberflächengüte für dieses Modell.

Schritt 6: Montage und Lackierung

Montage und Lackierung
Montage und Lackierung
Montage und Lackierung
Montage und Lackierung
Montage und Lackierung
Montage und Lackierung

Sobald die Drucke geschliffen sind, wurde es dann mit etwas High-Build-Primer gestrichen. Leicht geschliffen und dann grau grundiert. Die Hauptteile wurden in Ford-Signalgelb lackiert, dann wurde Brooklandsgrün für den Sockel verwendet. Auf die Schrauben wurden dann Akzente aus Tamiya-Silber aufgebracht und auf dem Linsenhalter etwas Molotow-Silberchrom verwendet.

Schritt 7: Finden Sie zuerst Ebenen innerhalb eines Begrenzungsbereichs

Nachdem die Hardware sortiert war, musste an der Software gearbeitet werden. Es gibt jetzt einige Websites, die Flugverfolgung anbieten, aber nicht viele, die eine API für den Zugriff auf diese Daten bereitstellen. Einige tun dies nur auf kommerzieller Basis, aber zum Glück gibt es eine Site namens https://opensky-network.org, die Sie kostenlos nutzen können.

Um auf diese Daten zuzugreifen, müssen Sie sich registrieren und können dann ihre API verwenden, die mehrere Funktionen und Möglichkeiten zum Abrufen der Daten bietet. Wir interessieren uns für alle Flüge innerhalb eines Gebiets und sie haben dafür einen Live-API-Aufruf. https://opensky-network.org/apidoc/ wird Bounding Box genannt. Der API-Aufruf erfordert die Ecken der Box, die Sie interessieren, mit natürlich unserem Lat/Lon als Mittelpunkt. Sie können überprüfen, ob die Mathematik auf dieser Site funktioniert, die ein Kästchen zeichnet, je nachdem, was Sie eingeben.

Funktion get_bounding_box($latitude_in_degrees, $longitude_in_degrees, $half_side_in_miles){ $half_side_in_km = $half_side_in_miles * 1.609344; $lat = deg2rad($latitude_in_degrees); $lon = deg2rad($longitude_in_degrees); $radius = 6371; $parallel_radius = $radius*cos($lat); $lat_min = $lat - $half_side_in_km/$radius; $lat_max = $lat + $half_side_in_km/$radius; $lon_min = $lon - $half_side_in_km/$parallel_radius; $lon_max = $lon + $half_side_in_km/$parallel_radius; $box_lat_min = rad2deg($lat_min); $box_lon_min = rad2deg($lon_min); $box_lat_max = rad2deg($lat_max); $box_lon_max = rad2deg($lon_max); Rückgabefeld ($box_lat_min, $box_lon_min, $box_lat_max, $box_lon_max);

Wenn Sie Ihren Code testen möchten, gibt es eine Site, auf der Sie den Breitengrad / Längengrad eingeben und die Ergebnisse auf einer Karte anzeigen können: Sehen Sie sich ein Begrenzungsfeld-Beispiel auf einer Karte an

Schritt 8: Berechnung der Richtung der Ebenen in Bezug auf uns

Berechnung des Kurses der Ebenen in Bezug auf uns
Berechnung des Kurses der Ebenen in Bezug auf uns

Die Ergebnisse des Bounding-Box-API-Aufrufs geben uns eine Liste von Flugzeugen, deren Länge/Breite, Geschwindigkeit, Höhe und Kurs. Als nächstes müssen wir also den Kurs jeder Ebene in Bezug auf uns ermitteln, damit wir diejenigen weiterverarbeiten können, die zumindest in unsere allgemeine Richtung gehen. Wir können dies tun, da wir unsere Position kennen und den Winkel von uns zu jeder Ebene berechnen können.

Dazu verwende ich einen Code, der ursprünglich in Javascript war, also habe ich ihn hier in PHP konvertiert, * (initiale) Peilung zwischen zwei Punkten berechnen * * aus: Ed Williams' Aviation Formulary, https://williams.best.vwh.net/avform.htm#Crs * source = instantglobe.com/CRANES/GeoCoordTool.html */ Funktion get_bearing($home_lat, $home_lon, $plane_lat, $plane_lon) { $lat1 = deg2rad($home_lat); $lat2 = deg2rad($plane_lat);

$dLon = deg2rad($plane_lon-$home_lon);

$y = sin($dLon) * cos($lat2);

$x = cos($lat1)*sin($lat2) - sin($lat1)*cos($lat2)*cos($dLon); $z = atan2($y, $x); $zz = (rad2deg($z) +360)% 360; geben $zz zurück;

Wenn Sie sich die Seite mit den Original-Javascript-Versionen ansehen möchten, ist dies der Link:

Innerhalb dieses Codes können Sie auch die verschiedenen Unterroutinen für jeden Berechnungstyp sehen.

Schritt 9: Berechnen eines Schnittpunkts durch Betrachten eines Kreises

Berechnen eines Achsenabschnitts durch Betrachten eines Kreises
Berechnen eines Achsenabschnitts durch Betrachten eines Kreises

Wir haben jetzt also ein Flugzeug, bei dem die Peilung zwischen ihm und unserem Standort weniger als 90 beträgt (entweder positiv oder negativ), und dies bedeutet, dass die Möglichkeit besteht, dass es in der Nähe fliegt. Mit der Haversine-Formel können wir auch mit dem Lon/Lat des Flugzeugs und dem Lon/Lat unseres Hauses die Entfernung berechnen, die es von uns entfernt ist.

Wenn wir das Diagramm betrachten, können wir, wenn wir einen Kreis mit einem Radius von etwa 3 Meilen um unser Haus zeichnen, die Möglichkeit haben, etwas darüber fliegen zu sehen. Wir kennen den Kursunterschied zwischen dem Flugzeug und uns, wir kennen auch die Entfernung des Flugzeugs von uns, so dass wir dann das Dreieck mit dem guten alten SOHCAHTOA berechnen können, und in diesem Fall mit dem Tan des Winkels erhalten wir die gegenüberliegende Seitenlänge. Wenn wir also diesen Wert mit dem Radiuswert des Kreises um das Haus vergleichen, können wir herausfinden, ob das Flugzeug nahe genug fliegt, um es zu sehen. Als nächstes können wir die Zeit berechnen, die das Flugzeug über die Luftgeschwindigkeit und die Entfernung vorbeifliegt, und wenn diese weniger als etwa 45 Sekunden beträgt, schalten wir das Licht ein. Dies ist ein Teil des Codes, den ich verwende, um die Chance auf einen Überflug zu ermitteln. Ich tue dies, weil es einen nahegelegenen Flughafen gibt und wenn die Flugzeuge herumrollen, zeigen sie unweigerlich auf das Haus. Da ihre Höhe jedoch null ist und die Geschwindigkeit Schrittgeschwindigkeit ist, sollte dies keinen Alarm auslösen.

Funktion get_intercept($home_head, $plane_head, $plane_distance) {

$flight_angle = abs(abs($home_head - $plane_head) - 180); $flight_angle_r = deg2rad($flight_angle); $flight_angle_t = tan($flight_angle_r); $flight_intercept = $flight_angle_t * $plane_distance;

if (($flight_angle<90) && ($flight_intercept<3)){ // möglicher Vorbeiflug

}

zurück $flight_intercept;

}

Schritt 10: Abstand zwischen zwei Punkten auf einer Karte - Haversine-Formel

Entfernung zwischen zwei Punkten auf einer Karte - Haversine-Formel
Entfernung zwischen zwei Punkten auf einer Karte - Haversine-Formel

Wir müssen also die Entfernung zwischen dem Flugzeug und unserem Standort berechnen. Bei kurzen Entfernungen auf einer Karte könnten Sie die Entfernung ungefähr berechnen, aber da die Erde kugelförmig ist, gibt es eine Formel namens Haversine-Formel, mit der Sie die gekrümmte Oberfläche berücksichtigen können. Sie können die Formel weiterlesen:

Mit der berechneten Entfernung und der Fluggeschwindigkeit des Flugzeugs können wir nun berechnen, wie viele Sekunden es dauert, bis das Flugzeug über uns ist. Das Licht geht also an, wenn innerhalb von 30 Sekunden nach dem Vorbeiflug etwas passiert und wir endlich unser Warnlicht haben.

* basierend auf 0n JS auf instantglobe.com/CRANES/GeoCoordTool.html und in PHP umgewandelt */

Funktion get_distHaversine ($home_lat, $home_lon, $plane_lat, $plane_lon) { $R = 6371; // mittlerer Erdradius in km $dLat = deg2rad($plane_lat-$home_lat); $dLon = deg2rad($plane_lon-$home_lon); $lat1 = deg2rad($home_lat); $lat2 = deg2rad($plane_lat);

$a = sin($dLat/2) * sin($dLat/2) + cos($lat1) * cos($lat2) * sin($dLon/2) * sin($dLon/2);

$c = 2 * atan2(sqrt($a), sqrt(1-$a)); $d = $R * $c; Rückgabe $d; }

Schritt 11: Importieren und Definieren der Flugzeugdatenbank

Eines der anderen Stücke ist, dass die Opensky-Site eine herunterladbare Datenbank von Flugzeugen zusammen mit ihren Rufzeichen und Idents anbietet. Seine mehreren hunderttausend Einträge. Wir können diese also herunterladen und lokal in eine MariaDB-Datenbank zum Nachschlagen (MySQL) laden. Bei jedem Flugzeug, das über uns auftaucht, rufen wir seine Details ab und aktualisieren einen Zähler, um anzuzeigen, wie oft es gesehen wurde.

Ich bearbeite derzeit auch die Datenbank, um Flugzeuge hervorzuheben, die mich interessieren. Hauptsächlich alte Warbirds und andere ähnliche interessante Flugzeuge. Ein paar Mal in diesem Sommer ist eine Mig-15 überflogen. Das Ziel ist es also, ein von mir hinzugefügtes Warnfeld zu verwenden und dann das Licht schnell zu blinken, wenn etwas Interessantes vorbeigeht

Schritt 12: Verbesserte Ergebnisse und neue Funktionen

Verbesserte Ergebnisse und neue Funktionen
Verbesserte Ergebnisse und neue Funktionen
Verbesserte Ergebnisse und neue Funktionen
Verbesserte Ergebnisse und neue Funktionen
Verbesserte Ergebnisse und neue Funktionen
Verbesserte Ergebnisse und neue Funktionen

Theoretisch funktioniert also alles ziemlich gut, aber Sie werden anhand der Daten feststellen, dass es Flugzeuge gibt, die überfliegen, die nicht in der API erscheinen.

Dies liegt daran, dass nicht alle Flugzeuge den ADS-B-Transponder verwenden und ältere Transponder auf MLAT-Basis verwenden. Um Positionsdaten von Flugzeugen mit MLAT zu erhalten, ist eine Reihe von Empfängern am Boden erforderlich, um ihre Position zu triangulieren, und einige Websites wie Flightradar24 haben ein größeres Netzwerk von Mitwirkenden, die dies im Vergleich zu Opensky tun. Hoffentlich verbessert sich im Laufe der Zeit auch ihre Abdeckung und ich richte meinen eigenen MLAT-Empfänger ein, um diese Daten zu ergänzen.

Schritt 13: Codebasis

Vergessen Sie nicht, wenn Sie dies verwenden möchten, sollten Sie die SQL-Anweisungen entfernen, wenn Sie keine Flugzeugdatenbank haben, und auch Ihren eigenen Lon/Lat-Wert und API-Schlüssel für den Zugriff auf die Flugdaten hinzufügen.

github.com/ajax-jones/runway-light-awacs

define("INTERVALL", (20 * 1)); Funktion fexp() { $lat = "Ihr Breitengrad"; $lon = "Ihre Länge"; $seite = 15,75; $box = get_bounding_box($lat, $lon, $side); $latmin = $box[0]; $lonmin = $box[1]; $latmax = $box[2]; $lonmax = $box[3]; $flyurl = "https://opensky-network.org/api/states/all?lamin=$latmin&lomin=$lonmin&lamax=$latmax&lomax=$lonmax"; echo "Den HIMMEL scannen"; $start_time = microtime (wahr); $json = file_get_contents($flyurl); $data = json_decode($json, TRUE); $eingehend = FALSE; $num_planes = count($data['states']); if ($num_planes >0) { echo " und wir können $num_planes Ebenen sehen\n "; for ($x =0; $x 0) { $plane_eta = $distplane/$air_speed_kmh; }sonst { $eta = 1; } if ((($intercept)0)) && ($distplane0){ $inbound = TRUE; Echo "------------------------------------------------ --------------------\n"; echo "$icao24 - [$Land $rufzeichen] in [$geo_altitude_m M -- $geo_altitude_f ft]"; echo "[Geschwindigkeit $air_speed_kmh kmh and ", round($distplane, 1), "km entfernt]\n"; echo "[auf einer Überschrift von ", round($plane_heading, 1), "] [Homeangle $heading_d] "; echo "[$Breitengrad, $Längengrad]\n"; echo "[Vorbeiflug in ", decimal_to_time($plane_eta), " now", round($intercept, 1), "km away\n"; Echo "------------------------------------------------ --------------------\n"; $DBi = new mysqli("127.0.0.1", "root", "Ihr Passwort", "awacs"); $sql = "select * from Aircraftdatabase where `icao24`='$icao24'"; mysqli_set_charset($DBi, "utf8"); $getplanedata = mysqli_query($DBi, $sql) or die(mysqli_error($DBi)); $row_getplanedata = mysqli_fetch_assoc($getplanedata); $rows_getplanedata = mysqli_num_rows($getplanedata); if($rows_getplanedata>0) { do { echo "Rufzeichen="; echo $row_getplanedata['Registrierung']; echo " ist ein "; echo $row_getplanedata['Herstellername']; Echo " "; echo $row_getplanedata['model']; echo "von"; echo $row_getplanedata['manufacturericao']; echo "im Besitz von"; echo $row_getplanedata['Besitzer']; echo "gesehen"; echo $row_getplanedata['besuche']; echo "mal"; echo "Sonderbewertung="; echo $row_getplanedata['special']; echo "\n"; $visits = $row_getplanedata['visits']+1; } while ($row_getplanedata = mysqli_fetch_assoc($getplanedata)); mysqli_free_result($getplanedata); $sqli = "UPDATE aircraftdatabase SET visits = $visits WHERE icao24 = '$icao24'"; mysqli_set_charset($DBi, "utf8"); $updateplanedata = mysqli_query($DBi, $sqli) or die(mysqli_error($DBi)); } else { echo "Konnte dieses Flugzeug nicht in der Datenbank finden, also füge es hinzu"; $sqli = "INSERT INTO Flugzeugdatenbank (icao24, Visits, Special) VALUES ('$icao24', 1, 1)"; $updateplanedata = mysqli_query($DBi, $sqli) or die(mysqli_error($DBi)); } echo "---------------------------------------------------------- ---------------------\n"; } else { // echo "$Rufzeichen"; } } } else { echo " und der Himmel ist klar\n "; } if ($eingehend) { echo "Eingehende Ebene\n"; $command = "Schweine w 17 1"; execInBackground($Befehl); } else { echo "keine eingehenden Flüge\n"; $command = "Schweine w 17 0"; execInBackground($Befehl); } } Funktion decimal_to_time ($decimal) { $offset = 0,002778; if ($dezimal>$offset) { $dezimal = $dezimal - 0,002778; } $hours = gmdate('H', floor($decimal * 3600)); $minutes = gmdate('i', floor($decimal * 3600)); $Sekunden = gmdate('s', floor($decimal * 3600)); return str_pad($hours, 2, "0", STR_PAD_LEFT). ":". str_pad($minutes, 2, "0", STR_PAD_LEFT). ":". str_pad($Sekunden, 2, "0", STR_PAD_LEFT); } /* * (erste) Peilung zwischen zwei Punkten berechnen * * aus: Ed Williams' Aviation Formulary, https://williams.best.vwh.net/avform.htm#Crs * source = instantglobe.com/CRANES/GeoCoordTool. html */ function get_bearing($home_lat, $home_lon, $plane_lat, $plane_lon) { $lat1 = deg2rad($home_lat); $lat2 = deg2rad($plane_lat); $dLon = deg2rad($plane_lon-$home_lon); $y = sin($dLon) * cos($lat2); $x = cos($lat1)*sin($lat2) - sin($lat1)*cos($lat2)*cos($dLon); $z = atan2($y, $x); $zz = (rad2deg($z) +360)% 360; geben $zz zurück; } Funktion get_intercept($home_head, $plane_head, $plane_distance) { $flight_angle = abs(abs($home_head - $plane_head) - 180); $flight_angle_r = deg2rad($flight_angle); $flight_angle_t = tan($flight_angle_r); $flight_intercept = $flight_angle_t * $plane_distance; zurück $flight_intercept; } /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ /* * Verwenden Sie die Haversine-Formel, um die Entfernung (in km) zwischen zwei Punkten zu berechnen, die durch * Breiten-/Längengrad (in numerischen Graden) * * angegeben sind: Haversine-Formel - RWSinnott, "Virtues of the Haversine", * Sky and Telescope, vol 68, no 2, 1984 * https://williams.best.vwh.net/avform.htm#Crs * * Beispiel für die Verwendung von Formular: * result.value = LatLon.distHaversine(lat1.value.parseDeg(), long1.value.parseDeg(), * lat2.value.parseDeg(), long2.value.parseDeg()); * wobei lat1, long1, lat2, long2 und result Formularfelder sind * source = instantglobe.com/CRANES/GeoCoordTool.html */ function get_distHaversine ($home_lat, $home_lon, $plane_lat, $plane_lon) { $R = 6371; // mittlerer Erdradius in km $dLat = deg2rad($plane_lat-$home_lat); $dLon = deg2rad($plane_lon-$home_lon); $lat1 = deg2rad($home_lat); $lat2 = deg2rad($plane_lat); $a = sin($dLat/2) * sin($dLat/2) + cos($lat1) * cos($lat2) * sin($dLon/2) * sin($dLon/2); $c = 2 * atan2(sqrt($a), sqrt(1-$a)); $d = $R * $c; Rückgabe $d; } Funktion get_bounding_box($latitude_in_degrees, $longitude_in_degrees, $half_side_in_miles){ $half_side_in_km = $half_side_in_miles * 1.609344; $lat = deg2rad($latitude_in_degrees); $lon = deg2rad($longitude_in_degrees); $radius = 6371; # Radius der Parallelen bei gegebener Breite; $parallel_radius = $radius*cos($lat); $lat_min = $lat - $half_side_in_km/$radius; $lat_max = $lat + $half_side_in_km/$radius; $lon_min = $lon - $half_side_in_km/$parallel_radius; $lon_max = $lon + $half_side_in_km/$parallel_radius; $box_lat_min = rad2deg($lat_min); $box_lon_min = rad2deg($lon_min); $box_lat_max = rad2deg($lat_max); $box_lon_max = rad2deg($lon_max); Rückgabefeld ($box_lat_min, $box_lon_min, $box_lat_max, $box_lon_max); } Funktion execInBackground($cmd) { if (substr(php_uname(), 0, 7) == "Windows"){ pclose(popen("start /B ". $cmd, "r")); } else { exec($cmd. " > /dev/null &"); } } Funktion checkForStopFlag() { // komplett optional return(TRUE); } Funktion start() { echo "Starten\n"; $command = "Schweine w 17 1"; execInBackground($Befehl); $aktiv = WAHR; while($aktiv) { usleep(1000); // optional, wenn Sie rücksichtsvoll sein möchten if (microtime(true) >= $nextTime) { fexp(); $nextTime = microtime(true) + INTERVAL; } $aktiv = checkForStopFlag(); } } fexp(); Anfang(); ?>

Schritt 14: Verdrahtung der LED und des Shutdown-Schalters

Verdrahtung der LED und des Shutdown-Schalters
Verdrahtung der LED und des Shutdown-Schalters

Die Verdrahtung dieses Projekts könnte wirklich nicht einfacher sein. Es gibt nur die eine LED, die mit Pin 17 und Masse mit einem 270R-Widerstand inline verbunden ist.

Ich füge auch einen Shutdown- und Power-Up-Knopf sowie eine Power-LED hinzu, die über den TXd-Datenpin läuft. Weitere Informationen zur Shutdown-Funktion und dem erforderlichen Code finden Sie unter https://github.com/Howchoo/pi-power-button.git auf der Website https://howchoo.com/g/mwnlytk3zmm/how-to- add-a-pow… Sie können hier lesen, wie Sie ein Power-Light hinzufügen

Empfohlen: