Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Licznik rowerowy - kilka pytań o założenia

pdzran 02 Jun 2017 21:42 1635 12
Automation24.pl
  • #1
    pdzran
    Level 13  
    Witam

    Mam licznik rowerowy, pasuje mi pod każdym względem ale ma mały wyświetlacz - Sigma Rox 10.

    Postanowiłem w ramach nauki zrobić podobny ale z większym wyświetlaczem.
    Założenia : arduino, wyświetlacz dotykowy, gps, rtc, karta sd, czujnik temperatury, ciśnienia, może tętno.
    Jeżeli gdzieś napiszę jakąś herezję to proszę wziąć pod uwagę fakt, że jestem amatorem :-)

    Arduino - jak najmniejsze, zobaczę ile potrzebne jest wejść/wyjść
    Wyświetlacz - dotykowy pojemnościowy lub zwykły + przyciski
    GPS - Neo6 lub 7 - do pomiaru prędkości i zapisywania trasy na SD do GPX
    RTC - czas lub bez niego i czas z GPS
    Karta SD - zapis danych np. całkowity przebieg itp. , ślady GPX i konfiguracji
    Czujnik temperatury - wiadomo
    Czujnik ciśnienia - np. GY68 do określania wysokości, żeby wiedzieć ile przejechane w górę ile w dół i chyba dokładniejszy niż GPS

    Pytania :
    - wyświetlacz - czy dotykowy pojemnościowy, można obsługiwać palcem (rezystancyjny odpada) czy bez dotyku i przyciski - mam problem z tym jak to uszczelnić, da się to ogarnąć , bo przyciski jak dam to do tego gumki uszczelniające i będzie ok ?
    - czas z GPS czy z RTC - wiem, że $GPGGA zawiera czas i wg. tego co zauważyłem w jednym projekcie wysyłana jest co sekundę lub częściej, prawda to czy mylę się?
    - jak ogarnąć temat wysokości, czy z GPS z $GPGGA czy może dokładniejszy będzie czujnik ciśnienia ? jednak tutaj dojdzie większy problem kalibracji i wysokości początkowej
    - kadencja - wydaje mi się, że w Sigma jest w czujnikach kontaktron, czy to dobry trop czy może czujnik innego typu?
    - najprościej byłoby podłączyć czujnik po kablu ale gdybym chciał bezprzewodowo to co proponujecie, bt, wifi, coś innego, jaki konkretnie moduł ?
    - zasilanie - w wielu projektach widziałem po prostu baterie, jednak wolałbym akumulator, jaki , jakiego typu, jaka pojemność ?
    - ładowanie - najchętniej przez usb, czego szukać, co będzie odpowiednie do tego projektu?
    Do you have a problem with Arduino? Ask question. Visit our forum Arduino.
  • Automation24.pl
  • #2
    Anonymous
    Anonymous  
  • #3
    krzysssztof
    Level 21  
    Właśnie jestem na etapie robienia licznika, ale z mniejszą ilością bajerów - u mnie tylko GPS, karta uSD i wyświetlacz oled. Zasilanie z 18650 i przetwornica 3.3V
  • #4
    pdzran
    Level 13  
    Ok , dzięki za info.
    Dotyk będzie pojemnościowy albo wcale, rysik odpada.
    Jeżdżę zimą, w tym roku nawet przy -17 stopniach ale wtedy nie mam potrzeby go używać, po prostu start i jazda, bez przystanków aby nie marznąć.
    Zdecyduję się na wersję z GPS ale bez czujnika ciśnienia.
    Wysokość jest bardzo przydatna, szczególnie na fajnym maratonie, aby wiedzieć ile było przewyższeń.
    Zasilanie .... jak już będzie poskładane to pomyślę nad nim, czym zasilać i jak ładować.
    Jutro zamówię graty i biorę się za robotę :-)
    Kombajn zbędny, oświetlenie mam na 18650, zimą to ważne jak jadę o 6 rano albo wracam o 18ej.
  • Automation24.pl
  • #5
    pdzran
    Level 13  
    Witam
    Mam problem, ponieważ lcd i czytnik kart działają po SPI.
    Jak to połączyć ?
    Jak oprogramować ?
    Widziałem kilka wątków na zagranicznych forach ale jako początkującemu ciężko mi to rozgryźć.
  • #6
    krzysssztof
    Level 21  
    Albo podłączyć do dwóch niezależnych SPI albo podłączyć do jednego SPI i do tego dwa wyjścia Slave Select wybierające układ z którym aktualnie chcesz się komunikować.
  • #7
    dondu
    Moderator on vacation ...
    Innymi słowy MISO MOSI SCK podłączasz równolegle do obu układów, a piny Slave Select do dwóch różnych pionów mikrokontrolera.
    W programie należy uwzględnić:
    - że LCD i czytnik kart mogą działać na różnych ustawieniach SPI, i przed komunikacją z wybranym urządzeniem za każdym razem odpowiednio SPI ustawiać,
    - że przy komunikacji z wybranym urządzeniem jego Slave Select ma być na stanie niskim, a pozostałych urządzeń na stanie wysokim.
  • #8
    pdzran
    Level 13  
    Dzięki , tyle mniej więcej doczytałem na forach.
    Szukam jakiegoś mało skomplikowanego przykładu , który pokaże jak to należy robić , macie może jakiś link ?
  • #9
    pdzran
    Level 13  
    Postanowiłem nie korzystać z gotowych bibliotek tylko z komunikatów NMEA jakie wyrzuca GPS.
    $GPVTG zawiera po 7-mym przecinku prędkość w km/h.
    $GPVTG,290.28,T,,M,1.18,N,2.19,K,A*3E

    Jak ją wyłuskać?
    substring potrafi ale trzeba znać konkretną pozycję, przydał mi się do wyłowienia spośród różnych typów konkretnego $GPVTG ale on ma stałą pozycję i długość, natomiast prędkość nie ma stałej pozycji, wiadomo tylko, że jest po 7-mym przecinku i nie ma stałej długości, może to być 2.19 , 22.19 albo 122.19

    Czy jest gotowa funkcja, która to zrobi, czy trzeba samemu rzeźbić ? ;-)
  • #10
    krzysssztof
    Level 21  
    Trzeba wyszukiwać przecinki, liczyć je i wtedy wiesz (określona ilość przecinków), kiedy pojawi się szukana przez Ciebie informacja.
  • #11
    pdzran
    Level 13  
    Już mnie powoli krew zalewa ;-)

    Odczytuję komunikaty NMEA, ładnie wyłuskuję dane i Serial.println działa, nie działa wyświetlanie na LCD z FT811, korzystam z GD3.
    Mogę wyświetlić za pomocą cmd_text :
    void cmd_text(int16_t x, int16_t y, byte font, uint16_t options, const char *s);

    więc konwertuję :
    char speedch[speed.length()+1];
    speed.toCharArray(speedch,speed.length()+1);

    GD.cmd_text(300, 50, 30, OPT_CENTER, speedch);
    i nic , pusto lub jakieś losowe krzaki.
    Gdzie robię błąd ?
    Dodam, że jak zdefiniuję sobie zmienną :
    char tekst "1234567890" , to cmd_text wyświetla ją bez problemu.
  • #12
    pdzran
    Level 13  
    Ogarnąłem temat zmiennych , mam niestety inny.

    Jest w skrócie taki kod :
    Code: c
    Log in, to see the code


    Problemem jest to, że ciągle wyświetla dane, najczęściej nic, ponieważ nie wchodzi do pętli gdzie obsługiwany jest gps.
    Sam gps nadaje na Serial1 dane co sekundę.
    Gdzie może leżeć problem ?
    Jak rezygnuję z wyświetlanie danych (nie ma różnicy czy na Serial czy na LCD), to wtedy bez problemu wchodzi do pętli z gps i go obsługuje a dodane tam komendy wyświetlające działają.
    Wolałbym aby były wyświetlane poza pętlą obsługującą gps, ponieważ będą tu inne rzeczy do ogarnięcia.
    p.s. Serial wyświetla dane, Serial1 zbiera z gps - Arduino 2560
  • #13
    pdzran
    Level 13  
    Jakoś nie mogę zwalczyć tego problemu, nakierujcie mnie co źle robię.
    Czytam z GPS dane (Serial1) i wyświetlam od razu wysyłając na Serial.
    Działa jak należy, dopóki jedyne co robię to czytanie i wyświetlanie.
    Jak tylko dodam do kodu wyświetlanie danych (jedna zmienna) na LCD to gubi dane.
    Przypuszczam (bo nie mam) , gdybym te dane chciał zapisać na kartę SD problem byłby ten sam.