Skocz do zawartości

Problem z wysterowaniem pompy


Mike84

Pomocna odpowiedź

Hej, przy budowie projektów DIY każdy majsterkowicz hobbysta na własnej skórze może się przekonać o słuszności prawa Murphy’ego

Wszystko co może pójść źle, tak właśnie pójdzie

Jest także i tym razem, projektuje automatycznie podlewaną roślinkę i przekaźnik sterujący miniaturową pompą nie chce za bardzo współpracować z arduino, albo arduino z przekaźnikiem.. 🤔

W każdym bądź razie, wygląda to następująco:

Zasilanie jest pobierane z takiej płytki:

schemat.thumb.png.6e483a8035b8b516ae3b9184866b1582.png

PCB.thumb.png.e22ed3ed529e449d56fb4718b9f57c33.png

(Arduino podpięte bezpośrednio pod USB nie naprawia problemu)

Program to na razie standardowy blink, przewody są podłączone poprawnie, napięcia teoretycznie się zgadzają, nie mam oscyloskopu żeby sprawdzić przebieg na pinie sterującym niestety. Układ bez podłączonej pompy (na sucho) działa prawidłowo, ale po podpięciu to już loteria, raz działa, raz nie działa, nie mam już pomysłu co to może być, co byłoby jeszcze można sprawdzić?

Edytowano przez Mike84
Link do komentarza
Share on other sites

Nie rozumiem Twojego problemu. Z Twojego schematu raczej trudno się dowiedzieć jak sterujesz tym przekaźnikiem. Czy aby nie bezpośrednio z pinu Arduino? Jeśli tak to ile prądu pobiera przekaźnik?

16 minut temu, Mike84 napisał:

Program to na razie standardowy blink

No to jak na standardowy blink dioda "mruga" - no może częstotliwość jest nieco inna. Pokaż dokładny schemat połączeń i program. A do czego służy zworka JP2?

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

(edytowany)
<main>
#include <Arduino.h>
#include "cyberplant.h"

void setup() {
  cyberplant_init();
  Serial.begin(9600);
  Serial_start();
  delay(10);
}
void loop() {
  POMP(0);
  delay(2500);
  POMP(1);
  delay(2500);
}






<funkcje>
  * Funkcje */
uint8_t cyberplant_init( void ) // Inicjalizacja pinów
{
    pinMode(LED, 1);
    pinMode(POMPA, 1);

    digitalWrite(LED, 0);
    digitalWrite(POMPA, 0);

}

uint8_t POMP(uint8_t stan)
{
    if(stan == 0)
    {
        digitalWrite(POMPA, 0);
    }else{
        digitalWrite(POMPA, 1);
    }
}

uint8_t Serial_start( void )
{
    Serial.print("=-=-=-=-=-=-=-=-=-=-=-=");
    Serial.println("");
    Serial.print(" CYBERPLANTS v.0.1 ");
    Serial.println("");
    Serial.print("=-=-=-=-=-=-=-=-=-=-=-=");

    Serial.println("");
    Serial.println("");
    Serial.print("Water level: ");

}



<Biblioteka>
/* Biblioteki */
#include <Arduino.h>

/* PORTY I/O */
#define LED 2
#define POMPA 4

/* Definicje funkcji */
uint8_t cyberplant_init( void );
uint8_t POMP(uint8_t stan);
uint8_t Serial_start( void );

Tutaj jest program, jest on rozpisany na 3-oddzielne pliki, main.cpp z główną pętlą i instrukcjami, funkcje.cpp tak jak nazwa wskazuje z funkcjami oraz do tego jeszcze dochodzi biblioteka z definicjami,  może trochę przesadziłem nazywając to czymś standardowym, ale zasada działania jest w zasadzie identyczna do migającej diody.

JP2 to po prostu wyprowadzenia 12V bezpośrednio przed układem, np. do zasilania ardunio, przynajmniej taki był pomysł, płytka obecnie jest wpięta na 5V (To nie wina tego, i tu i tu działa tak samo)

Co do przekaźnika, konkretnie jest to ten model:

https://botland.com.pl/przekazniki/8228-modul-przekaznika-1-kanal-styki-10a250vac-cewka-5v-5903351241229.html

