Dag/Nacht-bepaling zonder sensor

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 (ephemeris) om de posities van planeten en locaties op bepaalde datums te bepalen. Hiermee kun je o.a. op basis van GPS coördinaten 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.

In deze tutorial laat ik zien hoe je de PyEphem bibliotheek inzet om aan de hand van opgegeven GPS coördinaten te bepalen of het dag of nacht is.

Functies Ephem
Ephem kent meerdere functies die wellicht in de toekomst interessant zijn om verder uit te werken. Hieronder noem ik er een paar.

  • Zoek waar een planeet, komeet of asteroïde zich in de lucht bevindt.
  • 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.
  • Bereken wanneer een lichaam zal stijgen, overvliegen (ISS) vanaf een bepaalde locatie.
  • Bepaal de data van de equinoxen en zonnewendes.
  • Bereken de data van de verschillende fasen van de maan.
  • Converteren van de Greenwich Time (meer precies, Ephemeris Time) die PyEphem gebruikt naar de lokale tijd van de gebruiker.
  • Retourneer de Juliaanse datum die overeenkomt met een kalenderdatum.

Aan de slag!
Genoeg over Ephem. Als je meer wil weten kun je o.a. de website van rhodesmill bezoeken. Hier wordt uitgelegd hoe je enkele mooie functies van Ephem in Python kunt oproepen.

Voordat we de Ephem bibliotheek installeren moeten eerst de geïnstalleerde pakketten op de Pi bijgewerkt worden. We doen dit door de volgende opdrachten in de LXterminal in te voeren.

sudo apt-get update

sudo apt-get upgrade

Vervolgens installeren we de ephem bibliotheek met de volgende opdracht:

pip install ephem

Bepalen locatie
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ördinaten. Wil je van je eigen stad of een andere specifieke locatie de GPS coördinaten weten? Klik dan hier. De GPS coördinaten converter 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.

Python script
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 DAG of NACHT is. De opgegeven locatie is mijn thuishaven Arnhem.

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.

import ephem
import time

run = True

def main():
    home     = ephem.Observer()
    home.lat = '51.9851034' # Latitude
    home.lon = '5.8987296'  # Longitude

    while run:
        next_sunrise = home.next_rising(ephem.Sun()).datetime()
        next_sunset  = home.next_setting(ephem.Sun()).datetime()

        if next_sunset < next_sunrise:
            print ("Het is dag!")
        else:
            print ("Het is nacht!")

        time.sleep(1)

main()

Een iets uitgebreide versie kun je hieronder downloaden.


De volgende melding wil wel eens voorkomen.

AttributeError: module ‘ephem’ has no attribute ‘Observer’

Op https://pypi.org/project/ephem/ geeft maker Brandon Rhodes de volgende verklaring voor deze melding:

‘Het probleem lijkt te zijn dat je niet het daadwerkelijke “ephem”-pakket laadt (waarvan het modulepad zou moeten zijn .../ephem/__init__.py), maar in plaats daarvan een bestand met de naam ephem.py dat zich in jouw map bevindt. Als je dat bestand verplaatst, verwijdert of hernoemt ziet import het niet, want het moet het eigenlijke PyEphem-pakket vanuit de installatiemap laden.’

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.


Have A Nice Day!