System EHR (elektro‑hydrauliczne sterowanie podnośnikiem) to zaawansowane rozwiązanie, które zastępuje manualną obsługę rozdzielacza hydraulicznego w ciągnikach, umożliwiając precyzyjne sterowanie tylnym podnośnikiem za pomocą elektroniki.

W tym poradniku krok po kroku pokazujemy, jak samodzielnie zbudować taki system na bazie Arduino – idealny do starszych modeli, takich jak Ursus C‑360 czy C‑4011. Bazujemy na sprawdzonych projektach hobbystów i rolników, wykorzystujących tanie komponenty do automatyzacji podnoszenia i opuszczania narzędzi.

Czym jest EHR i dlaczego warto go zbudować w starszym ciągniku?

EHR to elektrohydrauliczny system sterowania 3‑punktowym układem zawieszenia, który automatycznie utrzymuje lub ustawia wysokość podnośnika bez konieczności ciągłego operowania dźwignią.

W nowoczesnych maszynach (np. John Deere, Massey Ferguson) to standard – w starszych Ursusach własny EHR znacząco poprawia komfort i powtarzalność pracy.

Zalety domowego EHR na Arduino

Najważniejsze korzyści zbudowania EHR we własnym zakresie to:

  • precyzyjne ograniczniki ruchu (progi dolny/górny) ustawiane potencjometrami lub pozycjonerami,
  • regulowana prędkość siłownika hydraulicznego,
  • opcjonalny wyświetlacz LCD z menu do sterowania,
  • niski koszt: poniżej 200–300 zł na komponenty,
  • łatwa adaptacja do różnych ciągników (warianty A/B dla kierunku wysuwu siłownika).

Sprawdzone projekty działają w realnych warunkach polowych – silnik napędza gałkę rozdzielacza, a elektronika pilnuje pozycji i krańcówek.

Potrzebne komponenty – lista zakupowa

Aby zbudować podstawowy system, przygotuj poniższe elementy (łatwo dostępne m.in. w Botland, TME, Allegro):

Komponent Opis Ilość Przybliżona cena
Arduino Uno/Nano Główny mikrokontroler 1 20–50 zł
Sterownik silnika BTS7960 Do silnika DC 12–24 V (obsługa prądów do ok. 43 A) 1 30–50 zł
Silnik DC 12 V z przekładnią Napęd gałki rozdzielacza (np. w Ursusie C‑360) 1 20–40 zł
Wyłączniki krańcowe Ograniczniki pełnego zakresu ruchu 2 ok. 10 zł/szt.
Potencjometry 10 kΩ Ustawianie progów dolnego/górnego 2 ok. 2 zł/szt.
Przyciski chwilowe Góra/Dół oraz Ustaw próg dolny/górny 4–6 ok. 1 zł/szt.
LCD 16×2 + moduł I2C (opcjonalnie) Wyświetlacz z prostym menu 1 15–25 zł
Silnik krokowy NEMA17 + driver A4988 (alternatywa) Większa precyzja sterowania rozdzielaczem 1 zestaw 50–80 zł
Zasilanie 12 V Z akumulatora ciągnika (zabezpieczone bezpiecznikiem) z ciągnika
Płytka prototypowa, przewody, obudowa Do montażu i organizacji okablowania ok. 20 zł

Uwaga: przy silniku krokowym zastosuj driver A4988 z mikrokrokami (np. 1/16) dla płynnego ruchu i mniejszego hałasu.

Schemat połączeń – krok po kroku

