• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Stabilizator obrotów silnika spalinowego
#11
Witam,
Kod raczej jest poprawny. Przynajmniej ja nie dostrzegłem jakiegoś błędu. Jedynie zastanawiam się nad tym kontraktonem. Jeżeli daje takie napięcia to może spróbować za jego pomocą wysterować tranzystor. Mam nadzieję, że to 0,71 V wystarczy, żeby tranzystor zaczął przewodzić. Wtedy stany o i 1 będą bardziej "widoczne". Na bazę tranzystora wrzucić sygnał z kontraktonu, emiter do masy, kolektor przez 10 kOm do +5 V i na wejście Arduino. Jeśli te 0,71 da radę spowodować przewodzenie tranzystora to na wejściu Arduino będzie albo 0 albo 5 V. Może to pomoże?
Pozdrawiam,
Tomek.
 
Odpowiedź
#12
Witam,
I jak postępy Panie Andrzeju? Udało się?
Pozdrawiam,
Tomek.
 
Odpowiedź
#13
Postępy?  No cóż - są, choć może nie całkiem jeszcze takie jak bym chciał Sad
Wsadziłem nasze Arduinko w śliczną puszeczkę, elegancka, z grubego plastiku, hermetyczna... całe 10 PLN w elektrycznym.
Dało się do niej też wsadzić wszystkie stabilizatory i wystawić przez szczelinę radiator. Na dokładkę dodać zewnętrzną listwę przyłączeniową na solidne śrubki (jakoś mało przekonująco wyglądają te arduinowe wsuwki zwłaszcza w trzęsącej się maszynerii).
Gorzej niestety z działaniem.
Po sczytaniu z monitora co tam faktycznie leci z halla zmodyfikowałem linię odpowiedzialną za mapowanie

Kod:
pozycja = map(przerwa, 3200, 2600, 45, 90);
podłączyłem serwo, odpaliłem silnik i...
-po podaniu napięcia (kluczyk w stacyjce) serwo ładnie przyjmuje pozycję skrajną,
-przy stopniowym dodawaniu gazu (na razie ręcznie - jeszcze nie połączyłem serwa z przepustnicą) serwo wykonuje jakieś losowe drgania, choć (o ile dobrze rozumiem) powinno ignorować wartości z poza zakresu,
-przy ustawieniu obrotów ok. 2500 "oscyluje" w pobliżu w zasadzie dobrej pozycji,
-jednakże czasami potrafi ni z gruszki ni z pietruszki walnąć na max lub wrócić do zera.
Nie ogarniam tego - jeżeli nawet (co zakładam) hall walnięty i są "dziury" w odczycie to skąd takie maksymalne wychyły?
Czy też nie do końca pojąłem to mapowanie i ono działa jakoś inaczej niż ignorowanie wartości z poza zakresu?
Dziś nas co chwila zgania deszcz ale jutro spróbuję jeszcze paru modyfikacji.
Aha - nie dodałem tranzystora - chodzi mi po głowie, że w "samochodzie" sygnał z halla szedł mocniejszy niż na stole. Zapomniałem dziś sprawdzić - jutro od tego zacznę.
Oczywiście napiszę co wyszło.
Pozdrawiam A
>Robimy dziś grilla?
<ok. będę potrzebował: wiertarkę, arkusz blachy…
 
Odpowiedź
#14
Witam,
Myślę, że te niedoskonałości działania związane są z tymi przypadkowymi odczytami prędkości. Zamieść ostatnią wersję kody, a jak znajdę jutro chwilę czasu to co przetestuje. No i jeśli coś będzie nie tak to poprawię.
Pozdrawiam,
Tomek.
 
Odpowiedź
#15
piszę co wyszło - zaraz będzie...

Kod:
#include <Servo.h> //Biblioteka odpowiedzialna za serwa
#define hallPin 2 //hall na pinie 2

Servo serwomechanizm;  //Tworzymy obiekt, dzięki któremu możemy odwołać się do serwa
byte pozycja = 0; //Aktualna pozycja serwa 0-180
unsigned long przerwa; //czas miedzy 'mignieciami' niskiego stanu halla

void setup() {
 pinMode(hallPin, INPUT_PULLUP); //ustawienie halla
 serwomechanizm.attach(11);  //Serwomechanizm podłączony do pinu 11
 Serial.begin(9600);
}

