Skocz do zawartości

Arduino przekaźnik powoduje problem z LCD


Czaplik

Pomocna odpowiedź

Witam,
Jestem w trakcie tworzenia projektu, który w założeniu za pomocą arduino UNO ma sterować pompą (załączać ją i wyłączać) na podstawie przekroczenia wartości z dwóch czujników. Do tego jest typowy ekran LCD (16,2) (taki sam jak z kursu arduino na forbocie), który ma wyświetlać te wartości. Wszystko podczas "testów na sucho" działa idealnie. Gdy pod przekaźnik podłączyłem lampkę biurkową też wszystko działało bez zarzutu. Problem pojawia się kiedy podepnę pompę (230V, 20W).  Po chwili normalnej pracy ekran zaczyna wyświetlać dziwny ciąg znaków, po chwili zachowuje się tak jak gdyby nic nie było na niego wgrane. Program dalej się wykonuje i układ działa według założeń, z wyłączeniem LCD oczywiście. Układ zasilany zasilaczem 9V 1A lub z komputera. Przekaźnik to SRD 05VDC SL-c.   Co może być przyczyną problemu i jak go rozwiązać? Wpięcie kondensatora w linie zasilającą i diody z rezystorem zaporowo na wejście przekaźnika nie pomogło. 
Z góry dziękuję za pomoc.

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

Nie wiem, gdzie położyłem kulę do wróżenia, może nie będę musiał jej szukać jak podeślesz schemat swoich połączeń, bo bez schematu i kuli raczej nikt nie da rady powiedzieć "co nie działa" 😉 

Oczywiście z tą kulą to żart, ale schemat by się przydał 😛 

Link do komentarza
Share on other sites

Czy ja dobrze widzę, że przekaźnik i wyświetlacz zasilasz z Arduino? W takim razie nie dziwią mnie problemy, bo Arduino ma max 1A na 5V. (realnie ok. 0.6-0.7A) Przy takim połączeniu zazdroszczę wytrzymałego stabilizatora liniowego i polecam zasilać przekaźnik z zewnetrznego źródła sterując zasilaniem przy użyciu tranzystora.

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

Mogę prosić o jakiś schemat? Spróbowałem podłączyć tak jak na zdjęciu, efekt taki, że ekran pracował we właściwy sposób kilka sekund dłużej, potem znowu dziwne znaki i wygaszenie, ale tutaj wysterowuje wejście IN, nie zasilanie (niestety nie mogę wpaść na to, jak to zrobić).
image.thumb.png.6ab5ace8a465b9146052dc49de1d3adc.png

Link do komentarza
Share on other sites

Rozdzieliłem zasilanie. Gdy zrobiłem tak jak na  zdjęciu poniżej - bez tranzystora, układ, wydawało by się, że działa poprawnie, ale po raz 2, raz 15, raz 40 minutach lcd znowu zaczyna wariować (program dalej się poprawnie wykonuje). Spróbowałem zrobić tak, jak na schemacie, który wysłałeś. Moje wykonanie jest na schemacie w tinkercadzie (nie wiem, czy jest właściwe). Nie mam pomysłu co zrobić z pinem IN - gdziekolwiek go nie wsadze, przekaźnikiem nie steruje arduino. Co robię źle?

https://www.tinkercad.com/things/iCMjygCDZM3-automatyczna-podlewaczka-z-tranzystorem/editel?sharecode=KIM_X3TeYknljNoZs7OqvJ6o_KBiULm-5NrUEU5XOhs

 

 

123.png

Link do komentarza
Share on other sites

@_LM_ Program wstawiam poniżej (chociaż nie sądzę, żeby to w nim był problem. Bez podłączonej pompy wszystko działa idealnie), schemat jest zbyt duży, żeby wstawić w zdjęcie, jest w linku we wcześniejszym poście (kieruje do Tinkercad-a). Wątpie, by zdjęcie coś pomogło, ale także wysyłam.

@Marek_Sp Specyfikacja pompy- 230V AC, 50Hz, 20W

