-
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.