void loop()
{
 przerwa = pulseIn(hallPin, LOW); //odczytujemy przerwy w impulsach halla, liczba maleje ze wzrostem obrotow
 pozycja = map(przerwa, 3200, 2600, 45, 90); //Zamieniamy je na pozycję serwa
 if(pozycja > 90) pozycja = 90;
 if(pozycja < 45) pozycja = 45;  
 serwomechanizm.write(pozycja); //Wykonajujemy ruch

 Serial.print("hall =\t");
 Serial.print(przerwa);
 Serial.print("\   servo =\t");
 Serial.println(pozycja);

 delay(250); //Opóźnienie dla lepszego efektu
}
Wyszły takie cuda:
Kod:
hall =    22   servo =    45
hall =    11   servo =    45
hall =    5187   servo =    90
hall =    821   servo =    90
hall =    59   servo =    45
hall =    7   servo =    45
hall =    3   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    3   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    83   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    7   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    2   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    26   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    8   servo =    45
hall =    0   servo =    45
hall =    10   servo =    45
hall =    11   servo =    45
hall =    59   servo =    45
hall =    14   servo =    45
hall =    0   servo =    45
hall =    27   servo =    45
hall =    107   servo =    45
hall =    59   servo =    45
hall =    59   servo =    45
hall =    3262   servo =    45
hall =    59   servo =    45
hall =    42   servo =    45
hall =    45   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    2   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    0   servo =    45
hall =    3171   servo =    47
hall =    8794   servo =    90
hall =    6107   servo =    83
hall =    525   servo =    90
hall =    10444   servo =    45
hall =    7539   servo =    90
hall =    6228   servo =    74
hall =    5810   servo =    90
hall =    350   servo =    45
hall =    6157   servo =    80
hall =    6450   servo =    58
hall =    8177   servo =    90
hall =    11135   servo =    90
hall =    11455   servo =    90
hall =    9348   servo =    90
hall =    10732   servo =    90
hall =    9061   servo =    90
hall =    9898   servo =    55
hall =    8879   servo =    90
hall =    10864   servo =    90
hall =    9209   servo =    90
hall =    676   servo =    90
hall =    589   servo =    90
hall =    607   servo =    90
hall =    10364   servo =    45
hall =    8502   servo =    90
hall =    9141   servo =    90
hall =    8174   servo =    90
hall =    5731   servo =    90
hall =    6060   servo =    87
hall =    333   servo =    45
hall =    5268   servo =    90
hall =    6128   servo =    82
hall =    5364   servo =    90
hall =    6121   servo =    82
hall =    5407   servo =    90
hall =    6085   servo =    85
hall =    5486   servo =    90
hall =    6490   servo =    55
hall =    0   servo =    45
hall =    6798   servo =    45
hall =    6785   servo =    45
hall =    6785   servo =    45
hall =    6961   servo =    45
hall =    6912   servo =    45
hall =    6799   servo =    45
hall =    6658   servo =    45
hall =    6832   servo =    45
hall =    6825   servo =    45
hall =    6755   servo =    45
hall =    6683   servo =    45
hall =    6739   servo =    45
hall =    6779   servo =    45
hall =    4896   servo =    90
hall =    3819   servo =    90
hall =    3155   servo =    48
hall =    0   servo =    45
hall =    249   servo =    45
hall =    4394   servo =    90
hall =    4187   servo =    90
hall =    4107   servo =    90
hall =    3440   servo =    45
hall =    3840   servo =    90
hall =    3768   servo =    45
hall =    3708   servo =    45
hall =    3614   servo =    45
hall =    3127   servo =    50
hall =    3550   servo =    45
hall =    3072   servo =    54
hall =    3426   servo =    45
hall =    197   servo =    45
hall =    3023   servo =    58
hall =    3004   servo =    59
hall =    3519   servo =    45
hall =    3062   servo =    55
hall =    3467   servo =    45
hall =    3016   servo =    58
hall =    3000   servo =    60
hall =    2985   servo =    61
hall =    2881   servo =    68
hall =    183   servo =    45
hall =    3169   servo =    47
hall =    2726   servo =    80
hall =    2719   servo =    81
hall =    2692   servo =    83
hall =    2674   servo =    84
hall =    2666   servo =    85
hall =    2654   servo =    85
hall =    2628   servo =    87
hall =    2676   servo =    84
hall =    2674   servo =    84
hall =    2671   servo =    84
hall =    2669   servo =    84
hall =    2696   servo =    82
hall =    2725   servo =    80
hall =    2733   servo =    80
hall =    3120   servo =    51
hall =    179   servo =    45
hall =    710   servo =    90
hall =    2695   servo =    82
hall =    2672   servo =    84
hall =    2650   servo =    86
hall =    2641   servo =    86
hall =    2581   servo =    90
hall =    2926   servo =    65
hall =    2497   servo =    90
hall =    2833   servo =    72
hall =    2791   servo =    75
hall =    2719   servo =    81
hall =    2371   servo =    90
hall =    157   servo =    45
hall =    2443   servo =    90
hall =    1084   servo =    90
hall =    2610   servo =    89
hall =    2660   servo =    85
hall =    2769   servo =    77
hall =    3321   servo =    45
hall =    3427   servo =    45
hall =    203   servo =    45
hall =    3509   servo =    45
hall =    3039   servo =    57
hall =    3472   servo =    45
hall =    193   servo =    45
hall =    2952   servo =    63
hall =    2899   servo =    67
hall =    2883   servo =    68
hall =    183   servo =    45
hall =    184   servo =    45
hall =    2929   servo =    65
hall =    3001   servo =    59
hall =    3507   servo =    45
hall =    1006   servo =    90
hall =    3315   servo =    45
hall =    1117   servo =    90
hall =    3864   servo =    90
hall =    214   servo =    45
hall =    3926   servo =    90
hall =    3522   servo =    45
hall =    238   servo =    45
hall =    3733   servo =    45
hall =    3928   servo =    90
hall =    4719   servo =    90
hall =    5132   servo =    90
hall =    5059   servo =    90
hall =    6873   servo =    45
hall =    423   servo =    90
hall =    8751   servo =    90
hall =    9259   servo =    90
hall =    520   servo =    90
hall =    7869   servo =    90
hall =    8439   servo =    90
hall =    9852   servo =    59
hall =    7205   servo =    45
hall =    4537   servo =    90
hall =    4051   servo =    90
hall =    3639   servo =    45
hall =    2994   servo =    60
hall =    2826   servo =    73
hall =    3048   servo =    56
hall =    2984   servo =    61
hall =    2587   servo =    90
hall =    171   servo =    45
hall =    2693   servo =    83
hall =    3192   servo =    45
hall =    2941   servo =    64
hall =    3594   servo =    45
hall =    3748   servo =    45
hall =    226   servo =    45
hall =    3957   servo =    90
hall =    3424   servo =    45
hall =    3847   servo =    90
hall =    216   servo =    45
hall =    3299   servo =    45
hall =    3247   servo =    45
hall =    3190   servo =    45
hall =    204   servo =    45
hall =    3571   servo =    45
hall =    3113   servo =    51
hall =    3567   servo =    45
hall =    3123   servo =    50
hall =    3553   servo =    45
hall =    3129   servo =    50
hall =    3612   servo =    45
hall =    3175   servo =    46
hall =    201   servo =    45
hall =    3554   servo =    45
hall =    3063   servo =    55
hall =    3400   servo =    45
hall =    3407   servo =    45
hall =    3360   servo =    45
hall =    3340   servo =    45
hall =    3316   servo =    45
hall =    775   servo =    90
hall =    190   servo =    45
hall =    2983   servo =    61
hall =    2947   servo =    63
hall =    2908   servo =    66
hall =    2884   servo =    68
hall =    184   servo =    45
hall =    3203   servo =    45
hall =    2840   servo =    72
hall =    3230   servo =    45
hall =    2876   servo =    69
hall =    180   servo =    45
hall =    185   servo =    45
hall =    3212   servo =    45
hall =    711   servo =    90
hall =    3151   servo =    48
hall =    2764   servo =    77
hall =    3141   servo =    49
hall =    2796   servo =    75
hall =    3179   servo =    46
hall =    2754   servo =    78
hall =    3162   servo =    47
hall =    2747   servo =    78
hall =    3118   servo =    51
hall =    171   servo =    45
hall =    2720   servo =    81
hall =    2735   servo =    79
hall =    3110   servo =    51
hall =    694   servo =    90
hall =    3114   servo =    51
hall =    162   servo =    45
hall =    2655   servo =    85
hall =    2637   servo =    87
hall =    2683   servo =    83
hall =    2689   servo =    83
hall =    2717   servo =    81
hall =    3152   servo =    48
hall =    2740   servo =    79
hall =    2708   servo =    81
hall =    2703   servo =    82
hall =    2677   servo =    84
hall =    656   servo =    90
hall =    2690   servo =    83
hall =    2707   servo =    81
hall =    2733   servo =    80
hall =    3143   servo =    49
hall =    174   servo =    45
hall =    2711   servo =    81
hall =    2700   servo =    82
hall =    2697   servo =    82
hall =    2687   servo =    83
hall =    2709   servo =    81
hall =    2116   servo =    90
hall =    2790   servo =    75
hall =    3171   servo =    47
hall =    2749   servo =    78
hall =    2702   servo =    82
hall =    2686   servo =    83
hall =    2687   servo =    83
hall =    2733   servo =    80
hall =    2524   servo =    90
hall =    2966   servo =    62
hall =    3654   servo =    45
hall =    4006   servo =    90
hall =    4500   servo =    90
hall =    5107   servo =    90
hall =    5826   servo =    90
hall =    7584   servo =    90
hall =    7898   servo =    90
hall =    7766   servo =    90
hall =    0   servo =    45
hall =    15315   servo =    90
hall =    64292   servo =    72
hall =    0   servo =    45
Dołożyłem sztucznie ograniczniki:
Kod:
#include <Servo.h> //Biblioteka odpowiedzialna za serwa
#define hallPin 2 //hall na pinie 2

