Skocz do zawartości

Sterowanie przekaźnikiem za pomocą radia


Pomocna odpowiedź

Napisano

Witam, 

Mam pytanko. Buduję autko i potrzebuję sterować 4 kanałowym przekaźnikiem. piny na nim to GND-IN1-IN2-IN3-IN4-VCC. Piny GND i VCC podłączam pod GND i 5V na płytce UNO. IN1 do D0, IN2 do D1 itd. Autko jest sterowane przez moduł odbiornika radiowego. Pilot działa, bo po wgraniu Receiver'a z biblioteki VirtualWire coś tam odbiera. Niestety nie są to dokładnie te rzeczy, które wysyłam, a jakieś liczby.

 

Problem jest teraz taki, że Arduino nie chce sterować przekaźnikiem. Z podglądu widać, że antena działa, nawet rozpoznaje to, co jest przez pilot wysyłane, ale przekaźnik milczy. Sprawdzałem go na krótko podłączając przewód IN1 do GND na płytce i bez problemu zatrybiło. 

 

#include <VirtualWire.h>
#include <VirtualWire_Config.h>
#define receive_pin 8

void setup()

{
//pinMode(LED_BUILTIN, OUTPUT);
pinMode(0, OUTPUT);
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
  digitalWrite(0, HIGH);
  digitalWrite(1, HIGH);
  digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);


Serial.begin(9600);
Serial.println("setup");
vw_set_rx_pin(receive_pin); // sustawienie pinu odbiuoru danych
vw_setup(2000); // Bits per sec
vw_rx_start(); // zacznij nasłuchiwać
}
void loop()
{
 int i;

    uint8_t buf[VW_MAX_MESSAGE_LEN];
    uint8_t buflen = VW_MAX_MESSAGE_LEN;

    if (vw_get_message(buf, &buflen)) // Non-blocking
    {
  

        digitalWrite(13, true); // Flash a light to show received good message
  // Message with a good checksum received, dump it.
  
  for (i = 0; i < buflen; i++)
  {
      Serial.print(buf[i]);
     
  }
  Serial.println("");
        digitalWrite(13, false);
    }
  Serial.print("buf[0] = ");    
  Serial.println(buf[0]);
 
  if (buf[0] == 70){
         Serial.println("Warunek spelniony");
         digitalWrite(0, LOW);
         delay(500);
         digitalWrite(0, HIGH);
         delay(500);
         }
 delay(1000);

}

To mam z podglądu:

 

setup
buf[0] = 0
buf[0] = 0
buf[0] = 0
buf[0] = 0
buf[0] = 0
70                  <- Tu został Wciśnięty guzik na pilocie
buf[0] = 70
Warunek spelniony
70
buf[0] = 70
Warunek spelniony
70
buf[0] = 70
Warunek spelniony
70
buf[0] = 70
Warunek spelniony

 

 

Ktoś ma jakiś pomysł, jak to rozegrać?

Jeśli podłączyłeś przekaźnik indukcyjny bezpośrednio pod pin arduino to nie ma co się dziwić, że nie działa. Przekaźniki zazwyczaj potrzebują więcej prądu/napięcia do przełączania styków. Bezpośrednie podłączenie może spowodować nawet uszkodzenie pinów arduino. Potrzebujesz tranzystorów do wysterowania przekaźnika, które będą w stanie dostarczyć potrzebną ilość prądu do prawidłowego przełączania. Warto również zastosować diodę przylutowaną pomiędzy stykami przekaźnika w kierunku zaporowym co zapobiegnie zakłóceniom zasilania powodowanym przez cewkę przekaźnika.

Jeśli jest to przekaźnik półprzewodnikowy, który nie wymaga dużego prądu do przełączania zapewne napięcie jest zbyt niskie. W tym przypadku należy zastosować odpowiednio wyższe napięcie zasilanie i tak jak w przypadku z przekaźnikiem indukcyjnym zastosować tranzystor do sterowania.

Wszystkiego co niezbędne do poprawnego zastosowania elementów i urządzeń elektronicznych należy szukać w ich notach katalogowych i ściśle stosować się do zaleceń producentów.

Możesz też sprawdzić czy arduino na pewno przełącza podłączając diodę led z rezystorem w miejsce przekaźnika bo może się okazać, że po pierwszych próbach piny zostały uszkodzone.

3 minuty temu, atMegaTona napisał:

Jeśli podłączyłeś przekaźnik indukcyjny bezpośrednio pod pin arduino

Z opisu można wywnioskować że to moduł a nie goły przekaźnik... tak że cały Twój wywód o diodach, tranzystorach i tym podobnych firdymałkach można OKDR. A na kod to nawet nie spojrzałeś, bo po co?

A powód jest prawdopodobnie prosty: nie można używać jednocześnie Serial i pinów 0 i 1. Po prostu - te piny to nic innego jak wejście/wyjście Serial i nic dziwnego, że nie ma zamiaru jednocześnie na tych samych pinach gadać z Tobą po serialu i machać przekaźnikami.

@Huhet zmień D0 i D1 na jakiekolwiek inne piny (np. D4 i D5).

  • Lubię! 1
  • Pomogłeś! 1

Racja, to może być konflikt przypisań. Tak czy inaczej podłączenie diody do sprawdzenia nie zaszkodzi.

ee co to jest OKDR? ;]

(edytowany)
6 minut temu, ethanak napisał:

Z opisu można wywnioskować że to moduł a nie goły przekaźnik... tak że cały Twój wywód o diodach, tranzystorach i tym podobnych firdymałkach można OKDR. A na kod to nawet nie spojrzałeś, bo po co?

A powód jest prawdopodobnie prosty: nie można używać jednocześnie Serial i pinów 0 i 1. Po prostu - te piny to nic innego jak wejście/wyjście Serial i nic dziwnego, że nie ma zamiaru jednocześnie na tych samych pinach gadać z Tobą po serialu i machać przekaźnikami.

@Huhet zmień D0 i D1 na jakiekolwiek inne piny (np. D4 i D5).

Właśnie tak zrobiłem - z pinów D0:D3 zmieniłem na D9:D12 i problem jakby został rozwiązany. 

Masz też rację, co do przekaźnika. Źle sformułowałem to i wprowadziłem atMegaTona w błąd. Faktycznie nie jest to goły przekaźnik a "Moduł przekaźnika", który jest dostosowany by móc nim sterować bezpośrednio z poziomu mikrokontrolera. Przepraszam za zamieszanie 🙂

 

atMegaTona - O kant D rozbić 😛

Edytowano przez Huhet

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...