Układ bazuje na Arduino sterującym silnikiem DC poprzez BTS7960 oraz odczytującym ustawienia z potencjometrów i stany wyłączników krańcowych. Zadbaj o wspólną masę dla wszystkich modułów i poprawne zasilanie logiki 5 V oraz części mocy 12 V.

  1. Podłączenie sterownika BTS7960 – sygnały RPWM/LPWM podłącz do pinów PWM Arduino (np. D5 i D6), VCC sterownika do 5 V z Arduino, GND do masy wspólnej, zasilanie mocy B+ do +12 V i B− do masy, wyjścia silnikowe OUT1/OUT2 do silnika; piny L_EN/R_EN ustaw w stan wysoki lub podłącz do pinów Arduino, aby móc je włączać programowo.
  2. Przyciski i potencjometry – przyciski Góra/Dół oraz Ustaw próg dolny/górny podłącz do pinów cyfrowych z aktywowanymi rezystorami pull‑up; potencjometry (środkowe piny) podłącz do wejść analogowych (np. A0 i A1), skrajne piny odpowiednio do 5 V i GND.
  3. Wyłączniki krańcowe – podłącz do pinów cyfrowych z konfiguracją pull‑up; zadziałanie krańcówki ma natychmiast zatrzymywać ruch.
  4. LCD (opcjonalnie) – z modułem I2C podłącz jedynie SDA/SCL do odpowiednich pinów Arduino; bez I2C podłącz RS/EN/D4–D7 do pinów cyfrowych zgodnie z konfiguracją w kodzie.

Warianty pracy układu zależą od geometrii: wariant A – podnośnik opuszczony oznacza siłownik schowany; wariant B – podnośnik opuszczony oznacza siłownik wysunięty. Wybierz właściwe mapowanie kierunków w kodzie.

Przed lutowaniem przetestuj układ w symulatorze (np. Fritzing, Tinkercad), a następnie na stole warsztatowym.

Oprogramowanie – kod źródłowy i wyjaśnienie

Kod Arduino korzysta z PWM do sterowania prędkością, analogRead() do ustalania progów i digitalRead() do obsługi przycisków oraz krańcówek. Poniżej znajduje się rozszerzony przykład z dwoma trybami: pełny zakres i praca na progach.

// EHR do ciągnika na Arduino - wersja poglądowa
// Autor: na bazie projektów społeczności (litkiewicz, YouTube)
#include <LiquidCrystal.h> // Dla LCD równoległego (w przypadku I2C użyj dedykowanej biblioteki)

// Piny - dostosuj tak, aby nie kolidowały ze sobą!
const int upPin = 2; // Przycisk Góra (INPUT_PULLUP)
const int downPin = 3; // Przycisk Dół (INPUT_PULLUP)
const int setLowPin = 4; // Ustaw próg dolny (INPUT_PULLUP)
const int setHighPin = 5; // Ustaw próg górny (INPUT_PULLUP)

const int endUp = 6; // Krańcówka górna
const int endDown = 7; // Krańcówka dolna

const int motorDir = 8; // Kierunek (np. pin kierunku / L_EN/R_EN)
const int motorPWM = 9; // PWM silnika (RPWM/LPWM według schematu)

const int potLow = A0; // Potencjometr dolny
const int potHigh = A1; // Potencjometr górny
const int potSpeed = A2; // Potencjometr prędkości (opcjonalnie)

LiquidCrystal lcd(12, 11, 10, A3, A4, A5); // Przykładowe piny LCD (dopasuj do okablowania)

int lowThreshold = 200; // Próg dolny (0–1023)
int highThreshold = 800; // Próg górny (0–1023)
int currentPos = 512; // Aktualna pozycja (przykładowo/symulacja)
int speed = 200; // Prędkość PWM (0–255)
bool fullRange = false; // false = praca na progach, true = pełny zakres

void setup() {
pinMode(upPin, INPUT_PULLUP);
pinMode(downPin, INPUT_PULLUP);
pinMode(setLowPin, INPUT_PULLUP);
pinMode(setHighPin, INPUT_PULLUP);

pinMode(endUp, INPUT_PULLUP);
pinMode(endDown, INPUT_PULLUP);

pinMode(motorPWM, OUTPUT);
pinMode(motorDir, OUTPUT);

lcd.begin(16, 2);
lcd.print("EHR start...");
delay(800);
}

void loop() {
// Odczyt potencjometrów (progi i ewentualnie prędkość)
lowThreshold = analogRead(potLow);
highThreshold = analogRead(potHigh);
int rawSpeed = analogRead(potSpeed);
speed = map(rawSpeed, 0, 1023, 80, 255); // Minimalna prędkość ogranicza szarpanie

// Sterowanie ręczne
if (!digitalRead(upPin)) moveUp();
if (!digitalRead(downPin)) moveDown();

// Ustawianie progów z przycisków
if (!digitalRead(setLowPin)) setPosition(&lowThreshold);
if (!digitalRead(setHighPin)) setPosition(&highThreshold);

updateLCD();
delay(30);
}