Servo serwomechanizm;  //Tworzymy obiekt, dzięki któremu możemy odwołać się do serwa
byte pozycja = 0; //Aktualna pozycja serwa 0-180
unsigned long przerwa; //czas miedzy 'mignieciami' niskiego stanu halla

void setup() {
 pinMode(hallPin, INPUT_PULLUP); //ustawienie halla
 serwomechanizm.attach(11);  //Serwomechanizm podłączony do pinu 11
 Serial.begin(9600);
}

void loop()
{
 przerwa = pulseIn(hallPin, LOW); //odczytujemy przerwy w impulsach halla, liczba maleje ze wzrostem obrotow
 if(przerwa > 3200) przerwa = 3200;
 if(przerwa < 2600) przerwa = 2600;
 pozycja = map(przerwa, 3200, 2600, 45, 90); //Zamieniamy je na pozycję serwa
 if(pozycja > 90) pozycja = 90;
 if(pozycja < 45) pozycja = 45;  
 serwomechanizm.write(pozycja); //Wykonajujemy ruch

 Serial.print("hall =\t");
 Serial.print(przerwa);
 Serial.print("\   servo =\t");
 Serial.println(pozycja);

 delay(250); //Opóźnienie dla lepszego efektu
}
wyszło tak:
Kod:
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    2600   servo =    90
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    2600   servo =    90
hall =    3200   servo =    45
hall =    2600   servo =    90
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    2600   servo =    90
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    2600   servo =    90
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    2600   servo =    90
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    2600   servo =    90
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    2600   servo =    90
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    2600   servo =    90
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    2600   servo =    90
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    2600   servo =    90
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    2600   servo =    90
hall =    3200   servo =    45
hall =    2600   servo =    90
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    2600   servo =    90
hall =    3200   servo =    45
hall =    3142   servo =    49
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    3200   servo =    45
hall =    3174   servo =    46
hall =    2600   servo =    90
hall =    3178   servo =    46
hall =    2600   servo =    90
hall =    2880   servo =    69
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2925   servo =    65
hall =    2600   servo =    90
hall =    2614   servo =    88
hall =    2660   servo =    85
hall =    2639   servo =    87
hall =    2622   servo =    88
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2914   servo =    66
hall =    2600   servo =    90
hall =    2915   servo =    66
hall =    2600   servo =    90
hall =    2931   servo =    65
hall =    2602   servo =    89
hall =    2611   servo =    89
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2924   servo =    65
hall =    2600   servo =    90
hall =    2903   servo =    67
hall =    2600   servo =    90
hall =    2887   servo =    68
hall =    2600   servo =    90
hall =    2923   servo =    65
hall =    2612   servo =    89
hall =    2633   servo =    87
hall =    2634   servo =    87
hall =    2611   servo =    89
hall =    2600   servo =    90
hall =    2890   servo =    68
hall =    2600   servo =    90
hall =    2928   servo =    65
hall =    2603   servo =    89
hall =    2621   servo =    88
hall =    2631   servo =    87
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2624   servo =    88
hall =    2617   servo =    88
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2633   servo =    87
hall =    2645   servo =    86
hall =    2645   servo =    86
hall =    2631   servo =    87
hall =    2634   servo =    87
hall =    2634   servo =    87
hall =    2674   servo =    84
hall =    2676   servo =    84
hall =    2730   servo =    80
hall =    2720   servo =    81
hall =    2712   servo =    81
hall =    2687   servo =    83
hall =    2691   servo =    83
hall =    2706   servo =    82
hall =    2734   servo =    79
hall =    3163   servo =    47
hall =    2814   servo =    73
hall =    3200   servo =    45
hall =    2863   servo =    70
hall =    2600   servo =    90
hall =    2897   servo =    67
hall =    2941   servo =    64
hall =    3047   servo =    56
hall =    3200   servo =    45
hall =    3083   servo =    53
hall =    3200   servo =    45
hall =    3094   servo =    52
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3180   servo =    46
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    3200   servo =    45
hall =    3184   servo =    46
hall =    2600   servo =    90
hall =    3181   servo =    46
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    3200   servo =    45
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    3071   servo =    54
hall =    2980   servo =    61
hall =    2600   servo =    90
hall =    2855   servo =    70
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2859   servo =    70
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2886   servo =    68
hall =    2628   servo =    87
hall =    2660   servo =    85
hall =    2673   servo =    84
hall =    2699   servo =    82
hall =    2700   servo =    82
hall =    2716   servo =    81
hall =    2758   servo =    78
hall =    3167   servo =    47
hall =    2862   servo =    70
hall =    2910   servo =    66
hall =    3002   servo =    59
hall =    3054   servo =    55
hall =    3200   servo =    45
hall =    2983   servo =    61
hall =    2904   servo =    67
hall =    2833   servo =    72
hall =    3136   servo =    49
hall =    2600   servo =    90
hall =    2674   servo =    84
hall =    2666   servo =    85
hall =    2629   servo =    87
hall =    2673   servo =    84
hall =    2673   servo =    84
hall =    2689   servo =    83
hall =    2672   servo =    84
hall =    2649   servo =    86
hall =    2600   servo =    90
hall =    2601   servo =    89
hall =    2644   servo =    86
hall =    2609   servo =    89
hall =    2842   servo =    71
hall =    2662   servo =    85
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2705   servo =    82
hall =    2849   servo =    71
hall =    2621   servo =    88
hall =    2701   servo =    82
hall =    3151   servo =    48
hall =    2813   servo =    74
hall =    3200   servo =    45
hall =    2768   servo =    77
hall =    2689   servo =    83
hall =    2615   servo =    88
hall =    2600   servo =    90
hall =    2850   servo =    71
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2849   servo =    71
hall =    2600   servo =    90
hall =    2875   servo =    69
hall =    2600   servo =    90
hall =    2852   servo =    71
hall =    2600   servo =    90
hall =    2866   servo =    70
hall =    2600   servo =    90
hall =    2912   servo =    66
hall =    2604   servo =    89
hall =    2623   servo =    88
hall =    2618   servo =    88
hall =    2618   servo =    88
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2608   servo =    89
hall =    2694   servo =    82
hall =    2600   servo =    90
hall =    2768   servo =    77
hall =    2600   servo =    90
hall =    2782   servo =    76
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3078   servo =    54
hall =    3200   servo =    45
hall =    3162   servo =    47
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    3200   servo =    45
hall =    2600   servo =    90
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3180   servo =    46
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    2600   servo =    90
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
hall =    3200   servo =    45
Jak widać serwo lata jak szalone - nie wiem jak mu te skoki wyłagodzić Sad
>Robimy dziś grilla?
<ok. będę potrzebował: wiertarkę, arkusz blachy…
 
