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.