{"id":11224,"date":"2022-11-06T11:32:37","date_gmt":"2022-11-06T10:32:37","guid":{"rendered":"https:\/\/www.picademie.nl\/?p=11224"},"modified":"2023-07-28T18:29:00","modified_gmt":"2023-07-28T16:29:00","slug":"dag-nacht-bepaling-zonder-sensor","status":"publish","type":"post","link":"https:\/\/www.picademie.nl\/index.php\/2022\/11\/06\/dag-nacht-bepaling-zonder-sensor\/","title":{"rendered":"Dag\/Nacht-bepaling zonder sensor"},"content":{"rendered":"\n<pre class=\"wp-block-preformatted\">Er zijn situaties dat je geen gebruik van een sensor wilt\/kunt maken om te bepalen of het dag of nacht is. Binnen de astronomie wordt gebruik gemaakt van tabellen (<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\"><strong>ephem<\/strong>eris<\/mark>) om de posities van planeten en locaties op bepaalde datums te bepalen. Hiermee kun je o.a. op basis van GPS co\u00f6rdinaten bepalen of het dag of nacht is op een locatie ergens op onze planeet. Met de introductie van Python in 1998 zijn deze tabellen geautomatiseerd. Elwood Downey is mede auteur van deze routines en heeft toestemming gegeven om deze in de PyEphem biblioteek te gebruiken.<\/pre>\n\n\n\n<p>In deze tutorial laat ik zien hoe je de <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">PyEphem <\/mark><\/strong>bibliotheek inzet om aan de hand van opgegeven GPS co\u00f6rdinaten te bepalen of het <strong>dag <\/strong>of <strong>nacht <\/strong>is. <\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>Functies Ephem<\/strong><br>Ephem kent meerdere functies die wellicht in de toekomst interessant zijn om verder uit te werken. Hieronder noem ik er een paar. <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Zoek waar een planeet, komeet of astero\u00efde zich in de lucht bevindt.<\/li>\n\n\n\n<li>Bepaal waar in de lucht een object (zoals de maan of een planeet) verschijnt voor een bepaalde waarnemer. Hiervoor kan de gebruiker de lengte-, breedtegraad en hoogte opgeven van de locatie van waaruit geobserveerd wordt. <\/li>\n\n\n\n<li>Bereken wanneer een lichaam zal stijgen, overvliegen (ISS) vanaf een bepaalde locatie.<\/li>\n\n\n\n<li>Bepaal de data van de equinoxen en zonnewendes.<\/li>\n\n\n\n<li>Bereken de data van de verschillende fasen van de maan.<\/li>\n\n\n\n<li>Converteren van de <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">Greenwich Time<\/mark> (meer precies, <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">Ephemeris Time<\/mark>) die PyEphem gebruikt naar de lokale tijd van de gebruiker.<\/li>\n\n\n\n<li>Retourneer de Juliaanse datum die overeenkomt met een kalenderdatum.<\/li>\n<\/ul>\n\n\n\n<p><strong>Aan de slag!<\/strong><br>Genoeg over Ephem. Als je meer wil weten kun je o.a. de website van <a rel=\"noreferrer noopener\" href=\"https:\/\/rhodesmill.org\/pyephem\/\" data-type=\"URL\" data-id=\"https:\/\/rhodesmill.org\/pyephem\/\" target=\"_blank\">rhodesmill<\/a> bezoeken. Hier wordt uitgelegd hoe je enkele mooie functies van Ephem in Python kunt oproepen.<\/p>\n\n\n\n<p>Voordat we de Ephem bibliotheek installeren moeten eerst de ge\u00efnstalleerde pakketten op de Pi bijgewerkt worden. We doen dit door de volgende opdrachten in de LXterminal in te voeren.<\/p>\n\n\n\n<p><kbd><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">sudo apt-get update<\/mark><\/kbd><\/p>\n\n\n\n<p><kbd><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">sudo apt-get upgrade<\/mark><\/kbd><\/p>\n\n\n\n<p>Vervolgens installeren we de ephem bibliotheek met de volgende opdracht:<\/p>\n\n\n\n<p><kbd><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">pip install ephem<\/mark><\/kbd><\/p>\n\n\n\n<p><strong>Bepalen locatie<\/strong><br>Om de dag\/nacht-bepaling te kunnen doen zullen we moeten aangeven voor welke locatie dit gedaan moet worden. Het script doet dit op basis van de GPS co\u00f6rdinaten. Wil je van je eigen stad of een andere specifieke locatie de GPS co\u00f6rdinaten weten? Klik dan <a rel=\"noreferrer noopener\" href=\"https:\/\/www.gps-coordinaten.nl\/gps-coordinaten-converteren\" data-type=\"URL\" data-id=\"https:\/\/www.gps-coordinaten.nl\/gps-coordinaten-converteren\" target=\"_blank\">hier<\/a>. De <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">GPS co\u00f6rdinaten converter<\/mark> geeft via een kaart of stadsnaam exact aan wat de breedte- en lengtegraden zijn van de locatie die je aangegeven hebt. Schrijf de waarden op, je hebt ze straks nodig.<\/p>\n\n\n\n<p><strong>Python script<\/strong><br>Ik heb er lang naar moeten zoeken, maar uiteindelijk heb ik een goede basis gevonden vanwaar ik een script kon maken dat aan mijn verwachtingen voldeed. Het enige dat dit script doet is het bepalen of het <strong>DAG <\/strong>of <strong>NACHT <\/strong>is. De opgegeven locatie is mijn thuishaven Arnhem.<\/p>\n\n\n\n<p>Wil je het script gebruiken om de buitenverlichting te schakelen, dan is het maar een kleine inspanning om de benodigde code erin te zetten. Het script is als functie opgebouwd zodat deze eenvoudig in andere scripts te integreren is.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">import ephem\nimport time\n\nrun = True\n\ndef main():\n    home     = ephem.Observer()\n    home.lat = '51.9851034' <\/mark><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\"># Latitude<\/mark><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">\n    home.lon = '5.8987296'  <\/mark><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\"># Longitude<\/mark><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">\n\n    while run:\n        next_sunrise = home.next_rising(ephem.Sun()).datetime()\n        next_sunset  = home.next_setting(ephem.Sun()).datetime()\n\n        if next_sunset &lt; next_sunrise:\n            print (\"Het is dag!\")\n        else:\n            print (\"Het is nacht!\")\n\n        time.sleep(1)\n\nmain()<\/mark><\/code><\/pre>\n\n\n\n<p>Een iets uitgebreide versie kun je hieronder downloaden.<\/p>\n\n\n\n<div class=\"wp-block-file\"><a id=\"wp-block-file--media-8b1f29be-c5d1-4f6f-b382-0b903ec71c22\" href=\"https:\/\/www.picademie.nl\/wp-content\/uploads\/2022\/11\/dagOfNacht.zip\">Download hier het gezipte bestand (dagOfNacht.py)<\/a><a href=\"https:\/\/www.picademie.nl\/wp-content\/uploads\/2022\/11\/dagOfNacht.zip\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-8b1f29be-c5d1-4f6f-b382-0b903ec71c22\">Downloaden<\/a><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>De volgende melding wil wel eens voorkomen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">AttributeError: module &#8216;ephem&#8217; has no attribute &#8216;Observer&#8217;<\/h2>\n\n\n\n<p>Op <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">https:\/\/pypi.org\/project\/ephem\/ <\/mark>geeft maker Brandon Rhodes de volgende verklaring voor deze melding:<\/p>\n\n\n\n<p>&#8216;Het probleem lijkt te zijn dat je niet het daadwerkelijke &#8220;ephem&#8221;-pakket laadt (waarvan het modulepad zou moeten zijn&nbsp;<code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">...\/ephem\/__init__.py<\/mark><\/code>), maar in plaats daarvan een bestand met de naam&nbsp;<code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">ephem.py<\/mark><\/code> dat zich in jouw&nbsp;map bevindt.&nbsp;Als je dat bestand verplaatst, verwijdert of hernoemt ziet <strong>i<code>mport<\/code> <\/strong>het niet, want het moet het eigenlijke PyEphem-pakket vanuit de installatiemap laden.&#8217;<\/p>\n\n\n\n<p>Met andere woorden: door het python-bestand te wijzigen kan het het installatiepad verloren gaan. Hierdoor kan de bibliotheek import het niet vinden en ontstaat de melding.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><em>Have A Nice Day!<\/em><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"mh-excerpt\"><p>Er zijn situaties dat je geen gebruik van een sensor wilt\/kunt maken om te bepalen of het dag of nacht is. Binnen de astronomie wordt <a class=\"mh-excerpt-more\" href=\"https:\/\/www.picademie.nl\/index.php\/2022\/11\/06\/dag-nacht-bepaling-zonder-sensor\/\" title=\"Dag\/Nacht-bepaling zonder sensor\">[&#8230;]<\/a><\/p>\n<\/div>","protected":false},"author":1,"featured_media":11268,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[564,567,571,572,568,250,570,569,566,565],"class_list":["post-11224","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-astronomie","tag-coordinaten","tag-donker","tag-downey","tag-ephem","tag-gps","tag-locatie","tag-observer","tag-schakelaar","tag-schemer"],"jetpack_featured_media_url":"https:\/\/www.picademie.nl\/wp-content\/uploads\/2022\/11\/dagnacht3.jpg","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/posts\/11224","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/comments?post=11224"}],"version-history":[{"count":0,"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/posts\/11224\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/media\/11268"}],"wp:attachment":[{"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/media?parent=11224"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/categories?post=11224"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/tags?post=11224"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}