eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronika › Arduino - zliczanie impulsów
Ilość wypowiedzi w tym wątku: 39

  • 1. Data: 2017-07-07 12:01:01
    Temat: Arduino - zliczanie impulsów
    Od: "Michal M. Lechanski" <m...@d...eu>

    Ja po prośbie do doświadczonych bardziej niż ja...

    Otóż próbuję zliczać obroty koła.

    Pomiar 1 (jeden impuls/1 obrót koła):
    Czujnik IR TCRT5000 osłonięty po bokach, w odległości ok 10-15mm od
    odbijającej powierzchni koła, na której przylepiona jest czarna taśma o
    długości ok 10cm. Pomiar na analogowym pinie pokazuje ok 400 gdy przed
    czujnikiem jest powierzchnia odbijająca i ok 27 gdy przed czujnikiem
    jest taśma.

    Pomiar 2 (10 impulsów na 1 obrót koła):
    na kole umocowanych jest 10 silnych magnesów (10mm średnica, 5mm
    wysokość, materiał N52) odległość miedzy magnesami ok 10cm. CZujnik -
    miniaturowy kontaktron. Odległość od magnesu do kontaktronu 3-4mm
    (sprawdzone - kontaktron zwiera się już przy odległości ok 15mm od magnesu).

    Pomiar 3:
    jak pomiar 2 ale zamiast kontaktronu jest czujnik Halla - odległość od
    magnesu ok 4-5mm.

    pomiar 4 i 5 tak jak 2 i 3, ale ilość magnesów zredukowana do 5

    Płytka Arduino UNO R3 ATmega328P (CH340T), nieoryginalne, skrypty bądź z
    podręcznika Arduino bądź z instrukcji do czujnika Halla.

    Spostrzeżenie - przy wolnych obrotach wszystko działa jak powinno i
    impulsy zliczane są poprawnie. Jednak przy nieco większej szybkości w
    każdej z powyższych konfiguracji "gubione" są impulsy, czyli zliczonych
    jest mniej niż powinno być.
    Prędkość przy której impulsy zaczynają być gubione szacuję na 15-20km/h.

    Gdyby impulsów zliczane było więcej niż powinno, to w przypadku
    kontaktronu zwaliłbym to na wibrację styków... ale tu nie ma znaczenia
    jaki czujnik jest zastosowany.
    Ja tego nie rozumiem - przecież częstotliwość pracy Arduino jest o wiele
    wyższa niż częstotliwość zliczanych impulsów. Czy możliwe jest że płytka
    Arduino nie działa poprawnie? A jeśli to nie to, to w czym jest problem?

    Z góry dziękuję za jakiekolwiek sugestie.

    --
    Michał


  • 2. Data: 2017-07-07 12:05:35
    Temat: Arduino - zliczanie impulsów
    Od: Zenek Kapelinder <4...@g...com>

    Kup za 20 zlotych licznik do roweru. Bedzie dzialal i jeszcze bedzie mial bezcenna
    czesc. Bedzie mial ladna obudowe.


  • 3. Data: 2017-07-07 12:06:20
    Temat: Re: Arduino - zliczanie impulsów
    Od: Cezar <c...@B...pl.invalid>

    On 07/07/2017 11:01, Michal M. Lechanski wrote:
    >
    > Z góry dziękuję za jakiekolwiek sugestie.
    >

    Pokaż kod. Uzywasz przerwań?

    c.




  • 4. Data: 2017-07-07 12:09:30
    Temat: Re: Arduino - zliczanie impulsów
    Od: "Michal M. Lechanski" <m...@d...eu>

    W dniu 07/07/2017 o 11:05, Zenek Kapelinder pisze:
    > Kup za 20 zlotych licznik do roweru. Bedzie dzialal i jeszcze bedzie mial bezcenna
    czesc. Bedzie mial ladna obudowe.
    >
    Już kupiłem.
    Nadal jednak próbuję to zrozumieć.

    --
    Michał


  • 5. Data: 2017-07-07 12:24:17
    Temat: Re: Arduino - zliczanie impulsów
    Od: "Michal M. Lechanski" <m...@d...eu>

    W dniu 07/07/2017 o 11:06, Cezar pisze:
    > On 07/07/2017 11:01, Michal M. Lechanski wrote:
    >>
    >> Z góry dziękuję za jakiekolwiek sugestie.
    >>
    >
    > Pokaż kod. Uzywasz przerwań?

    Żadnych przerwań. "Kod" dla czujnika IR jak poniżej. Dla innych
    czujników poziom "skomplikowania" taki sam.

    #include <LiquidCrystal.h>

    LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

    int val0;
    int irPin0 = 1;
    int licznik;

    void setup()
    {
    lcd.begin(16, 2);
    licznik=0;
    val0=0;
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("val0 = ");
    lcd.setCursor(0, 1);
    lcd.print("licznik = ");
    }

    void loop()
    {
    val0 = analogRead(irPin0);
    if (val0 > 100)
    {
    licznik++;
    }
    lcd.setCursor(8, 0);
    lcd.print(val0);
    lcd.setCursor(10, 1);
    lcd.print(licznik);
    }

    P.S. Przepraszam - w pierwszym poście powinno być:
    "Pomiar na analogowym pinie pokazuje ok 27 gdy przed
    czujnikiem jest powierzchnia odbijająca i ok 400 gdy przed czujnikiem
    jest taśma."

    --
    Michał


  • 6. Data: 2017-07-07 12:40:30
    Temat: Re: Arduino - zliczanie impulsów
    Od: Nifhelm <pytaj@grupie>

    W dniu 07.07.2017 o 12:24, Michal M. Lechanski pisze:
    > W dniu 07/07/2017 o 11:06, Cezar pisze:
    >> On 07/07/2017 11:01, Michal M. Lechanski wrote:
    >>>
    >>> Z góry dziękuję za jakiekolwiek sugestie.
    >>>
    >>
    >> Pokaż kod. Uzywasz przerwań?
    >
    > Żadnych przerwań. "Kod" dla czujnika IR jak poniżej. Dla innych
    > czujników poziom "skomplikowania" taki sam.
    >
    > #include <LiquidCrystal.h>
    >
    > LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
    >
    > int val0;
    > int irPin0 = 1;
    > int licznik;
    >
    > void setup()
    > {
    > lcd.begin(16, 2);
    > licznik=0;
    > val0=0;
    > lcd.clear();
    > lcd.setCursor(0, 0);
    > lcd.print("val0 = ");
    > lcd.setCursor(0, 1);
    > lcd.print("licznik = ");
    > }
    >
    > void loop()
    > {
    > val0 = analogRead(irPin0);
    > if (val0 > 100)
    > {
    > licznik++;
    > }
    > lcd.setCursor(8, 0);
    > lcd.print(val0);
    > lcd.setCursor(10, 1);
    > lcd.print(licznik);
    > }
    >
    > P.S. Przepraszam - w pierwszym poście powinno być:
    > "Pomiar na analogowym pinie pokazuje ok 27 gdy przed
    > czujnikiem jest powierzchnia odbijająca i ok 400 gdy przed czujnikiem
    > jest taśma."
    >
    Witam.
    Czas konwersji wartości analogowej na cyfrową w Atmedze 328 może sięgać
    260us Do tego dochodzi komunikacja z wyświetlaczem. Może po prostu
    pomiar trafia przed i za czarną taśmą i stąd gubienie impulsów. Swoją
    drogą dziwię się, że przy wolnych obrotach nie zlicza po dwa, trzy i
    więcej impulsów na obrót.

    Pozdrawiam.


  • 7. Data: 2017-07-07 12:44:11
    Temat: Re: Arduino - zliczanie impulsów
    Od: Cezar <c...@B...pl.invalid>

    On 07/07/2017 11:24, Michal M. Lechanski wrote:
    > W dniu 07/07/2017 o 11:06, Cezar pisze:
    >> On 07/07/2017 11:01, Michal M. Lechanski wrote:
    >>>
    >>> Z góry dziękuję za jakiekolwiek sugestie.
    >>>
    >>
    >> Pokaż kod. Uzywasz przerwań?
    >
    > Żadnych przerwań. "Kod" dla czujnika IR jak poniżej. Dla innych
    > czujników poziom "skomplikowania" taki sam.
    >
    > #include <LiquidCrystal.h>
    >
    > LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
    >
    > int val0;
    > int irPin0 = 1;
    > int licznik;
    >
    > void setup()
    > {
    > lcd.begin(16, 2);
    > licznik=0;
    > val0=0;
    > lcd.clear();
    > lcd.setCursor(0, 0);
    > lcd.print("val0 = ");
    > lcd.setCursor(0, 1);
    > lcd.print("licznik = ");
    > }
    >
    > void loop()
    > {
    > val0 = analogRead(irPin0);
    > if (val0 > 100)
    > {
    > licznik++;
    > }
    > lcd.setCursor(8, 0);
    > lcd.print(val0);
    > lcd.setCursor(10, 1);
    > lcd.print(licznik);
    > }
    >
    > P.S. Przepraszam - w pierwszym poście powinno być:
    > "Pomiar na analogowym pinie pokazuje ok 27 gdy przed
    > czujnikiem jest powierzchnia odbijająca i ok 400 gdy przed czujnikiem
    > jest taśma."
    >


    W powyzszym kodzie jesli impuls przyjdzie podczas gdy piszesz do LCD,
    konsoli lub CPU wykonuje cokolwiek innego to zostanie pominięty.


    c.


  • 8. Data: 2017-07-07 12:45:25
    Temat: Re: Arduino - zliczanie impulsów
    Od: Piotr Gałka <p...@c...pl>

    W dniu 2017-07-07 o 12:24, Michal M. Lechanski pisze:
    > void loop()
    > {
    > val0 = analogRead(irPin0);
    > if (val0 > 100)
    > {
    > licznik++;
    > }
    > lcd.setCursor(8, 0);
    > lcd.print(val0);
    > lcd.setCursor(10, 1);
    > lcd.print(licznik);
    > }
    >

    Nigdy nic nie pisałem na mikrokontroler.
    Nie rozumiem tego programu.
    Jeśli to loop() jest jakoś wołane w pętli to przy zatrzymanym kole w
    pozycji gdy odczyt analogowy daje >100 licznik będzie ciągle wzrastał.

    A zakładając, że to jednak jakoś działa to przypuszczam, że obsługa lcd
    zabiera dużo czasu.

    Spróbuj wypisywać co 10-ty wynik i zobacz czy prędkość graniczna nie
    wzrośnie 10 razy.
    P.G.


  • 9. Data: 2017-07-07 12:53:41
    Temat: Re: Arduino - zliczanie impulsów
    Od: "Michal M. Lechanski" <m...@d...eu>

    W dniu 07/07/2017 o 11:40, Nifhelm pisze:

    > Swoją
    > drogą dziwię się, że przy wolnych obrotach nie zlicza po dwa, trzy i
    > więcej impulsów na obrót.

    Taki efekt zaobserwowałem z magnesami i kontaktronem - zliczane były
    impulsy gdy kontaktron "najeżdzał" nad magnes i gdy się od magnesu
    oddalał. Czyli licznik zliczał dwa razy więcej impulsów niż było
    magnesów. Zmniejszenie odległości kontaktronu od magnesu usunęło ten efekt.

    --
    Michał


  • 10. Data: 2017-07-07 12:54:39
    Temat: Re: Arduino - zliczanie impulsów
    Od: Cezar <c...@B...pl.invalid>


    wyguglaj "arduino analog comparator interrupt count pulses"
    Kilka pierwszych stron da Ci gotowce.

    c.

strony : [ 1 ] . 2 ... 4


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: