Skocz do zawartości

Arduino i pompa 12V


mateusz7c9

Pomocna odpowiedź

Witam

To mój pierwszy post na tym forum. Jestem laikiem w temacie elektroniki, dlatego proszę o pomoc tutaj. Postanowiłem zbudować urządzenie do podlewania kwiatka. Posiadam arduino uno, czujnik wilgotności i pompę 12V. Program wykonuje w pętli pomiar wilgotności gleby i co określony czas załącza przekaźnik sterujący pompą. Problem polega na tym, że po wykonaniu kilku pętli następuje reset arduino, zawieszenie się arduino, bądź zniszczenie płytki (jedno arduino uno się spaliło). Co ciekawe program działa cały czas o ile do przekaźnika nie jest podłączona pompa, czy np silniczek. Nie wiem jaka może być przyczyna takiego zachowania, dlatego proszę o pomoc. Z góry dziękuję.

Pozdrawiam,
Mateusz

Link do komentarza
Share on other sites

@mateusz7c9, witam na forum 😉 Widzę, że to Twoje pierwsze kroki na Forbocie, oto najważniejsze informacje na start:

  • Chcesz przywitać się z innymi członkami naszej społeczności? Skorzystaj z tematu powitania użytkowników.
  • Opis najciekawszych funkcji, które ułatwiają korzystanie z forum znajdziesz w temacie instrukcja korzystania z forum - co warto wiedzieć?
  • Poszczególne posty możesz oceniać (pozytywnie i negatywnie) za pomocą reakcji - ikona serca w prawym dolnym rogu każdej wiadomości.
23 minuty temu, mateusz7c9 napisał:

Problem polega na tym, że po wykonaniu kilku pętli następuje reset arduino, zawieszenie się arduino, bądź zniszczenie płytki (jedno arduino uno się spaliło). Co ciekawe program działa cały czas o ile do przekaźnika nie jest podłączona pompa, czy np silniczek.

Z czego dokładnie zasilasz całość? Jeśli układ działa bez głównego obciążenia (pompy) to ewidentnie jest to jakiś problem z zasilaniem. Nie powinno to jednak uszkodzić Arduino. Jak dokładnie podłączyłeś przekaźnik? Sterujesz nim za pomocą tranzystora i wpiąłeś równolegle diodę zabezpieczającą? Informacje na temat przykładowego, poprawnego podłączenia znajdziesz w kursie elektroniki: Kurs elektroniki – #9 – elementy stykowe, przekaźniki

Link do komentarza
Share on other sites

Próbowałem zasilać na różne sposoby. Z jednego zasilacz 12V, z dwóch zasilaczy 12V, Arduino zasilane z baterii i pompa z zasilacza i na odwrót. Za każdym razem prędzej czy później następował albo reset, albo zawieszenie programu. Moduł przekaźnika (zdaje się, że w pierwszym poście nieprecyzyjnie się wysłowiłem, za co przepraszam) podłączyłem do zasilania 5V, masy, a pin sygnałowy do pinu 6 Arduino. Żadnych dodatkowych elementów między Arduino, a modułem przekaźnika nie umieszczałem. Poniżej załączam kod programu i schemat. Dodam tylko, że ma to być część większego projektu. Poza wyżej wymienionymi elementami znajdować się mają tam też wyświetlacz, moduł kard SD, RTC DS3231, dwie diody i kilka przycisków. Czy istnieje możliwość, że chcę wykorzystać więcej elementów, niż Arduino jest w stanie obsłużyć (zbyt mały prąd)? Niektóre z tych elementów mam już podłączone.

 

#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <LiquidCrystal_I2C.h>

#define pompa 6
#define czujnikWilg A0

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

File plik;

int wilgotnosc;
boolean startMarker = false, stopMarker = false;
unsigned long czas, czasPoprz = 0, czasPoprz1 = 0, czasPoprz2 = 0;
long odstepPodlewania = 30000, czasPodlewania = 1636, odstepPomiarow = 1000;

void setup() {
  lcd.begin(20, 4);
  lcd.backlight();

  pinMode(pompa, OUTPUT);
  pinMode(czujnikWilg, INPUT);

  digitalWrite(pompa, HIGH);
  wilgotnosc = analogRead(czujnikWilg);

  SD.begin(10);
  plik = SD.open("pomiary.txt", FILE_WRITE);
  plik.println("czas wilgotność");
  plik.print("0");
  plik.print(" ");
  plik.println(wilgotnosc);
  plik.close();
}

void wysw() {
  lcd.setCursor(0, 0);
  lcd.print("Czas:");
  lcd.setCursor(0, 1);
  lcd.print(czas / 1000);

  lcd.setCursor(0, 2);
  lcd.print("Wilgotnosc:");
  lcd.setCursor(0, 3);

  if (wilgotnosc > 999) {
    lcd.print(wilgotnosc);
  } else if (wilgotnosc <= 999 && wilgotnosc >= 100) {
    lcd.print(" ");
    lcd.print(wilgotnosc);
  } else if (wilgotnosc <= 99 && wilgotnosc >= 10) {
    lcd.print("  ");
    lcd.print(wilgotnosc);
  } else {
    lcd.print("   ");
    lcd.print(wilgotnosc);
  }
}

void sterPrzekaznikiem() {
  if (czas - czasPoprz1 > odstepPodlewania) {
    startMarker = true;
    czasPoprz1 = czas;
  }
  if (startMarker) {
    digitalWrite(pompa, LOW);
    startMarker = false;
    stopMarker = true;
    czasPoprz2 = czas;
  }
  if ((stopMarker) && (czas - czasPoprz2 > czasPodlewania)) {
     digitalWrite(pompa, HIGH);
    stopMarker = false;
  }
}

void pomiarWilg() {
  if (czas - czasPoprz > odstepPomiarow) {
    czasPoprz = czas;
    wilgotnosc = analogRead(czujnikWilg);

    plik = SD.open("pomiary.txt", FILE_WRITE);
    plik.print(czas / 1000);
    plik.print(" ");
    plik.println(wilgotnosc);
    plik.close();
  }
}

void loop() {
  czas = millis();
  wysw();
  sterPrzekaznikiem();
  pomiarWilg();
}

 

schemat_polaczen.jpg

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Czy ty zasilasz to arduino przez pin 5V i GND? Jakim napięciem? 12V? z zasilacza?

 

aż się prosi o sprintf;-):

if (wilgotnosc > 999) { 

 lcd.print(wilgotnosc); 
} 

else if (wilgotnosc <= 999 && wilgotnosc >= 100) {

  lcd.print(" "); 
  lcd.print(wilgotnosc); 
  } 

else if (wilgotnosc <= 99 && wilgotnosc >= 10) { 
  lcd.print(" "); 
  lcd.print(wilgotnosc); 
  } 

else { 
  lcd.print(" "); 
  lcd.print(wilgotnosc); 
  } 
  }

 

Edytowano przez SOYER
Link do komentarza
Share on other sites

Dnia 3.01.2019 o 12:36, SOYER napisał:

Że schematu nie wynika nijak dla mnie, że zasilanie arduino masz podłączone do wejścia 5,5/2,5...

Dlaczego? Na schemacie nie ma zaznaczonego żadnego miejsca zasilania dla Arduino, ale to jest schemat montażowy, na którym Arduino ma wbudowane złącze zasilające 5,5, więc jeśli autor zasila całość z dwóch zasilaczy to się zgadza. Jeden jest za przekaźnikiem (tylko dla silnika), a drugi idzie do Arduino. Nie ma jak tego inaczej zaznaczyć 😉

Dnia 2.01.2019 o 20:47, mateusz7c9 napisał:

Moduł przekaźnika (zdaje się, że w pierwszym poście nieprecyzyjnie się wysłowiłem, za co przepraszam) podłączyłem do zasilania 5V, masy, a pin sygnałowy do pinu 6 Arduino. Żadnych dodatkowych elementów między Arduino, a modułem przekaźnika nie umieszczałem.

Jaki dokładnie masz moduł przekaźnika? Jeśli jest na nim tylko przekaźnik, to aż prosisz się o uszkodzenie Arduino. Po pierwsze, może on pobierać z Arduino zbyt duży prąd na zasilenie cewki przekaźnika. Po drugie, brakuje tam diody zabezpieczającej pin Arduino przed prądem indukowanym w cewce podczas rozłączania przekaźnika. Zacząłbym od poprawienia tych dwóch spraw 😉

Link do komentarza
Share on other sites

Załączam zdjęcie modułu przekaźnika, jaki posiadam. Mam dwa identyczne i na obu dzieje się to samo. Chwilę temu podłączyłem zasilanie pompy do pinu 5V uszkodzonego Arduino, które zasiliłem również zasilaczem 12V. Wychodzi na to, że wyższe napięcie stwarza jakiś problem?

IMG_20190106_121055.jpg schemat2.png

Link do komentarza
Share on other sites

Dnia 5.01.2019 o 01:08, Treker napisał:

Jaki dokładnie masz moduł przekaźnika? Jeśli jest na nim tylko przekaźnik, to aż prosisz się o uszkodzenie Arduino. Po pierwsze, może on pobierać z Arduino zbyt duży prąd na zasilenie cewki przekaźnika. Po drugie, brakuje tam diody zabezpieczającej pin Arduino przed prądem indukowanym w cewce podczas rozłączania przekaźnika. Zacząłbym od poprawienia tych dwóch spraw 😉

Cześć,

zgadzam, się z tym co napisał Treker. Prawdopodobnie indukcyjność silnika powoduje powstawanie przepięć i w rezultacie uszkodzenie Arduino. Powinieneś równolegle do uzwojeń silnika dać układ przeciwprzepięciowy np. duodiodę Schotky'ego. Sprawdź też jaki prąd wejściowy pobiera uzwojenie przekaźnika czy nie jest większy od max. prądu dla wyjścia Arduino.

A najlepiej byłoby odizolować galwanicznie moduł wykonawczy czyli silnik pompy i przekaźnik od Arduino. Czyli zasilać moduł przekaźnika i silnik z 12V odse3parowanego całkowicie od zasilania Arduino i sterować z pinu wyjściowego uzwojeniem przekaźnika przez np. transoptor.

Pozdrawiam

BTW: Sensor wilgotności, który wybrałeś bardzo szybko koroduje i nadaje się do wyrzucenia (znam to z własnego doświadczenia, bo używałem takich czujników). Lepszy był by np. taki:

https://www.banggood.com/Capacitive-Soil-Moisture-Sensor-Not-Easy-To-Corrode-Wide-Voltage-Module-For-Arduino-p-1309033.html?rmmds=mywishlist&cur_warehouse=CN

Jeśli nie potrzebujesz pompy o dużej wydajności to można znaleźć pompy zasilane z dużo niższego napięcia (co powinno nastręczać mniej problemów). Np. takie z zasilaniem od 3 do 6V:

https://www.banggood.com/Mini-Micro-Submersible-Motor-Pump-Water-Pumps-DC-3-6V-100LH-Low-p-1249338.html?rmmds=myorder&ID=47521&cur_warehouse=CN

Jakbyś chciał rozbudować swój projekt to znajdziesz nawet tanie czujniki PH gleby:

https://www.banggood.com/BNC-Electrode-Probe-Connector-Hydroponic-for-PH-Aquarium-Controller-Meter-Sensor-p-1179343.html?rmmds=search&cur_warehouse=CN

 

Link do komentarza
Share on other sites

4 godziny temu, mateusz7c9 napisał:

Chwilę temu podłączyłem zasilanie pompy do pinu 5V uszkodzonego Arduino, które zasiliłem również zasilaczem 12V.

Dobrze, że wykorzystałeś uszkodzone Arduino. Raczej nie podpinałbym żadnej pompy do zasilania 5V z Arduino - wbudowany tam stabilizator nie jest gotowy do takich obciążeń.

Moduł przekaźnika wydaje się odpowiednio zabezpieczony. Mierzyłeś ile ten napęd pobiera przy zasilaniu z 12V? Jaką wydajność ma Twój zasilacz? Może po prostu trzeba dodać kondensatory przy przekaźniku i będzie dobrze.