Plus, minus, z płytki zasilającej, sygnał sterujący prosto z pinu arduino. To jest wejście, na wyjściu jest podpięty plus od pompy przez styk NO. Minus idzie do płytki. 

EDIT: To też widocznie nie wina pobieranego prądu, nie mam jak tego sprawdzić miernikiem, ponieważ tą funkcje pomiaru ma zepsutą.. tani chiński miernik. Ale po podpięciu arduino -> tranzystor -> przekaźnik sytuacja nadal bez zmian, raz działa, raz nie 

Wybaczcie trochę chaotyczną formę opisu, męczę się z tym już pewien czas, projekt nie jest mały, nie wiedziałem co konkretnie wstawić 😅

Edytowano przez Mike84
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

Kod programu

uint8_t cyberplant_init( void )
uint8_t POMP(uint8_t stan)
uint8_t Serial_start( void )

Czemu jako typ zwracany podajesz uint8_t, a nie zwracasz żadnej wartości z funkcji? O ile kompilator to trawi, to oko programisty już nie... Nie lepiej zwracać "void"?

if(stan == 0) {
 digitalWrite(POMPA, 0);
}
else {
 digitalWrite(POMPA, 1);
}

Jaki jest sens tej instrukcji warunkowej? Przecież jakbyś napisał:

void POMP(uint8_t stan)
{
    digitalWrite(POMPA, stan);
}

to efekt byłby taki sam, a przynajmniej MCU by nie traciło wydajności na zbędnych obliczeniach.

Elektronika

 

25 minut temu, Mike84 napisał:

sygnał sterujący prosto z pinu arduino

Widzę, że przekaźnik ma wbudowane zabezpieczenia w tym tranzystor i diodę, więc raczej nic się nie spali.

Osobiście wolałby zastosować MOSFET'a z sekcji Power (np. IRFZ44N). Trochę przysłowiowy "overkill", ale patrząc na obecne ceny MOSów i przekaźników to całkiem rozsądny wybór (i mniej problemów w życiu). Dodatkowo przy użyciu MOS'a i PWM prawdopodobnie możesz ustalić tempo przepompowywania cieczy (w zależności od pompki, ale większość używa zwykłych silników DC), co jest dość praktycznym dodatkiem w niektórych sytuacjach, a czego nie zrobisz na przekaźniku (bo szybko się zużyje).

Schemat

8 minut temu, Belferek napisał:

Narysuj porządny schemat (nawet odręcznie).

Popieram kolegę - narysuj schemat, nawet uproszczony pokazujący wszystkie połączenia, wtedy możemy rozmawiać dokładniej, bo tak ciężko stwierdzić co, gdzie jest.

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

(edytowany)

Dorysowałem resztę połączeń do powyższego schematu, żeby wszystko mieć w jednym miejscu, faktycznie mój błąd, że nie pomyślałem o tym wcześniej:

149400307_1382343168780441_8100952772194770438_n.thumb.jpg.d2e50f276a405206b236c9b893fb5e25.jpg

Co do elektroniki, chciałbym pójść póki co najprostszą drogą, przekaźnik -> pompa, później gdy zepnę wszystko w całość można by się pokusić o modyfikacje 😛 

A jeśli mowa o stronie programowej to - Tak, da się lepiej, da się bardziej poprawniej, każdy ma inny styl pisania, ja swój dopiero wyrabiam i się uczę, ale wskazówki zawsze mile widziane oczywiście

Edytowano przez Mike84
Link do komentarza
Share on other sites

Nie jestem elektronikiem więc do końca nie rozumiem Twojej koncepcji zasilania. Ja bym podszedł do tego tak, że dla części cyfrowej wykorzystałbym wbudowany w moduł Arduino układ stabilizatora. Po co budować oddzielny zasilacz +5V skoro ten przekaźnik pobiera (cewka) ok. 70mA? Takie obciążenie nie powinno być dla stabilizatora Arduino problemem. Moduł Arduino posiada gniazdo DC gdzie możesz podać zasilanie 7-12V, a można też inaczej podając to zasilanie na Vin Arduino.

Moduł przekaźnika tworzy separację galwaniczną pomiędzy swoimi stykami, a układem sterującym. Taka pompa lub inne silniki mogą być moim zdaniem źródłem zakłóceń na liniach zasilania więc do zasilania pompy użyłbym zewnętrznego, niezależnego zasilania. Czy te 7824T na pewno dadzą Ci 5V? Jak tak czytam to są to raczej stabilizatory 24V - ale ja się nie znam i mogę się mylić.