Odpowiedź
#16
Witam,
Tak patrzę na te odczyty to najprawdopodobniej słabym punktem jest właśnie odczyt z Halla i to w pierwszej kolejności trzeba sprawdzić.
Spróbuj najprostszego połączenia, czyli wyjście Hallotrona połączone z wejściem Arduino i jednocześnie podciągnięte przez rezystor 10 kOm do +5 V. Tak jak poniżej.
https://sensing.honeywell.com/honeywell-...4-a-en.pdf
Pierwszy schemat w Figure. 3
Ja testowałem na posiadanym jakimś hallotronie i działa. Zobacz czy zbliżenie magnesu będzie powodować zmianę stanu na wyjściu i czy pozbędziesz się tych dziwnych zachowań, które wcześniej zaobserwowałeś. Jeśli wtedy będzie OK to zobacz jakie będą odczyty z pulseIn. Jeśli dalej nie będą powtarzalne przy stałych obrotach to wypróbujemy kod, który nie będzie opierał się na tej funkcji. Udostępnię Tobie kod, który napisałem i używam do pomiaru prędkości obrotowej silnika elektrycznego.
Pozdrawiam,
Tomek.
 
Odpowiedź
#17
ok. spróbuję,
A jeszcze dziś może się uda inny test - pożyczka ze sklepu nowego czujnika.
Napiszę co wyjdzie.
Dzięki i pozdrawiam A.
>Robimy dziś grilla?
<ok. będę potrzebował: wiertarkę, arkusz blachy…
 