Link do komentarza
Share on other sites

Udało mi się zmierzyć wartości, o które pytaliście. Wygląda to tak:

Na stykach silnika pompy uzyskałem napięcie oscylujące pomiędzy 13-14V. Zaraz za wtyczką zasilacza napięcie jest wyższe i skoczyło nawet do 15,8V. Natężenie prądu to 0,27A, co jest zbieżne z informacjami, które znalazłem, że takie pompy biorą do 0,3A. Parametry zasilacza to dokładnie 12V i 1,67A.

Prąd na cewce wynosi 0,17A, jednak nie wiem, czy pomiaru dokonałem we właściwym miejscu i czy to realna wartość.

Pod koniec tygodnia prawdopodobnie udam się do lokalnego sklepu z elektroniką po zabezpieczenia, które wymieniliście. Czy moglibyście napisać mi co dokładnie mam kupić i narysować prowizoryczny schemat gdzie co umieścić?

@FlyingDutch jak do tej pory ten czujnik niewiele czasu spędził w glebie 😄 ten który wysłałeś wygląda o niebo lepiej, więc jeśli żywot tego skończy się w niedalekiej przyszłości to zastanowię się nad nim. Co do czujnika PH to kusi mnie, by coś takiego dodać do projektu, ale najpierw priorytetem jest dla mnie stabilne działanie całego urządzenia bez resetów i zawieszeń.

  • Lubię! 1
Link do komentarza
Share on other sites

7 godzin temu, mateusz7c9 napisał:

Prąd na cewce wynosi 0,17A, jednak nie wiem, czy pomiaru dokonałem we właściwym miejscu i czy to realna wartość.

A co dokładnie mierzyłeś? Chyba był to prąd "za tranzystorem", czyli wszystko jest dobrze. Gdybyś pobrał te 170 mA z Arduino to dawno byś je spalił 😉

7 godzin temu, mateusz7c9 napisał:

Pod koniec tygodnia prawdopodobnie udam się do lokalnego sklepu z elektroniką po zabezpieczenia, które wymieniliście. Czy moglibyście napisać mi co dokładnie mam kupić i narysować prowizoryczny schemat gdzie co umieścić?

Niestety wygląda na to, że Twój moduł ma te zabezpieczenia, o których pisaliśmy, więc nie masz czego dokupywać.

Nie mam pomysłu, co tu jeszcze może być źle. Może spróbuj dokupić jakieś kondensatory typu 220 uF i 100 nF i dodaj je przy zasilaniu na płytce stykowej.

  • Lubię! 1
Link do komentarza
Share on other sites

18 godzin temu, Treker napisał:

A co dokładnie mierzyłeś? Chyba był to prąd "za tranzystorem", czyli wszystko jest dobrze. Gdybyś pobrał te 170 mA z Arduino to dawno byś je spalił 😉

Zgadza się. Zmierzyłem prąd płynący przez cewkę. Dziś dokonałem pomiarów jeszcze raz, ale dalej coś mi nie pasuje. Między pinem sygnałowym z Arduino, a bazą tranzystora mam 180 mA. Tak samo między pinem sygnałowym, a uzwojeniem cewki. Nie wiem między którymi pinami wykonać pomiar 😞

Kupię te kondensatory i zobaczę, czy coś to da.

Dziękuję wszystkim za okazaną pomoc.

IMG_20190109_185607.jpg

Link do komentarza
Share on other sites

4 godziny temu, mateusz7c9 napisał:

Między pinem sygnałowym z Arduino, a bazą tranzystora mam 180 mA. Tak samo między pinem sygnałowym, a uzwojeniem cewki. Nie wiem między którymi pinami wykonać pomiar 😞

Prąd mierzysz szeregowo, więc po prostu musisz zrobić pomiar tak jakbyś "przeciął" przewód łączący bazę tranzystora z Arduino i wstaw tam miernik. Racze nie jest możliwe, że na bazie jest 180 mA - Arduino byłoby już dawno usmażone 😉

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.