• 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
#25
Witam - trochę przerwy ale nie, prace nie ustały Smile
Chwilowo "programista" ponownie przeistoczył się w ślusarza/ spawacza/ etc.
Rozpoczął się montaż, już taki docelowy (nie na "trytki"):
-skrócenie linki gazu,
-dorobienie dla niej krańcowego uchwytu,
-wykonanie i umocowanie solidnej, metalowej obudowy dla serwa (1000++ sposobów zastosowania zamkniętych profili),
-wzmocnienie orczyka (może i to serwo ma 13kg na cm ale ten plastikowy orczyk ni jak mnie nie przekonuje),
-trochę mi zajęło wykombinować, żeby serwo ciągnęło linkę prosto (będzie na zdjęciach).

Potem szybka przeróbka programu, żeby sczytać już tak konkretnie - ile/kiedy/czego potrzeba.
Odrazu pierwsza miła niespodzianka - jak wszystko na miejscu i solidnie umocowane, jak za linkę gazu płynnie i równo ciągnie serwo (a nie moja trzęsąca się ręka) - to i odczyty równiutkie.
Oczywiście z zastosowaniem Twojego uśrednienia:
Kod:
#include <Servo.h>
#define hallPin 2

Servo serwo;
volatile byte pozycja = 0;


void setup()
    {
    serwo.attach(11);
    pinMode(7, INPUT_PULLUP);
    pinMode(hallPin, INPUT_PULLUP);
    Serial.begin(9600);
    serwo.write(pozycja);
    }

void loop()
    {
    byte licznik = 0;
    unsigned long srednia = 0;
    unsigned int odczyt;

    while (licznik < 10)
        {
        odczyt = pulseIn(hallPin, LOW);
        if ((odczyt > 1000)&&(odczyt < 10000))
            {
            srednia += odczyt;
            licznik++;
            }
        }
    srednia /= 10;

    if (digitalRead(7) == HIGH)
        {
        Serial.print("regulator OFF");
        Serial.print("\    hall =\t");
        Serial.println(srednia);
        delay(250);
        }

    if (digitalRead(7) == LOW && pozycja <= 120)
        {
        pozycja ++;
        serwo.write(pozycja);
        Serial.print("regulator ON");
        Serial.print("\     hall =\t");
        Serial.print(srednia);
        Serial.print("\   serwo =\t");
        Serial.println(pozycja);
        delay(1000);  
        }
    }

odczyt:

lator OFF    hall =    8620
regulator OFF    hall =    8575
regulator OFF    hall =    8551 -------------------//~ 800rpm = obroty biegu jałowego
regulator OFF    hall =    8602
regulator ON     hall =    8602   serwo =    1
regulator ON     hall =    8599   serwo =    2
regulator ON     hall =    8580   serwo =    3
regulator ON     hall =    8697   serwo =    4
regulator ON     hall =    8477   serwo =    5
regulator ON     hall =    8782   serwo =    6
regulator ON     hall =    8661   serwo =    7
regulator ON     hall =    8639   serwo =    8
regulator ON     hall =    5780   serwo =    9
regulator ON     hall =    3934   serwo =    10
regulator ON     hall =    3487   serwo =    11
regulator ON     hall =    3450   serwo =    12
regulator ON     hall =    3322   serwo =    13
regulator ON     hall =    3280   serwo =    14------//Optymalne obroty 2500rpm = tyle powinien utrzymywać podczs pracy
regulator OFF    hall =    3202
regulator OFF    hall =    2784
regulator OFF    hall =    2692
regulator OFF    hall =    2707
regulator ON     hall =    2707   serwo =    15
regulator ON     hall =    2746   serwo =    16
regulator ON     hall =    2618   serwo =    17
regulator ON     hall =    2562   serwo =    18------// 3000rpm = max, więcej byłoby niebezpieczne dla maszyny i okolicy :)
regulator OFF    hall =    2473
regulator OFF    hall =    2413

Jak widać silnik reaguje bardzo żwawo na najmniejsze (co stopień) drgnięcie serwa. Może nawet trochę zbyt żwawo - może będę musiał zmniejszyć średnicę bębenka/orczyka, na który nawija się linka.
A może nie - pamiętać należy, że pracuje bez obciążenia. Później, gdy przyjdzie mu kręcić blisko 80-cio kilowym wałem z bijakami, jak dojdzie opór koszonej trawy - z tej wyrywności może pozostać niewiele.

Dziś już za ciemno a i wszyscy mamy dość - ale na jutro już naszykowane to:
Kod:
#include <Servo.h>
#define hallPin 2

Servo serwo;
volatile byte pozycja = 0;
unsigned long przerwa;

void setup()
    {
    pinMode(hallPin, INPUT_PULLUP);
    pinMode(7, INPUT_PULLUP);
    serwo.attach(11);
    serwo.write(pozycja);
    Serial.begin(9600);
    }

void loop()
    {
    byte licznik = 0;
    unsigned long srednia = 0;
    unsigned int odczyt;

    while (licznik < 10)
        {
        odczyt = pulseIn(hallPin, LOW);
        
        if ((odczyt > 2200)&&(odczyt < 3400))
            {
            srednia += odczyt;
            licznik++;
            }
        }

    srednia /= 10;
    byte obl_pozycja = map(srednia, 3400, 2200, 12, 18);

    if((pozycja < obl_pozycja)&&(obl_pozycja < 13)) pozycja++;
    if((pozycja > obl_pozycja)&&(obl_pozycja > 15)) pozycja--;

    if (digitalRead(7) == HIGH)
        {
        pozycja = 0;
        serwo.write(pozycja);
        Serial.print("regulator OFF\t");
        Serial.print("\pozycja serwa=\t");
        Serial.print(pozycja);
        Serial.print("\   hall=\t");
        Serial.println(srednia);
        delay(1000);
        }
   
    if (digitalRead(7) == LOW && pozycja < 12)
        {
        pozycja ++;
        serwo.write(pozycja);
        Serial.print("trwa ustawianie...\t");
        Serial.print("\pozycja serwa=\t");
        Serial.println(pozycja);
        delay(1000);  
        }
 
    if (digitalRead(7) == LOW && pozycja >= 12)
        {
        serwo.write(pozycja);
        Serial.print("regulator ON\t");
        Serial.print("\pozycja serwa =\t");
        Serial.print(pozycja);
        Serial.print("\   hall =\t");
        Serial.println(srednia);    
        }
    }

i będzie próba generalna.
Jeśli nie ma "byków" to zostanie kosmetyka - montaż "prztyczka" w przednim panelu, jakaś estetyczna diodka jako kontrolka, mocowanie wiązki przewodów itp.
Potem...próba pod obciążeniem!

ps. to ta nie informatyczna część prac:

   

A w zaistnieniu takiej oto maszynerii Twoja wiedza i dobra wola pomaga:

   
>Robimy dziś grilla?
<ok. będę potrzebował: wiertarkę, arkusz blachy…
 
Odpowiedź
  


Wiadomości w tym wątku
RE: Stabilizator obrotów silnika spalinowego - przez andrus - 10-07-2017, 01:17

Skocz do:


Przeglądający: 1 gości