Odpowiedź
#18
Jest tak:
Nowy hall daje stabilniejsze odczyty ale nadal wyskakują z niego dziwne odskoki. Nie aż tak wywalone w kosmos ale jednak. Po podciągnięciu rezystorem (Młt 0.125W 10kom wstawione między pin zasilający serwo +5V a wejście sygnału z halla) jest faktycznie lepiej - odczyty te "z księżyca" są zdecydowanie rzadsze.
Jednak serwo nadal wykonuje często nieskoordynowane ruchy. Udaje się ucelować obrotami silnika tak, żeby drgało w jakiejś pozycji, nawet do jej czasowego utrzymania (to dość trudne bo silnik reaguje mocno na minimalne ruchy linki gazu - co nie dziwne, jako że pracuje bez obciążenia).
Widać tendencję skłaniania się serwa w jedną stronę gdy obroty płynnie rosną i w drugą gdy maleją. Jednak na większe i szybsze zmiany obrotów serwo reaguje histerycznymi losowymi skokami w różnych kierunkach.
z takiego kodu wychodzą takie odczyty (niżej):
Kod:
#include <Servo.h> //Biblioteka odpowiedzialna za serwa
#define hallPin 2 //hall na pinie 2

Servo serwomechanizm;  //Tworzymy obiekt, dzięki któremu możemy odwołać się do serwa
byte pozycja = 0; //Aktualna pozycja serwa 0-180
unsigned long przerwa; //czas miedzy 'mignieciami' niskiego stanu halla

void setup() {
 pinMode(hallPin, INPUT_PULLUP); //ustawienie halla
 serwomechanizm.attach(11);  //Serwomechanizm podłączony do pinu 11
 Serial.begin(9600);
}

void loop()
{
 przerwa = pulseIn(hallPin, LOW); //odczytujemy przerwy w impulsach halla, liczba maleje ze wzrostem obrotow
 if(przerwa > 3250) przerwa = 3250;
 if(przerwa < 2200) przerwa = 2200;
 pozycja = map(przerwa, 3250, 2200, 90, 0); //Zamieniamy je na pozycję serwa
 if(pozycja > 90) pozycja = 90;
 if(pozycja < 0) pozycja = 0;  
 serwomechanizm.write(pozycja); //Wykonajujemy ruch

 Serial.print("hall =\t");
 Serial.print(przerwa);
 Serial.print("\   servo =\t");
 Serial.println(pozycja);

 delay(250); //Opóźnienie dla lepszego efektu
}

Odczyt:

hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    2200   servo =    0
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    2200   servo =    0
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    3250   servo =    90
hall =    2200   servo =    0
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    2200   servo =    0
hall =    3250   servo =    90
hall =    2200   servo =    0
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    2200   servo =    0
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3206   servo =    87
hall =    3214   servo =    87
hall =    2200   servo =    0
hall =    3129   servo =    80
hall =    3123   servo =    80
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    3250   servo =    90
hall =    3022   servo =    71
hall =    3250   servo =    90
hall =    2950   servo =    65
hall =    2942   servo =    64
hall =    2927   servo =    63
hall =    2883   servo =    59
hall =    2866   servo =    58
hall =    2853   servo =    56
hall =    2834   servo =    55
hall =    2821   servo =    54
hall =    2200   servo =    0
hall =    2772   servo =    50
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2750   servo =    48
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2730   servo =    46
hall =    3130   servo =    80
hall =    2724   servo =    45
hall =    3002   servo =    69
hall =    2977   servo =    67
hall =    2918   servo =    62
hall =    2903   servo =    61
hall =    2507   servo =    27
hall =    2200   servo =    0
hall =    2500   servo =    26
hall =    2861   servo =    57
hall =    2537   servo =    29
hall =    2200   servo =    0
hall =    2872   servo =    58
hall =    2496   servo =    26
hall =    2830   servo =    54
hall =    2432   servo =    20
hall =    2810   servo =    53
hall =    2456   servo =    22
hall =    2806   servo =    52
hall =    2435   servo =    21
hall =    2200   servo =    0
hall =    2479   servo =    24
hall =    2864   servo =    57
hall =    2200   servo =    0
hall =    2809   servo =    53
hall =    2457   servo =    23
hall =    2783   servo =    50
hall =    2200   servo =    0
hall =    2423   servo =    20
hall =    2461   servo =    23
hall =    2832   servo =    55
hall =    2491   servo =    25
hall =    2200   servo =    0
hall =    2502   servo =    26
hall =    2837   servo =    55
hall =    2461   servo =    23
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2365   servo =    15
hall =    2357   servo =    14
hall =    2388   servo =    17
hall =    2200   servo =    0
hall =    2818   servo =    53
hall =    2499   servo =    26
hall =    2876   servo =    58
hall =    2520   servo =    28
hall =    2877   servo =    59
hall =    2484   servo =    25
hall =    2807   servo =    53
hall =    2444   servo =    21
hall =    2764   servo =    49
hall =    2200   servo =    0
hall =    2413   servo =    19
hall =    2427   servo =    20
hall =    2845   servo =    56
hall =    2528   servo =    29
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2603   servo =    35
hall =    2644   servo =    39
hall =    3138   servo =    81
hall =    2850   servo =    56
hall =    2920   servo =    62
hall =    3250   servo =    90
hall =    3060   servo =    74
hall =    3250   servo =    90
hall =    2953   servo =    65
hall =    2880   servo =    59
hall =    2862   servo =    57
hall =    2792   servo =    51
hall =    2806   servo =    52
hall =    2200   servo =    0
hall =    3149   servo =    82
hall =    2736   servo =    46
hall =    3097   servo =    77
hall =    2651   servo =    39
hall =    3087   servo =    77
hall =    2689   servo =    42
hall =    3106   servo =    78
hall =    2749   servo =    48
hall =    3154   servo =    82
hall =    2758   servo =    48
hall =    3156   servo =    82
hall =    2740   servo =    47
hall =    3120   servo =    79
hall =    2730   servo =    46
hall =    3111   servo =    79
hall =    2200   servo =    0
hall =    2789   servo =    51
hall =    2821   servo =    54
hall =    2789   servo =    51
hall =    2200   servo =    0
hall =    3120   servo =    79
hall =    2677   servo =    41
hall =    3066   servo =    75
hall =    2682   servo =    42
hall =    3081   servo =    76
hall =    2701   servo =    43
hall =    2200   servo =    0
hall =    2668   servo =    41
hall =    3044   servo =    73
hall =    2200   servo =    0
hall =    2622   servo =    37
hall =    2606   servo =    35
hall =    2591   servo =    34
hall =    2577   servo =    33
hall =    2574   servo =    33
hall =    2520   servo =    28
hall =    2856   servo =    57
hall =    2445   servo =    21
hall =    2385   servo =    16
hall =    2325   servo =    11
hall =    2589   servo =    34
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2423   servo =    20
hall =    2200   servo =    0
hall =    2398   servo =    17
hall =    2200   servo =    0
hall =    2424   servo =    20
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2209   servo =    1
hall =    2222   servo =    2
hall =    2226   servo =    3
hall =    2565   servo =    32
hall =    2241   servo =    4
hall =    2597   servo =    35
hall =    2311   servo =    10
hall =    2200   servo =    0
hall =    2330   servo =    12
hall =    2382   servo =    16
hall =    2400   servo =    18
hall =    2200   servo =    0
hall =    2793   servo =    51
hall =    2464   servo =    23
hall =    2889   servo =    60
hall =    2949   servo =    65
hall =    3033   servo =    72
hall =    2705   servo =    44
hall =    3126   servo =    80
hall =    2724   servo =    45
hall =    3094   servo =    77
hall =    2200   servo =    0
hall =    2606   servo =    35
hall =    2578   servo =    33
hall =    2556   servo =    31
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2567   servo =    32
hall =    2608   servo =    35
hall =    2663   servo =    40
hall =    3082   servo =    76
hall =    2713   servo =    44
hall =    3134   servo =    81
hall =    2740   servo =    47
hall =    2200   servo =    0
hall =    2839   servo =    55
hall =    2808   servo =    53
hall =    2200   servo =    0
hall =    3136   servo =    81
hall =    2730   servo =    46
hall =    3150   servo =    82
hall =    2788   servo =    51
hall =    2832   servo =    55
hall =    2851   servo =    56
hall =    2200   servo =    0
hall =    2922   servo =    62
hall =    2200   servo =    0
hall =    3127   servo =    80
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    2200   servo =    0
hall =    3250   servo =    90
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3036   servo =    72
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2859   servo =    57
hall =    2757   servo =    48
hall =    2200   servo =    0
hall =    3182   servo =    85
hall =    2818   servo =    53
hall =    2879   servo =    59
hall =    2947   servo =    65
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    2200   servo =    0
hall =    3250   servo =    90
hall =    2200   servo =    0
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    3250   servo =    90
hall =    2200   servo =    0
hall =    2200   servo =    0
hall =    2200   servo =    0