void moveUp() {
digitalWrite(motorDir, HIGH); // Kierunek w górę
analogWrite(motorPWM, speed);
while (!isEndUp() && (fullRange || currentPos < highThreshold)) {
currentPos++;
delay(8);
}
stopMotor();
}

void moveDown() {
digitalWrite(motorDir, LOW); // Kierunek w dół
analogWrite(motorPWM, speed);
while (!isEndDown() && (fullRange || currentPos > lowThreshold)) {
currentPos--;
delay(8);
}
stopMotor();
}

void setPosition(int* threshold) {
*threshold = analogRead(A3); // Przykładowy dodatkowy potencjometr do kalibracji
lcd.clear();
lcd.print("Prog ustawiony");
delay(600);
}

void stopMotor() {
analogWrite(motorPWM, 0);
}

bool isEndUp() { return !digitalRead(endUp); } // Krańcówki aktywne stanem niskim
bool isEndDown() { return !digitalRead(endDown); }

void updateLCD() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pos:");
lcd.print(currentPos);
lcd.print(" ");
lcd.print(lowThreshold);
lcd.print("-");
lcd.print(highThreshold);

lcd.setCursor(0, 1);
lcd.print("V:");
lcd.print(speed);
lcd.print(fullRange ? " FULL" : " PROGI");
}

Jak działa kod

Poniżej zwięzłe omówienie kluczowych funkcji i ustawień:

  • moveUp()/moveDown() – wykonują ruch aż do zadziałania krańcówki lub osiągnięcia ustawionego progu;
  • progi położenia – definiowane potencjometrami i w razie potrzeby korygowane przyciskami w trakcie pracy;
  • obsługa LCD – prezentuje bieżącą pozycję i prędkość, możesz rozbudować o menu z presetami wysokości;
  • regulacja prędkości – potencjometrem (mapowanie na zakres 80–255), aby ograniczyć szarpanie i poprawić płynność.

Wariant z silnikiem krokowym: użyj biblioteki Stepper lub AccelStepper; skonfiguruj mikrokroki w A4988 (np. 1/16) i steruj liczbą kroków odpowiadającą wymaganej zmianie położenia.

Montaż i instalacja w ciągniku

Aby bezpiecznie i trwale zamontować układ, wykonaj poniższe kroki:

  1. Demontaż gałki rozdzielacza – w Ursusie C‑360 zdejmij pokrywę i przygotuj uchwyt pod silnik z przekładnią, zachowując dostęp do wałka sterującego.
  2. Mocowanie Arduino – umieść w wodoodpornej obudowie w kabinie; wyprowadź złącza serwisowe i opisz przewody.
  3. Podłączenie hydrauliki/mechaniki – silnik z przekładnią napędza wałek rozdzielacza przez sprzęgło elastyczne, tak by uniknąć przeciążeń.
  4. Testy – najpierw test „na sucho” na stole, potem krótkie próby w polu; stopniowo kalibruj progi i prędkość ruchu.
  5. Bezpieczeństwo – dodaj bezpiecznik 10 A na zasilaniu, diodę/warystor przy elementach indukcyjnych, awaryjny wyłącznik w zasięgu ręki operatora.

Czas budowy – 4–8 godzin dla osoby średniozaawansowanej.

Rozbudowy i alternatywy

Jeśli chcesz zwiększyć funkcjonalność i precyzję systemu, rozważ następujące opcje:

  • silnik krokowy – zapewnia większą precyzję (np. mikrokrok 1/16) i powtarzalność ustawień;
  • menu LCD z presetami – szybkie wybieranie zaprogramowanych wysokości roboczych i transportowych;
  • czujnik położenia podnośnika – np. potencjometr liniowy do zamkniętej pętli regulacji pozycyjnej;
  • integracja z mechatroniką – czujniki obciążenia, GPS lub czujniki głębokości do automatycznego utrzymywania warunków pracy;
  • wsparcie społeczności – fora tematyczne (np. Elektroda, grupy Arduino) z gotowymi przykładami i poradami.

Pamiętaj: kluczem do niezawodności jest poprawne zasilanie, wspólna masa, filtracja zakłóceń oraz testy przed montażem w ciągniku.