@Elvis Mogę prosić o wskazówki jak włożyć go w układ? Jestem zielony w temacie. Rozumiem, że ma być po stronie sterowania? Pomiędzy co a co powinienem go podłączyć? I lepiej kupić moduł, czy wystarczy osobno rezystor i kondensator? Używam dwukanałowego modułu przekaźników.

 

#include <LiquidCrystal.h> //Dołączenie bilbioteki
LiquidCrystal lcd(8, 9, 10, 11, 12, 13); //Informacja o podłączeniu nowego wyświetlacza

//przypisanie pinow
#define DIODA_CZERW 2
#define DIODA_ZIEL 3
#define PRZEKAZNIK 4
#define PRZYCISK 5
#define sensorPower_WS 7
#define sensorPin_MS A4
#define sensorPin_WS A3

//Wartosci stale dla czujnikow
const int dry_MS = 592; 
const int wet_MS = 399; 

const int dry_WS = 548; 
const int wet_WS = 10; 


int wartoscOdczytana_MS = 0;
int wilgotnosc_MS = 0;
int wartoscOdczytana_WS = 0;
int poziomWody_WS = 0;

byte stopnie[8] = {                //konfigurajca znaku %
  0b00001,
  0b11010,
  0b11010,
  0b00100,
  0b00100,
  0b01011,
  0b01011,
  0b10000

};

void setup() {
  
  Serial.begin(9600);
  
  pinMode(sensorPower_WS, OUTPUT); //pin zasilania WS
  digitalWrite(sensorPower_WS, LOW); 

  pinMode(DIODA_ZIEL, OUTPUT); //Dioda  ziel jako wyjście
  digitalWrite(DIODA_ZIEL, LOW);
  
  pinMode(DIODA_CZERW, OUTPUT); //Dioda czerw jako wyjście
  digitalWrite(DIODA_CZERW, LOW);
  
  pinMode(PRZEKAZNIK, OUTPUT); //Przekaznik jako wyjscie
  digitalWrite(PRZEKAZNIK, HIGH);
  
  pinMode(PRZYCISK, INPUT_PULLUP); //Przycisk jako wejście

  lcd.createChar(0, stopnie);

//ekran
        lcd.begin(16, 2); //Deklaracja typu

}

void loop() {
  
//MoistureSensor
  int wartoscOdczytana_MS = analogRead(A4);
  int wilgotnosc_MS = map(wartoscOdczytana_MS, wet_MS, dry_MS, 100, 0);

//WaterSensor
  digitalWrite(sensorPower_WS, HIGH);
  delay(10);
  int wartoscOdczytana_WS = analogRead(A5);
  int poziomWody_WS = map(wartoscOdczytana_WS, wet_WS, dry_WS, 0, 100);
  digitalWrite(sensorPower_WS, LOW);


//drukowanie wartości do kompuera
  Serial.print("Wilgotnosc: ");
  Serial.println(wilgotnosc_MS);

  Serial.print("poziomWody: ");
  Serial.println(poziomWody_WS);
  
  Serial.print("\t  \t  \t");
  Serial.print("wartoscOdczytana_MS: ");
  Serial.println(wartoscOdczytana_MS);


  Serial.print("\t  \t  \t");  
  Serial.print("wartoscOdczytana_WS: ");
  Serial.println(wartoscOdczytana_WS);

  
//Auto utrzymywanie 
  if (wilgotnosc_MS < 60 && poziomWody_WS > 40){
    
    digitalWrite(DIODA_CZERW, LOW); //Załącz diodę czerwoną
    digitalWrite(DIODA_ZIEL, HIGH); //Załącz diodę zieloną
    digitalWrite(PRZEKAZNIK, LOW); //Załącz przekaźnik
    
    lcd.clear();   
    lcd.setCursor(6, 0);
    lcd.print("POMPA");
    lcd.setCursor(5, 1);
    lcd.print("WLACZONA");
    
    delay(3000);
    
    digitalWrite(DIODA_CZERW, HIGH); //Załącz diodę czerwoną
    digitalWrite(DIODA_ZIEL, LOW); //Wyłącz diodę zieloną
    digitalWrite(PRZEKAZNIK, HIGH); //Wyłącz przekaźnik   

    lcd.clear();
    lcd.setCursor(0, 0); //Ustawienie kursora
    lcd.print("WILGOTNOSC:");
    lcd.setCursor(12,0);

    lcd.setCursor(0, 1);
    lcd.print("POZIOM WODY:");
    lcd.setCursor(13,0);

    lcd.setCursor(12, 0); //Ustawienie kursora w odpowiednim momencie
    lcd.print(wilgotnosc_MS); //Wyświetlenie tekstu
    
    lcd.setCursor(13, 1); //Ustawienie kursora w odpowiednim momencie
    lcd.print(poziomWody_WS); //Wyświetlenie tekstu

    lcd.setCursor(15,0);            //ustaw kursor w pozycji 0,0
    lcd.print((char)0);
    lcd.setCursor(15,1);            //ustaw kursor w pozycji 0,0
    lcd.print((char)0);

    delay(3000);

  }else{
    
    digitalWrite(DIODA_CZERW, HIGH); //Załącz diodę czerwoną
    digitalWrite(DIODA_ZIEL, LOW); //Wyłącz diodę zieloną
    digitalWrite(PRZEKAZNIK, HIGH); //Wyłącz przekaźnik  
      
  

//Ekran
    lcd.clear();
    lcd.setCursor(0, 0); //Ustawienie kursora
    lcd.print("WILGOTNOSC:");
    lcd.setCursor(12,0);

    lcd.setCursor(0, 1);
    lcd.print("POZIOM WODY:");
    lcd.setCursor(13,0);

    lcd.setCursor(12, 0); //Ustawienie kursora w odpowiednim momencie
    lcd.print(wilgotnosc_MS); //Wyświetlenie tekstu
    
    lcd.setCursor(13, 1); //Ustawienie kursora w odpowiednim momencie
    lcd.print(poziomWody_WS); //Wyświetlenie tekstu

    lcd.setCursor(15,0);            //ustaw kursor w pozycji 0,0
    lcd.print((char)0);
    lcd.setCursor(15,1);            //ustaw kursor w pozycji 0,0
    lcd.print((char)0);
     
  delay(1000);

  }
}

 

1.jpg

2.jpg

Link do komentarza
Share on other sites

Przede wszystkim zrobiłbym porządek z kablami. Jeśli pompa ma komutator jak pisze @Marek_Sp to będzie ciężko to ogarnąć. Możesz zastosować filtr sieciowy np: https://pl.rs-online.com/web/p/filtry-gniazda-iec/1705051 tj: coś w tym stylu ale na stronę pompy

Edycja:

Być może nie doczytałem. Czy po wyłączeniu pompy artefakty znikają? 

Edycja:

Właściwie to bardziej by ten odpowiadał aby zakłócenia z pompy nie wnikały do urządzenia https://pl.rs-online.com/web/p/filtry-sieciowe/2378679 

Link do komentarza
Share on other sites

@_LM_ Całość tak jak pisałem przez chwilę (5, 10, 30min) pracuje normalnie, potem na ekranie pojawiają się krzaczki, które znikają dopiero jak wyłączę i ponownie włączę arduino. Samo odłączenie pompy nic nie daje. Czy zakup nowej pompy, powiedzmy 7W, też 230V rozwiąże sprawę? Nie specjalnie opłaca mi się kupować filtr sieciowy, za duże koszty.

Link do komentarza
Share on other sites

Nie, skoro odłączenie pompy nic nie zmienia to trzeba szukać usterki w innym miejscu. Być może robi to sam zasilacz całego urządzenia ale to takie gdybanie, trzeba szukać i właśnie od zasilania bym zaczął 

Link do komentarza
Share on other sites

Jest jeszcze jedna możliwość, chociaż o wiele gorsza niż usunięcie przyczyny zakłóceń - w programie można co jakiś czasy wykonywać ponowną inicjalizację LCD. To powinno wystarczyć, żeby wyświetlacz działał poprawnie.

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.