Myślę, że tych odczytów już bardziej się nie wygładzi a i trochę się obawiam czy nie zareaguje na to komputerek sterujący wtryskiem, który przecież też jest równolegle podpięty.
Jak widzisz cuduje z kodem starając się zignorować wszystkie odczyty z poza interesującego mnie zakresu - ale jakoś się chyba źle za to zabieram. Sad
Chciałbym jakoś tak zrobić, żeby odczyty wartości halla wykraczające poza określoną ramę (w tym wypadku 3250 do 2200) były całkowicie ignorowane. Tak jak zrobiłem są one jedynie zamieniane na skrajne położenia serwa. Może właśnie to powoduje te jego skoki?
Niestety jestem za cienki w programowaniu - a tu aż się prosi komenda /ignore/ Smile
"odczytałeś sygnał z halla < lub > niż zakres, niech serwo nie robi nic a ty powtórz pętlę"
Myślę, że jest to możliwe do zrobienia bo przecież nie takie rzeczy ludzie tworzą - jednak w moim przypadku już 4-ta noc spędzana przy kompie na szukaniu i próbach przyswojenia wiedzy o języku C nie zbliżyła mnie nawet do rozwiązania.
Na dokładkę nie umiem wyrzucić z głowy pozostałości po basicu - gdzie zwykłmi if i goto załatwił bym to w ciągu max godziny! Sad
Weź - bądź Dobrą Duszą i popchnij mnie chociaż w kierunku.
Pozdrawiam A


Edycja kilka (-naście) prób później...:

Udało mi się przy użyciu warunków osiągnąć zamierzony efekt:

Kod:
#include <Servo.h> //Biblioteka odpowiedzialna za serwa
#define hallPin 2 //hall na pinie 2

Servo serwomechanizm;  //Tworzymy obiekt, dzięki któremu możemy odwołać się do serwa
byte pozycja = 0; //Aktualna pozycja serwa 0-180
unsigned long przerwa; //czas miedzy 'mignieciami' niskiego stanu halla

void setup() {
 pinMode(hallPin, INPUT_PULLUP); //ustawienie halla
 serwomechanizm.attach(11);  //Serwomechanizm podłączony do pinu 11
 Serial.begin(9600);
}

void loop()
{
 przerwa = pulseIn(hallPin, LOW); //odczytujemy przerwy w impulsach halla, liczba maleje ze wzrostem obrotow

 if(przerwa < 3250)
 if(przerwa > 2200)
 {
 pozycja = map(przerwa, 3250, 2200, 90, 0); //Zamieniamy je na pozycję serwa

 serwomechanizm.write(pozycja); //Wykonajujemy ruch

 Serial.print("hall =\t");
 Serial.print(przerwa);
 Serial.print("\   servo =\t");
 Serial.println(pozycja);
 }
 else
 {
   Serial.println("poza skala");
 }
 delay(250); //Opóźnienie
}


Udało się osiągnąć takie oto wskazania:

Kod:
poza skala
poza skala
poza skala
poza skala
poza skala
poza skala
poza skala
poza skala
poza skala
poza skala
hall =    2954   servo =    65
poza skala
poza skala
hall =    3064   servo =    75
hall =    2685   servo =    42
hall =    3067   servo =    75
hall =    2664   servo =    40
hall =    2629   servo =    37
hall =    2570   servo =    32
hall =    2523   servo =    28
poza skala
poza skala
hall =    2486   servo =    25
hall =    2841   servo =    55
hall =    2495   servo =    26
hall =    2896   servo =    60
poza skala
hall =    2542   servo =    30
poza skala
hall =    2855   servo =    57
hall =    2460   servo =    23
hall =    2800   servo =    52
poza skala
poza skala
hall =    2773   servo =    50
poza skala
hall =    2804   servo =    52
hall =    2475   servo =    24
hall =    2819   servo =    54
hall =    2441   servo =    21
hall =    2422   servo =    20
hall =    2401   servo =    18
hall =    2383   servo =    16
hall =    2381   servo =    16
hall =    2382   servo =    16
poza skala
hall =    2744   servo =    47
hall =    2454   servo =    22
hall =    2834   servo =    55
hall =    2494   servo =    26
hall =    2904   servo =    61
hall =    2583   servo =    33
hall =    2649   servo =    39
hall =    3119   servo =    79
hall =    2884   servo =    59
poza skala
poza skala
poza skala
poza skala
poza skala
poza skala
poza skala
poza skala
hall =    3063   servo =    74
hall =    2324   servo =    11
hall =    2994   servo =    69
hall =    2990   servo =    68
poza skala
hall =    2890   servo =    60
hall =    2834   servo =    55
hall =    2791   servo =    51
poza skala
poza skala
poza skala
poza skala
poza skala
hall =    3144   servo =    81
hall =    2728   servo =    46
hall =    3104   servo =    78
hall =    2674   servo =    41
hall =    3072   servo =    75
hall =    2691   servo =    43
hall =    3084   servo =    76
hall =    2680   servo =    42
hall =    3072   servo =    75
hall =    2659   servo =    40
hall =    2628   servo =    37
hall =    2573   servo =    32
hall =    2566   servo =    32
poza skala
hall =    2577   servo =    33
hall =    2545   servo =    30
hall =    2542   servo =    30
poza skala
hall =    2840   servo =    55
poza skala
hall =    2795   servo =    51
poza skala
hall =    2398   servo =    17
poza skala
hall =    2383   servo =    16
hall =    2346   servo =    13
poza skala
hall =    2638   servo =    38
hall =    2291   servo =    8
hall =    2602   servo =    35
hall =    2288   servo =    8
hall =    2620   servo =    36
hall =    2309   servo =    10
poza skala
hall =    2405   servo =    18
hall =    2918   servo =    62
poza skala
hall =    3200   servo =    86
hall =    2921   servo =    62
hall =    2716   servo =    45
hall =    2567   servo =    32
hall =    2827   servo =    54
poza skala
hall =    2385   servo =    16
hall =    2361   servo =    14
hall =    2447   servo =    22
hall =    2912   servo =    62
poza skala
hall =    3085   servo =    76
poza skala
poza skala
poza skala
poza skala
hall =    2819   servo =    54
hall =    3026   servo =    71
hall =    2920   servo =    62
hall =    2469   servo =    24
hall =    2780   servo =    50
poza skala
hall =    2373   servo =    15
poza skala
poza skala
hall =    2583   servo =    33
hall =    2244   servo =    4
hall =    2607   servo =    35
hall =    2338   servo =    12
poza skala
hall =    2737   servo =    47
hall =    3030   servo =    72
poza skala
poza skala
poza skala
poza skala

