GPS Hodiny

Adam Skřivánek

Jedná se už o můj druhý projekt s GPS modulem. Hodiny řídí Raspberry Pi Zero W, připojené k GPS modulu u-blox NEO-6M s podporou PPS (Pulse Per Second). Díky tomuto modulu jsou hodiny schopné získat extrémně přesný čas. Čas je zobrazován na OLED displeji s čipem SSD1306.

Použitý materiál

Zapojení

GPS modul

  • RX (GPS) → GPIO 14 (TX RPi)
  • TX (GPS) → GPIO 15 (RX RPi)
  • VCC a GND → 3.3V a GND Raspberry Pi

OLED displej

  • SDA → GPIO 2
  • SCL → GPIO 3
  • VCC a GND → 3.3V a GND Raspberry Pi

Software

1. Instalace potřebných balíčků


sudo apt update
sudo apt install gpsd gpsd-clients chrony pps-tools

2. Zapnutí sériové komunikace a PPS

V souboru /boot/firmware/config.txtpřidejte:


enable_uart=1
dtoverlay=pps-gpio,gpiopin=18

3. Konfigurace gpsd

V souboru /etc/default/gpsd upravte řádky:


DEVICES=“/dev/serial0 /dev/pps0″
GPSD_OPTIONS=“-n“

4. Konfigurace chrony

Do souboru /etc/chrony/chrony.conf přidejte:


refclock SHM 0 offset 0.5 delay 0.2 refid GPS noselect
refclock PPS /dev/pps0 refid PPS prefer

5. Restart služeb


sudo systemctl restart gpsd
sudo systemctl restart chrony

6. Ověření


cgps
chronyc sources -v

7. Zobrazení času na OLED displeji

Vytvořte soubor s názvem display_clock.py a vložte do něj následující kód. Soubor poté spusťte.

import time
from datetime import datetime
import board
import busio
from adafruit_ssd1306 import SSD1306_I2C
from PIL import Image, ImageDraw, ImageFont

i2c = busio.I2C(board.SCL, board.SDA)
oled = SSD1306_I2C(128, 64, i2c)
oled.fill(0)
oled.show()

font_path = "/usr/share/fonts/truetype/dejavu/DejaVuSansMono-Bold.ttf"
font = ImageFont.truetype(font_path, 24)

prev_time_str = ""

while True:
    now = datetime.now()
    time_str = now.strftime("%H:%M:%S")

    if time_str != prev_time_str:
        prev_time_str = time_str

        image = Image.new("1", (oled.width, oled.height))
        draw = ImageDraw.Draw(image)

        bbox = font.getbbox(time_str)
        text_width = bbox[2] - bbox[0]
        text_height = bbox[3] - bbox[1]
        x = (oled.width - text_width) // 2
        y = (oled.height - text_height) // 2

        draw.text((x, y), time_str, font=font, fill=255)

        oled.image(image)
        oled.show()

    time.sleep(0.1)

Sdílet článek

5 komentářů

  1. Bylo by možné to použít do auta (automatická kniha jízd) zaznamenával čas a polohu a ukládat to na kartu a při připojení na internet odeslat na e-mail?

    1. No nevím kolik lidí jako já třeba nepochopí, kde je chyba. Takže v souboru (display_clock.py) či v sekci č. 3 nebo č. 4.
      Jinak obecně a to již není na vás ten návod na zprovoznění a nahrání potřebného SW je hodně zjednodušen a není to dle mě pro neznalé co by to chtěli třeba i vyzkoušet, když by vytáhli tu částku z peněženky za ten GPS modul. Prostě škoda.

  2. Osobně jsem postavil něco podobného s tímto displejem https://www.laskakit.cz/6-mistny-sedmisegmentovy-lcd-displej-2-4–ht1621–bily/ (i stav baterky se tam dá ukazovat) a arduino MKR zero https://docs.arduino.cc/hardware/mkr-zero/ (nenacházím na e-shopu láska, měl jsem ho od reichelta), plus arduino MKR GPS Shield https://docs.arduino.cc/hardware/mkr-gps-shield/ původní úmysl byl záznam GPS na SD kartu (což také dělá), ale i když zrovna necestuju, jako přesné hodiny to je skvělé. K tomu ještě baterka, myslím, že tahle https://www.laskakit.cz/geb-lipol-baterie-125054-4000mah-3-7v-jst-ph-2-0/
    Ani nechci počítat, kolik jsem dal za materiál, to arduino a ten GPS shield bylo dohromady okolo €80 ostatní jsou drobnosti.
    Program vznikal postupně, nejdřív jen záznam GPS, pak jsem přidal právě displej s hodinama, zjišťováni stavu baterie a nějaké další drobnosti. Vycházel jsem z examplu non-blocking write v arduino IDE. Jediné, co se mi nedaří, je přidat opravdu veliký displej https://www.laskakit.cz/64×16-led-matice-s-max7219-3mm/ přijde mi, že dostupné knihovny nefungujou na mkr zero a neměl jsem čas po tom nějak víc pátrat proč.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Mohlo by se také líbit

Nejčtenější články