Piszesz, że urządzenie działa wadliwie po podłączeniu pompy to może wskazywać na problemy z zasilaniem. Z samym przekaźnikiem to cudów nie ma - albo działa, albo nie. Spróbuj rozdzielić zasilanie pompy (+5V i GND pompy) przełączane przez przekaźnik od zasilania części cyfrowej.

Edytowano przez Belferek
  • Lubię! 2
Link do komentarza
Share on other sites

0001.thumb.jpg.610d07c021af7cb0fe5106b0072891ad.jpg

Opis
JP1 & (U1, C1, C2)

1. Jeżeli VCC <= 12V to pomijasz U1, C1 i C2 i łączysz zworkę JP1.

2. W innym przypadku używasz 7809 lub 7812 zależnie od napięcia pompy - jeżeli pompa używa 5V to montujesz 7809 (by odciążyć regulator Arduino), jeżeli 12V to 7812. Uwaga - jeżeli masz pompę 6V to ten schemat nie zadziała (znaczy zadziała, ale pompa nie będzie chodzić na pełnej mocy, bo wtedy musisz uznać ją jako 5V).
Uwaga: jeżeli masz pompę AC to nie polecam próbować tego schematu 😄 

JP2 & (JP2, U2, C3, C4)

1. Jeżeli używasz pompy 5V to łączysz JP2 i montujesz U2, C3 i C4. 
2. Jeżeli używasz pompy 12V to łączysz zworkę JP3 i idziesz dalej.

Relay Board

W ramce umieściłem opis płytki przekaźnika. Pogrubione masz wyprowadzenia płytki. W przypadku wyprowadzenia S masz tzw "global label", który jest podłączony do D10 na Arduino Uno. Wszystkie komponenty w przerywanej ramce masz umieszczone na płytce od przekaźnika. Jak masz jakieś problemy to śmiało pytaj. 

Kondensator C5

Kondensator C5 zapobiega restartowaniu Arduino jak podłączysz je do komputera poprzez USB. Uwaga: jeżeli go zamontujesz nie będzie można wgrywać programów (o ile nie naciśniesz ręcznie resetu 😄 )

Adnotacje

0. Zakładam, że wbudowany tranzystor ma rezystor na bazie 🙂 
1. Podobny, mocno uproszczony schemat (mój jest ciut bardziej co-mam-w-szufladzie-odporny).

Arduino_KY-019_5v_relay_module_connections-1024x652.thumb.png.4152090141bf1d85fa9b58c4fd113c13.png

Zamiast AC podłączasz zasilanie pompy, a zamiast żarówki pompę.

2. Polecam przetestować na płytce prototypowej (tej do wpinania elementów) albo na pająku 🙂 

 

 

Edytowano przez H1M4W4R1
  • Lubię! 2
Link do komentarza
Share on other sites

Tak patrzę na schemat i się zastanawiam czy aby jak zadziała przekaźnik to czy nie dojdzie do zwarcia na linii zasilania pompy. Może lepiej  styk 6 przekaźnika zamiast do GND wyprowadzić na łączówkę jako +Vcc pompy?

Edytowano przez Belferek
Link do komentarza
Share on other sites

6 minut temu, Belferek napisał:

Tak patrzę na schemat i się zastanawiam czy aby jak nie zadziała przekaźnik to czy aby nie dojdzie do zwarcia na linii zasilania pompy. Czu nie lepiej  styk 6 przekaźnika zamiast do GND wyprowadzić na łączówkę jako +Vcc pompy?

To jest schemat wewnętrzny, nie odwzorowywałem płytki całkowicie (bo by schemat zaśmieciło), liczą się pogrubione nazwy określające piny modułu z przekaźnikiem 🙂 

EDIT:

nvm zapomniałem wstawić złącza pompy... tak to jest jak się o 4 w nocy robi schematy...

Edytowano przez H1M4W4R1
Link do komentarza
Share on other sites

Dorysuj jeszcze diodę przy cewce. Gdyby ktoś chciał wykorzystać schemat do swojej pracy bez wnikania w szczegóły to nawet nie zauważy, że takowa powinna tam być. Tej zworce JP1 też bym się przyjrzał. Można by tak ją zastosować by przy zasilaniu urządzenia <12V  odcinała dodatkowo zasilanie U1. Zworka z 3 pinów? JP2 i JP3 też zastąpiłbym zworką składającą się z 3 pinów. Środkowy na 14 przekaźnika, a skrajne to 5V i 12V.

Edytowano przez Belferek
Link do komentarza
Share on other sites

(edytowany)

Sorki, że dopiero teraz odpisuje, wczoraj nie miałem jakichkolwiek chęci i sił by znowu usiąść do tematu tej nieszczęsnej pompy, dziś już mam nadzieje rozprawić się z nią na dobre, jestem wam bardzo wdzięczny za pomoc, za schematy, za rady, wszystko się przyda 🙂 

Problem jak sądzę leży w płytce zasilającej, ona jest głównym podejrzanym, domyślnie miała stworzyć dwa kanały 5V (na schemacie są inne stabilizatory, mój błąd, dobrałem je tam tylko montażowo) - jeden kanał na logikę drugi na pompę, która swoją drogą jak też również zapomniałem wspomnieć jest na 5V, na przyszłość będę pamiętał, żeby takie informacje napisać na początku, nie miejcie za złe >.< 

To można spróbować inaczej rozprowadzić zasilanie, omijając całkowicie płytkę, zrobić nowy układ na stykówce wspierając się waszymi wskazówkami. I metodą prób i błędów sprawdzę wtedy co tam zgrzyta 🤔

Edytowano przez Mike84
Link do komentarza
Share on other sites

Schemat

244079891_PrintingPrintSchematic_9.thumb.png.1f7d8e5f3ffcf2681da716be207f87c3.png

Notatki

1. C1 i C2 (10uF) są opcjonalne, jeżeli twój zasilacz jest bardzo niskiej jakości.
2. U1 stabilizuje zasilanie dla pompy na poziomie 5V, max pobór to 1A
3. U2 stabilizuje zasilanie dla Arduino i chroni przed ew. podłączeniem do zasilacza np. 24V 😄 Pamiętaj, że VIN Arduino jest podłączone do wbudowanego regulatora, więc podając tam 5V będą problemy...
4. W dash-rectangle (prostokąt z linii przerywanych) masz swoją całą płytkę z przekaźnikiem. Wyprowadzenia są opisane pogrubioną czcionką. NO/COM możesz podłączyć zamiennie.
5. Do J1 podłączasz pompę 🙂 
6. Port Relay łączy pin Arduino i wyjście S z płytki przekaźnikowej. Nie lubię brzydkich linii na schemacie 🙂 

Notatki pt2.

Teoretycznie U2 możesz zastąpić zworką, ale może pojawić sie problem jeżeli zasilanie będzie większe niż 12V... Duży problem 🙂 

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

A więc - problem został zażegnany 😄 

Zdemontowałem cały sterownik i złożyłem go na nowo, arduino musiałem wymienić na inne, ponieważ tamte moimi eksperymentami przypadkowo zepsułem, stabilizator padł i po podaniu +12V na wejście na pinie +5V miernik pokazuje mi +9V, co ciekawe procek nadal jest sprawny, łączy się z komputrem >.<

Czyli winowajcą mogła być wadliwa płytka, jednak postanowiłem także wymienić ten mój trawiony zasilacz na  stykówkę, tak dla pewności, z łatwością też mogłem wtedy wprowadzić parę poprawek, mianowicie zasilanie teraz idzie pośrednio przez arduino, użyłem wewnętrznego wbudowanego stabilizatora do zasilenia logiki i zewnętrznego do pompy, czyli poniekąd zastosowałem się do waszych wskazówek 🙂 

150789713_279116450247372_4982625352176728080_n.thumb.jpg.5b6047b807113a02ae09551e4fb7ac90.jpg

Jeszcze mały galimatias przewodowy, ale to się jeszcze ładnie uporządkuje

Ogólnie rzecz biorąc i podsumowując, całą sprawę zbyt bardzo przekombinowałem, najprostsze rozwiązania jak się okazuje są najbardziej niezawodne i chyba muszę sobie to zapamiętać na przyszłość.

Jeszcze raz, dzięki wielkie za pomoc i za nakierowanie mnie na rozwiązanie 🙂 

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

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • 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.