Jednak nadal przy płynnym, powolnym dodawaniu gazu serwo wykonuje ruchy przeczące. Już nawet nie chaotyczne, tylko po prostu przecząco kręci orczykiem. Czy moje arduino chce mi coś powiedzieć?
>Robimy dziś grilla?
<ok. będę potrzebował: wiertarkę, arkusz blachy…
 
Odpowiedź
#19
Witam,
Proszę spróbować:

Kod:
#include <Servo.h> //Biblioteka odpowiedzialna za serwa
#define hallPin 2 //hall na pinie 2

Servo serwomechanizm;  //Tworzymy obiekt, dzięki któremu możemy odwołać się do serwa
byte pozycja = 0; //Aktualna pozycja serwa 0-180
unsigned long przerwa; //czas miedzy 'mignieciami' niskiego stanu halla

void setup() {
pinMode(hallPin, INPUT_PULLUP); //ustawienie halla
serwomechanizm.attach(11);  //Serwomechanizm podłączony do pinu 11
Serial.begin(9600);
}

void loop()
{
// zmmenna pomocnicza do oblicznia sredniej z 10-ciu pomiarow
byte licznik = 0;
// zmienna do obliczenia sredniej arytmetycznej
unsigned long srednia = 0;
// zmienna pomocnicza pojedynczego odczytu
unsigned int odczyt;
// petla w ktorej obliczana jest serdnia z 10-ciu pomiarow
// z eliminacja odczytow z poza zakresu
while (licznik < 10)
{
 // odczyt
 odczyt = pulseIn(hallPin, LOW);
 // sprawdzenie czy w zakresie
 if ((odczyt > 2200)&&(odczyt < 3250))
   {
     // jesli tak to dodanie wyniku do poprzednich
     srednia += odczyt;
     licznik++;
   }
}
// obliczenie sredniej
srednia /= 10;

pozycja = map(srednia, 3250, 2200, 90, 0); //Zamieniamy je na pozycję serwa

serwomechanizm.write(pozycja); //Wykonajujemy ruch

delay(250);
/*
przerwa = pulseIn(hallPin, LOW); //odczytujemy przerwy w impulsach halla, liczba maleje ze wzrostem obrotow

if(przerwa < 3250)
if(przerwa > 2200)
{
pozycja = map(przerwa, 3250, 2200, 90, 0); //Zamieniamy je na pozycję serwa

serwomechanizm.write(pozycja); //Wykonajujemy ruch

Serial.print("hall =\t");
Serial.print(przerwa);
Serial.print("\   servo =\t");
Serial.println(pozycja);
}
else
{
  Serial.println("poza skala");
}
delay(250); //Opóźnienie
*/
}

Póki co liczona jest średnia z 10-ciu pomiarów i nadal używana jest funkcja pulseIn().
Jeśli to nie pomoże to spróbujemy to zrealizować inaczej.
Pozdrawiam,
Tomek.
 
Odpowiedź
#20
Dzięki
Mam okazję dokładnie to przeanalizować i zrozumieć bo...
leje jak diabli i ni jak wyjść do kosiarki Sad

O- widzę, że poprawiłeś też moje "if" wstawiając
Kod:
&&


rzeczywiście - myślę, że tak jak zapisywałem mogło coś głupieć.
Wielkie dzięki - zaraz będę próbował bo chyba się przejaśnia.
Pozdrawiam A
>Robimy dziś grilla?
<ok. będę potrzebował: wiertarkę, arkusz blachy…
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości