Arduino Polska Forum

Pełna wersja: Problem z przekaźnikiem
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Część, niedawno zacząłem przygodę z arduino i na jeden z pierwszych projektów zdecydowałem się na system podlewający kwiaty. Napotkałem jednak problem podczas jego tworzenia. Chodzi o to, że kiedy posiadam podłączony cały układ i odpalę kod, który w pętli zmienia stany pinu wraz z opóźnieniem, to przekaźnik tak jakby omija to opóźnienie, ponieważ wyłącza się momentalnie po włączeniu. Kiedy przekaźnik nie ma obciążenia, to działa bez zarzutu i włącza/wyłącza się co dwie sekundy. Nie ma również problemu z działaniem kiedy jedynym elementem kodu jest ustawienie pinu na stan niski w celu włączenia przekaźnika, wtedy również działa bez problemu. Jeżeli chodzi o przekaźnik to jest to SRD-5VDC-SL-C. Schemat zamieściłem w załączniku. Co może być powodem takiego zachowania?

Kod:
#define pompa 5

void setup() {
  pinMode(pompa, OUTPUT);
  digitalWrite(pompa, HIGH);
}

void loop() {
  digitalWrite(pompa, HIGH);
  delay(2000);           
  digitalWrite(pompa, LOW);
  delay(2000);
}
Po prostu Arduino Ci się resetuje, zasilasz silniczek z tego samego źródła co Arduino, tu się nawet wprowadza optoizolację by w ogóle nie było połączenia kablami, zakłócenia od styków i zwojów silnika potrafią generować różne szpile w miedzi. Poza tym sam silnik przy starcie pobiera dużo prądu i to też może pozbawić zasilania uC.
Z tym konkretnym przekaźnikiem nie zrobisz optoizolacji, kup inny, dodaj kondensator do zasilania diodę by prąd płynął tylko do płytki UNO, daj osobny zasilacz, zrób gasik dla cewki przekaźnika, znajdziesz tematy w Google.
(02-03-2024, 23:55)kaczakat napisał(a): [ -> ]Po prostu Arduino Ci się resetuje, zasilasz silniczek z tego samego źródła co Arduino, tu się nawet wprowadza optoizolację by w ogóle nie było połączenia kablami, zakłócenia od styków i zwojów silnika potrafią generować różne szpile w miedzi. Poza tym sam silnik przy starcie pobiera dużo prądu i to też może pozbawić zasilania uC.
Z tym konkretnym przekaźnikiem nie zrobisz optoizolacji, kup inny, dodaj kondensator do zasilania diodę by prąd płynął tylko do płytki UNO, daj osobny zasilacz, zrób gasik dla cewki przekaźnika, znajdziesz tematy w Google.
Znaczy nie wspomniałem, ale arduino jest zasilane przez usb z komputera, a nie z tych baterii, układ od pompy jest oddzielony przekaźnikiem od arduino.
No to jeszcze komputer sobie zepsujesz. Jak masz taki przekaźnik jak na obrazku to nie jest "oddzielony".
Tak napisałeś ten program, że nie wiesz czy on działa 2s czy godzinę, wgraj taki:

Kod:
#define pompa 5

void setup() {
  pinMode(pompa, OUTPUT);
  digitalWrite(pompa, HIGH);
Serial.begin(115200);
}

void loop() {
static uint32_t zmienna=0;
  digitalWrite(pompa, HIGH);
  delay(2000);           
  digitalWrite(pompa, LOW);
  delay(2000);
Serial.println(zmienna++);
}
Co 4s wydrukuje większą wartość i zobaczysz ile razy loop się wykonuje.


Albo jeszcze lepiej, faktycznie odłącz go  od PC przed podłączeniem pompy, pomigaj ledem szybko przy starcie i oczami zobaczysz, czy się resetuje:
Kod:
#define pompa 5
#define led 13

void setup() {
  pinMode(pompa, OUTPUT);
pinMode(led , OUTPUT);
  digitalWrite(pompa, HIGH);
for (int i=0;i<20;i++)
{
digitalWrite(led, ! digitalRead (led));
delay (50);

}

}

void loop() {
  digitalWrite(pompa, HIGH);
  delay(2000);           
  digitalWrite(pompa, LOW);
  delay(2000);
}
 
Sam napisałeś, że program działa zgodnie z oczekiwaniami na ledach, a problem pojawia się z pompą, to chodzi o zasilanie i zakłócenia.
Silniki są tylko z pozoru prostymi urządzeniami do kontroli za pomocą Arduino. Należy mieć świadomość, że silnik pobierający nominalnie np. 1A potrafi wygenerować pobór szczytowy rzędu kilku(nastu) razy więcej. Nie dość, że pik prądu sam w sobie powoduje nadmierne obciążenie urządzenia sterującego silnikiem to dodatkowo masz gwałtowną zmianę pola magnetycznego wokół oprzewodowania silnika, która może wyindukować przepływ prądu w innych elementach układu.
Stąd rada kolegi @kaczakat o optoizolacji.

Jednym ze sposobów na uniknięcie strzału prądowego podczas uruchamiania pompy (może on po jakimś czasie zniszczyć przekaźnik) może być zastosowanie softstartu w oparciu o mosfeta sterowanego za pośrednictwem PWM.