RE: Stabilizator obrotów silnika spalinowego - Smaczek - 27-06-2017
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.
RE: Stabilizator obrotów silnika spalinowego - Smaczek - 30-06-2017
Witam,
I jak postępy Panie Andrzeju? Udało się?
Pozdrawiam,
Tomek.
RE: Stabilizator obrotów silnika spalinowego - andrus - 01-07-2017
Postępy? No cóż - są, choć może nie całkiem jeszcze takie jak bym chciał
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
RE: Stabilizator obrotów silnika spalinowego - Smaczek - 02-07-2017
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.
RE: Stabilizator obrotów silnika spalinowego - andrus - 02-07-2017
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ć
RE: Stabilizator obrotów silnika spalinowego - Smaczek - 03-07-2017
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-sensing-hall-effect-sensor-ics-ss41f-ss41g-datasheet-32312814-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.
RE: Stabilizator obrotów silnika spalinowego - andrus - 03-07-2017
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.
RE: Stabilizator obrotów silnika spalinowego - andrus - 03-07-2017
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.
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/
"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!
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ć?
RE: Stabilizator obrotów silnika spalinowego - Smaczek - 04-07-2017
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.
RE: Stabilizator obrotów silnika spalinowego - andrus - 04-07-2017
Dzięki
Mam okazję dokładnie to przeanalizować i zrozumieć bo...
leje jak diabli i ni jak wyjść do kosiarki
O- widzę, że poprawiłeś też moje "if" wstawiając
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
|