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.
- 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.
- 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.
- Wyłączniki krańcowe – podłącz do pinów cyfrowych z konfiguracją pull‑up; zadziałanie krańcówki ma natychmiast zatrzymywać ruch.
- 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:
- 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.
- Mocowanie Arduino – umieść w wodoodpornej obudowie w kabinie; wyprowadź złącza serwisowe i opisz przewody.
- Podłączenie hydrauliki/mechaniki – silnik z przekładnią napędza wałek rozdzielacza przez sprzęgło elastyczne, tak by uniknąć przeciążeń.
- Testy – najpierw test „na sucho” na stole, potem krótkie próby w polu; stopniowo kalibruj progi i prędkość ruchu.
- 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.